实战教程来了!从零开始打造MCP+Ollama集成

模型上下文协议MCP与Ollama的整合实现指南

在过去一两个个月里,模型上下文协议(Model Context Protocol,MCP)频繁出现在各种技术微信交流群中。我们已经看到了许多很酷的集成案例,大家似乎相信这个标准会长期存在,因为它为大模型与工具或软件的集成设立了规范。

前面一篇文章给大家分享了MCP一些基础概念,但是读完之后还是模棱两可,所以决定尝试将Ollama中的小型语言模型与MCP服务器连接起来,体验一下这个新标准。今天,向大家展示如何实现Ollama与MCP服务器的集成。

实现步骤

整个集成的主要步骤包括:

  1. 创建测试以及使用MCP服务
  2. 创建客户端文件来发送请求并启动服务
  3. 从服务获取工具到客户端
  4. 将工具转换为pydantic模型
  5. 通过response format将工具(作为pydantic模型)传递给Ollama
  6. 通过Ollama发送对话并接收结构化输出
  7. 如果响应中包含工具,则向服务器发送请求

安装依赖

要运行这个项目,需要安装必要的包。fastmcp库在使用uv运行代码时效果最佳。uv很容易下载和使用,类似于Poetry和pip。

使用以下命令将所需库添加到你的项目中:

代码语言:javascript代码运行次数:0运行复制
uv add fastmcp ollama

这会同时安装MCP服务器和Ollama聊天库,以便你在它们的基础上构建客户端和服务器逻辑。

文件结构

设置时,你的文件夹应该是这样的:

代码语言:javascript代码运行次数:0运行复制
your folder
├── server.py
└── client.py

server.py文件包含MCP服务器和想要暴露的工具。client.py文件在后台进程中启动服务器,获取可用工具,并与Ollama连接。

示例MCP服务器

首先,让我们使用fastmcp库创建一个简单的MCP服务器。该服务器暴露了一个名为magicoutput的工具。这个函数接受两个字符串输入并返回一个固定的字符串作为输出。

@mcp.tool()装饰器用于将函数注册为MCP服务器中的可用工具。当服务器启动后,任何客户端都可以获取并调用这个工具。

通过在主块中调用mcp.run()来启动服务器。

代码语言:javascript代码运行次数:0运行复制
# server.py
from fastmcp import FastMCP
# 创建MCP服务器
mcp = FastMCP("TestServer")
# 我的工具:
@mcp.tool()
def magicoutput(obj1: str, obj2: str) -> int:
    """使用此函数获取魔法输出"""
    print(f"输入参数:obj1:{
     obj1},obj2:{
     obj2}")
    return f"输入参数:obj1:{
     obj1},obj2:{
     obj2},魔法输出:Hello MCP,MCP Hello"
if __name__ == "__main__":
    mcp.run()

我们运行下面命令,进行调试服务端的工具:

代码语言:javascript代码运行次数:0运行复制
fastmcp dev server.py

输入日志如下:

代码语言:javascript代码运行次数:0运行复制
Need to install the following packages:
@modelcontextprotocol/inspector@0.10.2
Ok to proceed? (y) y

Starting MCP inspector...
⚙️ Proxy server listening on port 6277