最近在折腾本地部署大模型,想用MCP来管理工具调用,但遇到个头疼的问题。我用ollama跑了qwen2.5,然后按照MCP文档配了客户端和server的config,但一启动客户端就报connection refused。查了半天,发现MCP server默认走的是HTTP还是WebSocket?端口也设了8080,但就是连不上。是不是需要先启动server再启动客户端?我试过先跑server的py脚本,没报错,但客户端那边还是提示“无法建立连接”。有没有大佬遇到过类似情况?或者推荐个靠谱的MCP部署教程?先谢过!
MCP在本地部署大模型时总是连不上,哪里配置不对?
全部回复
共 178 条我之前也被这个坑过,大概率不是协议选错,而是ollama和MCP server绑定的host不对,试试把server端监听地址改成127.0.0.1而不是默认的0.0.0.0,或者反过来,看下防火墙是不是把8080拦了。另外确认下MCP客户端用的那个SDK版本,有些旧版只支持stdio,不走HTTP,你如果配的是streamable HTTP模式,得升级到最新版才行。还有个小细节,启动顺序其实无所谓,但server起来了不代表端口就在监听了,你可以用netstat -an | grep 8080看一下实际状态,我之前就是漏了这一步白折腾半天。
我之前也卡在这过,大概率是MCP server和client的传输协议没对齐,默认不是HTTP是stdio或者WebSocket,你确认下config里transport那项填对没。还有ollama那边要确保模型接口能正常访问,可以用curl测一下。另外先起server再起client是对的,但注意server有没有真的监听在8080上,有时候脚本报错不提示但端口没开。我后来直接改用SSE模式才通的,你可以试试。
我之前也卡在这过,八成不是端口问题,是MCP server根本没起来。你那个py脚本跑起来后有没有监听8080?用lsof -i:8080看看,要是没输出基本就是server挂了。另外ollama的base_url别漏了,MCP client连的是server不是模型,得确认server里配的ollama地址能通。教程的话搜“mcp python sdk example”有个官方仓库,里面带fastmcp的demo,照着跑通再改自己的配置。
之前也卡在过这个坑,MCP默认走的是stdio,不是HTTP,你如果没在server端显式指定transport的话,客户端按TCP去连8080肯定报connection refused。另外ollama跑的qwen2.5跟MCP server是两回事,你得先确认server脚本里有没有监听地址写对,比如绑到127.0.0.1还是0.0.0.0,还有防火墙偶尔也会拦。配置里如果用了sse或者ws,端口和路径得完全对齐,建议直接从官方示例仓库拉个最小可跑版本,把client和server分开终端看日志,比对着文档猜快多了。
我之前也踩过这个坑,八成不是协议的问题,而是ollama的host默认绑在127.0.0.1上,MCP server如果跑在容器或者另一个进程里,访问不到就报connection refused。你可以先确认下ollama serve有没有监听0.0.0.0,然后MCP的server端URL别写localhost,直接写实际IP试试。另外,MCP现在主要是走streamable HTTP,不是什么WebSocket,端口8080得确认没被防火墙挡了。启动顺序倒不关键,server先起没报错不代表客户端能连上,重点看server日志有没有收到请求。
大概率是MCP server绑定到了127.0.0.1,而ollama或客户端连的是别的IP,试试把host改成0.0.0.0。
我之前也卡在这过,大概率是server和client的host没对上,ollama默认绑的是127.0.0.1,你得确认MCP server也监听同一个地址,别用localhost试试。另外端口8080挺容易跟别的服务撞,可以先netstat看看是不是被占了。启动顺序倒不是重点,但client连的时候server必须已经活着,你可以写个简单的healthcheck先测下端口通不通。教程的话搜“mcp python sdk example”比看官方文档省心,社区里有个叫fastmcp的库挺好用的。
我之前也卡在这过,大概率不是HTTP或WebSocket的问题,而是ollama默认绑的是127.0.0.1,MCP server如果监听0.0.0.0或者另一个host,客户端自然连不上。你试试把ollama的host设成0.0.0.0,或者检查下MCP config里的server URL是不是用了localhost而实际端口没对上。另外,先启动server再启动客户端逻辑没错,但确认下server的py脚本有没有真的在监听8080,可以用netstat看看。我之前用npx @modelcontextprotocol/server-everything做测试,反而比自写脚本省心,你可以参考下。
我之前也卡在这过,问题多半不在端口,而是MCP默认走的是stdio而不是HTTP,尤其本地部署时客户端和server得通过同一个进程管道通信,你单独跑py脚本等于断了连接。建议先确认下ollama的API地址是不是127.0.0.1:11434,然后客户端配置里把transport改成stdio试试,再检查server有没有绑定正确的host。另外有些教程会让人用sse模式,那个才需要8080,但ollama插件不一定支持,你换个轻量级MCP实现比如mcp-python-sdk里的示例代码,反而更稳。
我遇到过一模一样的报错,后来发现是客户端配置里写死了localhost,但server监听的却是0.0.0.0,两边对不上就连不上。你试试把MCP server的host改成127.0.0.1,或者客户端里用实际IP,别用localhost。还有,如果server是异步框架比如FastAPI,记得开CORS,不然浏览器端或某些HTTP客户端会拒绝握手。顺序上确实要先启动server再启动客户端,但确认它真的在监听,可以用curl测一下端口通不通,别光看没报错就觉得没问题。
这个坑我刚爬出来,你八成是没分清MCP的两种传输模式。本地部署一般走stdio,就是客户端直接拉起server子进程,不需要端口和网络;你非要配HTTP的话,得
大概率是server进程没挂住,你试试先起server再起客户端,或者检查下防火墙是不是把8080拦了。
我之前也卡在这块儿过,MCP这玩意儿文档写得确实有点绕。你那个connection refused大概率不是端口问题,因为8080如果被占用或者没监听,报错会是timeout或者拒绝得更明显,更像是因为MCP server默认走的是stdio,不是HTTP或者WebSocket。你按文档配config的时候,估计把transport写成了TCP,但ollama那边其实只暴露了本地推理接口,跟MCP的协议栈完全不是一回事儿。我后来是把server启动在一个独立的进程里,用mcp.run(transport='streamable-http')显式指定,而且必须让客户端用同样的URL前缀,比如http://localhost:8080/mcp这种带路径的,光配根路径有时候就是连不上。还有个坑是,你那个py脚本启动时没报错不代表它真在监听端口,最好用curl先探一下那个地址有没有响应,不然客户端那边永远是拒绝。另外顺序确实重要,但更关键的是客户端启动时它会去握手,如果server没ready就会直接放弃重试,你把server先跑起来后等个两三秒再开客户端试试。你要是实在懒得折腾,可以去看下mcp官方python-sdk里的fastmcp例子,那个比文档里的示例靠谱多了。
之前也踩过这坑,大概率不是协议问题,先确认下ollama绑定的host是不是默认127.0.0.1,MCP server如果用docker起的话端口映射容易漏。另外别忽略客户端配置文件里有没有写错server的base_url,http和ws都试一遍,有些版本默认走ws。启动顺序其实无所谓,但建议先单独curl一下server的health接口看通不通,通了再排查客户端。顺便说下,qwen2.5的话可以看看官方仓库的issue区,有人贴过可用的配置模板。
之前折腾mcp也踩过这坑,connection refused多半不是协议问题,是server没真正监听端口。你试试curl一下http://localhost:8080,看有没有响应,另外ollama的base_url和mcp server的endpoint别搞混了。我后来直接用了python的mcp库自带的stdio模式,绕开网络层,反而稳得很。
我之前也卡在这过,八成不是协议问题,是MCP server监听地址写成了127.0.0.1,ollama那边默认绑定了localhost,但客户端可能走的是容器或者另一层网络栈,互相看不见。你试试把server的host改成0.0.0.0,还有确认一下ollama的API端口和MCP的8080是不是冲突了。另外启动顺序其实没严格先后,但server得真正跑起来并打印出“listening on”之类的日志才算活,别只看没报错就以为成功了。我上次就是被日志骗了,实际进程秒退了。
大概率是MCP server没监听对地址,试试改成127.0.0.1而不是localhost。我上次就是被这个坑了。
大概率是server没监听对地址,试试把host设成127.0.0.1而不是默认的0.0.0.0。另外确认下ollama的API和MCP端口没冲突。
这问题我上周刚踩过一遍坑,八成不是协议选错,而是你server的host绑定了127.0.0.1但客户端走了localhost的IPv6解析,或者反过来。你试试把server端host改成0.0.0.0再跑,客户端那边用127.0.0.1显式指定,别用localhost。另外ollama和MCP server之间那个工具调用的鉴权配置也很容易漏,有些框架默认要token,你curl一下server的健康检查端点看看返回啥,如果是401那基本就是认证问题。至于HTTP还是WebSocket,新版本的MCP规范其实两种都支持,但你这种情况大概率是transport类型没对齐,你client配的ws://但server只监听了http。还有个更隐蔽的点,有些MCP server启动时不会主动监听端口,得等你客户端发请求才动态拉起子进程,所以“先启动server”这个思路本身可能就不对,看看你用的那套框架有没有stdio模式,直接用子进程通信能避开网络层那一堆破事。要是还不行,把server的日志级别调到DEBUG,看它到底卡在哪一步。
大概率是ollama的host绑定了127.0.0.1,MCP server连不上它,试试把OLLAMA_HOST设成0.0.0.0。
我之前也栽在这上面过,MCP server默认走的是WebSocket不是HTTP,你客户端如果按HTTP配的肯定报connection refused。另外Ollama的模型要单独映射到MCP的tool接口,光启动py脚本不够,得确认server监听的端口和客户端config里写的ip完全一致,比如本机要用127.0.0.1别用localhost。我之前就是被IPv6解析坑了,改成具体IP地址就好了。
我之前也卡在这块儿好久,后来发现多半是配置里host和port没对上。你试试把MCP server的host设成127.0.0.1而不是0.0.0.0,客户端连接的时候也明确写localhost,别用IP。另外ollama本身默认跑在11434,你MCP server如果转发到8080,得确认它有没有真的监听在8080上,可以用netstat或者lsof看下端口状态。还有个坑是MCP现在主流走的是Streamable HTTP,不是WebSocket,但某些老版本客户端默认走WS,得在config里显式声明transport类型。你那个server的py脚本不报错不代表它成功绑定了端口,有时候它只是启动了个线程但没进入监听循环。建议先单独curl一下http://localhost:8080/mcp或者health端点看返回啥,如果也是refused,那基本就是server没起来或者端口写错。最后,客户端和server的启动顺序其实没要求,但server必须先绑定端口成功,客户端才能连上,所以排查顺序应该是先验证server端通,再调客户端。