Skip to content

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 edit claude_desktop_config.json.
  • Distribute a curated skill bundle alongside your server URL.
  • Prepare for the upstream MCP experimental-ext-skills extension that delivers skills directly from servers.

Imports

python
from dcc_mcp_core import (
    PluginManifest,
    build_plugin_manifest,
    export_plugin_manifest,
)

PluginManifest (dataclass)

FieldTypeNotes
namestrPlugin name (e.g. "maya-mcp")
versionstrPlugin version string
descriptionstrShown in the Claude Code UI
mcp_serverslist[dict]Each entry has "url" and optional "headers"
skillslist[str]Absolute paths to skill directories
sub_agentslist[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.

ArgTypeDefaultNotes
dcc_namestrShort DCC identifier; becomes <dcc>-mcp as the plugin name
mcp_urlstr | NoneFull MCP endpoint (http://host:8765/mcp). None → skills-only bundle
skill_pathslist[str] | NoneNoneDirectories to include. Non-existent paths are dropped with a debug log
versionstr"0.1.0"Plugin version
descriptionstr | NoneautoAuto-generated from dcc_name when None
api_keystr | NoneNoneInjected into mcp_servers[0].headers.Authorization as Bearer <key>
extra_mcp_serverslist[dict] | NoneNoneAdditional server entries beyond the primary
sub_agentslist[dict] | NoneNoneSub-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.

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")   # dict

Manifest 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

Released under the MIT License.