最近在折腾本地部署大模型,想用MCP来管理工具调用,但遇到个头疼的问题。我用ollama跑了qwen2.5,然后按照MCP文档配了客户端和server的config,但一启动客户端就报connection refused。查了半天,发现MCP server默认走的是HTTP还是WebSocket?端口也设了8080,但就是连不上。是不是需要先启动server再启动客户端?我试过先跑server的py脚本,没报错,但客户端那边还是提示“无法建立连接”。有没有大佬遇到过类似情况?或者推荐个靠谱的MCP部署教程?先谢过!
MCP在本地部署大模型时总是连不上,哪里配置不对?
全部回复
共 178 条大概率是MCP server没真正监听8080,ollama和MCP的端口别搞混了,先curl测下再说。
八成是MCP server绑定了127.0.0.1,Ollama那边却走了别的host,检查下server的host配置改成0.0.0.0试试。
遇到过一模一样的问题,最后发现是配置文件里把MCP server的地址写成了localhost,但ollama跑在容器里,网络模式不一样导致客户端根本找不到那个端口。你可以先确认下ollama和MCP server是不是在同一网络环境下,如果是本机直连,试试把地址改成127.0.0.1而不是localhost,有时候解析差异会坑人。另外MCP目前主要走的是JSON-RPC over HTTP,不是WebSocket,但有些实现版本会支持SSE,这个你得看客户端用的什么SDK,不同语言的客户端对传输协议支持不一样,文档里默认写的那个未必是实际生效的。还有个坑是MCP server启动后不会主动监听端口,除非你显式调用serve函数,很多示例代码只写了工具定义没写启动逻辑,你那个py脚本没报错不代表它在监听。建议先用curl或者telnet直接测一下那个端口通不通,排除防火墙或者端口被占用的可能。我之前也试过先启动server再启动客户端,顺序没问题,但如果你用的是stdio模式,那根本不需要端口,直接配进程路径就行,很多人把HTTP和stdio混着配就容易出现你这种connection refused。教程的话推荐看下MCP官方文档里的Python SDK示例,比网上那些二手教程靠谱,再不行就把server端日志开debug模式,看它到底有没有收到请求。
大概率是ollama的host绑定了127.0.0.1,MCP连的是局域网IP,改下OLLAMA_HOST=0.0.0.0再试试。
我上次也卡这了,后来发现MCP server得先监听端口,然后客户端那边base_url别带斜杠,你检查下。
我之前也卡在这过,大概率不是协议问题,是MCP server监听地址没绑定对。Ollama默认只监听127.0.0.1,你试试把server的host改成0.0.0.0,或者干脆用localhost别用127.0.0.1。另外端口8080容易跟别的服务撞,换个不常用的比如8899再试试。顺序倒不是关键,只要server进程活着就行,不过建议你确认下python脚本里有没有打印出实际监听的地址,有时候日志里能看到端倪。还有个坑是客户端连接时用的URL可能带了多余路径,比如/api或/ws,MCP标准路径一般是/或/mcp,这个不对也会连接不上。
八成是MCP server监听地址写成了127.0.0.1,ollama那边却用localhost走IPv6,改成0.0.0.0试试。
先确认下ollama的API端口是不是11434,MCP配置里写对没,8080一般不是给ollama用的。
我之前也栽在MCP和Ollama的搭配上,connection refused大概率不是端口问题,而是server端压根没监听对地址。你试试把MCP server启动后,用curl直接打一下它的health接口,看看是不是返回了非200状态码。另外8080这个端口容易跟其他服务冲突,可以换一个不常用的,比如18080,然后确认config里客户端填的地址和server绑定的地址完全一致,别用localhost,直接用127.0.0.1试试。我之前就是死磕localhost,结果发现server绑的是局域网IP,互相看不见。
我之前也卡在这过,你八成是没分清MCP的transport模式,默认是stdio,走的是本地进程管道,不是HTTP或者WebSocket。你客户端配置里如果写了url,那得先起个server进程监听端口,而且ollama本身不提供MCP端点,得自己写个适配层。建议先确认server端py脚本是不是真的在监听8080,用netstat查一下,别光看不报错就以为起来了。另外配置里路径要用绝对路径,相对路径经常导致子进程起不来。
大概率是MCP server默认绑定了localhost,Ollama的API地址没对上,检查下server端监听地址是不是127.0.0.1而不是0.0.0.0。
我之前也卡这,后来发现得把client配置里的base_url改成http://127.0.0.1:8080,而不是localhost,有时候IPv6解析会搞鬼。
之前也踩过这个坑,大概率不是端口问题,而是MCP server的启动地址绑定了127.0.0.1,而ollama或者客户端那边用了localhost解析成IPv6的::1,两边对不上就connection refused了。你可以试试把server的host改成0.0.0.0,或者客户端直接连127.0.0.1:8080,别用localhost。另外确认下MCP版本,有些老版本走的是WebSocket,你客户端配的却是HTTP,协议不匹配也会连不上。我之前是直接扒了官方示例的config,把transport改成sse才通的。
我之前也踩过这个坑,MCP这块文档确实写得有点散。你那个connection refused大概率不是协议问题,而是server和client的绑定地址不匹配,ollama默认绑的是127.0.0.1,如果MCP server起在0.0.0.0或者反之,就很容易出现这种“看起来没报错但连不上”的诡异情况。另外你确认下client连的是不是server实际监听的端口,有时候8080被其他进程占了,MCP会静默换端口,但日志里不会明说。HTTP还是WebSocket这个其实取决于你用的SDK版本,新版一般走WebSocket的/ws路径,老版本才是纯HTTP,你可以在client配置里显式指定ws://前缀试试。还有个细节,MCP server不一定非得先启动,但client启动时会发握手请求,如果server没准备就绪,就会直接拒绝,所以顺序上最好还是先起server,等几秒再开client。我建议你先用curl或者wscat手动测一下server的端点,看能不能拿到响应,这样能快速定位是网络层还是应用层的问题。教程的话,官方那个python-sdk的examples里有个simple-chatbot,比看文档快多了,照着跑通再改自己的配置。
我之前也卡在过这个坑里,后来发现多半是MCP server的传输协议跟客户端默认配置对不上。你提到HTTP和WebSocket,其实MCP现在主流走的是stdio和Streamable HTTP,本地部署用ollama的话,server端如果没显式监听端口,很可能是只绑了localhost,但客户端那边连的却是127.0.0.1或者别的host,这种细微差别就会报connection refused。还有,先启动server再启动客户端这个顺序应该没问题,但你要确认server的py脚本是不是真的在监听8080,可以用netstat或者lsof查一下,有时候脚本没报错但实际没起来。另外,ollama本身也占了一个端口,别跟MCP的8080冲突了,我之前就是ollama默认11434,结果MCP配成了11434,直接撞车。建议你换个不常用的端口,比如8899,然后client端url写完整路径,比如http://localhost:8899/mcp,有些框架还要在header里加Accept: application/json。要是还不行,就去翻一下MCP官方Python SDK的示例,里面有个很简单的echo server,先跑通那个再套你的工具逻辑,比看那些乱七八糟的教程靠谱。
我之前也踩过这个坑,大概率不是协议的问题,而是MCP server的host绑定成了127.0.0.1,而ollama或客户端跑在容器里或者用了别的网络栈,端口看着是开了但根本不通。可以先试试把server的host改成0.0.0.0,再确认一下防火墙有没有拦8080。另外,你是直接跑py脚本还是用uvicorn之类起的?有时候缺少--host参数默认只监听本地回环,客户端连不上很正常。
我前段时间也卡在这,后来发现是ollama的host默认绑了127.0.0.1,而MCP server如果监听的是0.0.0.0或者另一个IP,客户端去连localhost就通不了。你试试在ollama里设置OLLAMA_HOST=0.0.0.0,或者确认MCP server的bind地址和客户端填的host完全一致,端口别被防火墙挡了。另外启动顺序倒不是关键,只要server在客户端发起连接前跑起来就行,你那个server没报错但客户端连不上,八成是监听地址对不上。
我之前也卡在这过,大概率不是端口问题,而是MCP的server和client用的传输协议没对上。你检查下config里是不是默认用了stdio,但ollama那侧实际走的是HTTP,两边类型不一致就会报connection refused。另外,先启动server再启动client是必须的,但确认下server有没有真的监听在8080,用netstat看下比较稳。我之前换了个轻量点的MCP框架,把transport显式设成http就好了,你可以试试。
MCP这块坑确实多,我自己踩过最深的坑是配置文件里的host写成了localhost,但server绑的是127.0.0.1,IPv6解析时直接给你拒了。你试试把地址改成0.0.0.0,或者客户端那边用实际的局域网IP而不是localhost。还有,ollama的API和MCP不是一回事,MCP是独立的进程,别混着看日志。要是还不行,直接看server端有没有打印出“listening on”这种字眼,没打印就是没起来。
遇到过一模一样的报错,最后发现是MCP server的依赖装不全,py脚本虽然不报错,但实际没跑起来。建议你先在server目录下单独跑个curl测试,比如curl http://localhost:8080/health,看有没有响应。如果curl也通不过,那就是server本身的问题,跟客户端配置无关。另外,端口8080
八成是MCP server没监听0.0.0.0,ollama那边只绑了localhost,把host改成0.0.0.0试试。
我也是这么踩坑过来的,先确认server进程真的活了,再用curl测下端口通不通,别光看配置。
我之前也卡在这过,多半不是协议问题,而是MCP server监听的是127.0.0.1,ollama那边用的localhost有时会解析到IPv6的::1,两边对不上就connection refused了。你可以试试把server的host改成0.0.0.0,然后客户端连接地址也写127.0.0.1,别用localhost。另外8080端口容易被别的进程占,先lsof查一下,换个不常用的端口再试。启动顺序倒不是关键,但server得真正跑起来并打印出监听日志才算数。
写得挺好,建议补充一些性能数据。
八成是MCP server的host绑定了127.0.0.1,ollama那边走的是localhost,换成0.0.0.0试试。
HTTP还是WebSocket取决于你用的SDK,但connection refused多半是端口没监听,先netstat看下8080起没起来。