开源工具将 Claude Code 作为 MCP 服务器,让 Pro 订阅用户在本地运行 Claude 模型,规避高额 API 调用费用。
注意:Claude Code 现在已经包含在 Anthropic 每月 20 美元的订阅中,因此我认为 codemcp 已经彻底过时。不过,它仍然包含一些不错的设计理念,尤其是围绕 Git 版本管理方案的设计。最终,我希望能把这些理念移植到新一代 Agent 编程 CLI 中。
安装 codemcp,让 Claude Desktop 成为你的结对编程助手。有了它,你可以直接让 Claude 在电脑上的代码库中实现功能、修复 bug 和进行重构;Claude 会直接编辑文件并运行测试。再也不用把代码复制进 Claude 的聊天窗口,再从中复制出来了!
codemcp 提供了与其他 AI 编程软件(Claude Code、Cursor、Cline、Aider)类似的功能,但它在整个设计空间中占据了一个独特的位置:
它面向 Anthropic 每月 20 美元的 Claude Pro 订阅。我喜欢通过订阅套餐为使用量付费,因为这意味着 Agent 每次执行操作的边际成本都是零;再也不用因为花了五美元却得到一组无法工作的变更而懊恼了。请注意,如果你订阅了 Claude Max(每月 100 美元),Claude Code 同样可以采用订阅制计费。在这种情况下,codemcp 的价值主张就没那么明确了(而且它在某些方面确实不如 Claude Code),但如果你更喜欢 codemcp 的其他 UI 设计,仍然可以将它与 Claude Max 配合使用。(另外,它是开源的,所以如果你不喜欢某些地方,可以自行修改;Claude Code 可做不到这一点!)
它面向 Anthropic 每月 20 美元的 Claude Pro 订阅。我喜欢通过订阅套餐为使用量付费,因为这意味着 Agent 每次执行操作的边际成本都是零;再也不用因为花了五美元却得到一组无法工作的变更而懊恼了。
请注意,如果你订阅了 Claude Max(每月 100 美元),Claude Code 同样可以采用订阅制计费。在这种情况下,codemcp 的价值主张就没那么明确了(而且它在某些方面确实不如 Claude Code),但如果你更喜欢 codemcp 的其他 UI 设计,仍然可以将它与 Claude Max 配合使用。(另外,它是开源的,所以如果你不喜欢某些地方,可以自行修改;Claude Code 可做不到这一点!)
它围绕默认自动接受(auto-accept)的模式构建。我希望 Agent 无须我监督,也能尽可能把工作向前推进,这样我就可以在最后一次性审查所有内容。codemcp 与大多数编程 Agent 有两个关键区别:我们禁止不受限制地使用 shell,要求你预先在 codemcp.toml 中声明 Agent 可以使用的命令;同时,我们会使用 Git 对 LLM 的所有编辑进行版本管理,因此你可以细粒度地回滚 Agent 的变更,也不用担心忘记提交修改。
它围绕默认自动接受(auto-accept)的模式构建。我希望 Agent 无须我监督,也能尽可能把工作向前推进,这样我就可以在最后一次性审查所有内容。codemcp 与大多数编程 Agent 有两个关键区别:我们禁止不受限制地使用 shell,要求你预先在 codemcp.toml 中声明 Agent 可以使用的命令;同时,我们会使用 Git 对 LLM 的所有编辑进行版本管理,因此你可以细粒度地回滚 Agent 的变更,也不用担心忘记提交修改。
它不依赖特定 IDE:你让 Claude 进行修改,它完成修改,然后你可以使用自己最喜欢的 IDE 配置审查这些变更,并继续编辑。我日常使用的编辑器是 vim,那些要求必须使用 VSCode 或某款特定编辑器的编程环境会让我失去兴趣。
它不依赖特定 IDE:你让 Claude 进行修改,它完成修改,然后你可以使用自己最喜欢的 IDE 配置审查这些变更,并继续编辑。我日常使用的编辑器是 vim,那些要求必须使用 VSCode 或某款特定编辑器的编程环境会让我失去兴趣。
为了提高 codemcp 的 token 效率,我正在 master 分支上把 codemcp 改回一个包含多个 tool 的工具,而不再采用单一 tool 的形式——此前,当你执行 InitProject 时,单一 tool 的全部指令都会一股脑塞进聊天上下文。这意味着你必须手动批准 tool 的使用。由于对 tool 使用的批准可以跨多个聊天持续生效,我认为这是一个合理的权衡;但如果你实在不喜欢这种方式,可以向 refined-claude 浏览器扩展提交 bug,请求其支持自动批准 tool 的使用。
我推荐按照下面这种具体方式安装和使用 codemcp:
安装 uv 和 git(如果尚未安装)。
安装 uv 和 git(如果尚未安装)。
在浏览器中安装 claude-mcp。这样,你就能直接从网站连接 SSE MCP server,无须使用 Claude Desktop,也可以轻松地并行打开多个聊天窗口。我们预计,随着 Integrations 的推出,这个扩展很快就会被淘汰。不过,在本文写作时,Integrations 尚未向 Claude Pro 订阅用户开放。
在浏览器中安装 claude-mcp。这样,你就能直接从网站连接 SSE MCP server,无须使用 Claude Desktop,也可以轻松地并行打开多个聊天窗口。我们预计,随着 Integrations 的推出,这个扩展很快就会被淘汰。不过,在本文写作时,Integrations 尚未向 Claude Pro 订阅用户开放。
使用 uvx --from git+https://github.com/ezyang/codemcp@prod codemcp serve 运行 codemcp。如果需要监听非标准端口,可以添加 --port 1234。小技巧:如果你喜欢冒险,可以把 prod 改成 main。如果想固定到某个特定版本,可以将其替换为 0.3.0 或类似的版本号。小技巧:你可以远程运行 codemcp!如果你使用 Tailscale,并且信任 Tailnet 中的所有设备,就可以通过传入 --host 100.101.102.103 安全地实现这一点(请将该 IP 替换为你的节点在 Tailscale 中的 IP 地址。这个 IP 通常位于 100.64.0.0/10 网段)。警告:任何能够访问这个 MCP 的人,都可以在你的电脑上执行任意代码,你几乎绝对不会想把它绑定到 0.0.0.0。
使用 uvx --from git+https://github.com/ezyang/codemcp@prod codemcp serve 运行 codemcp。如果需要监听非标准端口,可以添加 --port 1234。
小技巧:如果你喜欢冒险,可以把 prod 改成 main。如果想固定到某个特定版本,可以将其替换为 0.3.0 或类似的版本号。
小技巧:你可以远程运行 codemcp!如果你使用 Tailscale,并且信任 Tailnet 中的所有设备,就可以通过传入 --host 100.101.102.103 安全地实现这一点(请将该 IP 替换为你的节点在 Tailscale 中的 IP 地址。这个 IP 通常位于 100.64.0.0/10 网段)。警告:任何能够访问这个 MCP 的人,都可以在你的电脑上执行任意代码,你几乎绝对不会想把它绑定到 0.0.0.0。
使用 URL http://127.0.0.1:8000/sse 配置 claude-mcp(如有需要,请替换端口)。
使用 URL http://127.0.0.1:8000/sse 配置 claude-mcp(如有需要,请替换端口)。
遗憾的是,Web UI 对锤子图标的显示并不稳定。不过,你可以在 Console 中查找 "[MCP codemcp] SSE connection opened",以确认 MCP server 是否正常工作;也可以直接询问 Claude 当前有哪些可用的 tool(它应该会说 codemcp 提供的 tool 已经可用)。
遗憾的是,Web UI 对锤子图标的显示并不稳定。不过,你可以在 Console 中查找 "[MCP codemcp] SSE connection opened",以确认 MCP server 是否正常工作;也可以直接询问 Claude 当前有哪些可用的 tool(它应该会说 codemcp 提供的 tool 已经可用)。
如果你更喜欢使用 Claude Desktop,或者有一些特殊需求,请查看 INSTALL.md,其中提供了适用于多种非标准场景的安装说明。
首先,你必须在想要使用的 Git repository checkout 中创建一个 codemcp.toml 文件。如果你希望 Agent 能够执行 formatter 或运行测试之类的操作,请在 commands 部分添加相应的执行命令(注意:这些命令需要正确配置其所需的虚拟环境):
format = ["./run_format.sh"]
test = ["./run_test.sh"]
format 命令比较特殊;每次编辑文件后,它都会自动运行。
接下来,我们建议你在 Claude Desktop 中创建一个 Project,并将以下内容放入 Project Instructions:
Initialize codemcp with $PROJECT_DIR
其中,$PROJECT_DIR 是你想要处理的项目路径。
然后,在聊天中告诉 Claude 你想对项目进行哪些修改。codemcp 每次修改代码时,都会生成一个 commit。
要查看使用此工具的示例对话记录,可以参考:
实现一项新功能
codemcp 会为每次聊天生成一个 commit,并在处理功能的过程中不断 amend 这个 commit。
当你遇到 rate limit 时,可以利用这段时间去做些别的事情(审查 Claude 的代码、审查其他人的代码、制订计划、参加会议)。
当你遇到 rate limit 时,可以利用这段时间去做些别的事情(审查 Claude 的代码、审查其他人的代码、制订计划、参加会议)。
这并不是一个自主 Agent。至少在每次聊天结束后,你都必须介入,审查变更并提出下一项修改要求。虽然你可以在一次聊天中列出一长串要完成的任务,但很可能会触及 Claude Desktop 的输出限制,最终仍然需要手动让 Agent “continue”。接受这一点,并利用这些中断确认 Claude 正在做正确的事情。
这并不是一个自主 Agent。至少在每次聊天结束后,你都必须介入,审查变更并提出下一项修改要求。虽然你可以在一次聊天中列出一长串要完成的任务,但很可能会触及 Claude Desktop 的输出限制,最终仍然需要手动让 Agent “continue”。接受这一点,并利用这些中断确认 Claude 正在做正确的事情。
当 Claude 偏离正轨时,消耗的是你的时间,而不是你的金钱。请据此调整使用方式:如果时间才是瓶颈,就要仔细观察 Claude 逐步生成的输出。
当 Claude 偏离正轨时,消耗的是你的时间,而不是你的金钱。请据此调整使用方式:如果时间才是瓶颈,就要仔细观察 Claude 逐步生成的输出。
以下是 codemcp.toml 支持的全部配置选项:
project_prompt = """
Before beginning work on this feature, write a short haiku. Do this only once.
"""
[commands]
format = ["./run_format.sh"]
test = ["./run_test.sh"]
在聊天中初始化项目时,系统会加载 project_prompt。
commands 部分允许你为特定 tool 配置命令。这些名称会提供给 LLM,由它决定何时运行对应命令。你可以在 project_prompt 中添加 tool 的使用说明;我们还支持一种更详细的语法,让你能够针对每个 tool 分别提供具体说明:
[commands.test]
command = ["./run_test.sh"]
doc = "Accepts a pytest-style test selector as an argument to run a specific test."
要通过 inspector 运行 server,请使用:
PYTHONPATH=. mcp dev codemcp/__main__.py
日志会写入 ~/.codemcp/codemcp.log。可以在全局配置文件 ~/.codemcprc 中设置日志级别:
[logger]
verbosity = "INFO" # Can be DEBUG, INFO, WARNING, ERROR, or CRITICAL
日志配置不能针对单个项目分别设置,不过这应该不是什么大问题,因为本来就很难使用 Claude Desktop 并行处理多个项目。