{"_id":"@canyonjs/mcp","name":"@canyonjs/mcp","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@canyonjs/mcp","version":"0.1.0","description":"MCP server for Canyon coverage queries","license":"MIT","author":{"name":"Travis Zhang","email":"https://github.com/travzhang"},"homepage":"https://github.com/canyon-project/canyon#readme","repository":{"type":"git","url":"git+https://github.com/canyon-project/canyon.git"},"bin":{"canyon-mcp":"bin/canyon-mcp.js"},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"}},"dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","zod":"^3.25.76"},"devDependencies":{"@tsconfig/strictest":"^2.0.8","@types/node":"^24.10.1","@typescript/native-preview":"7.0.0-dev.20260417.1","tsdown":"^0.17.0","vitest":"4.1.3"},"scripts":{"build":"tsdown","dev":"tsdown --watch","start":"node bin/canyon-mcp.js","typecheck":"tsgo --noEmit","test":"vitest run"},"_id":"@canyonjs/mcp@0.1.0","bugs":{"url":"https://github.com/canyon-project/canyon/issues"},"_integrity":"sha512-BpYcjh+rczWcn0dC0FOGRD8SxNBCKb0aM/an56cFq/ZtnQCMqIW7+4gcEBhZUWDdVhHKvpwFbl14Q95cSnWL3w==","_resolved":"/tmp/82b1e3ae951a8b025355b63ae73f2b0b/canyonjs-mcp-0.1.0.tgz","_from":"file:canyonjs-mcp-0.1.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-BpYcjh+rczWcn0dC0FOGRD8SxNBCKb0aM/an56cFq/ZtnQCMqIW7+4gcEBhZUWDdVhHKvpwFbl14Q95cSnWL3w==","shasum":"df842423cf14952ff06f3d69116892a2317d0dfc","tarball":"https://registry.npmjs.org/@canyonjs/mcp/-/mcp-0.1.0.tgz","fileCount":6,"unpackedSize":17155,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBMwJN4GWI2XpKjOp7k/TdN2/oKKpyvMg84HJ07x5f+cAiEA7qw/tC3I+zC/B8xqsMh4IjlOogJAFqM/MLOSIzcCM+8="}]},"_npmUser":{"name":"zhangtao25","email":"wr.zhang25@gmail.com"},"directories":{},"maintainers":[{"name":"zhangtao25","email":"wr.zhang25@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.0_1787647569927_0.4548281373100327"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-25T08:46:09.779Z","0.1.0":"2026-08-25T08:46:10.047Z","modified":"2026-08-25T08:46:10.297Z"},"maintainers":[{"name":"zhangtao25","email":"wr.zhang25@gmail.com"}],"description":"MCP server for Canyon coverage queries","homepage":"https://github.com/canyon-project/canyon#readme","repository":{"type":"git","url":"git+https://github.com/canyon-project/canyon.git"},"author":{"name":"Travis Zhang","email":"https://github.com/travzhang"},"bugs":{"url":"https://github.com/canyon-project/canyon/issues"},"license":"MIT","readme":"# @canyonjs/mcp\n\nCanyon 的 MCP（Model Context Protocol）服务端，供 Cursor / Claude 等 AI 工具查询覆盖率。\n\n## 环境变量\n\n| 变量 | 说明 | 默认值 |\n| --- | --- | --- |\n| `CANYON_URL` | Canyon API 地址（不含尾部 `/`） | `http://127.0.0.1:3000` |\n| `CANYON_TOKEN` | 可选 Bearer Token | 无 |\n\n## 提供的 Tools\n\n| Tool | 作用 |\n| --- | --- |\n| `list_repos` | 列出已接入仓库 |\n| `get_coverage_summary` | 获取 commit / compare / MR 覆盖率摘要 |\n| `get_uncovered_in_diff` | 查看 compare 中未覆盖的变更语句 |\n| `list_compares` | 列出 compare 记录 |\n| `list_snapshots` | 列出覆盖率快照 |\n\n还提供一个 Prompt：`review_compare_coverage`。\n\n## 本地开发\n\n```bash\ncd tools/mcp\npnpm install\npnpm build\npnpm start\n```\n\n## 在 Cursor 里接入\n\n项目根目录 `.cursor/mcp.json` 或 Cursor Settings → MCP：\n\n```json\n{\n  \"mcpServers\": {\n    \"canyon\": {\n      \"command\": \"node\",\n      \"args\": [\"/绝对路径/canyon/tools/mcp/bin/canyon-mcp.js\"],\n      \"env\": {\n        \"CANYON_URL\": \"http://127.0.0.1:3000\"\n      }\n    }\n  }\n}\n```\n\nmonorepo 内也可先用 workspace 包：\n\n```json\n{\n  \"mcpServers\": {\n    \"canyon\": {\n      \"command\": \"pnpm\",\n      \"args\": [\"--dir\", \"tools/mcp\", \"start\"],\n      \"env\": {\n        \"CANYON_URL\": \"http://127.0.0.1:3000\"\n      }\n    }\n  }\n}\n```\n\n## 示例对话\n\n- 「列出 Canyon 里接入的仓库」\n- 「MR 123 这次改动哪些文件还没覆盖？」\n- 「compare subjectID 是 xxx 的变更覆盖率怎么样？」\n\n`get_uncovered_in_diff` 可以直接传：\n\n- 已有 `subjectID`\n- `mrIid`\n- `baseRef` + `headRef`（可选 `mode` / `baseKind` / `headKind`）\n\n## 架构说明\n\nMCP 进程通过 HTTP 调用现有 Canyon REST API（`/api/coverage/*`、`/api/source/diff`、`/api/repos`），不直接连数据库。业务逻辑仍由主应用负责，MCP 只做摘要化输出，避免把完整 Istanbul map 塞进模型上下文。\n","readmeFilename":"README.md","_rev":"1-bf706b1b8e4823435937598699989ec0"}