最近在折腾MCP服务,想着把本地跑的Ollama模型通过MCP协议暴露出来给其他应用调用。按照官方文档配了mcp.json,serverURL填的是http://localhost:11434,但客户端总是报“connection refused”。我Ollama服务是正常启动的,用curl测过能返回模型列表。是不是MCP需要单独装什么插件?还是说Ollama默认的API接口不能直接对接MCP?另外,我的Ollama跑的是qwen2.5:7b,是不是对模型类型也有要求?看文档有点晕,求指点。
部署MCP服务时一直连不上Ollama,有大佬知道怎么配吗?
全部回复
共 194 条你这个报错我太熟了,上周刚踩完同一个坑。Ollama的HTTP API本身确实没法直接当MCP endpoint用,MCP协议要求的是JSON-RPC 2.0格式的交互,而Ollama那个接口是它自己的一套REST风格,两者根本对不上。所以不是插件的事,是你得在中间加一层转换,比如用mcp-ollama-bridge或者自己写个很薄的FastAPI服务把Ollama的响应包装成MCP的tool定义。我看了下你现在配的serverURL,如果直接指向11434,那客户端肯定连不上,因为那边根本没有MCP的监听端口。另外模型类型倒没什么限制,qwen2.5:7b完全够用,关键是你那个转换层得把工具描述和参数schema写好,不然客户端即使连上了也调不对。建议你先用npx @modelcontextprotocol/inspector测一下你的转换服务,确认能发现工具再接到客户端里,这样排查起来更清晰。
connection refused大概率是CORS没开,Ollama默认不跨域,加个OLLAMA_ORIGINS=*再重启试试。
这问题我上周刚踩过坑,Ollama的API默认是不带MCP协议的,你得用类似mcp-ollama这种适配器桥接一下,直接填localhost:11434肯定不行。另外connection refused大概率是MCP服务跑在容器里,但Ollama是宿主机进程,得把地址改成host.docker.internal:11434。模型类型倒没什么限制,qwen2.5:7b走工具调用完全没问题,你先试试用npx @modelcontextprotocol/server-ollama这种现成方案,配好transport type再重启客户端。
我猜你是直接把Ollama的HTTP接口当MCP endpoint用了,这俩压根不是一回事儿。MCP需要单独的server进程去调Ollama的API,你可以在mcp.json里把command配成npx,args填上对应包名,而不是直接写URL。另外确认下客户端是不是用的SSE传输,本地调试的话stdio模式更省事。模型不用换,但记得在Ollama里把context窗口调大点,不然长对话容易断。
你curl能通说明Ollama本身没问题,问题大概率出在MCP配置上——Ollama的API是OpenAI兼容格式,但MCP服务端需要的是专门的transport协议,不能直接拿HTTP接口当MCP用,得装个mcp-ollama这类适配器。我之前也卡在这,后来发现还得在mcp.json里指定type: "ollama",光填serverURL不够。模型类型倒没限制,qwen2.5:7b完全OK,你先确认下MCP客户端连的是不是同一个端口,有时候代理或者防火墙会拦localhost。
Ollama官方压根没有MCP端点,你得用mcp-ollama之类的桥接服务,localhost别用,试试127.0.0.1。
我之前也踩过这个坑,你curl能通说明Ollama本身没问题,问题大概率出在MCP server的配置上。Ollama官方其实没直接提供MCP端点,你得用社区的那个ollama-mcp-server或者自己包一层,直接把serverURL指向11434肯定不行,因为那个端口是HTTP API不是MCP协议。我之前用Python写了个中转,把MCP的tools请求转成Ollama的chat接口,跑通了但延迟有点高。另外qwen2.5:7b本身没啥问题,MCP主要是传工具定义和调用,跟模型能力关系不大,不过你要是用function calling功能,建议换qwen2.5:72b或者带tool support的模型,7b有时候理解工具参数会犯迷糊。你可以先试试装个现成的MCP适配器,比如mcp-ollama这个npm包,配置里填上你的模型名和地址,然后再看客户端那边连接池是不是有防火墙拦截。还有个细节,如果你用的是Docker跑MCP服务,容器里访问宿主的localhost要改成host.docker.internal,这个我当初查了半天才反应过来。
先确认下ollama的host配置,默认只绑127.0.0.1,但MCP客户端如果是容器跑的就会连不上,改下OLLAMA_HOST试试。另外模型没限制,qwen2.5直接走ollama的HTTP接口就行。
端口号没问题的话,大概率是MCP客户端那边把localhost解析成IPv6了,试试把serverURL改成http://127.0.0.1:11434,或者检查下是不是有代理在干扰。Ollama本身不需要装插件,但MCP对接走的是它那个兼容OpenAI的端点,得确认你配的路径是/v1而不是根路径。另外qwen2.5:7b本身没问题,模型类型不卡这个,倒是可以看看Ollama有没有开启CORS,有些MCP实现会预检请求。我之前也卡这,最后发现是MCP服务器进程跑在容器里,没跟宿主机共享网络。
你这个问题我也踩过坑,Ollama的HTTP API本身不支持MCP协议,不是配个URL就完事的。你得用像mcp-ollama或者ollama-mcp-adapter这类中间层转换一下,把Ollama的接口包装成MCP的格式。另外connection refused大概率是服务监听地址的问题,Ollama默认只绑了127.0.0.1,如果你MCP跑在容器或者另一台机器上,得把OLLAMA_HOST改成0.0.0.0:11434再重启。模型类型倒没限制,qwen2.5:7b走HTTP调用没问题,重点还是先确认MCP那边连的端口和地址跟Ollama实际监听的一致。
大概率不是Ollama的问题,curl能通就说明服务本身没问题。MCP这边得确认下是不是走对了协议,Ollama官方API是OpenAI兼容格式,但MCP的serverURL要指向一个实现了MCP协议的服务端,不能直接拿HTTP API当MCP端点用。你试试装个mcp-server-ollama之类的适配器,或者检查下客户端那边是不是还需要配transport类型,有时候是默认走stdio但你写成了http。另外qwen2.5:7b本身没限制,模型类型不影响连接,先解决协议适配的事吧。
这问题我上周刚踩过坑,connection refused大概率不是Ollama的问题,而是MCP服务没装对。Ollama本身不直接支持MCP协议,你得在中间加个适配层,比如用mcp-server-ollama之类的桥接工具,光改serverURL指向11434是没用的。模型类型倒是不挑,qwen2.5:7b完全够用,但记得在适配层配置里显式声明模型名,不然默认可能去找别的。另外检查下MCP客户端跑的环境是不是容器,如果是的话,localhost会指向容器内部,得改成宿主机的IP才行。
说实话你这个坑我上周刚踩过,问题八成不在Ollama本身。Ollama那个11434端口是原生HTTP API,MCP协议走的是另一套JSON-RPC格式,你得用官方的ollama-mcp-server或者自己写个适配层中转一下,直接填serverURL肯定连不上。我试过用npx拉那个@ollama/mcp-server包,然后配置里把command和args指过去,而不是填URL,这样才能通。另外你curl能通但MCP拒绝,也可能是客户端那边防火墙或者代理拦截了本地回环地址,有些沙箱环境默认禁止localhost访问,检查下系统代理设置。模型类型倒没硬性要求,qwen2.5:7b完全没问题,但注意MCP调用时tool的schema要跟Ollama的chat接口参数对得上,不然就算连上了也可能报参数错误。你要是用Docker跑的Ollama,记得端口映射要写0.0.0.0:11434,别只绑127.0.0.1,容器外访问会失败。还有个坑是MCP客户端可能要求Ollama开启CORS,你在启动Ollama时加个OLLAMA_ORIGINS=*的环境变量试试,之前我就是这么解决的。实在不行就抓包看看MCP握手时发的initialize请求有没有到Ollama,如果压根没发出去,那基本就是配置路径写错了。
connection refused基本跟模型没关系,qwen2.5:7b本身没问题。MCP和Ollama之间一般不是直连的,得靠一个转换层,比如写个小的MCP server去调Ollama的API,或者看看有没有现成的适配器。你curl通但客户端连不上,大概率是地址写错了,Ollama默认监听127.0.0.1,但你MCP配置里可能用了localhost解析到IPv6了,试试把serverURL改成http://127.0.0.1:11434看看。另外确认下你的MCP客户端是否支持HTTP transport,有些只支持stdio。
localhost在容器里指向的是容器自己,换成宿主机IP试试,MCP跟模型类型没关系。