本地Ollama API代理服务

将本地Ollama API作为工具暴露给代理(如Cursor、Claude Desktop等),用于聊天、完成和嵌入任务。

  • by jayluxferro
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 jayluxferro/ollama-mcp

使用说明

Ollama MCP

暴露您的MCP服务器 当地API 作为工具,代理(Cursor、Claude Desktop等)可以使用本地模型进行聊天、完成和嵌入。

先决条件

  • 奥拉玛 已安装并正在运行(默认值: http://localhost:11434)
  • Python 3.10+
  • 紫外线 (curl -LsSf https://astral.sh/uv/install.sh | sh)

安装并运行

uv sync
uv run server.py

默认情况下,服务器使用 标准 传输(MCP客户端将其作为子进程启动)。还有两种基于HTTP的传输方式可供选择:

# SSE (Server-Sent Events) — legacy HTTP transport
uv run server.py --transport sse

# Streamable HTTP — MCP 2025-03-26 spec
uv run server.py --transport streamable-http
标志 环境变量 默认值 描述
--transport OLLAMA_MCP_TRANSPORT stdio stdio, sse,或 streamable-http
--host OLLAMA_MCP_HOST 127.0.0.1 HTTP传输的绑定地址
--port OLLAMA_MCP_PORT 8000 绑定HTTP传输端口

在SSE模式下运行时,端点为 http://<host>:<port>/sse;对于可流式传输的http,它是 http://<host>:<port>/mcp.

环境和自定义.env

服务器读取 OLLAMA_BASE_URL 从环境。您可以使用 .env 文件 在项目根目录中,这样您就不必在shell或MCP配置中设置它。

  1. 复制示例文件并根据需要进行编辑:

    cp .env.example .env
    
  2. 编辑 .env (这是理所当然的)。例子:

    OLLAMA_BASE_URL=http://localhost:11434
    

    如果Ollama在其他地方运行,请使用其他URL(例如。 http://192.168.1.10:11434 或Docker主机)。

    可选:设置 OLLAMA_TIMEOUT=300 (秒)用于长时间运行的几代或慢速机器。

  3. 当您运行服务器时(uv run server.py 或通过您的MCP客户端),它加载 .env 来自与相同的目录 server.py 在读取env变量之前。

变量 默认值 描述
OLLAMA_BASE_URL http://localhost:11434 Ollama API基本URL(无尾随斜杠)。
OLLAMA_TIMEOUT 120 Ollama HTTP请求超时(分钟5),以秒为单位。大型型号增加。
OLLAMA_STREAM_READ_TIMEOUT 3×超时 流请求的读取超时(聊天/生成) stream: true).如果世代久远,则设置。
OLLAMA_MCP_LOG_LEVEL INFO 服务器日志级别: DEBUG, INFO, WARNING, ERROR.
OLLAMA_MCP_TRANSPORT stdio 运输: stdio, sse,或 streamable-http.
OLLAMA_MCP_HOST 127.0.0.1 HTTP/SSE传输的绑定地址。
OLLAMA_MCP_PORT 8000 为HTTP/SSE传输绑定端口。

您仍然可以在MCP客户端配置中覆盖这些(例如Cursor的 env 块)或在你的壳;这些优先于 .env.

MCP配置

光标

在此仓库中,您可以复制示例并将其指向您的路径:

mkdir -p .cursor
cp .cursor/mcp.json.example .cursor/mcp.json
# Edit .cursor/mcp.json and set the path in "args" to your absolute path (e.g. pwd)

或手动添加到 ~/.cursor/mcp.json 或者你的项目 .cursor/mcp.json:

{
  "mcpServers": {
    "ollama": {
      "command": "uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/ollama-mcp",
        "run",
        "server.py"
      ]
    }
  }
}

替换 /ABSOLUTE/PATH/TO/ollama-mcp 与真实路径(例如输出 pwd 在回购中)。

使用自定义Ollama URL而不使用 .env 文件,添加 env 块:

"ollama": {
  "command": "uv",
  "args": ["--directory", "/ABSOLUTE/PATH/TO/ollama-mcp", "run", "server.py"],
  "env": {
    "OLLAMA_BASE_URL": "http://192.168.1.10:11434",
    "OLLAMA_TIMEOUT": "300"
  }
}

HTTP/SSE客户端

对于通过HTTP连接而不是生成子进程的客户端,请先启动服务器:

# SSE
uv run server.py --transport sse --host 0.0.0.0 --port 8000

# Streamable HTTP
uv run server.py --transport streamable-http --host 0.0.0.0 --port 8000

然后将您的客户端指向相应的端点:

传输 端点
上海证券交易所 http://localhost:8000/sse
流式HTTP http://localhost:8000/mcp

克劳德桌面

添加 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或操作系统上的等效配置路径:

{
  "mcpServers": {
    "ollama": {
      "command": "uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/ollama-mcp",
        "run",
        "server.py"
      ]
    }
  }
}

工具

工具 说明
ollama_version 检查Ollama是否可用,并获取其版本(健康检查)。
list_models 列出已安装的Olama型号
list_running_models 列出当前加载到内存中的模型
show_model 获取模型的详细信息(参数、尺寸等)
chat 多回合聊天(模型+消息数组)。支持可选 options, format,以及 keep_alive 控制加 stream: true Ollama流媒体(仍返回完整回复)。
generate 单一提示完成。支持可选 options, format,以及 keep_alive 控制加 stream: true Ollama流媒体(仍返回完整回复)。
embed 获取嵌入(模型+文本或字符串列表)
copy_model 将现有模型复制到新名称(例如备份或变体)。
pull_model 从注册表中提取模型
delete_model 删除已安装的模型

测试

单元测试 (嘲笑Ollama API;不需要服务器):

uv run pytest tests/ -v

集成测试 (将MCP服务器作为子进程运行,并发送JSON-RPC;可选Ollama以获得真实的工具结果):

uv run python scripts/run_integration_tests.py
  • 检查:初始化握手, tools/list (所有可用工具), tools/call list_models, tools/call generate.
  • 如果Ollama不跑步, list_models 和 generate 仍然返回(错误消息或超时);该脚本验证协议和工具接线。
  • 可选环境: OLLAMA_MCP_INTEGRATION_TIMEOUT (默认值15), OLLAMA_MCP_INTEGRATION_GENERATE_TIMEOUT (默认值60)以调整超时。

CI: .github/workflows/test.yml 在push/PR上运行单元测试和集成脚本。不需要Ollama服务(测试是模拟的;集成脚本验证协议和工具接线)。

许可证

麻省理工学院