Use this skill when the user wants to convert a standalone MCP server configuration into a distributable Claude Code marketplace plugin. Triggers on phrases like "convert my MCP to a plugin", "package my MCP server for distribution", "make my MCP shareable", "wrap MCP in a marketplace plugin", "publish my MCP config", "distribute my MCP server", or "I have an MCP and want to share it".
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-marketplace-tools:claude-marketplace-convert-mcp-to-marketplaceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Convert an existing MCP server configuration into a proper Claude Code plugin that can be distributed through a marketplace.
Convert an existing MCP server configuration into a proper Claude Code plugin that can be distributed through a marketplace.
Locate the existing MCP configuration. Check in this order:
.claude/settings.json — look for mcpServers key (global Claude Code MCP config).mcp.json at the project root — project-scoped MCP configRead the MCP entry carefully. Identify:
.mcp.jsonhttp, sse, or process-based (has command + args)${VAR_NAME})command or argsAsk the user:
asana-mcp, my-db-tools)Source config looks like:
"my-server": { "type": "http", "url": "https://api.example.com/mcp" }
"my-server": { "type": "sse", "url": "https://api.example.com/sse" }
These copy directly into the plugin's .mcp.json unchanged. No path rewriting needed.
"my-server": {
"type": "http",
"url": "https://api.example.com/mcp",
"headers": { "Authorization": "Bearer ${MY_API_KEY}" }
}
Copy as-is. ${MY_API_KEY} is an environment variable — the user must set it in their shell. Document this in the plugin README.
"my-server": {
"command": "node",
"args": ["./server/index.js", "--port", "3000"]
}
Critical: The plugin is copied to a cache directory on install (~/.claude/plugins/cache/...). Any relative path in args that points to project files will break.
Rewrite paths using ${CLAUDE_PLUGIN_ROOT}:
"my-server": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/server/index.js", "--port", "3000"]
}
Also ask: Is the server script/binary something that should be bundled with the plugin, or is it a system binary (like npx, uvx, bun)? If it needs bundling, the server files must be inside the plugin directory.
"my-server": {
"command": "npx",
"args": ["-y", "@org/mcp-server"]
}
These are self-installing — copy as-is. No path rewriting needed.
plugins/<plugin-name>/.claude-plugin/plugin.json{
"name": "<plugin-name>",
"description": "<what this MCP server provides to Claude>",
"author": {
"name": "<owner>"
}
}
plugins/<plugin-name>/.mcp.jsonWrite the converted MCP server config. Apply path rewrites from the type classification above.
Example for a remote SSE server (like Asana):
{
"asana": {
"type": "sse",
"url": "https://mcp.asana.com/sse"
}
}
Example for a local node server:
{
"my-server": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/server/index.js"]
}
}
plugins/<plugin-name>/README.md# <plugin-name>
<description>
## Requirements
<!-- List env vars, system dependencies, or auth steps -->
- Set `MY_API_KEY` environment variable ← only if applicable
## Installation
```shell
/plugin install <plugin-name>@<marketplace-name>
Provides the <server-name> MCP server.
Adds the following tools to Claude:
### `marketplace.json` (create or update)
If `.claude-plugin/marketplace.json` exists, add to the `plugins` array. Otherwise create:
```json
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "<marketplace-name>",
"owner": { "name": "<owner>" },
"plugins": [
{
"name": "<plugin-name>",
"source": "./plugins/<plugin-name>",
"description": "<description>"
}
]
}
<marketplace-root>/
├── .claude-plugin/
│ └── marketplace.json
└── plugins/
└── <plugin-name>/
├── .claude-plugin/
│ └── plugin.json
└── .mcp.json
<marketplace-root>/
├── .claude-plugin/
│ └── marketplace.json
└── plugins/
└── <plugin-name>/
├── .claude-plugin/
│ └── plugin.json
├── .mcp.json
└── server/ ← server files go here
└── index.js
${CLAUDE_PLUGIN_ROOT}.${VAR_NAME} references — the user must set these in their shell before Claude Code starts.claude plugin validate ./plugin marketplace add ./
/plugin install <plugin-name>@<marketplace-name>
/plugin marketplace add <github-owner>/<repo>Standalone (settings.json) | Plugin (.mcp.json) |
|---|---|
| One project only | Installable from any project |
| Short server name in Claude | Same server name |
| Relative paths work | Must use ${CLAUDE_PLUGIN_ROOT} for paths |
| No versioning | Version via plugin.json or git SHA |
npx claudepluginhub budzikt/company-claude-marketplace --plugin claude-marketplace-toolsCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.