{"_id":"@dhcckb/cnkgraph-mcp","name":"@dhcckb/cnkgraph-mcp","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@dhcckb/cnkgraph-mcp","version":"1.0.0","description":"MCP Server for CNKGraph - 古典文献知识图谱人物关系模块","main":"dist/index.js","type":"module","bin":{"cnkgraph-mcp":"dist/index.js"},"scripts":{"build":"tsc"},"keywords":["mcp","model-context-protocol","cnkgraph","classical-chinese-literature","knowledge-graph","digital-humanities"],"author":"","license":"MIT","engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","zod":"^3.23.8"},"devDependencies":{"@types/node":"^22.0.0","typescript":"^5.6.0"},"mcp":{"tools":[{"name":"getEntityRelations","description":"分析人物之间的述及关系（谁在哪篇作品中提及谁）。若只提供 source_id，返回该人物全部述及/被述及概览（CSV 格式文本）；若同时提供 target_id，则返回两人之间的具体述及作品列表（支持 0 索引分页），以结构化 JSON 数组返回。","inputSchema":{"type":"object","properties":{"source_id":{"type":"integer","description":"源人物实体 ID（必填，对应 API 路径参数 {id}）"},"target_id":{"type":"integer","description":"目标人物实体 ID（可选；提供后返回两人间具体述及作品列表并启用分页，对应 API 路径参数 {targetId}）"},"page_no":{"type":"integer","description":"页码，0 索引（首页为 0），仅在提供 target_id 时生效，默认 0","default":0},"page_size":{"type":"integer","description":"每页条数，仅在提供 target_id 时生效，默认 20","default":20}},"required":["source_id"]}},{"name":"graphExplore","description":"以某个人物为起点，在知识图谱中进行网络探索，返回该人物的一跳关系网络，包括述及者、被述及者与关联作品。可指定关系过滤条件缩小范围。（注：由于 CNKGraph 无专用图探索端点，本工具通过组合 Mentionship CSV 和人物详情 API 构建一跳图谱。）","inputSchema":{"type":"object","properties":{"entity_id":{"type":"integer","description":"起始人物实体 ID（必填）"},"relation_filter":{"type":"string","description":"关系过滤条件，如 'mention'（仅述及）/ 'mentioned_by'（仅被述及），不填则返回全部一跳关系"}},"required":["entity_id"]}}]},"_id":"@dhcckb/cnkgraph-mcp@1.0.0","types":"./dist/index.d.ts","_integrity":"sha512-fFYEqqIs0WVXLstFX3m2VpUgM3B0kDRXhD0dNjmBsfi/GfPrlM4J5CL2771oWKxO/YgIlkSDYqY2Oid6dMBPZA==","_resolved":"/tmp/dhp-agent-npm-cBPPjj/package.tgz","_from":"file:/tmp/dhp-agent-npm-cBPPjj/package.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.1","dist":{"integrity":"sha512-fFYEqqIs0WVXLstFX3m2VpUgM3B0kDRXhD0dNjmBsfi/GfPrlM4J5CL2771oWKxO/YgIlkSDYqY2Oid6dMBPZA==","shasum":"b71e3a30e473dba48dd5f635d4f02642d570fb21","tarball":"https://registry.npmjs.org/@dhcckb/cnkgraph-mcp/-/cnkgraph-mcp-1.0.0.tgz","fileCount":18,"unpackedSize":51961,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDBtTiFw+M3IWo0J5K9hh+E1BRw9+kdiXwQnS9DudAJ0gIhALFxBb6oSwc2NK/xNMMD3JCbZ+e+kYE3Een7YOOmG7EN"}]},"_npmUser":{"name":"thudh","email":"tangchen@mail.tsinghua.edu.cn"},"directories":{},"maintainers":[{"name":"thudh","email":"tangchen@mail.tsinghua.edu.cn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cnkgraph-mcp_1.0.0_1785903851098_0.4802875330632106"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-05T04:24:10.921Z","1.0.0":"2026-08-05T04:24:11.262Z","modified":"2026-08-05T04:24:11.507Z"},"maintainers":[{"name":"thudh","email":"tangchen@mail.tsinghua.edu.cn"}],"description":"MCP Server for CNKGraph - 古典文献知识图谱人物关系模块","keywords":["mcp","model-context-protocol","cnkgraph","classical-chinese-literature","knowledge-graph","digital-humanities"],"license":"MIT","readme":"# CNKGraph MCP Server\n\n连接古典文献知识图谱网站（[CNKGraph](https://cnkgraph.com)）人物关系模块的 MCP Server，通过标准 MCP 协议为 AI Agent 提供古典人物述及关系查询与知识图谱网络探索能力。\n\n## 功能\n\n| 工具 | 功能说明 |\n|------|----------|\n| `getEntityRelations` | 分析人物之间的述及关系（谁在哪篇作品中提及谁） |\n| `graphExplore` | 以某个人物为起点进行知识图谱一跳网络探索 |\n\n## 前置要求\n\n- Node.js >= 18\n- 无需 API Key 或认证（CNKGraph 所有端点公开访问）\n\n## 安装与注册\n\n### 方式一：npx 直接使用（推荐）\n\n```json\n{\n  \"mcpServers\": {\n    \"cnkgraph\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dhcckb/cnkgraph-mcp\"]\n    }\n  }\n}\n```\n\n### 方式二：claude mcp add\n\n```bash\nclaude mcp add cnkgraph -- npx -y @dhcckb/cnkgraph-mcp\n```\n\n### 方式三：本地开发安装\n\n```bash\nnpm install @dhcckb/cnkgraph-mcp\n```\n\n## 环境变量\n\n| 变量名 | 默认值 | 说明 |\n|--------|--------|------|\n| `CNKGRAPH_BASE_URL` | `https://cnkgraph.com` | API 基础地址 |\n| `REQUEST_TIMEOUT_MS` | `15000` | HTTP 请求超时毫秒数 |\n\n## 工具详解\n\n### getEntityRelations\n\n分析人物之间的述及关系。支持两种模式：\n\n**模式一：仅提供 `source_id`（CSV 概览）**\n\n返回该人物全部述及/被述及关系的概览（CSV 格式文本）。\n\n```\n参数：\n  source_id (integer, 必填) - 源人物实体 ID\n\n示例：\n  getEntityRelations({ source_id: 42 })\n  → CSV 文本：\"关系类型,相关人物ID,相关人物,作品名,...\\n述及,108,李白,唐诗三百首,...\"\n```\n\n**模式二：提供 `source_id` + `target_id`（分页作品列表）**\n\n返回两人之间的具体述及作品列表（结构化 JSON 数组）。\n\n```\n参数：\n  source_id (integer, 必填) - 源人物实体 ID\n  target_id (integer, 可选) - 目标人物实体 ID\n  page_no   (integer, 可选) - 页码，0 索引（首页为 0），默认 0\n  page_size (integer, 可选) - 每页条数，默认 20\n\n示例：\n  getEntityRelations({ source_id: 42, target_id: 108, page_no: 0 })\n  → [{ \"title\": \"唐诗三百首\", \"excerpt\": \"李白《静夜思》...\", ... }, ...]\n```\n\n### graphExplore\n\n以某个人物为起点，探索知识图谱的一跳关系网络。\n\n> **实现说明**：由于 CNKGraph 无专用的图探索端点，本工具通过组合 `Mentionship CSV` 和 `/api/People/{id}` 详情 API 构建一跳图谱，返回 `nodes`、`edges` 和 `works` 结构化数据。\n\n```\n参数：\n  entity_id      (integer, 必填) - 起始人物实体 ID\n  relation_filter (string, 可选) - 关系过滤条件：\n                                    \"mention\"      - 仅述及（我提到的人）\n                                    \"mentioned_by\" - 仅被述及（提到我的人）\n                                    不填            - 返回全部一跳关系\n\n返回结构：\n{\n  \"source\": { \"id\": 42, \"name\": \"杜甫\", \"details\": {...} },\n  \"nodes\": [\n    { \"id\": 42, \"name\": \"杜甫\", \"type\": \"source\" },\n    { \"id\": 108, \"name\": \"李白\", \"type\": \"mentioned\" }\n  ],\n  \"edges\": [\n    { \"from\": 42, \"to\": 108, \"relation\": \"mention\", \"works\": [\"春日忆李白\"] }\n  ],\n  \"works\": [\"春日忆李白\", \"饮中八仙歌\"],\n  \"summary\": {\n    \"totalNodes\": 2,\n    \"totalEdges\": 1,\n    \"totalWorks\": 2,\n    \"mentionCount\": 1,\n    \"mentionedByCount\": 0\n  }\n}\n```\n\n## API 端点映射\n\n| MCP Tool | HTTP 请求 |\n|----------|-----------|\n| `getEntityRelations (仅 source_id)` | `GET /api/People/{id}/Mentionship` |\n| `getEntityRelations (+ target_id)` | `GET /api/People/{id}/Mentionship/{targetId}?pageNo=0` |\n| `graphExplore` | `GET /api/People/{id}/Mentionship` + `GET /api/People/{id}` |\n\n## 错误处理\n\n所有异常场景均返回可读的错误描述字符串，不会导致 MCP Host 崩溃：\n\n- **4xx**：`{\"error\": \"资源不存在或参数无效\", \"detail\": \"...\"}`\n- **5xx**：`{\"error\": \"服务暂时不可用，请稍后重试\", \"detail\": \"...\"}`\n- **超时**：`{\"error\": \"请求超时，请检查网络连接\", \"detail\": \"...\"}`\n- **参数校验失败**：`{\"error\": \"参数校验失败\", \"detail\": \"...\"}`\n\n## 技术栈\n\n- [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) — MCP 协议实现\n- [Zod](https://zod.dev) — 运行时参数校验\n- TypeScript + Node.js >= 18\n- stdio transport (标准 MCP 通信)\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-8ca62694447c88677ee4ff172f7d5160"}