ollama-mcp-bridge
Ollama本地LLM的MCP工具桥接器,让本地模型也能调用文件系统/搜索/GitHub等工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Ollama本地LLM的MCP工具桥接器,让本地模型也能调用文件系统/搜索/GitHub等工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你刚在本地跑通了一个 Llama 3(Qwen 2.5)模型,想让它像 Claude 那样帮你搜索网页、操作文件系统、管理 GitHub Issue——却发现这些工具能力通通不可用。Anthropic 的 Claude 可以调用工具,而你的本地模型只能「对话」。这背后的原因是:Claude 使用的 Model Context Protocol(MCP) 是一套封闭的标准协议,而 Ollama 作为本地 LLM 运行时,根本不知道如何接入这套协议。
MCP-LLM Bridge 正是来解决这个问题的:它作为一座「桥」,把 Ollama 的 API 输出格式翻译成 MCP 的 JSON-RPC 指令,让本地模型也能使用完整的 MCP 工具生态。
Model Context Protocol(MCP) 是 Anthropic 于 2024 年 11 月提出的开放协议,旨在标准化 AI 助手与外部工具的交互方式。Claude Desktop 通过 MCP 可以调用数十种工具服务器(filesystem、brave-search、github、memory 等),但这些能力此前仅限于 Anthropic 的商业模型。
patruff/ollama-mcp-bridge 的出现打破了这一限制。该项目由独立开发者 patruff 创建(GitHub 975★,112 forks),用 TypeScript 实现了一个完整的桥接层,允许任何兼容 Ollama API 的本地模型使用 MCP 工具。项目使用 MIT 许可证,默认推荐模型为 qwen2.5-coder:7b-instruct(作者自己的配置则为 deepseek-v2:16b)。
MCP-LLM Bridge 的架构设计非常清晰,可以分为三个核心层:
这是整个系统的地基。MCPClient 类负责通过 stdio(标准输入/输出) 与 MCP Server 进程通信。通信协议基于 JSON-RPC 2.0,与 MCP 服务器建立连接时需要经历:
child_process.spawn 启动 MCP Server 可执行文件(如 @modelcontextprotocol/server-filesystem)initialize 请求,获取 Server 的 capabilities 和 version 信息tools/list 请求,获取该 MCP Server 支持的所有工具列表tools/call,发送给 MCP Server 执行源码中 MCPClient 维护了一个消息队列(messageQueue)来确保请求/响应的顺序对应,使用递增的 messageId 关联每一次调用。
DynamicToolRegistry 是桥接逻辑的核心。它动态注册来自多个 MCP Server 的所有工具,并为每个工具生成:
generate_image → ['generate_image', 'generate image']prompt 字段自动填 "description of what you want",path 字段填 "filename.txt"LLMClient 负责与 Ollama API 通信。关键设计点包括:
this.config.baseUrl.replace("localhost", "127.0.0.1")——这是因为某些 Ollama 配置对 localhost 的解析有问题,统一替换为 127.0.0.1openai SDK 的 function calling 格式接收 LLM 输出,解析 ToolCall 结构(包含 id、function.name、function.arguments)REQUEST_TIMEOUT = 300000ms,防止长时间无响应ollama-manager.ts),自动重启崩溃的 Ollama 实例MCPLLMBridge 是顶层的编排类,协调 MCP 客户端和 LLM 客户端的交互:初始化时连接所有配置的 MCP Server(支持多 MCP 并行),构建 toolToMcp 映射表,根据工具名路由到对应的 MCP Client,维护完整的对话历史(messages 数组),并通过 processMessage() 方法实现:接收用户文本 → 发给 LLM → 解析工具调用 → 路由到对应 MCP → 执行 → 将结果塞回上下文 → 再次调用 LLM 生成回复。
项目开箱支持以下 MCP Server(通过 bridge_config.json.template 配置):
| MCP Server | 用途 | 依赖 |
|---|---|---|
@modelcontextprotocol/server-filesystem | 读写本地文件系统 | Node.js |
@modelcontextprotocol/server-brave-search | 网页搜索 | BRAVE_API_KEY |
@modelcontextprotocol/server-github | GitHub 操作(Issue/PR/Repo) | GITHUB_PERSONAL_ACCESS_TOKEN |
@modelcontextprotocol/server-memory | 持久化记忆存储 | 无 |
@patruff/server-flux | Flux 图片生成 | REPLICATE_API_TOKEN |
@patruff/server-gmail-drive | Gmail 邮件 + Google Drive | OAuth 认证 |
工具路由采用关键词匹配:用户输入中包含邮箱地址时自动路由到 Gmail MCP,包含文件/文件夹关键词时路由到 Filesystem MCP。
前置条件:Node.js >= 18 + npm、Ollama 已安装并运行(ollama serve)、至少 pull 一个模型(ollama pull qwen2.5-coder:7b-instruct)、所需 API Key(Brave/GitHub/Replicate)。
安装 MCP Server:
npm install -g @modelcontextprotocol/server-filesystem
npm install -g @modelcontextprotocol/server-brave-search
npm install -g @modelcontextprotocol/server-github
npm install -g @modelcontextprotocol/server-memory
配置与启动:
git clone https://github.com/patruff/ollama-mcp-bridge
cd ollama-mcp-bridge && npm install
cp bridge_config.json.template bridge_config.json
# 编辑 bridge_config.json 填入各 MCP Server 路径和 API Key
npm run start
主要挑战在于多组件协调:Ollama(LLM 服务)+ 多个 MCP Server(子进程)+ Bridge 主程序,三者需要同时运行且网络互通。本地调试时任何一个环节出错都会导致整个链路中断。项目提供了 restart-ollama.ps1 脚本(PowerShell)帮助重启 Ollama,但 Linux/macOS 用户需要手动管理。
第二个难点是 API Key 配置:Brave Search、Github Token、Replicate Token 需要手动获取并写入 .env 文件和 bridge_config.json,对新手不友好。
1. 纯 CLI 无 Web UI:所有交互在终端内完成,对非技术用户有较高门槛。与 Claude Desktop 的图形化体验相比差距明显。
2. 模型能力依赖:本地模型(如 qwen2.5-coder:7b)的指令遵循能力远不如 Claude 3.5 Sonnet,工具调用的格式正确率、关键词检测准确率都无法保证。项目在 README 中明确提到使用 Qwen 2.5 Coder 系列(擅长代码),而非通用对话模型。
3. 无并发工具调用:当前版本只支持顺序执行工具调用,无法实现 Claude 的 parallel tool use(多工具同时调用),限制了复杂任务的效率。
4. 无 Docker 支持:无法通过容器化一键部署,所有依赖需要手动安装,跨平台部署困难。
5. JSON-RPC 错误处理不完善:MCP Server 子进程崩溃时,Bridge 的错误恢复机制有限,可能导致整个 Bridge 挂掉。
MCP-LLM Bridge 处于 AI 发展两条主线的交汇点:本地化部署(Privacy-first、AI sovereignty)和工具协议标准化(MCP 作为开放标准)。随着 Llama 3、Mistral、Qwen 等开源模型的能力不断提升,「本地模型 + MCP 工具」的组合正在从极客玩具走向实用工具。
975 GitHub Stars 说明社区对此类工具有真实需求。该项目的 Star 增长速度与 MCP 协议的社区热度高度相关——随着 2024 年底 MCP 正式开放,越来越多的开发者开始探索将 MCP 能力迁移到本地模型的方案。
根据 README 列出的计划:并发工具调用(支持多工具同时执行)、流式响应(Streaming mode,减少等待时间)、对话记忆(Conversation memory 模块)、更丰富的 MCP 支持(持续接入新的 MCP Server)。
项目选择 TypeScript 而非 Python 作为主要开发语言,是一个有意识的设计决定:Node.js 的 child_process.spawn API 天然适合管理 MCP Server 这种需要 stdio 通信的子进程场景,比起 Python 的 subprocess.Popen 更加简洁。此外,MCP 官方提供的 Server 实现(@modelcontextprotocol/server-*)本身就是 npm 包,TypeScript/Node.js 是最自然的集成语言。
从代码质量看,TypeScript 的静态类型检查覆盖了核心数据结构(BridgeConfig、LLMConfig、ServerParameters、Tool 等),结合 Jest 单元测试,整体质量较高。源码总规模约 45KB(8 个核心 TS 文件),模块边界清晰,每个文件职责单一。