最近在折腾本地部署大模型,想用MCP来管理工具调用,但遇到个头疼的问题。我用ollama跑了qwen2.5,然后按照MCP文档配了客户端和server的config,但一启动客户端就报connection refused。查了半天,发现MCP server默认走的是HTTP还是WebSocket?端口也设了8080,但就是连不上。是不是需要先启动server再启动客户端?我试过先跑server的py脚本,没报错,但客户端那边还是提示“无法建立连接”。有没有大佬遇到过类似情况?或者推荐个靠谱的MCP部署教程?先谢过!
MCP在本地部署大模型时总是连不上,哪里配置不对?
全部回复
共 178 条我之前也卡在这过,大概率不是协议问题,而是MCP server默认绑定的地址是127.0.0.1,如果你客户端跑在容器或者另一台机器上,8080端口根本不会通。你先确认下server启动时有没有监听0.0.0.0,或者直接在客户端那台机器上curl一下端口试试。另外ollama的base_url和MCP的server配置是两回事,别混了,我之前就是在这绕了半天。
我之前也卡在这儿过,大概率不是协议问题,而是MCP server的host绑定成了127.0.0.1,ollama那边也是localhost,但客户端如果走容器或者另一套网络栈就全断了。你试试把server监听地址改成0.0.0.0,然后确认客户端连的是不是同一个IP,别用localhost。另外8080端口如果被防火墙拦了也会报connection refused,先curl一下看看通不通。启动顺序倒不是关键,server挂着就行,主要还是网络路径得捋清楚。
之前也卡在这过,MCP默认其实走的是stdio,不是HTTP或WebSocket,你客户端配置里得指定transport方式,光设端口没用。另外ollama本身和MCP server是两码事,得先确认server的py脚本真的监听了对应端口,用netstat查下8080有没有起来。我之前是client和server的config里URL写成了localhost,改成127.0.0.1就好了,你可以试试。
我之前也卡在这块好久,后来发现八成是MCP的传输层搞混了。现在官方推荐的是Streamable HTTP,不是老版的WebSocket,你如果按旧文档配的,server和client协议对不上,自然就connection refused。另外,ollama跑的qwen2.5本身不提供MCP端点,MCP server得单独起一个进程去对接它,你那个py脚本如果只是加载模型没监听端口,客户端肯定找不到人。建议先确认server启动后有没有打印“listening on 0.0.0.0:8080”这类日志,别光看没报错就以为起来了。还有个小坑,有些客户端默认走localhost,但server绑的是127.0.0.1,这俩在某些系统上不是一回事,你换绑成0.0.0.0试试。端口占用也查一下,8080经常被别的服务抢走,lsof看一下最稳。教程的话别搜太老的,直接翻MCP官方Python SDK的example,里面有个echo server,能跑通再套你自己的工具逻辑。
端口8080只是默认的HTTP监听端口,但MCP目前主流的协议其实是基于JSON-RPC的WebSocket,你客户端得显式指定ws://协议头。另外Ollama本身不提供MCP能力,你那个server脚本得单独用uvicorn之类的服务跑起来,确认它真的监听在0.0.0.0而不是127.0.0.1上。我之前也卡过这个,后来发现是client配置里base_url漏了/mcp路径,加上就好了。建议先curl一下server的health接口,能通再排查客户端。
Connection refused大概率不是协议问题,而是server进程没起来或者监听地址不对。你先确认下server脚本是不是真的在监听8080,用netstat -an | grep 8080看看,另外ollama默认走的是11434端口,MCP的server地址别填错了。我之前也遇到过类似情况,后来发现是config里host写成了localhost,但server绑的是0.0.0.0,改成127.0.0.1就通了。至于HTTP还是WebSocket,MCP现在主流是走HTTP+SSE,但你用py脚本跑的时候先确认下有没有加--transport参数。
之前也踩过这个坑,大概率不是协议的问题,而是MCP server绑定的是127.0.0.1,ollama那边是通的但MCP的地址没对上。你试试在server的py脚本里把host改成0.0.0.0,或者确认下客户端config里写的URL是不是http://localhost:8080,别漏了端口前的斜杠。另外先启动server再启动客户端这个顺序没错,但server跑起来不代表端口真的在监听,你可以在终端用netstat或curl验证下。顺便说一句,用npx或者uvx跑官方SDK里的示例配置会省心很多,别自己手搓JSON。
我之前也卡在这过,多半不是端口问题,而是MCP现在主流走的是stdio(本地进程通信),不是HTTP或WebSocket,你客户端配置里得指定命令而不是URL。另外ollama本身不直接提供MCP接口,你得单独跑一个MCP适配器进程,比如用python写个bridge脚本,再在客户端配置里把command指向它。建议先确认下客户端版本是否支持MCP协议,有些老版本只认自定义格式。
我之前也栽在这上面过,大概率是config里地址写成了localhost,但ollama或者MCP server监听的是127.0.0.1,或者反过来,两个解析出来的网络栈不一样就容易拒连。可以先试试把server的host显式设成0.0.0.0,客户端那边用127.0.0.1而不是localhost。另外,MCP现在主要走的是JSON-RPC over stdio或HTTP,不是WebSocket,如果你用的是官方Python SDK,默认就是stdio模式,但你配了8080端口反而可能让客户端去连一个不存在的HTTP服务。建议先确认一下你跑的server脚本是不是真的在监听端口,可以用netstat或lsof看看,别光看没报错就觉得启动了。
我之前也踩过这个坑,MCP的transport层默认是stdio,不是HTTP或者WebSocket,除非你显式在server端配置了sse或者streamable-http模式,否则客户端用TCP去连8080端口肯定报connection refused。你那个server的py脚本能跑起来不代表它就在监听网络端口,很可能只是通过标准输入输出跟父进程通信,所以得先确认你用的MCP SDK版本和客户端支持的协议是不是匹配的。另外ollama本身不参与MCP的通信,它只是后端推理服务,MCP server要自己实现工具调用逻辑去请求ollama的API,你检查下server代码里有没有把endpoint指向正确的本地地址。还有个容易忽略的点,如果你用的是异步框架,端口绑定可能没生效,试试在server启动日志里看有没有“listening on”之类的输出。实在不行就换个思路,先用MCP官方的test client连一下,排除是客户端配置问题还是server问题。配置顺序倒不是关键,主要是协议和地址要一致,我之前就是没分清stdio和HTTP模式,折腾了一个晚上。
我之前也卡在这过,MCP现在实现其实挺混乱的,不同版本对传输协议的支持不一样,有的默认走stdio,有的走WebSocket,HTTP反而不是标准选项。你检查一下server端到底绑定在哪了,有时候脚本跑起来但实际监听的是127.0.0.1,而客户端配的是局域网IP或者localhost映射不对,connection refused基本就是这个原因。另外ollama本身不参与MCP通信,它只是个模型后端,MCP server和客户端之间是独立的连接,先启动server再启动客户端这个顺序没错,但最好确认一下server有没有真正进入监听状态,有些框架要等模型加载完才开端口。你试试直接用curl或者浏览器访问一下那个8080端口,看有没有响应,如果连本机都拒绝,那肯定是server的监听配置或者防火墙问题。还有个小坑,某些MCP封装库会要求客户端和server用同一个session id,或者配置文件里有个transport参数没设对,建议翻翻你用的那个库的源码,看它到底走的是哪种握手。
大概率是server起在localhost,客户端却连127.0.0.1之外的地址,检查下host和端口绑定。
这问题我踩过一模一样的坑,大概率不是顺序问题,是MCP默认走的是stdio而不是HTTP,8080端口根本没监听。你试试在server配置里显式加上transport: http,或者直接用streamable-http模式,ollama那边不用动。另外client的base_url别写localhost,写127.0.0.1试试,有时候代理会干扰。还有个小细节,如果server端用了uvicorn,一定要加--host 0.0.0.0,不然只绑了127.0.0.1。最后建议配好后先跑个简单的health check接口确认连通,再谈工具调用。
我之前也卡在这过,问题多半不是协议选错,而是server端绑定的host写成了localhost,客户端用127.0.0.1去连反而被拒了。另外ollama和MCP server是两码事,得确保你那个py脚本真正监听在0.0.0.0:8080上,用netstat看一眼最稳。还有个小坑,有些MCP实现默认走的是SSE,不是普通HTTP,你客户端配置里如果写的是http://,可能就握手失败了。建议直接换个轻量点的MCP框架比如fastmcp重写一遍,官方文档里的示例配置基本能直接跑通。
八成是server没监听对地址,ollama默认绑localhost,试试把host改成0.0.0.0再看端口通不通。
大概率是MCP server没监听对地址,ollama默认绑定localhost,改成0.0.0.0再试试。
大概率是server没监听对地址,试试绑127.0.0.1或者0.0.0.0,ollama那边也得开host模式。
我之前也卡在过这,八成不是协议问题,而是MCP server默认绑定的是127.0.0.1,ollama那边倒是正常,但客户端如果走的是localhost或者容器网络,就很容易被拒。你先确认下server启动时有没有监听0.0.0.0,或者直接看下py脚本里host参数是不是写死了。另外,MCP现在大多走的是Streamable HTTP,不是WebSocket,但你用8080端口的话,得确保客户端配置里的URL路径和server路由完全一致,比如后面有没有加/sse或/mcp。我之前就是漏了路径,折腾了两天才发现。
八成是server没起在客户端认的那个地址上,ollama和MCP的host得统一用localhost别用127.0.0.1试试。
MCP默认确实是HTTP,但很多教程漏了要先配好CORS头,不然客户端那边直接握手失败。
我之前也栽在MCP的连不上上,后来发现多半是host没配对。你试试把server监听地址改成127.0.0.1,别用0.0.0.0,ollama那边倒是无所谓,但MCP的client和server必须走同一个回环地址。端口8080容易被占用,换一个冷门的比如8899试试。另外确认下server的py脚本是不是真的在跑,有时候没报错但进程其实挂了,加个打印日志看下。我之前用这个教程搞定的,你搜MCP官方示例里那个fastmcp的demo,照着抄config基本不会翻车。