Where Is the .claude-plugin/plugin.json File Located in Claude Plugins?

Each Claude plugin stores its plugin.json manifest inside a hidden .claude-plugin directory at the root of the plugin folder.

The anthropics/claude-plugins-community repository enforces a strict convention for plugin metadata placement. Understanding the .claude-plugin/plugin.json location is essential for developers building integrations or automating plugin discovery across the ecosystem. Every plugin follows this standardized structure to ensure consistent manifest discovery.

The Standard File Path Convention

According to the source code structure in anthropics/claude-plugins-community, the manifest file must reside at a specific relative path within each plugin directory. The hidden .claude-plugin folder acts as a metadata container, distinguishing plugin configuration from implementation code.

The required structure is:

plugin-name/
├── .claude-plugin/
│   └── plugin.json
└── [other plugin files]

This convention applies universally across all community plugins. The hidden directory prefix prevents clutter while keeping metadata easily discoverable by automation tools.

Repository Examples from claude-plugins-community

The following plugins demonstrate the consistent application of this pattern:

Tres Finance Plugin

Located at tres-finance-plugin/.claude-plugin/plugin.json, this manifest defines the plugin's metadata and entry points. This path follows the standard convention exactly.

Testdino Plugin

The manifest resides at testdino/.claude-plugin/plugin.json, maintaining the same directory depth and naming as all other plugins in the collection.

Quickdesign Plugin

You will find the configuration at quickdesign/.claude-plugin/plugin.json, confirming the pattern holds across different plugin types and functionalities.

ELI5 Plugin

The educational plugin stores its manifest at eli5/.claude-plugin/plugin.json, identical in structure to the production-focused plugins.

Programmatically Accessing the Manifest

When building tools to interact with Claude plugins, you must construct the path dynamically to locate the plugin.json file. Below are reference implementations for common automation scenarios.

Python Implementation

Use pathlib to safely resolve the manifest location:

import json
from pathlib import Path

def load_plugin_manifest(plugin_dir: str) -> dict:
    manifest_path = Path(plugin_dir) / ".claude-plugin" / "plugin.json"
    with manifest_path.open("r", encoding="utf-8") as f:
        return json.load(f)

# Example: load the Tres Finance plugin manifest

tres_manifest = load_plugin_manifest("tres-finance-plugin")
print(tres_manifest["name"])

This approach correctly handles cross-platform path resolution while targeting the specific .claude-plugin/plugin.json location required by the repository specification.

Bash Discovery

To enumerate all plugin manifests within the repository, use the following command:

find . -type f -path "*/.claude-plugin/plugin.json" -print

This returns absolute paths to every manifest file, including the repository-level metadata and all individual plugin configurations.

Repository Root vs Individual Plugin Manifests

The repository contains two categories of manifests. The root-level .claude-plugin/plugin.json provides metadata for the entire collection, while each sub-directory contains its own manifest for specific plugin functionality.

  • Repository metadata: .claude-plugin/plugin.json (at repository root)
  • Plugin manifests: {plugin-name}/.claude-plugin/plugin.json (within each plugin directory)

Both follow identical schema structures but serve different organizational purposes. Automation scripts should filter by path depth if they need to distinguish between collection-level and plugin-level configurations.

Summary

Frequently Asked Questions

What is the purpose of the .claude-plugin directory?

The .claude-plugin directory serves as a standardized metadata container that separates plugin configuration from source code. This hidden directory convention ensures that manifest files remain discoverable by the Claude platform while remaining unobtrusive in file listings.

Can I place plugin.json in a different location within my plugin?

No, the repository structure requires the manifest to exist specifically at .claude-plugin/plugin.json relative to the plugin root. The Claude plugin loader searches for this exact path when initializing extensions, and deviation will result in discovery failures.

How does the root-level manifest differ from individual plugin manifests?

The root .claude-plugin/plugin.json describes the entire community repository collection, while individual plugin manifests describe specific integrations. Both use the same schema format, but the root manifest typically contains repository-wide metadata rather than execution endpoints.

Is the .claude-plugin directory required for all Claude plugins?

Yes, every plugin in the anthropics/claude-plugins-community repository must include this directory and its plugin.json file. This requirement ensures consistent metadata availability across the plugin ecosystem, enabling proper indexing and loading by the Claude platform.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →