MCP 与本地 LLM:将 MCP 服务器连接至 Ollama
模型上下文协议(MCP)标准化了大语言模型调用外部工具的方式:文件读取、网络请求、数据库访问。结合 MCP 和 Ollama,可以运行一个能够在您的机器上执行操作的智能体,同时始终不向云端 API 发送您的数据。本指南将介绍如何使用 Python 构建 MCP-Ollama 桥接器、哪些本地模型真正支持工具调用,以及小型模型的实际能力边界。
#MCP 是什么,为什么它会改变本地智能体的运行方式
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底发布的开放协议。其目标是为语言模型与它可以使用的工具提供统一接口。无需为每个数据源重新编写自定义集成,“MCP 服务器”会按标准格式提供工具(tools)、资源(resources)和提示(prompts)。任何兼容客户端——Claude Desktop、IDE 或您自己的桥接程序——都可以连接到它。
具体来说,一个“filesystem” MCP 服务器会提供 read_file、write_file 或 list_directory 等工具;一个“sqlite”服务器则会提供 query 或 list_tables。LLM 从不直接访问磁盘:它发出工具调用请求,客户端通过 MCP 服务器执行调用,再将结果返回给模型。正是这种客户端与服务器的分离,使协议能够被复用。
对于本地代理而言,面临双重挑战:一方面要复用不断增长的MCP服务器生态系统(目前已存在数十个),另一方面要通过 Ollama 实现100%本地推理。您将获得一个能够读取您文件并查询本地数据库的代理,且不会有任何数据离开您的网络。
#为何将MCP连接至Ollama
大多数 MCP 演示使用云端模型(Claude、GPT)。在本地结合 MCP 和 Ollama 使用,会在三个方面带来改变:隐私(您的文件和 SQL 查询不会离开本机)、成本(无论工具调用量有多大,都不会收取 token 费用)以及控制权(您可以选择模型、量化方式和获准使用的服务器)。
- 隐私
- MCP 文件系统服务器使模型能够访问您的文件夹。本地运行时,该内容不会经过任何第三方。
- 零成本
- 智能体会增加与工具之间的往返交互次数。在云端,每一轮都会产生 token 费用;使用 Ollama 则是免费的。
- 离线
- 模型下载完成后,MCP 服务端安装完毕,系统可在不连接互联网的情况下运行(除网页服务外)
- 数据主权
- 您决定开放哪些工具,并可在执行每次调用前进行审计。
#先决条件
- Ollama 已安装
- 守护进程默认监听 http://localhost:11434。请用「ollama --version」验证。
- 一个支持工具调用的模型
- 至少应选用 Granite 4.2 8B,若希望可靠性更好,理想选择是 Qwen 3.5 9B(参见下一节)。
- Python 3.10+
- 官方MCP SDK及Ollama客户端均基于Python开发。
- Node.js(可选)
- 许多 MCP 参考服务器都通过 npx(@modelcontextprotocol/server-*)启动。
#哪些本地模型能正确处理工具调用
并非所有模型在函数调用方面都表现相当。如果一个模型“了解”工具格式,却选错参数,就会让智能体无法使用。实际应用中,2026 年这一代模型(Qwen 3.5、Granite 4.2)从 8-9B 起就能可靠地调用工具,而在 2024 年还需要选择 14B 模型。以下列出可用 Ollama 测试的参考模型,以及它们在 Q4_K_M 量化下的显存占用。
- Qwen 3.5 4B / 9B
- 出色的工具使用支持。9B模型(约6.6 GB VRAM,Q4量化,256k上下文,视觉能力)是本地智能体在可靠性与硬件资源之间最佳的平衡方案。
- Granite 4.2 8B
- 原生工具使用能力强大且令牌消耗极低(约 5.3 GB,Q4 量化,128k 上下文)。在 6-8 GB VRAM 下是极佳的入门选择。
- Mistral Small 24B
- 函数调用能力可靠,法语表现良好(Q4 量化下约 14 GB)。也能较好地处理稍复杂的工具模式(schema)。
- Qwen 3.6 35B-A3B
- 这款 MoE 模型在连续调用中非常可靠(Q4 量化下约占 23 GB,仅有 3B 活跃参数,因此速度快)。仅适用于 RTX 4090 这类配备 24 GB 显存的 GPU。
- 2-3B 模型
- Qwen 3.5 2B 或 Granite 4.2 3B 可以装入约 2 GB 的内存,但只要涉及多个工具,工具调用表现就会迅速下滑。不宜用于真正的智能体。
#用 Python 实现 MCP-Ollama 桥接:分步讲解
Ollama 不是原生 MCP 客户端。桥接组件的作用是作为中间层:启动 MCP 服务端,将工具转换为 Ollama API 所需格式,执行工具调用循环,再将结果返回给模型。使用官方 MCP SDK(mcp 包)和 ollama 客户端。
- 011. 启动 MCP 服务器通过 stdio 将 MCP 服务器作为子进程启动。这里使用的是官方 filesystem 服务器,其访问范围仅限于通过参数传入的工作目录。
- 022. 列出并转换工具session.list_tools() 返回 MCP 工具列表。我们将其转换为 Ollama /api/chat 接口所需的「tools」格式(name、description、inputSchema → parameters)。
- 033. 工具调用循环将用户消息和工具列表发送出去。如果模型返回tool_call,就在MCP端执行该调用,将结果重新注入,然后循环直到获得最终回复。
- 044. 返回回答当模型不再请求工具时,其最后的文本回复即为最终呈现给用户的答案。
#适用于自建的 MCP 服务器示例
MCP 的价值在于其现成可用的服务器目录。以下服务器能为本地智能体带来最大的价值,而且都可以通过 npx 或 pip 启动。
- filesystem
- 在限定的根目录内读取和写入文件。对于处理您文档的智能体而言,这是最实用的工具。
- sqlite / postgres
- 用自然语言查询本地数据库。请将连接设置为只读模式,以避免任何修改。
- fetch
- 获取网页并将其转换为文本。这是唯一需要互联网连接的工具。
- git
- 浏览仓库:查看日志、差异和状态。适合用于代码审查或代码文档编写的智能体。
- memory
- 一种持久化键值存储,可让智能体在不同会话之间保留长期记忆。
#小模型的实际局限
桥接正常工作,并不意味着智能体就能表现出色。薄弱环节仍然是模型本身。对于最轻量的模型(2–4B),一旦任务变得复杂,就会反复出现几类问题。
- 选择了错误的工具
- 模型在应调用 list_directory 时却调用了 read_file,或者编造一个工具名称。这种情况在小于 7B 的模型中很常见。
- 参数格式错误
- 相对路径错误,参数中的 JSON 无效。良好的系统提示和清晰的工具描述可缓解此问题。
- 短链路
- 小模型在连续2到3次调用后表现不佳,容易丢失任务目标。
- 忽略结果
- 模型调用工具后,却在回答时没有考虑工具返回的内容。这是模型规模过小的典型症状。
#故障排除
- 模型没有发起任何 tool_call
- 请确认其支持工具调用(Qwen 3.5,Granite 4.2),且参数「tools」已正确传递至/api/chat。不兼容的模型将忽略工具。
- 在 11434 端口出现 "connection refused" 错误
- 守护进程 Ollama 未启动。请启动它(运行「ollama serve」),然后重新执行「curl http://localhost:11434/api/tags」。
- MCP 服务器无法启动
- 在终端中单独运行npx / uvx命令。若缺少Node服务器,可通过执行「npm i -g」安装相关包来修复。
- 工具调用无限循环
- 在循环中设置迭代次数上限,并记录每次 tool_call,以找出反复执行同一调用的模型。
#深入了解
MCP 依托本地生态系统的基础组件。本站以下相关指南可作为本指南的补充:
- 使用 LangChain 和 Ollama 创建本地 AI 智能体
- 通过 LangChain 实现的传统智能体方案,与 MCP 互为补充,用于编排工具。
- 用 Python 通过 REST API 集成 Ollama
- 了解桥接所依赖的 OpenAI 兼容端点和函数调用机制。
- 选择量化方案(Q4、Q5、Q8、FP16)
- 在不牺牲可靠性的前提下,让支持工具调用的 Qwen 3.5 9B 装入您的 GPU 显存。
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。