codegraph 以 MCP 形式挂进 Claude Code,把项目脑图存进 SQLite,用 codegraph_trace 查调用链替代 grep 全量扫描;模型请求那侧走 TaoToken 统一通道,Key 从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建。这两件事看着不相干,其实是一条流水线:前者压掉「去哪儿找代码」的成本,后者管住「用哪个模型回话」的账。很多人只换了模型通道,检索还是老样子,token 该烧还是烧;也有人把 MCP 装上了,模型却还挂在默认通道上,跑两条调用链就被额度卡住。这篇按「先建索引 → 再挂 MCP → 最后切模型通道」的顺序,把两条线一次捋顺,配置都能直接复制。
1. grep 全量扫描,才是 Claude Code 烧 Token 的真凶
1.1 一句「谁调用了这个函数」背后的读盘量
在没挂任何检索类 MCP 的情况下,你让 Claude Code 找一条调用链,它的默认动作是退回 ripgrep:按关键词把整个仓库扫一遍,命中的文件连同上下文一起塞进上下文窗口。一个小仓库无所谓,几万个文件的工程就完全是另一回事——同一次提问里,命中的片段可能有几十处,模型要逐段读、逐段判断哪段才是真正相关的调用点。这些内容全都是真实计费的输入 token,而且大部分读完之后并不会被用上,属于纯浪费。
更麻烦的是这个动作会重复。你接着问「那这个函数的返回值在哪儿被改过」,它不会记得刚才扫过的文件结构,而是重新扫一遍。一轮改 bug 下来,同一个目录可能被读了五遍。费钱只是其中一个后果,另一个后果是慢——每次都在等它读盘和判断,交互体感就下来了。
1.2 codegraph 换了个思路:先建图,再查图
codegraph 的做法是把「读文件」这一步提前做掉。它扫描一遍项目,把文件、类、函数、调用关系抽出来,存进一个本地 SQLite 文件。之后你再问调用链,模型不是去遍历源码目录,而是通过 MCP 调用 codegraph 提供的工具,在图上做一次查询,直接拿到结构化的结果。
差别很直观:grep 是「我不知道在哪儿,所以全都翻一遍」,codegraph 是「我先有一张地图,直接按图索骥」。前者每次提问都全量扫描,后者只在索引过期的时候重新建一次。索引文件在本地,不涉及把源码传到任何远端,这一点对私有仓库很重要。
2. 装 codegraph,把项目脑图落进 SQLite
2.1 环境准备与安装
准备好 Node 18 以上的运行时和 npm,然后全局装。不同版本的 codegraph 子命令可能略有差异,装完之后建议先跑一次帮助命令确认一下当前版本的参数名,别照着旧博客硬抄。
node -v npm install -g codegraph codegraph --help装完之后你会在 PATH 里拿到一个 codegraph 可执行文件,下一步挂 MCP 的时候,Claude Code 就是靠这个命令拉起服务进程的。如果codegraph --help报 command not found,先检查 npm 的全局 bin 目录有没有在 PATH 里,这一步没通,后面 MCP 一定起不来。
2.2 跑一次索引,确认 SQLite 文件真的生成了
进到你的项目根目录,跑一次索引。输出路径建议统一放在仓库下的.codegraph/目录里,方便后面写配置的时候引用相对路径。
cd ~/work/your-repo codegraph index --root . --out .codegraph/graph.db ls -lh .codegraph/graph.db看到graph.db有实际大小(几百 KB 到几十 MB 都正常,取决于项目规模),说明索引这一步成了。索引耗时跟项目大小相关,大仓库第一次可能要等几分钟,跑完之后建议把它加进.gitignore,别把二进制文件提交上去。之后代码有大改动,再重跑一次索引刷新就行,不用每次都建。
3. 用 MCP 把 codegraph 挂到 Claude Code
3.1 用 claude mcp add 一条命令注册
Claude Code 自带 MCP 管理命令,最省事的方式是直接 add 一个 stdio 类型的 server。注意--后面那一段是真正拉起的进程和参数,别写错。
claude mcp add codegraph -- codegraph mcp --db ./.codegraph/graph.db claude mcp listclaude mcp list里能看到 codegraph 这一项,状态是已连接,就说明服务进程能被正常拉起。如果列表里显示失败,通常是命令路径不对或者 db 文件路径写错,先把这两点排掉。
3.2 团队共享时用 .mcp.json 更稳
如果这套配置要给整个团队用,写在项目根目录的.mcp.json里更好,跟着仓库走,每个人拉下来就能用。字段格式是固定的,type写stdio,命令和参数分开填:
{ "mcpServers": { "codegraph": { "type": "stdio", "command": "codegraph", "args": ["mcp", "--db", "./.codegraph/graph.db"], "env": {} } } }把这份文件提交进仓库之前,确认里面没有混进任何私密信息——MCP 这一段本来也不该放 Key,Key 是模型通道那边的事,两码事。
3.3 codegraph_trace 和 codegraph_explore 的分工
挂上之后,Claude Code 会多出几个工具,最常用的是两个。codegraph_trace用来查调用链:给一个函数名,它返回这个函数被谁调用、又调用了谁,直接把上下游关系摆出来。codegraph_explore用来批量取源码:你要看某个模块里几个相关函数的实现,一次把它们的源码取回来,而不是让模型一个个文件去 open。
这两个工具刚好覆盖了最常见的两类提问。前者对应「改这个函数会不会影响别处」,后者对应「这几段逻辑我要一起看」。用它们替代裸 grep 之后,同一轮对话里被读进来的无关文件会大幅减少,这才是省 token 的来源。
4. Claude Code 的模型通道切到 TaoToken
4.1 先去把 API Key 建出来
检索这条线搞定之后,模型请求这条线还挂在原来的地方。打开 TaoToken 注册,进控制台创建一个 API Key,复制下来,后面配置里统一用占位符YOUR_API_KEY表示。顺手在模型广场看一眼当前可用的模型 ID,先记下来——这个东西不要凭印象写,写错了 Claude Code 会直接报模型不存在。
4.2 settings.json 里把三件套写死
Claude Code 的用户级配置在~/.claude/settings.json,在env字段里写三个变量就够了。注意 Base URL 末尾不要带/v1,这一点跟很多 OpenAI 兼容配置的习惯不一样,抄错了就会 404。
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID" } }YOUR_MODEL_ID以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 模型广场当时列表为准,别照着旧截图填。改完之后重开一个终端,让 Claude Code 重新读一遍配置。
4.3 临时会话用环境变量更灵活
不想动全局配置,也可以只在一个终端会话里导出环境变量,关掉终端就失效。适合临时切到别的模型试试效果:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="YOUR_MODEL_ID" claude一旦同时存在全局配置和会话变量,以会话里的为准。排查「为什么改了没生效」的时候,先 echo 一下这几个变量,能省不少时间。
5. 验证:MCP 有没有生效,这轮调用有没有记上账
5.1 让 Claude Code 主动调一次 codegraph_trace
重启 Claude Code,在项目目录里开一个新会话,直接问一个具体的调用关系,比如「谁调用了 handleSubmit」。如果 MCP 挂对了,你会看到它在回复里调用 codegraph 的工具,而不是噼里啪啦读一堆文件。这一步是整个配置里最关键的验证点——工具没被调用,说明 MCP 那一段没生效,跟模型通道没关系,别在 Key 上瞎折腾。
5.2 回控制台对一下这次调用的用量
模型那边有没有真正走 TaoToken,去控制台看用量最直接。发一条测试消息,回到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的用量页面,看有没有新增记录。有记录,说明ANTHROPIC_BASE_URL和 Key 都填对了;没记录但 Claude Code 又能正常回话,那多半是还在用别的通道。
6. 排障:MCP 起不来、401、模型名填错
6.1 MCP 侧:工具列表里没有 codegraph
最常见的三种情况:一是codegraph命令不在 PATH,Claude Code 拉不起进程;二是--db指的路径是相对路径,而 Claude Code 的工作目录跟你手动执行的不一样;三是索引文件还没生成,服务起来了但查不到东西。前两种去claude mcp list里看状态,第三种回项目目录重跑一次索引进程。这三种跟 API Key 一点关系都没有,别一上来就怀疑 Key。
6.2 通道侧:401 和多写了一个 /v1
401 基本就两种原因:Key 复制的时候漏了字符,或者配置里写的是别处的 Key。Base URL 的话,重点检查是不是手滑写成了https://taotoken.net/api/v1——Claude Code 走的是 Anthropic 协议,这个 Base 不需要再补/v1,多写一段就是 404 或路径错误。这两条改完都要重启 Claude Code 才生效。
6.3 模型名对不上的时候
如果报的是模型不存在,直接去模型广场核对一遍当前可用的 ID,把ANTHROPIC_MODEL换成列表里真实存在的那个。不要用带日期后缀的猜测名,也不要照抄别人的截图,版本更新后列表是会变的。
7. 长期跑这套组合的几个习惯
7.1 索引什么时候重建
改代码之后索引不会自动更新,这是 codegraph 这类工具的共性。建议的节奏是:拉到新代码之后、开始一轮比较大的重构之前,各跑一次codegraph index。日常小改动可以不重建,但如果你发现 codegraph_trace 返回的调用链跟你实际代码对不上,那就是索引过期了,重建一次即可。
7.2 Key 和 MCP 分开管
Key 属于账号凭证,放在~/.claude/settings.json或者环境变量里,不要写进仓库;MCP 的.mcp.json属于项目配置,可以跟着仓库走。两者不要混在一个文件里,尤其是.mcp.json,一旦不小心把 Key 提交上去,撤回起来很麻烦。同一把 Key 可以复用到别的工具上,去 控制台 API Keys 里统一管理,比在每个工具里各存一份好。
配完之后想再确认一下通道本身通不通,可以先在 TaoToken 模型对话 里用同一把 Key 发一条消息,能回话再回到 Claude Code 里跑 codegraph。要长期在项目里这么写代码,去 Coding Plan 看一眼套餐够不够用;Claude Code 侧的变量名和配置文件位置,对照 接入文档 再核一遍,免得下次换机器又要重新猜。