最近在折腾本地部署大模型,想用MCP来管理工具调用,但遇到个头疼的问题。我用ollama跑了qwen2.5,然后按照MCP文档配了客户端和server的config,但一启动客户端就报connection refused。查了半天,发现MCP server默认走的是HTTP还是WebSocket?端口也设了8080,但就是连不上。是不是需要先启动server再启动客户端?我试过先跑server的py脚本,没报错,但客户端那边还是提示“无法建立连接”。有没有大佬遇到过类似情况?或者推荐个靠谱的MCP部署教程?先谢过!
MCP在本地部署大模型时总是连不上,哪里配置不对?
全部回复
共 178 条我之前也卡在这过,大概率不是协议问题,而是MCP server默认绑定了localhost,你客户端如果走的是127.0.0.1之外的主机名或IP,就会直接connection refused。试试把server端host改成0.0.0.0,再确认下ollama和MCP server是不是同一个网络命名空间。另外你那个server的py脚本启动后有没有打印实际监听的端口?有时候config里写的8080跟脚本里硬编码的不一致,客户端连的自然不是同一个地方。
我之前也卡在这地方好几天,最后发现MCP默认走的是stdio,不是HTTP或者WebSocket,你如果直接配8080端口,那得看server端是不是真的监听了这个端口。还有你那个py脚本启动后有没有打印类似“listening on”的日志?我猜八成是server启动了但没绑定到正确的host,试试改成127.0.0.1或者0.0.0.0。另外启动顺序确实重要,但更关键的是客户端config里的command和args要跟实际server路径对得上,尤其用ollama的时候,MCP的server往往要单独写个适配层,不是直接连ollama的API。我之前用过一个叫mcp-server-qwen的封装,里面要设环境变量,不然它默认去找云端模型,本地自然就refused了。还有个坑是防火墙或者代理,有些工具会拦截localhost的回环请求,你检查下系统代理设置。最后建议你直接看server进程的stdout输出,如果它报错但没退出,那大概率是等待输入而不是监听端口,这种情况客户端连不上是正常的。
我前段时间也踩过这个坑,八成不是协议的问题,而是MCP server默认绑定的是localhost,但ollama那边可能监听的是127.0.0.1或者不同IP,两边没对上。你先试试把server的host改成0.0.0.0,然后确认客户端配置里填的地址端口跟server实际监听的一致,别光看8080。另外,启动顺序确实有讲究,但不是说先启动哪个就行,而是server要等模型加载完再连客户端,你可以加个延迟或者看下server日志有没有输出“listening”字样。我之前用npx @modelcontextprotocol/server-commands这个包就遇到过类似问题,换了用python的fastmcp之后反而顺畅了,你可以参考下。
我之前也卡在这过,大概率不是协议的问题,而是MCP server和ollama绑定的host不对,默认可能只监听127.0.0.1,你换成0.0.0.0试试。另外你确认下客户端配置里的endpoint路径是不是写全了,比如/v1/mcp这种,很多教程都漏了。端口8080被占也有可能,换个冷门端口像8765再测下。启动顺序倒是无所谓,只要server进程活着就行,但建议你加个日志输出看它到底有没有真正监听成功。
大概率是server的host绑了127.0.0.1,ollama那边又走了不同网络栈,试试把MCP server地址改成0.0.0.0再连。
我之前搞MCP也卡在这过,大概率不是协议的问题,而是配置里host或端口没对齐。Ollama默认监听的是127.0.0.1,你客户端那边如果填了localhost或者0.0.0.0,在某些网络环境下就会直接refused。建议先确认一下server的py脚本是不是真的绑定了0.0.0.0:8080,而且MCP现在主流是走JSON-RPC over HTTP,不是WebSocket,你抓个包看看有没有请求发出来。还有个小坑,有些客户端会默认走sse模式,得在config里显式指定http transport,不然它连的是另一个端口。实在不行可以先试试用curl直接调一下server的health接口,能通再排查客户端。
我之前也卡在这过,八成是MCP server绑定了localhost但客户端跑了IPv6或者反过来了,试试把config里的host改成127.0.0.1而不是localhost。另外ollama的MCP不一定走8080,有的实现默认是随机端口或者要显式指定--port,你确认下server启动时有没有输出实际监听地址。还有个坑是防火墙,macOS和Windows都会拦,手动放行一下端口再试。教程的话别只看官方文档,GitHub上搜mcp-ollama-bridge这种项目,看issue比看readme有用。
我前段时间也卡在这,八成不是协议问题,是MCP server的host绑定了127.0.0.1,而ollama跑在别的网络命名空间或者容器里,两边根本不在一个网段。你先确认下server脚本里有没有设置host=0.0.0.0,还有防火墙有没有放行8080。另外你这报错是客户端启动时就提示,还是调用工具时才提示?如果是前者,可能config里的server地址写错了,比如漏了http://前缀。我后来是直接用npx跑官方那个mcp-inspector,它能自动探测端口和协议,比手动配靠谱多了。
我之前也卡在这过,大概率不是协议问题,而是MCP server默认绑定的是127.0.0.1,ollama那边跑在本地没问题,但客户端如果走的是容器或者跨网络访问,自然就refused了。你可以先curl一下http://localhost:8080看通不通,再确认config里server的地址别写成0.0.0.0或者公网IP。另外启动顺序倒不是硬性的,但server得先起来并且监听成功,你试试在py脚本里加个print确认它确实在等连接,而不是跑完就退了。
我之前也踩过这个坑,折腾了一晚上发现大概率不是端口问题,而是MCP默认走的是stdio而不是HTTP,你客户端配置里如果写的是http://localhost:8080,那server那边就得用sse模式或者单独起个transport层,不然两边根本对不上话。另外ollama本身和MCP server是两回事,你跑qwen2.5只是模型推理,MCP server得自己监听端口,你直接跑py脚本如果没绑定到正确的host和port,客户端去连127.0.0.1:8080当然会refused。我后来是直接用官方那个mcp-python-sdk里的FastMCP起的服务,它会自动处理stdio和sse的切换,客户端那边把transport设成sse,URL改成http://localhost:8000/sse,一下就通了。还有个小细节,先启动server再启动客户端是对的,但server启动后要等它打印出“listening on”之类的日志才算真的就绪,有时候你看着没报错但其实还没绑定成功。建议你检查一下客户端配置文件里有没有把server的command或者url写错,尤其是路径里有没有多余空格。如果还不行,可以把server的日志级别调到debug,看它到底收到什么请求,比盲猜快多了。
我之前也卡在这块儿好久,你这个问题八成不是协议选错,是MCP的server压根没被客户端发现。Ollama自己起的是OpenAI兼容的API端口,跟MCP要走的那个stdio或者SSE通道完全是两码事,你拿8080去连,等于客户端在敲一个没人在听的门。建议你先把那个py脚本里server的绑定地址确认下,别用127.0.0.1,试试0.0.0.0,有时候本地回环地址在容器或者代理环境下会被拦。另外MCP现在主流实现其实更推荐走stdio,就是客户端直接拉起子进程那种,反而少了很多端口和网络层幺蛾子,你要是用Python写的客户端,可以直接看下官方mcp库里的FastMCP怎么配transport。至于你说的“先启动server再启动客户端”,顺序没错,但更关键的是server启动后有没有真正监听在配置的端口上,你用lsof或者netstat看一眼就知道了,别光看它没报错就觉得起来了。我之前翻过一篇讲“MCP + Ollama实战”的博客,里头特意提到要把环境变量MCP_SERVER_URL指对,不然默认走的就是本地随机端口,你这8080可能压根没被读进去。再不行就抓个包看下握手请求,Connection refused八成是TCP层都没通,跟HTTP还是WebSocket关系不大。
八成是server没监听对地址,ollama默认绑127.0.0.1,MCP那边试试改成0.0.0.0或localhost看看。
我之前也栽在这上面过,八成不是协议选错的问题,而是MCP server和ollama的host绑定了localhost,客户端那边如果用了别的IP或者容器访问就必然被拒。你可以先把server脚本里监听地址改成0.0.0.0再试试,另外确认下ollama的API端口有没有冲突,8080被占的话换个冷门点的。之前还遇到过一个坑,就是MCP文档里说的“SSE传输”跟“HTTP直连”是两套东西,你如果客户端那边配的是streamable-http,就得确保server用同一套实现。建议先跑通最简单的stdio模式本地联调,再加网络层。
我之前也卡在这过,八成不是协议问题,是MCP的server默认绑的是localhost,而客户端那边可能解析成了IPv6的::1,两边对不上就connection refused了,你试试把server地址显式改成127.0.0.1看看。还有启动顺序其实无所谓,但server得真正监听成功才行,你跑py脚本时看看有没有打印出类似“listening on port”的日志,没的话大概率是依赖没装全或者端口被占了。另外ollama这边不用动,MCP是独立于模型的,你客户端配置里那个transport如果是streamable-http,记得确认版本支持,旧版文档很多还写的是WebSocket,容易照着配错。
八成是MCP server绑定了127.0.0.1,ollama那边却监听在别的地址,或者两边协议没对齐,先curl一下8080看看通不通。
之前我也卡这,后来发现是config里url路径写错了,少了个/v1,你检查下是不是类似这种细节。
MCP server默认走stdio不是HTTP,你config里配的8080端口根本没用上,改回stdio试试。
我也卡在这,后来发现MCP server默认走stdio不是HTTP,得在config里改成SSE模式才行。
MCP server默认走的是stdio,不是HTTP或WebSocket,所以客户端报connection refused大概率是传输方式选错了。我之前也踩过这个坑,config里得把transport改成stdio,然后command指向你的py脚本路径才行。另外ollama那边只是跑模型,跟MCP server是两回事,得先确保server进程能被客户端正常拉起。建议去看官方那个quickstart示例,照着改config基本就能通。