最近在折腾本地部署大模型,想用MCP来管理工具调用,但遇到个头疼的问题。我用ollama跑了qwen2.5,然后按照MCP文档配了客户端和server的config,但一启动客户端就报connection refused。查了半天,发现MCP server默认走的是HTTP还是WebSocket?端口也设了8080,但就是连不上。是不是需要先启动server再启动客户端?我试过先跑server的py脚本,没报错,但客户端那边还是提示“无法建立连接”。有没有大佬遇到过类似情况?或者推荐个靠谱的MCP部署教程?先谢过!
MCP在本地部署大模型时总是连不上,哪里配置不对?
全部回复
共 178 条这个问题我也踩过坑,大概率是MCP server的监听地址没绑对。你跑server的py脚本时如果没报错,但客户端连不上,可以试试把server的host从127.0.0.1改成0.0.0.0,因为ollama默认绑localhost,但MCP通信有时候需要跨网段或者容器桥接,尤其是如果你在WSL或者Docker里跑的话。另外确认下MCP用的传输协议,新版MCP主要走WebSocket(ws://),不是HTTP,端口8080可能被其他服务占了,换个比如9090或者5000试试。还有个容易忽略的点:客户端和服务器的config里,端口和路径要完全一致,包括末尾不能多斜杠,我之前就是漏了个“/ws”后缀导致一直报错。先跑server再启动客户端这个顺序是对的,但你可以加个简单的测试,比如用curl或者浏览器直接访问ws://localhost:端口,看看能不能拿到Swagger文档或者空响应,这样能快速定位是server没启动成功还是网络不通。实在不行可以看看MCP官方仓库的issues,有个#142的帖子讨论过本地部署的端口绑定问题,或者换个思路用llama.cpp自带的MCP模块,集成度更高些。
这个问题我之前也踩过坑,MCP默认走的是WebSocket,但ollama的接口是HTTP,所以配置里得明确指定transport类型。你检查一下客户端config里有没有写对server的地址和端口,有时候localhost和127.0.0.1也会有区别。另外确实得先确保server脚本完全跑起来、没有报错,再启动客户端,不然时序反了也会连不上。
大概率是server没绑定对host,默认绑127.0.0.1的话客户端用localhost或实际IP试试。
这问题我折腾过好几天,说几个容易踩的坑吧。MCP默认走的是HTTP,不是WebSocket,但ollama本身用的是WebSocket通信,所以客户端和server的协议要对上。你那个8080端口配了,但server启动后有没有监听在0.0.0.0上?默认可能只绑127.0.0.1,从docker或者外部连的话会直接connection refused。还有,MCP的client和server启动顺序确实有讲究,得先保证server进程跑起来,并且日志里能看到“listening on port 8080”之类的输出,再去启动客户端。另外,检查下ollama的config文件,有时候需要手动指定MCP的server地址,比如localhost:8080,别写成127.0.0.1或者带http前缀。我之前用了一份教程,里面写了用docker-compose把ollama和MCP server放一起,端口映射和网络模式都配好,省得自己手动折腾。建议你先用最简单的python脚本启动server,然后开另一个终端用curl测试一下端口通不通,能通再连客户端。如果还不行,大概率是MCP的版本跟ollama的API版本不兼容,换一个更老的MCP版本试试。
我也遇到过这个问题,大概率是MCP server默认走WebSocket而不是HTTP,客户端那边配置成HTTP协议就报连接拒绝。你先确认下server启动日志里绑定的协议和端口,ollama跑qwen2.5没问题的话,记得检查server是不是真的在监听8080,有些框架默认是127.0.0.1:8080而不是0.0.0.0。另外先启动server再启动客户端这个顺序是对的,但有时候server启动后有个延迟,等几秒再连试试看。
我前几天也遇到一模一样的问题,后来发现是MCP server默认走的是WebSocket而不是HTTP,端口虽然设了8080但协议没对上。你先确认一下server启动日志里实际监听的端口和协议,有时候ollama跑的服务会占住端口导致冲突。另外建议直接用MCP官方示例里的config模板改,别自己手写,容易漏掉路径或认证字段。
遇到过类似问题,折腾了两天才发现是MCP server默认走WebSocket,但ollama用的是HTTP,端口配置没对应上。你试试在client config里把transport改成HTTP,或者直接用streamlit那个demo做测试,文档里那个示例配置有时候会漏掉protocol字段。另外建议先确认server脚本确实在监听端口,netstat查一下8080有没有绑定成功,有时候虚拟环境搞乱依赖也会静默报错。
我最近也刚踩完这个坑,说几个排查点吧。MCP默认走的是HTTP,不是WebSocket,但ollama自己跑在11434端口,MCP server的端口是另外配的,8080如果被其他服务占了也会冲突。你那个“先跑server的py脚本没报错”可能只是进程启动了,但没绑定到正确地址,试试在server脚本里加个--host 0.0.0.0,不然默认可能只监听localhost。还有客户端配置文件里,MCP endpoint的地址写的是127.0.0.1还是localhost?这俩有时候解析不一样。另外ollama的qwen2.5本身如果没加载进内存,MCP调用工具时会超时,先确认ollama list能看到模型在运行。我上次折腾了半天发现是防火墙把8080拦了,你本地防火墙关了没?最后推荐个教程,去GitHub搜mcp-server-ollama,那个项目里示例config写得挺清楚,跟着改端口和模型名应该就能通。
大概率是server没监听对地址,试试把host设成0.0.0.0再跑。
我之前也踩过这个坑,MCP默认走的确实是HTTP,但ollama那边的端口不一定和MCP server的端口是同一个。你试试先确认一下server的py脚本是不是真的在8080上监听了,有时候没绑定对。另外,客户端配置里那个server URL最好写成http://127.0.0.1:8080,别漏了协议头。如果还不行,建议换个MCP实现,比如mcp-server那个库,文档更清楚些。
八成是server没绑定对地址,默认绑127.0.0.1的话外部连不上,改成0.0.0.0试试。
大概率是server没绑定到正确的host,试下把地址改成0.0.0.0再重启两边试试。
我之前也卡在过这个坑里,大概率是MCP server没监听对地址,它默认绑的是127.0.0.1而不是0.0.0.0,客户端从容器或者另一进程访问就拒了。另外你说的HTTP还是WebSocket,这俩协议在MCP里都有实现,但ollama那个插件一般走的是SSE(就是HTTP流),你试试直接用curl打一下server的health接口看通不通。启动顺序倒不是关键,server先跑着不报错不代表端口真的起来了,查下日志或者netstat看下监听状态最靠谱。
遇到过一模一样的问题,最后发现是MCP的传输层搞混了。现在MCP规范默认走的是stdio和Streamable HTTP,你那个server脚本如果直接跑起来,它可能监听的是stdin,压根没开HTTP端口,所以客户端连8080肯定被拒。你试试在server启动时明确指定传输方式,比如用--transport http或者环境变量里配MCP_TRANSPORT=http,很多框架默认不走网络。
另外检查一下ollama和MCP server是不是绑定在同一个网络命名空间,本地部署时如果用了Docker或虚拟环境,端口映射没做对也会这样。我之前就是python虚拟环境里起的server,但客户端在宿主机上,忘了把127.0.0.1换成0.0.0.0监听,结果只能本机进程自己连。
还有个小坑,有些MCP客户端会先发个初始化请求校验版本,如果server端没实现initialize的响应格式,连接会被静默断开,日志里不一定有报错。你可以用curl -X POST http://localhost:8080/mcp手动发个JSON-RPC请求试试,看有没有返回内容。
最后,顺序上不用太纠结,server先起肯定对,但关键是确认它真的在监听端口,用lsof -i :8080或者netstat -ano看一眼。如果实在不行,建议直接看官方MCP的python-sdk例子,里面有完整的fastmcp或者flask实现,照着跑通再改自己的逻辑。
我之前也卡在这儿过,大概率不是协议问题,是MCP server绑定的地址不对,默认可能是127.0.0.1,但你客户端连的却是局域网IP或localhost的另一个解析,试试把host改成0.0.0.0再跑。另外ollama的MCP配置里,工具调用路径和端口别搞混,8080是你自己设的还是文档默认的?建议先用curl直接打一下server的health接口,看返回什么,就知道是不是服务根本没起来。我之前就是用这个笨办法排查出来的。
我之前也卡在同样的问题上,后来发现MCP默认走的是stdio,不是HTTP或WebSocket,你如果直接在客户端配置里写8080端口它压根不会走网络协议。要么检查下是不是用了streamable-http这种新传输模式,要么干脆先把server和client都跑在同一台机器上,用临时文件路径试一下。另外你确认下ollama那边有没有把qwen2.5的服务地址暴露出来,MCP连接的是模型服务而不是ollama的API,这两者经常被搞混。我之前照着这个排查完就好了,你可以试试看。
我之前也栽在MCP这个坑里,大概率不是协议问题,而是ollama的host绑定和MCP server的地址没对上。你试试把server脚本里的监听地址改成127.0.0.1而不是0.0.0.0,然后确认ollama的端口是11434,跟MCP配置里的base_url完全一致。另外启动顺序倒不是关键,但server端如果没打印出“listening on”之类的日志,八成是没真正跑起来。我之前用npx跑的server,结果node版本不兼容直接静默失败,换python版才通。
我之前也卡在这过,多半不是协议问题,而是MCP server默认监听的是127.0.0.1,你客户端如果配了localhost或者别的IP,就会直接refused。另外ollama跑的qwen2.5跟MCP server是两码事,你得确认MCP server的py脚本真的起了,并且端口绑对了,用netstat看看8080有没有在听。还有个坑是有些MCP实现要手动设--host 0.0.0.0,不然局域网或容器里根本访问不到。你可以先试试用curl直接打那个server的health接口,通了再折腾客户端配置。
碰到connection refused这事儿太正常了,我之前也卡了好久。你那个MCP server的py脚本跑起来没报错,不代表它真的在监听端口,可以先curl一下localhost:8080看看有没有响应。另外MCP默认走的是HTTP+SSE那套,不是WebSocket,但ollama那边本身也有个端口,别把两个搞混了。我怀疑你可能是把server的config里host写成了127.0.0.1,但客户端在容器或者另一台机器上访问,这样肯定连不上。还有个坑是MCP的server启动后,客户端要主动去连它,而不是等着server推送,所以启动顺序其实无所谓,只要server先绑定了端口就行。你可以试试把host改成0.0.0.0,然后客户端那边用实际局域网IP,而不是localhost。至于教程,B站有个叫“MCP从零到实战”的系列讲得挺细,但更快的办法是直接看官方仓库里的example,比网上那些二手教程靠谱。最后提醒下,如果用了代理软件,记得把localhost和局域网IP加到不走代理的列表里,不然分分钟给你拦截掉。
大概率是MCP server的host绑定了127.0.0.1,ollama和客户端不在同一网络段,试试改成0.0.0.0。