Skip to content

Flip plugin default from hosted demo to local stdio #381

@norrietaylor

Description

@norrietaylor

Problem

claude plugin install distillery currently wires mcpServers.distillery to the hosted demo at https://distillery-mcp.fly.dev/mcp (.claude-plugin/plugin.json:31-36). That demo is explicitly labelled "evaluation only — do not store sensitive data" (docs/getting-started/plugin-install.md:25-26), yet it is the path of least resistance for every new user. Docs urge a manual switch to local, but the override is buried below the install command.

Proposal

Flip the default: plugin install configures a local stdio server (uvx distillery-mcp). Hosted demo becomes explicit opt-in via claude mcp add distillery --scope user --transport http --url https://distillery-mcp.fly.dev/mcp.

Changes

.claude-plugin/plugin.json — replace the HTTP block with:

"mcpServers": {
  "distillery": {
    "command": "uvx",
    "args": ["distillery-mcp"],
    "env": {
      "JINA_API_KEY": "${user_config.jina_api_key}"
    }
  }
}

Reuses the existing userConfig.jina_api_key field (already defined at .claude-plugin/plugin.json:13-18). If ${user_config.<key>} interpolation is not supported in env (per the note at tests/test_plugin.py:239 it is unsupported for url; env is unverified), drop the env block — uvx inherits the Claude Code process environment, and an unset key falls back to the stub embedding provider.

tests/test_plugin.py — rewrite three assertions in TestPluginMCPServers:

  • test_distillery_server_has_type_http → assert stdio (presence of command, absence of url)
  • test_distillery_server_has_url → assert command == "uvx" and "distillery-mcp" in args
  • test_distillery_server_url_is_hardcoded_fly_url → remove or repurpose

Docs — reorder so local reads as default, hosted demo reads as opt-in:

  • README.md:70-112 — Quick Start
  • docs/home.md:40-80 — Quick Start
  • docs/getting-started/plugin-install.md:15, 25-26, 60-123 — intro copy, demo warning, MCP Configuration section
  • skills/setup/SKILL.md:76-99 — minor phrasing tweak in "Not Configured" state

CHANGELOG.md — add entry noting the default change and the one-line migration command for existing hosted-demo users.

Risks

  • uvx not on PATH. Mitigation: new troubleshooting note pointing to curl -LsSf https://astral.sh/uv/install.sh | sh or the pip install distillery-mcp + command: distillery-mcp fallback.
  • Existing users flip on claude plugin update. The one-line claude mcp add command restores prior behaviour; CHANGELOG + release notes cover the heads-up.

Verification

  1. pytest tests/test_plugin.py -v — rewritten assertions pass.
  2. pytest -m unit — full unit suite green.
  3. make docs-build — no broken anchors.
  4. Fresh install smoke test: claude plugin install distillery/setup → transport reports Local, distillery_status returns "transport": "stdio".
  5. Opt-in hosted test: run the claude mcp add ... override → /setup reports Hosted.
  6. Missing-uvx test: rename uvx on PATH → MCP error surface points to the install-uv fallback.

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