本地MCP示例

一个演示Python客户端(LangChain/LangGraph)连接到本地模型上下文协议(MCP)服务器并使用Ollama LLM(qwen3:30b)的本地设置。

  • by claudobahn
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 claudobahn/langgraph-mcp-ollama-example

使用说明

本地MCP示例:LangGraph客户端+FastMCP服务器+Ollama

此存储库演示了一个最小的本地设置,其中Python客户端(LangChain/LangGraph)连接到本地模型上下文协议(MCP)服务器(使用 fastmcp)并使用Olama LLM(qwen3:30b).

  • MCP服务器提供了一个示例工具: add_numbers(num1, num2).
  • 客户端通过可流式传输的HTTP连接到MCP服务器,动态发现工具,并在以用户语言(默认为英语)响应的同时流式传输更新。
  • 所有组件都通过Docker Compose运行。Ollama数据(模型、密钥、历史)保存在 ./ollama_data.

先决条件

  • Docker(最新)和Docker Compose(v2)
  • 约20-30GB的可用磁盘空间可供下载和运行 qwen3:30b 本地(如果需要,您可以更改模型)

快速开始

  1. 克隆存储库
git clone https://github.com/claudobahn/langgraph-mcp-ollama-example
cd langgraph-mcp-ollama-example
  1. 启动服务(Ollama+MCP服务器)
docker compose up -d --build ollama mcp-server
  1. 将模型拉入Ollama容器内(仅限首次)
docker exec -it ollama ollama pull qwen3:30b
  • 您可以从主机上检查Ollama是否健康:
curl http://localhost:11434/api/tags

以交互方式运行客户端

选项A:交互式提示

docker compose run --rm client
# Then type your prompt at the terminal

选项B:非交互式提示(管道输入)

echo "Montre un exemple d'utilisation d'outil." | docker compose run -T --rm client

客户端连接到:

  • MCP服务器位于 http://mcp-server:13744/mcp
  • 奥拉马 http://ollama:11434

默认情况下,客户端使用 qwen3:30b 启用推理模式,并以用户语言(默认为英语)进行响应。

什么在跑

  • Ollama服务

    • 图片: ollama/ollama
    • 端口: 127.0.0.1:11434 在主机上暴露
    • 持久数据: ./ollama_data 安装到 /root/.ollama
  • MCP服务器(FastMCP)

    • 定义于 mcp-server/server.py
    • 跑 FastMCP("math") 并公开了一个工具:
      • add_numbers(num1: int, num2: int) -> int
    • 通过以下方式提供服务 transport="streamable-http" 在…上 0.0.0.0:13744
  • 客户端(LangGraph+MCP工具)

    • 定义于 client/client.py
    • 发现MCP工具 load_mcp_tools(session)
    • LLM ChatOllama (型号 qwen3:30b,温度0.8,推理模式)
    • 流更新使用 langgraph.prebuilt.create_react_agent

存储库结构

langgraph-mcp-ollama-example/
├─ client/
│  ├─ Dockerfile
│  ├─ client.py
│  └─ requirements.txt
├─ mcp-server/
│  ├─ Dockerfile
│  ├─ requirements.txt
│  └─ server.py
├─ docker-compose.yml
├─ README.md
└─ ollama_data/
   ├─ models/ ... (persisted by Ollama)
   └─ ...

常见任务

  • 重建并重新启动所有内容:
docker compose down
docker compose up -d --build
  • 更新/拉取其他模型(示例: llama3.1):
docker exec -it ollama ollama pull llama3.1

然后更新 model= 在……里面 client/client.py 如果你想把它设为默认值。

故障排除

  • 客户端无法连接到Ollama

    • 确保 ollama 容器健康: docker ps 和 curl http://localhost:11434/api/tags
    • 拉动所需的模型: docker exec -it ollama ollama pull qwen3:30b
  • 客户端无法连接到MCP服务器

    • 确保 mcp-server 正在运行: docker compose ps
    • 日志: docker compose logs -f mcp-server
  • 启动订购

    • 如果过早运行客户端时出现连接错误,请启动 ollama 和 mcp-server 首先,等待健康/准备就绪,然后运行客户端。

许可证

本项目按照“MIT无署名”许可证按原样提供,不作任何保证。

备注

  • 您可以在中自定义提示、系统消息语言和模型参数 client/client.py.