Personal knowledge graph MCP server exposing entity/relationship CRUD, search, path finding, and LLM-powered text ingestion as tools for AI agents (Claude Desktop, jarvis, etc.)
Server has 13 tools with consistent naming (verb_noun pattern: get_, search_, list_, add_, find_), clear descriptions (avg ~150 chars), and documented parameters. However, output schemas are not formally documented, responses are JSON strings without declared structure. Error handling is minimal (only ingest_text and find_paths catch exceptions). Parameters lack enums and range constraints. No tool annotations (readOnlyHint/destructiveHint). Descriptions are adequate but could be more LLM-optimized (e.g., 'when to use' guidance missing). Overall: solid foundation, but gaps in schema documentation and error guidance prevent higher scores.
新增一个实体(节点),如新技能、新项目、新知识。type 需为已注册的实体类型(用 list_types 查看);properties 为键值属性,如 {"proficiency": "高级"}。
新增一条关系(边),连接两个实体。type 需为已注册的关系类型(用 list_relation_types 查看);source/target 为实体 ID。
查询两个实体的共同邻居(找出它们之间的共同点),entity/other 为实体 ID。
查询两个实体之间的关联路径(按跳数从短到长),source/target 为实体 ID。
根据实体 ID 获取实体详情(含属性、类型、颜色)。ID 可用 search_entity 查询。
获取某实体的邻居子图(degree=1 直接邻居,degree=2 二度邻居),返回实体与关系。
获取 aceFelix 的人物画像摘要。以 Person 实体为中心,聚合其一跳关系(技能/知识/项目/工具/兴趣/任务/目标),返回紧凑 JSON。Agent 需要"了解用户"时调用本工具。
Output schemas not formally documented. Tools return JSON strings without declared structure (e.g., get_profile returns {person, connections, hint} but schema is not visible in tool definition). LLMs cannot plan downstream calls or extract fields reliably.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). add_entity and add_relation are write operations but lack destructiveHint. ingest_text supports dry_run but lacks idempotentHint annotation. Agents cannot distinguish safe from risky calls without reading descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
获取图谱统计信息(实体数、关系数、类型分布)。
把一段文本交给自动抽取管线,抽出「实体 + 关系」三元组写入图谱。(P2 链路:供 jarvis 等 Agent 触发抽取 / 画像回写)管线内置五道防噪闸(信息密度预检、价值预判、类型白名单、查重、人工确认),闲聊/寒暄文本零写入。重复实体/关系自动跳过,可放心重复调用。建议流程:先 dry_run=True 拿预览给用户确认,确认后同文本以 dry_run=False 正式写入。
列出全部实体,可按类型过滤(type 为可选参数,如 Person/Skill/Project)。
列出全部关系类型(代码 -> 中文标签)。新增关系前先确认类型存在。
列出全部实体类型(name -> 颜色)。新增实体前先确认类型存在。
按关键词搜索实体(匹配名称或属性值),返回实体列表 JSON。
Parameters lack enums and range constraints. 'type' param in list_entities accepts free-form string (should be enum: Person|Skill|Project|etc). 'degree' in get_neighbors accepts any integer (should be constrained 1-2). 'max_hops' in find_paths unbounded (should be 1-5). LLMs will pass invalid values.
Minimal error handling. Only find_paths and ingest_text catch exceptions. Other tools (search_entity, get_entity, add_entity, add_relation) will crash silently or return raw exceptions if entity_id is invalid or type constraint violated. No recovery guidance.
Descriptions lack 'when to use' guidance. E.g., get_profile vs search_entity vs get_entity are all discovery tools but descriptions don't explain when to prefer one over another. Agents waste reasoning cycles deciding between similar tools.