How Plugin Categories Function in the Claude Marketplace JSON
Plugin categories in the Claude marketplace are defined as arbitrary, lower-case string values assigned to the category key within each plugin object in .claude-plugin/marketplace.json, validated by continuous integration to ensure schema compliance.
The anthropics/claude-plugins-community repository maintains a single source of truth for all public Claude plugins. Understanding how plugin categories function within marketplace.json is essential for developers submitting extensions, as these classification strings directly influence how the marketplace UI groups and filters plugins for user discovery.
Category Field Structure in marketplace.json
The community marketplace relies on .claude-plugin/marketplace.json as its central manifest. This file contains a JSON array where each element represents a plugin object. Every object must include a category property whose value classifies the plugin's primary function.
The schema imposes minimal constraints: the value must be a non-empty string. There is no hard-coded enumeration limiting valid entries, allowing the taxonomy to evolve organically as new plugin types emerge.
Real-World Category Examples
The current marketplace demonstrates the flexible string-based approach through diverse categorizations:
"category": "testing"(line 105)"category": "productivity"(line 368)"category": "development"(line 695)
Other common values observed in the manifest include "security" and "finance", though contributors may define any descriptive term that accurately represents their plugin's domain.
CI Validation of Plugin Categories
When the repository is built, the CI validator located at .github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh processes the assembled marketplace.json. This script enforces that every plugin entry contains a properly formed category field.
Unlike systems that validate against a rigid enum, this validator checks for structural integrity—ensuring the key exists and contains a non-empty string—without restricting the semantic meaning. This approach balances standardization with flexibility, allowing novel categories to emerge without code changes.
Implementing Categories in Your Plugin Definition
To assign a category to your plugin, include the category key in your entry within marketplace.json. The value should be a concise, lower-case descriptor that aligns with existing conventions where possible.
Example: Productivity Plugin
{
"name": "10x-shopping",
"description": "...",
"source": { "source": "url", "url": "...", "sha": "..." },
"homepage": "https://www.10xgeo.com/",
"category": "productivity"
}
Example: Security Plugin
{
"name": "42crunch-api-security-testing",
"description": "...",
"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"
}
Example: Development Plugin
{
"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
- Centralized Definition: Plugin categories are defined exclusively within
.claude-plugin/marketplace.json, not in separate configuration files. - Flexible Schema: The
categoryfield accepts any non-empty string value, with no hard-coded list of allowed terms in the repository. - Automated Validation: The
.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.shscript enforces structural compliance during CI builds. - Discovery Impact: These strings power the marketplace UI's filtering and grouping mechanisms, directly affecting plugin discoverability.
Frequently Asked Questions
What file contains the canonical plugin category definitions?
The file .claude-plugin/marketplace.json serves as the single source of truth. It contains a JSON array of plugin objects, each requiring a category field that the marketplace UI consumes for organization and filtering.
Is there a predefined enumeration of allowed categories?
No. The repository does not maintain a hard-coded list of valid categories. The validation script only verifies that the category key exists and contains a non-empty string, allowing the taxonomy to expand organically as developers introduce new plugin types.
How does the repository prevent malformed category entries?
The validation occurs during the CI build process via .github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh. This script checks the assembled marketplace manifest to ensure every entry meets the schema requirements, including the presence and proper formatting of the category property.
Can I create a plugin with a custom category not currently used in the marketplace?
Yes. Since the system accepts arbitrary non-empty strings, you may define novel categories (for example, " healthcare" or "devops") provided they accurately describe your plugin's functionality. The absence of an enumeration means innovation in categorization is supported without repository changes.
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 →