diff --git a/.mcp.json b/.mcp.json index a23a26fe..752b692f 100644 --- a/.mcp.json +++ b/.mcp.json @@ -10,13 +10,19 @@ "sequential-thinking": { "type": "stdio", "command": "npx", - "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"], + "args": [ + "-y", + "@modelcontextprotocol/server-sequential-thinking" + ], "env": {} }, "github": { "type": "stdio", "command": "npx", - "args": ["-y", "@modelcontextprotocol/server-github"], + "args": [ + "-y", + "@modelcontextprotocol/server-github" + ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}" } @@ -24,14 +30,27 @@ "fetch": { "type": "stdio", "command": "uvx", - "args": ["mcp-server-fetch"], + "args": [ + "mcp-server-fetch" + ], "env": {} }, "playwright": { "type": "stdio", "command": "npx", - "args": ["-y", "@playwright/mcp@latest"], + "args": [ + "-y", + "@playwright/mcp@latest" + ], "env": {} + }, + "codegraph": { + "type": "stdio", + "command": "codegraph", + "args": [ + "serve", + "--mcp" + ] } } } diff --git a/AGENTS.md b/AGENTS.md index 10e59ca9..fc51dab0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -85,4 +85,40 @@ Plugin Runtime automatically starts each installed plugin and interacts through 以跳过验证为耻,以主动测试为荣。 以破坏架构为耻,以遵循规范为荣。 以假装理解为耻,以诚实无知为荣。 - 以盲目修改为耻,以谨慎重构为荣。 \ No newline at end of file + 以盲目修改为耻,以谨慎重构为荣。 + + +## CodeGraph + +This project has a CodeGraph MCP server (`codegraph_*` tools) configured. CodeGraph is a tree-sitter-parsed knowledge graph of every symbol, edge, and file. Reads are sub-millisecond and return structural information grep cannot. + +### When to prefer codegraph over native search + +Use codegraph for **structural** questions — what calls what, what would break, where is X defined, what is X's signature. Use native grep/read only for **literal text** queries (string contents, comments, log messages) or after you already have a specific file open. + +| Question | Tool | +|---|---| +| "Where is X defined?" / "Find symbol named X" | `codegraph_search` | +| "What calls function Y?" | `codegraph_callers` | +| "What does Y call?" | `codegraph_callees` | +| "How does X reach/become Y? / trace the flow from X to Y" | `codegraph_trace` (one call = the whole path, incl. callback/React/JSX dynamic hops) | +| "What would break if I changed Z?" | `codegraph_impact` | +| "Show me Y's signature / source / docstring" | `codegraph_node` | +| "Give me focused context for a task/area" | `codegraph_context` | +| "See several related symbols' source at once" | `codegraph_explore` | +| "What files exist under path/" | `codegraph_files` | +| "Is the index healthy?" | `codegraph_status` | + +### Rules of thumb + +- **Answer directly — don't delegate exploration.** For "how does X work" / architecture questions, answer with 2-3 codegraph calls: `codegraph_context` first, then ONE `codegraph_explore` for the source of the symbols it surfaces. For a specific **flow** ("how does X reach Y") start with `codegraph_trace` from→to — one call returns the whole path with dynamic hops bridged — then ONE `codegraph_explore` for the bodies; don't rebuild the path with `codegraph_search` + `codegraph_callers`. Codegraph IS the pre-built index, so spawning a separate file-reading sub-task/agent — or running a grep + read loop — repeats work codegraph already did and costs more for the same answer. +- **Trust codegraph results.** They come from a full AST parse. Do NOT re-verify them with grep — that's slower, less accurate, and wastes context. +- **Don't grep first** when looking up a symbol by name. `codegraph_search` is faster and returns kind + location + signature in one call. +- **Don't chain `codegraph_search` + `codegraph_node`** when you just want context — `codegraph_context` is one call. +- **Don't loop `codegraph_node` over many symbols** — one `codegraph_explore` call returns several symbols' source grouped in a single capped call, while each separate node/Read call re-reads the whole context and costs far more. +- **Index lag**: the file watcher debounces ~500ms behind writes; don't re-query immediately after editing a file in the same turn. + +### If `.codegraph/` doesn't exist + +The MCP server returns "not initialized." Ask the user: *"I notice this project doesn't have CodeGraph initialized. Want me to run `codegraph init -i` to build the index?"* +