模型上下文协议服务器

一个基于Ollama的模型上下文协议服务器,支持STDIO和HTTP两种传输方式,提供会话管理和工具验证功能。

  • by batus-dev
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 batus-dev/mcp-ollama

使用说明

Ollama MCP服务器

健壮的模型上下文协议(MCP)服务器暴露了Ollama支持的web工具。服务器是用TypeScript实现的,并为Node.js运行时打包。

特性

  • 双重运输支持:
    • 工作室 用于本地集成(Claude Desktop等)
    • 可流式传输的HTTP 用于具有完整SSE支持的远程/web部署
  • 会话管理 具有用于HTTP传输的有状态连接
  • 承载令牌身份验证 用于HTTP传输(可配置)
  • 经过验证的工具输入 使用 zod 在联系Ollama之前保证合同
  • 集中式HTTP客户端 Axios支持超时和一致的错误转换
  • 检查员集成 通过 @modelcontextprotocol/inspector 用于交互式调试

需求

  • Node.js 20+
  • npm 9+
  • 有效的 OLLAMA_API_KEY

安装

npm install

配置

环境变量

变量 必填 默认 描述
OLLAMA_API_KEY ✅ — Ollama web API的承载令牌
PORT ❌ 3000 HTTP服务器端口(仅限HTTP模式)
HOST ❌ 127.0.0.1 HTTP服务器绑定地址
MCP_AUTH_ENABLED ❌ true 启用/禁用承载令牌身份验证
MCP_AUTH_TOKEN ❌ dev-token-change-me HTTP身份验证的秘密令牌

开始前导出变量:

export OLLAMA_API_KEY="your-ollama-token"
export MCP_AUTH_TOKEN="your-secret-token"  # For HTTP mode

可用脚本

脚本 描述
npm run build 将TypeScript源代码编译为 dist/
npm start 启动STDIO服务器(别名 start:stdio)
npm run start:stdio 使用STDIO传输启动MCP服务器
npm run start:http 使用流式HTTP传输启动MCP服务器
npm run inspector 使用STDIO服务器启动MCP检查器
npm run inspector:http 启动MCP检查器(手动连接到HTTP)
npm run dev 构建+运行检查器(STDIO)
npm run dev:http 构建+启动HTTP服务器

用法

STDIO模式(本地集成)

最适合Claude Desktop、本地CLI工具或衍生子流程。

npm run build
npm start

Claude桌面配置

添加到您的Claude桌面配置(claude_desktop_config.json):

{
  "mcpServers": {
    "ollama-web-tools": {
      "command": "node",
      "args": ["/path/to/ollama-mcp-server/dist/index.js"],
      "env": {
        "OLLAMA_API_KEY": "your-ollama-token"
      }
    }
  }
}

HTTP模式(远程/web部署)

最适合远程服务器、web集成或多客户端场景。

npm run build
npm run start:http

服务器启动时间 http://127.0.0.1:3000/mcp 默认情况下。

HTTP端点

方法 端点 描述
POST /mcp JSON-RPC请求(初始化、工具调用等)
GET /mcp 服务器到客户端通知的SSE流
DELETE /mcp 终止会话

认证

默认情况下,HTTP模式需要承载令牌身份验证:

# With auth (default)
curl -X POST http://localhost:3000/mcp \
  -H "Authorization: Bearer your-secret-token" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"test","version":"1.0.0"},"capabilities":{}},"id":1}'

# Disable auth for development
MCP_AUTH_ENABLED=false npm run start:http

会话流

  1. 初始化 (POST无 mcp-session-id):

    curl -X POST http://localhost:3000/mcp \
      -H "Authorization: Bearer $MCP_AUTH_TOKEN" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json, text/event-stream" \
      -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"test","version":"1.0.0"},"capabilities":{}},"id":1}'
    

    响应包括 mcp-session-id 头球

  2. 后续请求 (POST与 mcp-session-id):

    curl -X POST http://localhost:3000/mcp \
      -H "Authorization: Bearer $MCP_AUTH_TOKEN" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json, text/event-stream" \
      -H "mcp-session-id: YOUR_SESSION_ID" \
      -d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}'
    
  3. SSE流 (使用 mcp-session-id):

    curl -N http://localhost:3000/mcp \
      -H "Authorization: Bearer $MCP_AUTH_TOKEN" \
      -H "Accept: text/event-stream" \
      -H "mcp-session-id: YOUR_SESSION_ID"
    
  4. 终止会话 (删除):

    curl -X DELETE http://localhost:3000/mcp \
      -H "Authorization: Bearer $MCP_AUTH_TOKEN" \
      -H "mcp-session-id: YOUR_SESSION_ID"
    

MCP检验员测试

STDIO模式

npm run build
npm run inspector

HTTP模式

# Terminal 1: Start server (disable auth for easier testing)
MCP_AUTH_ENABLED=false npm run start:http

# Terminal 2: Open inspector
npm run inspector:http

在检查器UI中:

  1. 选择 “流式HTTP” 作为运输类型
  2. 输入URL: http://localhost:3000/mcp
  3. 点击 连接

工具参考

web_search

通过Ollama API进行网络搜索。

参数 类型 必填 说明
query string ✅ 搜索查询
max_results 整数 ❌ 结果限制(1-20)

输出:Ollama的JSON字符串化搜索结果。

web_fetch

通过Ollama API获取URL的内容。

参数 类型 必填 说明
url 字符串(URL) ✅ 要获取的URL

输出:Ollama的JSON字符串化响应体。

体系结构概述

src/
├── index.ts        # STDIO entrypoint
├── http-server.ts  # HTTP/SSE entrypoint (Fastify)
├── mcp-server.ts   # MCP server definition & tool registration
└── tools.ts        # Ollama API client & implementations
文件 描述
index.ts STDIO传输,将MCP服务器连接到stdin/stdout
http-server.ts 使用流式HTTP传输、会话、SSE和身份验证来加速服务器
mcp-server.ts MCP服务器工厂、工具定义、错误规范化
tools.ts Axios客户端、Ollama API调用、Zod架构验证

错误处理和日志记录

  • HTTP失败被包裹在 OllamaApiError 并翻译成 McpError 实例
  • STDIO模式记录到stderr
  • HTTP模式使用Fastify的内置记录器

故障排除

问题 解决方案
OLLAMA_API_KEY is required 启动前设置环境变量
Unauthorized: Missing Bearer token 添加 Authorization: Bearer <token> 头球
Forbidden: Invalid token 检查 MCP_AUTH_TOKEN 匹配您的标题
Invalid or missing session ID 先初始化,然后使用返回的会话ID
呼叫Ollama超时 检查网络连接或增加Axios超时
检查器连接问题 确保端口 6274/6277 是免费的

安全注意事项

  • HTTP模式绑定到 127.0.0.1 默认情况下 --改变 HOST 到 0.0.0.0 仅在必要时
  • 始终设定一个强大的 MCP_AUTH_TOKEN 生产中
  • 从不提交代币 到版本控制

贡献

  1. 叉子或树枝
  2. 安装依赖项: npm install
  3. 在适用的情况下,通过测试进行更改
  4. 验证构建: npm run build
  5. 提交PR

许可证

在此处指定您选择的许可证(例如,MIT、Apache-2.0)。更新 package.json 因此。