How Plugin Categories Are Defined in the Claude marketplace.json File
Plugin categories in the Claude plugin marketplace are defined by the category property in each plugin object within .claude-plugin/marketplace.json, where values are arbitrary lowercase strings validated by CI to ensure they are non-empty and well-formed.
The anthropics/claude-plugins-community repository powers the Claude plugin marketplace through a central JSON manifest. Understanding how plugin categories are defined in marketplace.json is essential for developers submitting new integrations, as proper categorization directly drives discovery and organization within the marketplace interface.
The Category Property Structure
Each plugin entry in .claude-plugin/marketplace.json is a JSON object containing standardized metadata fields, including the required category property. According to the source code, this field accepts short, human-readable strings that classify the plugin's primary function.
The field appears at the root level of each plugin object:
{
"name": "10x-shopping",
"description": "Shopping assistant plugin",
"source": {
"source": "url",
"url": "https://example.com/plugin",
"sha": "abc123..."
},
"homepage": "https://www.10xgeo.com/",
"category": "productivity"
}
Allowed Values and Naming Conventions
Unlike rigid enumerations, the marketplace does not hard-code specific category strings. The allowed values are simply whatever strings appear in the file, provided they meet the CI validation requirements.
Common categories found in the source include:
development(line 695)productivity(line 368)securitytesting(line 105)finance
While the schema permits arbitrary strings, the community follows lowercase conventions for consistency. The validator enforces that the field contains a non-empty string, rejecting null values or empty strings, but does not restrict the semantic meaning of the term.
CI Validation and Schema Enforcement
When contributors submit changes to the repository, the GitHub Actions workflow executes .github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh to verify the assembled marketplace.json. This validation step ensures every plugin entry contains a valid category field conforming to the expected schema.
The validator specifically checks that:
- The
categorykey exists on each plugin object - The value is a non-empty string
- The field is properly formed within the JSON structure
This process is documented in .github/actions/validate-plugins/README.md, which outlines the invariants applied to marketplace entries to maintain data integrity across the plugin ecosystem.
Practical Implementation Examples
To add a category when submitting a plugin, include the category field in your plugin's JSON object within marketplace.json. Choose a descriptive, lowercase term that accurately reflects your plugin's primary function.
Example implementations from the repository:
{
"name": "42crunch-api-security-testing",
"description": "API security testing and audit plugin",
"source": {
"source": "git-subdir",
"url": "42Crunch-AI/claude-plugins",
"path": "plugins/api-security-testing",
"ref": "v1.0.1",
"sha": "30287f5e3f122a646d1ac5ca3ab96e130c52a3ad"
},
"homepage": "https://docs.42crunch.com",
"category": "security"
}
{
"name": "a11y-fixer",
"description": "Scan HTML/JSX for accessibility issues",
"source": {
"source": "git-subdir",
"url": "barnburner121/claude-plugin-marketplace",
"path": "generated-plugins/a11y-fixer",
"ref": "main",
"sha": "5f6b5d32d9f457dc9c2c7c0fb1d67dffc9140f33"
},
"homepage": "https://github.com/barnburner121/claude-plugin-marketplace",
"category": "development"
}
Summary
- Plugin categories are defined by the
categoryproperty in.claude-plugin/marketplace.json - Values are arbitrary lowercase strings (e.g.,
development,productivity,security) with no hard-coded enumeration in the repository - The CI validator at
.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.shenforces that categories are non-empty strings - Categories enable the marketplace UI to group plugins for discovery and filtering
Frequently Asked Questions
Is there a predefined list of allowed categories in marketplace.json?
No, the repository does not maintain a hard-coded enumeration of valid categories. The schema accepts any non-empty string value, allowing the ecosystem to evolve organically. However, contributors should use descriptive, lowercase terms consistent with existing entries like development, testing, or productivity to ensure proper grouping in the marketplace interface.
How does the CI validate plugin categories?
The validation script .github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh checks that every plugin object in the assembled marketplace.json contains a category field with a non-empty string value. This ensures structural integrity without restricting the specific terms developers can use to describe their plugins.
Can I use multiple categories for a single plugin?
No, each plugin entry supports only one category value as a string. If your plugin spans multiple domains, select the category that best describes its primary function or the use case most users will encounter when browsing the marketplace.
Where is the category field displayed in the marketplace?
The category value from marketplace.json is consumed by the marketplace frontend to organize plugins into browsable groups and filtering options. While the exact display logic resides in the marketplace UI layer, the source data originates from the category property defined in each plugin object within the JSON manifest.
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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →