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
pytest tests/test_plugin.py -v — rewritten assertions pass.
pytest -m unit — full unit suite green.
make docs-build — no broken anchors.
- Fresh install smoke test:
claude plugin install distillery → /setup → transport reports Local, distillery_status returns "transport": "stdio".
- Opt-in hosted test: run the
claude mcp add ... override → /setup reports Hosted.
- Missing-
uvx test: rename uvx on PATH → MCP error surface points to the install-uv fallback.
Problem
claude plugin install distillerycurrently wiresmcpServers.distilleryto the hosted demo athttps://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 viaclaude mcp add distillery --scope user --transport http --url https://distillery-mcp.fly.dev/mcp.Changes
.claude-plugin/plugin.json— replace the HTTP block with:Reuses the existing
userConfig.jina_api_keyfield (already defined at.claude-plugin/plugin.json:13-18). If${user_config.<key>}interpolation is not supported inenv(per the note attests/test_plugin.py:239it is unsupported forurl;envis unverified), drop theenvblock —uvxinherits the Claude Code process environment, and an unset key falls back to the stub embedding provider.tests/test_plugin.py— rewrite three assertions inTestPluginMCPServers:test_distillery_server_has_type_http→ assert stdio (presence ofcommand, absence ofurl)test_distillery_server_has_url→ assertcommand == "uvx"and"distillery-mcp"inargstest_distillery_server_url_is_hardcoded_fly_url→ remove or repurposeDocs — reorder so local reads as default, hosted demo reads as opt-in:
README.md:70-112— Quick Startdocs/home.md:40-80— Quick Startdocs/getting-started/plugin-install.md:15, 25-26, 60-123— intro copy, demo warning, MCP Configuration sectionskills/setup/SKILL.md:76-99— minor phrasing tweak in "Not Configured" stateCHANGELOG.md— add entry noting the default change and the one-line migration command for existing hosted-demo users.Risks
uvxnot on PATH. Mitigation: new troubleshooting note pointing tocurl -LsSf https://astral.sh/uv/install.sh | shor thepip install distillery-mcp+command: distillery-mcpfallback.claude plugin update. The one-lineclaude mcp addcommand restores prior behaviour; CHANGELOG + release notes cover the heads-up.Verification
pytest tests/test_plugin.py -v— rewritten assertions pass.pytest -m unit— full unit suite green.make docs-build— no broken anchors.claude plugin install distillery→/setup→ transport reports Local,distillery_statusreturns"transport": "stdio".claude mcp add ...override →/setupreports Hosted.uvxtest: renameuvxon PATH → MCP error surface points to the install-uv fallback.