高级 14 分钟MCP

MCP 与本地 LLM:将 MCP 服务器连接至 Ollama

模型上下文协议(MCP)标准化了大语言模型调用外部工具的方式:文件读取、网络请求、数据库访问。结合 MCP 和 Ollama,可以运行一个能够在您的机器上执行操作的智能体,同时始终不向云端 API 发送您的数据。本指南将介绍如何使用 Python 构建 MCP-Ollama 桥接器、哪些本地模型真正支持工具调用,以及小型模型的实际能力边界。

作者: Mohamed Meguedmi·更新于 2026-08-27·已在 Windows、macOS 和 Linux 上测试

#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%本地推理。您将获得一个能够读取您文件并查询本地数据库的代理,且不会有任何数据离开您的网络。

i
MCP ≠ 函数调用
MCP 并不是一种新的大语言模型 API。它是一种位于工具使用之上的层:模型本身仍采用传统的函数调用方式,MCP 仅对工具的发现和服务器端的执行进行标准化。

#为何将MCP连接至Ollama

本地编程副驾驶套件

本指南带你上手模型。工具包则帮你用上能在你的编辑器中编写代码的编程助手。

  • 在线空间,终身可用
  • PDF + 文件
  • 终身更新

大多数 MCP 演示使用云端模型(Claude、GPT)。在本地结合 MCP 和 Ollama 使用,会在三个方面带来改变:隐私(您的文件和 SQL 查询不会离开本机)、成本(无论工具调用量有多大,都不会收取 token 费用)以及控制权(您可以选择模型、量化方式和获准使用的服务器)。

隐私
MCP 文件系统服务器使模型能够访问您的文件夹。本地运行时,该内容不会经过任何第三方。
零成本
智能体会增加与工具之间的往返交互次数。在云端,每一轮都会产生 token 费用;使用 Ollama 则是免费的。
离线
模型下载完成后,MCP 服务端安装完毕,系统可在不连接互联网的情况下运行(除网页服务外)
数据主权
您决定开放哪些工具,并可在执行每次调用前进行审计。
!
MCP 提供操作能力
文件系统服务器或 shell 可使模型写入文件或执行命令。始终限制访问范围(根目录、只读基础目录),并在执行敏感调用前进行验证。

#先决条件

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-*)启动。
终端 — 准备环境
# Vérifier Ollama
ollama --version
curl http://localhost:11434/api/tags

# Tirer un modèle capable de tool-use
ollama pull qwen3.5:9b

# Environnement Python
python -m venv .venv
source .venv/bin/activate
pip install mcp ollama

#哪些本地模型能正确处理工具调用

并非所有模型在函数调用方面都表现相当。如果一个模型“了解”工具格式,却选错参数,就会让智能体无法使用。实际应用中,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 的内存,但只要涉及多个工具,工具调用表现就会迅速下滑。不宜用于真正的智能体。
→
编码前先测试工具使用
在连接MCP之前,请先通过简单的/api/chat请求并使用一个虚构工具验证模型是否能正确调用工具。如果模型返回文本而非tool_call,请更换模型,而非调试桥接层。

#用 Python 实现 MCP-Ollama 桥接:分步讲解

Ollama 不是原生 MCP 客户端。桥接组件的作用是作为中间层:启动 MCP 服务端,将工具转换为 Ollama API 所需格式,执行工具调用循环,再将结果返回给模型。使用官方 MCP SDK(mcp 包)和 ollama 客户端。

  1. 01
    1. 启动 MCP 服务器
    通过 stdio 将 MCP 服务器作为子进程启动。这里使用的是官方 filesystem 服务器,其访问范围仅限于通过参数传入的工作目录。
  2. 02
    2. 列出并转换工具
    session.list_tools() 返回 MCP 工具列表。我们将其转换为 Ollama /api/chat 接口所需的「tools」格式(name、description、inputSchema → parameters)。
  3. 03
    3. 工具调用循环
    将用户消息和工具列表发送出去。如果模型返回tool_call,就在MCP端执行该调用,将结果重新注入,然后循环直到获得最终回复。
  4. 04
    4. 返回回答
    当模型不再请求工具时,其最后的文本回复即为最终呈现给用户的答案。
