{"_id":"@dachengzhihui/keyan-deployer-mcp","_rev":"2-d07c15d3a4ea62f2fb20761b63f89395","name":"@dachengzhihui/keyan-deployer-mcp","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@dachengzhihui/keyan-deployer-mcp","version":"0.1.0","_id":"@dachengzhihui/keyan-deployer-mcp@0.1.0","maintainers":[{"name":"yuzzzzzzi","email":"yuzzzzzzi@qq.com"}],"bin":{"keyan-deployer-mcp":"dist/index.js"},"dist":{"shasum":"ad43f0f8fb0a4f8d79c145b2fc22fe2a024471a3","tarball":"https://registry.npmjs.org/@dachengzhihui/keyan-deployer-mcp/-/keyan-deployer-mcp-0.1.0.tgz","fileCount":17,"integrity":"sha512-7A/6+c4Y38Z3r4mGws/tKCVbRsVCBapQ5bPKAgboXQZ3rci6ZTF6P4hwcrOfNp858kzmp3nd29hGahlEf/+aFw==","signatures":[{"sig":"MEQCICB54JntF6i0b0rBQNS73QGx5ZqW/r/df1vIm9k/vgxjAiBPKsYsrcVVZj67AqARnRp6tqRq4YPcfGDvCDoyaizrzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29199},"type":"module","engines":{"node":">=20"},"gitHead":"6dc809db72db65a568d1a22fbbce4832fd131d97","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"yuzzzzzzi","email":"yuzzzzzzi@qq.com"},"_npmVersion":"11.6.2","description":"MCP server for keyan-deployer REST API","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"^3.23.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^2.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/keyan-deployer-mcp_0.1.0_1781787144868_0.60237067390117","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dachengzhihui/keyan-deployer-mcp","version":"0.1.1","description":"MCP server for keyan-deployer REST API","type":"module","engines":{"node":">=20"},"bin":{"keyan-deployer-mcp":"dist/index.js"},"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","dev":"tsx src/index.ts"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","zod":"^3.23.0"},"devDependencies":{"@types/node":"^20.0.0","tsx":"^4.0.0","typescript":"^5.4.0","vitest":"^2.0.0"},"gitHead":"c6399ecc1cdedc598134db665ca6cc4d975dc62a","_id":"@dachengzhihui/keyan-deployer-mcp@0.1.1","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-kNH+o3b3F3tQsknJiVl5nRAzIFzEFc0YKoYR0rws1QrWNy6/SwrtxUgnPTgSpZyXUxcAtTl0zhl1FZ5qCpKYeg==","shasum":"768322fccb5fb70ed86de6b4cc06bb41c541a98a","tarball":"https://registry.npmjs.org/@dachengzhihui/keyan-deployer-mcp/-/keyan-deployer-mcp-0.1.1.tgz","fileCount":17,"unpackedSize":29435,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCcVFpNHHstjGCOBw7Qgz1rsUesImqOjgJ7rCri7EEMLAIgYsuH3H5BK3KR7JS5zQZQ/03aAB3UqNa7+ZLBsOSxd+Y="}]},"_npmUser":{"name":"yuzzzzzzi","email":"yuzzzzzzi@qq.com"},"directories":{},"maintainers":[{"name":"yuzzzzzzi","email":"yuzzzzzzi@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/keyan-deployer-mcp_0.1.1_1781788802778_0.6677766575331827"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T12:52:24.734Z","modified":"2026-06-18T13:20:03.041Z","0.1.0":"2026-06-18T12:52:25.004Z","0.1.1":"2026-06-18T13:20:02.923Z"},"description":"MCP server for keyan-deployer REST API","maintainers":[{"name":"yuzzzzzzi","email":"yuzzzzzzi@qq.com"}],"readme":"# keyan-deployer-mcp\n\nMCP server exposing the keyan-deployer REST API as resource-aggregated tools for Claude Code.\n\n## Install (Claude Code)\n\n```bash\nclaude mcp add keyan-deployer-mcp \\\n  -e KEYAN_API_URL=https://your-host \\\n  -e DEPLOY_PASSWORD=xxx \\\n  -- npx -y @dachengzhihui/keyan-deployer-mcp\n```\n\n> For other MCP clients (Claude Desktop, Cursor, Windsurf, VS Code/Copilot, Cline,\n> Codex CLI, Gemini CLI, …) see **[INSTALL.md](./INSTALL.md)**.\n\n## Env vars\n\n| Var | Required | Description |\n|-----|----------|-------------|\n| `KEYAN_API_URL` | yes | API base URL, e.g. `https://example.com` |\n| `DEPLOY_PASSWORD` | yes | Bearer auth password |\n\n## Tools\n\nEach tool takes `{ action, params }`. Run a tool with `action: \"list\"`/etc.; the tool\ndescription enumerates every action and its params.\n\n`sites`, `site_records`, `ports`, `system`,\n`reports`, `report_folders`, `report_records`, `report_tags`, `comment_config`.\n\nFile-upload actions (`sites.deploy`, `reports.create`, `report_records.create`)\ntake a local file path; the server reads it and uploads multipart.\n\n## Deploy a project & get an access link (host:port)\n\n1. `sites` `create` `{ code, name, category, type, config? }`\n   - frontend: `category=\"frontend\"`, `type=\"static\"|\"spa\"` (spa archive must contain `index.html`)\n   - backend: `category=\"backend\"`, `type=\"fastapi\"` (archive must contain `pyproject.toml`); `config.env` injects env vars\n   - reverse proxy: `category=\"proxy\"`, `config.upstream_url=...` (ready immediately, no deploy)\n2. `sites` `deploy` `{ id, archive_path }` until the record `status` is `success`\n3. `sites` `get` `{ id }` to read `port`; the link is `http://{host}:{port}/`, where\n   `{host}` is the hostname of your `KEYAN_API_URL` (it maps to the deploy machine).\n   The `sites` tool description shows the concrete host at runtime.\n4. `sites` `stop` / `start` / `restart` `{ id }` to control it\n\nCustom domains / HTTPS are managed in the desktop app, not the MCP server.\n\n## Develop\n\n```bash\ncd mcp\nnpm install\nnpm test          # 18 tests\nnpm run build     # -> dist/\n```\n\n## Release (publish a new version to npm)\n\nThe package is published as [`@dachengzhihui/keyan-deployer-mcp`](https://www.npmjs.com/package/@dachengzhihui/keyan-deployer-mcp);\n`npx -y @dachengzhihui/keyan-deployer-mcp` always pulls the latest.\n\n```bash\ncd mcp\n# 1. bump version in package.json (e.g. 0.1.0 -> 0.1.1)\nnpm run build\nnpm publish --access public   # scoped package: first publish must be public\n```\n\n**No-OTP publishing:** put an npm **Automation** or **Granular Access** token (one that\nbypasses 2FA) in `~/.npmrc`:\n\n```\n//registry.npmjs.org/:_authToken=npm_xxxxxxxx\n```\n\nThen `npm publish` needs no one-time code. Create the token at\n<https://www.npmjs.com/settings/USERNAME/tokens>. Never commit the token; for CI use a\nrepo secret and reference it as `//registry.npmjs.org/:_authToken=${NPM_TOKEN}`.\n","readmeFilename":"README.md"}