几周前我搭完了一个基于LangGraph的自主研究Agent。它能同时搜索10个来源——Tavily、Wikipedia、arXiv、Semantic Scholar、GitHub、Hacker News、Stack Overflow、Reddit、YouTube,外加本地RAG库——然后把所有内容合成一份带引用的事实核查报告。
但用起来很别扭。每次得切到Streamlit标签页,粘贴主题,干等。这种流程摩擦积少成多,很快就成了负担。
今天解决了。这个Agent现在通过MCP原生集成进Claude Code。对话中途直接说"research X",Claude自动调用。
这套东西跑在我的WSL2 Ubuntu上。研究Agent用Ollama + qwen3:14b本地推理,零API成本。模型就在同一台机器,所以这里是纯CPU跑——我这台机器没GPU。完整研究一轮CPU要5-6分钟;换张RTX显卡能压到2分钟内。
家里还有别的:另一台机器跑着Jenkins控制器,Raspberry Pi 5上搭了Gitea,杂七杂八一堆。但本文这些都不重要。重要的是:全部本地运行,离线可用。
MCP是什么?Model Context Protocol,JSON-RPC 2.0标准,走stdio。你写个服务器实现initialize、tools/list、tools/call三个方法。Claude Code(还有Cursor、Continue这些MCP客户端)启动时拉起你的服务器,把它的工具当成一等公民。
不用HTTP服务器,不用端口,不用鉴权token。就stdin/stdout,大概300行标准库Python。
集成过程其实简单。Agent上个月就写了mcp_server.py,一直没接上去。两个bug卡着:
Bug 1——venv路径错了。原来写的是PROJECT_ROOT / ".venv" / "bin" / "python",实际用的是"venv"不是".venv"。
Bug 2——API key没传到子进程。Claude Code把MCP服务器当子进程启动,不显式加载.env的话,TAVILY_API_KEY、YOUTUBE_API_KEY这些全丢。
修复:from dotenv import load_dotenv; load_dotenv(PROJECT_ROOT / ".env", override=False)
然后~/.mcp.json配置:
{
"mcpServers": {
"research-agent": {
"command": "/home/roberto/repos/Research-Agent/venv/bin/python",
"args": ["/home/roberto/repos/Research-Agent/mcp_server.py"]
}
}
}
重启Claude Code,完事。
~/.mcp.json是用户级配置——这个服务器在每个项目里都可用,不限于当前工程。
实测跑了一把:"agentic AI frameworks LangGraph AutoGen CrewAI 2025"。结果有几个发现:
LangGraph + CrewAI的融合。找到一篇arXiv:2411.18241的论文,记录了真实集成方案:LangGraph负责图状态机,CrewAI负责任务智能分配和实时性能指标。这正是我一直在搭的架构模式——意外被验证了。
RAG的安全盲区。一个没人聊的问题:检索增强生成里的权限边界。我的Agent在本地RAG里搜到了一些内部文档片段,这些片段本来不该被某些查询触达。本地≠安全,检索策略的访问控制需要重新考虑。
CPU推理的隐性成本。qwen3:14b在CPU上跑研究任务,风扇狂转6分钟。电费没算过,但肯定比API调用贵。本地部署的"免费"是个幻觉,只是成本转移到了硬件和电表。
Claude Code的上下文窗口压力。研究Agent返回的报告很长,塞进Claude的上下文后,后续对话的可用token急剧缩水。需要把报告摘要和完整报告分开,或者让Agent直接输出结构化数据而非大段文字。
MCP的生态位。这个协议真正的价值不是技术多优雅,而是把"工具"的定义权从平台收回到了开发者手里。Claude、Cursor、Continue都能用同一套服务器,切换成本趋近于零。
下一步:把Jenkins和Gitea也接成MCP服务器,让Claude Code能直接操作CI流水线和代码仓库。如果Agent能自己触发构建、读取日志、提交修复,闭环就完整了。
但先解决眼前的问题——那个RAG权限漏洞。本地知识库的检索策略需要加一层过滤,不然下次研究"公司财务"可能会捞出不该看的文档。
热门跟贴