最近在折腾本地部署大模型,想用MCP来管理工具调用,但遇到个头疼的问题。我用ollama跑了qwen2.5,然后按照MCP文档配了客户端和server的config,但一启动客户端就报connection refused。查了半天,发现MCP server默认走的是HTTP还是WebSocket?端口也设了8080,但就是连不上。是不是需要先启动server再启动客户端?我试过先跑server的py脚本,没报错,但客户端那边还是提示“无法建立连接”。有没有大佬遇到过类似情况?或者推荐个靠谱的MCP部署教程?先谢过!
MCP在本地部署大模型时总是连不上,哪里配置不对?
全部回复
共 178 条这个报错我太熟了,刚踩完坑出来。你那个“先跑server没报错”其实可能是个假象,因为很多MCP server的py脚本是启动后立刻监听端口,但ollama那边的工具注册如果没走对协议,客户端根本找不到服务。我后来发现关键在config文件里的transport类型,默认是stdio,但你想走网络的话得明确改成sse或者streamable-http,光设端口没用。而且ollama自带的环境变量和MCP server的host绑定可能会冲突,你试试把server的host设成127.0.0.1而不是0.0.0.0,有时候防火墙会拦外网地址。另外你客户端用的什么SDK?如果是官方Python的,它默认走的是子进程通信,不会去连8080端口,得用MCPClient直接指定server的URL才行。我建议你先用mcp-inspector这个工具单独测server,它能直接显示握手日志,比盲猜快多了。最后一个坑:MCP现在HTTP和WebSocket都有实现,但ollama插件很多只支持WebSocket,你最好确认下server端用的库是不是最新版,旧版本经常只监听本地socket路径。
我之前也卡在这个问题上好久,最后发现多半是MCP协议版本和传输层不匹配闹的。你提到HTTP和WebSocket,其实新版MCP默认走的是Streamable HTTP,但很多老教程还在用旧版JSON-RPC over WebSocket,两边握手方式不一样,客户端自然连不上。建议你先确认ollama那边有没有把MCP server的端点真正暴露出来,比如用curl直接打一下那个URL看返回啥,别光看py脚本没报错就以为服务起来了。另外端口8080容易被防火墙拦,尤其macOS和Windows的入站规则,我上次就是被系统自带防火墙坑了,加个例外就好了。还有个小坑,如果你的server绑的是127.0.0.1而客户端跑在WSL或Docker里,那肯定连不上,得用0.0.0.0或者宿主机的局域网IP。配置顺序倒不重要,server先启动是常识,但客户端有时候会缓存旧的配置,重启下客户端进程反而更管用。你要是方便,把config文件里transport那一段贴出来,我帮你看看是不是少了个path或者headers字段。教程的话,别找太老的,直接看MCP官方文档里的Python SDK例子,比博客靠谱多了。
我之前也卡在这步,八成不是协议选错就是端口被占了。MCP现在主要走的是Streamable HTTP,不是WebSocket,你检查下server端是不是默认绑定了127.0.0.1,客户端连的是localhost,有些环境会解析成IPv6导致拒连。另外8080端口容易被其他服务占用,换个冷门端口比如8900试试,启动顺序其实无所谓,只要server先跑起来监听就行。你客户端报connection refused,可以用curl直接测下server的接口通不通,能通再排查客户端配置。
大概率是ollama的host绑定了127.0.0.1,MCP server连过去被拒了,改成0.0.0.0试试。
先确认下MCP server监听的是不是8080,curl一下看看通不通,有时候是配置里base_url写错了。
八成是server监听地址绑了127.0.0.1,客户端走了别的host,改成0.0.0.0试试。
我之前也卡在这过,大概率是MCP server和client的传输协议没对上,默认是stdio不是HTTP,你试试把transport改成sse或者streamable-http,ollama那边也得确保API地址能被MCP访问到。另外启动顺序其实无所谓,但server得监听0.0.0.0而不是127.0.0.1,不然外部请求肯定拒。你检查下server日志,八成有bind错误,我当初就是漏了这步。
我之前也卡在这过,大概率是MCP server监听地址的问题,默认绑的是127.0.0.1,但你客户端如果连的是localhost或者容器IP,就会直接撞上connection refused。建议你先把server的py脚本日志打出来看下实际监听端口,有时候8080被别的进程占了,换个比如8000试试。另外ollama的qwen2.5本身跟MCP没直接关系,工具调用走的是独立通道,先确认server进程真的在跑且没崩。我之前是直接用了官方示例里的uvicorn启动方式,把host改成0.0.0.0才通的。
我之前也卡在这块儿,大概率是MCP的transport协议没对上,默认走的是stdio,不是HTTP,你直接在config里写8080端口它压根不走网络。你先确认下server端用的是不是streamable-http模式,有的版本还要加个/sse路径。另外ollama本身和MCP没关系,别搞混了,MCP管的是工具调用,不是模型推理。我之前是直接用npx跑官方示例配通的,建议你先把server单独跑起来,用curl测下端点通不通,再调客户端。
我之前也卡在过这个坑里,大概率是MCP server没监听对地址,ollama默认绑的是localhost,但客户端可能走IPv6或者127.0.0.1和localhost解析不一致,直接改成0.0.0.0试试。另外你说的HTTP还是WebSocket,我记得现在主流MCP实现走的是streamable HTTP,但很多教程还写老的WebSocket,版本不对也会导致connection refused。还有个小细节,server启动后别急着开客户端,等个几秒让端口真正注册上,我当初就是脚本没报错但实际没起来,用netstat看一眼端口有没有监听最稳。教程的话别只看官方文档,去GitHub搜mcp-python-sdk的examples,比那些二手博客靠谱多了。
我之前也踩过这个坑,大概率不是端口问题,而是MCP server默认走的是stdio而不是HTTP,你客户端配的transport方式得跟server端保持一致。启动顺序倒无所谓,但建议先确认server进程真的在监听,用netstat查一下8080端口有没有被占用。另外ollama的API和MCP是两套东西,别搞混了,MCP server里调工具是走它自己定义的协议。你可以试试把config里的transport改成stdio,或者直接看server启动日志,报错信息一般会更具体。
这问题我熟,八成是MCP的transport协议没对上,你文档里如果写的是HTTP,但server脚本里用的是WebSocket,那肯定连不上。先别管端口,检查下server端实际监听的协议和客户端配置是不是一致,ollama只是提供模型,跟MCP连接无关。我建议直接用官方示例的config,改下模型名就行,自己拼配置很容易漏字段。还有个小技巧,用curl手动调一下MCP的endpoint,能快速定位是server没起来还是路由错了。
我之前也卡在这过,大概率是MCP server监听地址绑定了127.0.0.1,而ollama或客户端走的localhost解析成了IPv6的::1,两边对不上就refused了。你可以试试把server的host改成0.0.0.0,或者客户端连的时候直接写127.0.0.1别用localhost。另外MCP现在一般走的是JSON-RPC over stdio或HTTP,但你那个8080如果没启动成功,先看下py脚本有没有真的bind成功,用netstat查一下端口在不在。我当时还发现是防火墙把端口拦了,你如果开过系统防火墙也检查下。
我之前也卡在过这儿,大概率不是协议选错的问题,而是MCP server的host绑定了127.0.0.1,但ollama或者客户端跑在别的网络命名空间里,导致connection refused。你可以先试试把server的host改成0.0.0.0,然后确认一下客户端用的是不是同一个端口和协议,别光看文档写HTTP还是WebSocket,实际代码里可能默认走的是SSE。另外,你那个server的py脚本启动后有没有打印类似“listening on”的日志?有时候没报错但根本没监听成功。
检查下MCP server是不是绑定在127.0.0.1,ollama和server分开跑的话得监听0.0.0.0才行。
八成是MCP server绑定了127.0.0.1而ollama在别的网络栈,试试把host改成0.0.0.0再配下CORS。
你client连的端口跟server监听的不一定是同一个,看看是不是8080被占了,或者直接用ollama自带工具链省心点。
八成是MCP server没监听对地址,试试把host改成127.0.0.1再配下端口。
我之前也卡在这过,MCP那个传输层确实容易让人懵,它不是单纯HTTP或者WebSocket二选一,新版SDK默认走的是stdio,你要是用TCP模式得显式指定传输类型,光设端口没用。你那个connection refused八成是server根本没在监听,或者监听的地址不是localhost,试试把host设成127.0.0.1而不是0.0.0.0,有时候这个细节很坑。另外ollama那边别用后台服务模式,直接终端跑,看MCP server有没有打印出类似“listening on port”的日志,没这行就说明没起来。还有个常见坑是客户端配置文件里的command路径写错了,或者参数没带全,比如要加--transport tcp。建议先丢开客户端,用curl或者websocat直接打那个端口,能通再排查配置,不能通就是server进程的问题。我之前用npx @modelcontextprotocol/server-everything做测试,文档里写的demo配置基本能跑通,你可以拿那个当基准来对比。
我之前也栽在MCP这个连接问题上,折腾了整整一个下午。你那个connection refused大概率不是协议选错的问题,而是MCP的server端没有真正监听在你设的8080端口上——很多server脚本默认是绑定127.0.0.1,但你客户端如果走的是localhost或者局域网IP,有时候解析会出岔子,尤其Windows下特别常见。建议你先用netstat -ano | findstr 8080看看端口到底起没起来,如果没起来,多半是server的py脚本里host参数写死了,改成0.0.0.0试试。另外ollama跑的qwen2.5和MCP之间其实没有直接关系,MCP只管工具调用,模型本身不参与连接握手,所以别在模型配置上浪费时间。还有一个坑是MCP的传输层现在分stdio和HTTP两种,你文档里如果看到关于WebSocket的说明,多半是旧版协议,现在主流客户端更认stdio,尤其你用本地脚本起server的话,直接走命令行管道比走网络端口稳得多。我自己后来干脆放弃HTTP,改用npx直接拉起server进程,客户端配置里指定command和args就行,再也没出过连接问题。你要是还卡着,可以试试把config里的transport字段改成stdio,然后重启客户端,大概率能通。
我之前也栽在这上面过,大概率是MCP server和client的传输协议没对齐,ollama这边默认走的HTTP,但MCP新版很多走WebSocket,你检查下config里的transport字段。另外端口别光看8080,有时候本地host绑的是127.0.0.1,换成0.0.0.0试试,或者直接用localhost而不是IP访问。启动顺序其实无所谓,但server的py脚本得确认真的在监听,可以curl一下健康检查接口看看响应。我之前还遇到过防火墙把回环地址给拦了,关掉或者加白名单就好。
你这问题我前两天刚踩过坑,大概率是MCP server监听地址写成了127.0.0.1,但ollama或客户端那边用了localhost,IPv6解析对不上就报connection refused。另外确认下server是不是真的在8080端口起来了,用curl http://127.0.0.1:8080试下有没有响应。顺序上先起server没错,但客户端启动前最好等个几秒让端口完全绑定,有时候脚本退太快但连接还没释放。实在不行直接换个轻量的MCP实现,比如用python的mcp库自带的stdio模式,比HTTP省心很多。
我之前也栽在这上面过,大概率不是端口问题,而是MCP的transport协议没对齐。你查下客户端配置里默认走的是不是stdio,而不是HTTP,ollama这边通常要单独起个MCP adapter进程,不能直接拿ollama的API当server用。建议先确认server端有没有真正监听8080,用lsof看看,再检查下config里URL是不是写成了localhost,有时候换成127.0.0.1就能通。我之前是卡在server的CORS上,加上允许跨域就好了,你可以试试。