Skip to content

Package MCP server as DXT for one-click Claude Desktop install #61

@dougborg

Description

@dougborg

Problem

The MCP server in this repo currently requires hand-editing claude_desktop_config.json to install — pointing at a local checkout via --project and embedding the API key inline:

"statuspro-dev": {
  "command": "/Users/.../uv",
  "args": ["run", "--project", "/Users/.../statuspro-openapi-client",
           "--package", "statuspro-mcp-server", "statuspro-mcp-server"],
  "env": { "STATUSPRO_API_KEY": "..." }
}

This works for the maintainer but doesn't scale to teammates or customers: no install flow, no UI for managing the server, no env-var prompt — the API key lives in a config file users have to edit by hand.

Proposal

Adopt Anthropic's DXT (Desktop Extensions) packaging format. A .dxt is a zip containing the server + a manifest.json that declares entry point, required env vars, platform compat, etc. Claude Desktop installs them with one click and prompts for env-var values via UI — no JSON editing.

Reference: https://github.com/anthropics/dxt

Scope

  • Add manifest.json at the package root declaring:
    • name / version / description (sourced from pyproject.toml so they don't drift)
    • server.type = "python" with entry point pointing at the existing statuspro-mcp-server console script
    • user_config declaring STATUSPRO_API_KEY as type: "secret" with a prompt-friendly description
    • Platform compatibility metadata (darwin / linux / win32 as applicable)
  • Add a CI step in the release workflow that:
    • Builds the .dxt artifact
    • Attaches it to the GitHub release
    • Publishes alongside the PyPI release
  • Document the install flow in the MCP server README ("drag the .dxt into Claude Desktop")
  • Add a uvx-based fallback for CLI users who don't want DXT:
    { "command": "uvx", "args": ["statuspro-mcp-server"], "env": { ... } }
    This requires the package to be on PyPI (which the release workflow already does) and removes the --project path dependency.

Acceptance criteria

  • manifest.json validates against the DXT schema
  • CI builds and uploads the .dxt artifact on each MCP release
  • README documents both the DXT and uvx install flows
  • uvx statuspro-mcp-server works as an invocation path (no local checkout required)

Companion issues

Same packaging gap exists for the sibling MCPs — file linked once they're created:

  • frontapp-openapi-client
  • stocktrim-openapi-client

Context

Discussed during the katana-port catch-up session that landed #60. Current Claude Desktop config requires hand-edited paths and inline API keys; DXT eliminates both for one-click install.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions