Plugin Manifest — One-click Install for Claude Code
Source:
python/dcc_mcp_core/plugin_manifest.py· Issue #410 · Claude Code plugin reference
Bundle an MCP server URL, skill paths, and optional sub-agents into a single JSON manifest that users install into Claude Code with one click.
When to use
- Ship a pre-configured DCC integration (
maya-mcp,blender-mcp, …) to users without forcing them to editclaude_desktop_config.json. - Distribute a curated skill bundle alongside your server URL.
- Prepare for the upstream MCP
experimental-ext-skillsextension that delivers skills directly from servers.
Imports
python
from dcc_mcp_core import (
PluginManifest,
build_plugin_manifest,
export_plugin_manifest,
)PluginManifest (dataclass)
| Field | Type | Notes |
|---|---|---|
name | str | Plugin name (e.g. "maya-mcp") |
version | str | Plugin version string |
description | str | Shown in the Claude Code UI |
mcp_servers | list[dict] | Each entry has "url" and optional "headers" |
skills | list[str] | Absolute paths to skill directories |
sub_agents | list[dict] | Optional sub-agent definitions (default []) |
Methods:
.to_dict() -> dict— JSON-serialisable dict.to_json(indent=2) -> str— formatted JSON string
build_plugin_manifest(dcc_name, mcp_url, skill_paths=None, *, version="0.1.0", description=None, api_key=None, extra_mcp_servers=None, sub_agents=None) -> dict
Assemble a plugin manifest dict.
| Arg | Type | Default | Notes |
|---|---|---|---|
dcc_name | str | — | Short DCC identifier; becomes <dcc>-mcp as the plugin name |
mcp_url | str | None | — | Full MCP endpoint (http://host:8765/mcp). None → skills-only bundle |
skill_paths | list[str] | None | None | Directories to include. Non-existent paths are dropped with a debug log |
version | str | "0.1.0" | Plugin version |
description | str | None | auto | Auto-generated from dcc_name when None |
api_key | str | None | None | Injected into mcp_servers[0].headers.Authorization as Bearer <key> |
extra_mcp_servers | list[dict] | None | None | Additional server entries beyond the primary |
sub_agents | list[dict] | None | None | Sub-agent definitions |
Returns a JSON-serialisable dict matching the Claude Code plugin schema. Log message at INFO level summarises how many servers / skills were included.
Example
python
from dcc_mcp_core import build_plugin_manifest, export_plugin_manifest
manifest = build_plugin_manifest(
dcc_name="maya",
mcp_url="https://mcp.example.com/mcp",
skill_paths=["/opt/skills/maya-geometry", "/opt/skills/maya-render"],
version="1.2.0",
api_key="s3cret-studio-token",
)
export_plugin_manifest(manifest, "dist/maya-mcp.plugin.json")export_plugin_manifest(manifest, path, *, indent=2) -> Path
Write a manifest dict to disk. Creates parent directories as needed. Returns the resolved pathlib.Path.
Recommended pattern — DccServerBase.plugin_manifest()
When building on DccServerBase, use the convenience method added in #410 that auto-fills mcp_url and skill_paths from the running server:
python
class MayaServer(DccServerBase):
def __init__(self):
super().__init__(dcc_name="maya", http_config=McpHttpConfig(port=8765))
server = MayaServer()
handle = server.start()
manifest = server.plugin_manifest(version="1.2.0") # dictManifest shape
json
{
"name": "maya-mcp",
"version": "1.2.0",
"description": "MCP plugin for Maya — provides AI-accessible tools via dcc-mcp-core.",
"mcp_servers": [
{
"url": "https://mcp.example.com/mcp",
"headers": { "Authorization": "Bearer s3cret-studio-token" }
}
],
"skills": [
"/opt/skills/maya-geometry",
"/opt/skills/maya-render"
]
}See also
- Remote Server guide
- Skills System — SKILL.md discovery &
DCC_MCP_SKILL_PATHS - Claude Code plugin components reference