bridge.py — MCP + Ollama
import asyncio
import ollama
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

MODEL = "qwen3.5:9b"

# Serveur MCP filesystem limité au dossier ./workspace
server = StdioServerParameters(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-filesystem", "./workspace"],
)

def to_ollama_tools(mcp_tools):
    return [{
        "type": "function",
        "function": {
            "name": t.name,
            "description": t.description,
            "parameters": t.inputSchema,
        },
    } for t in mcp_tools]

async def run(prompt: str):
    async with stdio_client(server) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            tools = (await session.list_tools()).tools
            ollama_tools = to_ollama_tools(tools)
            messages = [{"role": "user", "content": prompt}]

            while True:
                resp = ollama.chat(
                    model=MODEL,
                    messages=messages,
                    tools=ollama_tools,
                )
                msg = resp["message"]
                messages.append(msg)

                if not msg.get("tool_calls"):
                    return msg["content"]

                for call in msg["tool_calls"]:
                    fn = call["function"]
                    result = await session.call_tool(
                        fn["name"], fn.get("arguments", {}),
                    )
                    text = "".join(c.text for c in result.content
                                    if getattr(c, "text", None))
                    messages.append({
                        "role": "tool",
                        "content": text,
                    })

if __name__ == "__main__":
    print(asyncio.run(run("Liste les fichiers du dossier et résume leur contenu.")))
i
循环的保护机制
在生产环境中,请添加轮次计数器(max_iterations),以防模型反复调用同一工具而陷入无限循环。对于大多数任务,十轮左右就绰绰有余。

#适用于自建的 MCP 服务器示例

MCP 的价值在于其现成可用的服务器目录。以下服务器能为本地智能体带来最大的价值,而且都可以通过 npx 或 pip 启动。

filesystem
在限定的根目录内读取和写入文件。对于处理您文档的智能体而言,这是最实用的工具。
sqlite / postgres
用自然语言查询本地数据库。请将连接设置为只读模式,以避免任何修改。
fetch
获取网页并将其转换为文本。这是唯一需要互联网连接的工具。
git
浏览仓库:查看日志、差异和状态。适合用于代码审查或代码文档编写的智能体。
memory
一种持久化键值存储,可让智能体在不同会话之间保留长期记忆。
多服务器配置(节选)
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"]
    },
    "sqlite": {
      "command": "uvx",
      "args": ["mcp-server-sqlite", "--db-path", "./data/app.db"]
    }
  }
}

#小模型的实际局限

桥接正常工作,并不意味着智能体就能表现出色。薄弱环节仍然是模型本身。对于最轻量的模型(2–4B),一旦任务变得复杂,就会反复出现几类问题。

选择了错误的工具
模型在应调用 list_directory 时却调用了 read_file,或者编造一个工具名称。这种情况在小于 7B 的模型中很常见。
参数格式错误
相对路径错误,参数中的 JSON 无效。良好的系统提示和清晰的工具描述可缓解此问题。
短链路
小模型在连续2到3次调用后表现不佳,容易丢失任务目标。
忽略结果
模型调用工具后,却在回答时没有考虑工具返回的内容。这是模型规模过小的典型症状。
→
2026 年合适的模型档位:Qwen 3.5 9B
要在本地运行可靠的 MCP 智能体,建议选择 Q4_K_M 量化的 Qwen 3.5 9B(约需 6.6 GB 显存,可在 RTX 3060 12 GB 或 4070 上运行)。对于参数量低于 4B 的模型,应将智能体限定在只使用一个工具、范围严格明确的任务中。

#故障排除

模型没有发起任何 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 显存。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。