最近在折腾MCP(Model Context Protocol),想把本地部署的Llama 3服务通过MCP暴露给外部工具调用。按照官方文档配置了transport和endpoint,但每次启动服务都报“Connection refused”,日志里显示模型端根本没收到请求。我检查了端口、防火墙,甚至换了不同的模型后端(Ollama和vLLM都试过),还是不行。是不是MCP和模型之间的协议栈有坑?还是我配置里漏了某个关键参数?求大佬指点,卡了两天了,心态快崩了。
部署MCP服务连不上大模型,有人遇到过这种报错吗?
全部回复
共 160 条我之前用Ollama接MCP也踩过类似的坑,后来发现根本不是协议栈的问题,而是MCP默认走的是stdio,你如果配置成HTTP transport,得确认模型服务那边真的把端口绑在了0.0.0.0而不是127.0.0.1上,尤其是容器里部署的时候特别容易忽略这个。另外你检查下MCP的endpoint路径是不是写全了,有些实现需要带/v1/chat/completions这种后缀,而不是只填个根地址,vLLM和Ollama的路由规则还不完全一样。还有个思路是先用curl直接打一下模型服务的API,如果curl能通但MCP连不上,那问题就出在MCP的客户端配置上,重点看下它有没有额外要求鉴权头或者特定的Content-Type。我上次就是漏了把Authorization头设成空字符串,结果一直报connection refused,日志里又没提示,搞得我排查了整整一天。你试试在MCP配置里加个详细的debug日志级别,有些框架会把真实的重定向或握手信息打出来,比看服务端日志管用。要是还不行,建议换用别人写好的MCP adapter,比如mcp-proxy这种现成工具,比自己手搓transport省心很多。
是不是MCP的host地址写成了localhost,而模型绑的是0.0.0.0?我之前就栽在这,改成127.0.0.1立马就好。
这报错我之前也踩过,多半不是协议栈的问题,而是MCP服务默认绑定的地址和端口跟你模型后端实际监听的地址对不上。比如Ollama默认只监听127.0.0.1,而MCP容器或外部进程访问的是别的IP,Connection refused就很典型。你试试在配置里显式指定host为0.0.0.0,并确认模型端的健康检查接口能从MCP所在环境访问到。另外,vLLM有时候会占用多个端口,可能你连的是错的端口。
我之前也卡在这过,搞了半天发现是MCP的transport配置里host写成了127.0.0.1,但模型服务实际监听的是0.0.0.0,导致请求全打到回环地址上去了。你试试用netstat看看实际监听端口,再核对下MCP端填的endpoint是不是完全一致,包括协议前缀。另外如果走的是Ollama,它默认有API key校验,你检查下MCP侧有没有配对应的认证头,这个很容易漏但报错又不会明说。
我之前也卡在这过,后来发现是MCP的transport默认走的是stdio,但你想暴露给外部工具就得用streamable HTTP,配置里那个endpoint路径得是/sse或者/mcp这种,少个斜杠都不行。另外你检查下MCP服务启动时有没有绑定对host,比如只监听127.0.0.1的话,外部工具当然连不上,得改成0.0.0.0。还有Ollama和vLLM的API路径不一样,别直接填根地址,最好先用curl测一下模型端本身能不能通,排除掉是MCP层的问题。我那时候就是绕过了MCP,先直连模型API确认没问题,再回来调MCP就快多了。
你试试把MCP的host配成127.0.0.1别用localhost,有些版本解析到IPv6就拒了,我上次就这么好的。
大概率是MCP的endpoint配置成localhost了,容器或外部工具访问时得用宿主机的局域网IP才行。
检查下MCP配置里的host是不是写成了127.0.0.1,模型服务监听的是0.0.0.0的话会拒连。
大概率是MCP的sse transport默认走http,但你的endpoint写成了ws,协议对不上。
遇到过,多半是MCP的transport配了localhost但模型端监听的是0.0.0.0,或者healthcheck路径没对上。
我之前也踩过这个坑,最后发现是MCP的transport配置里没显式指定host,默认绑到了localhost,而模型端其实跑在另一个网络命名空间里,两边根本不在一个回环上。你试试把endpoint改成0.0.0.0或者具体的内网IP,再确认下MCP那边连模型用的是不是同一个端口。另外vLLM和Ollama的API路径不一样,MCP的provider配置如果写死了/v1/chat/completions,换成Ollama就会连不上,这个也很容易漏。
刚入门,这个对我帮助很大。
这个报错我前阵子也踩过,折腾了大半天才找到原因。你日志里说模型端没收到请求,那基本可以排除模型本身的问题了,重点看MCP服务启动时绑定的地址对不对。很多人默认配的是localhost或者127.0.0.1,但MCP如果跑在容器里或者WSL里,这个回环地址跟宿主机根本不是一回事,外部工具当然连不上。你换成0.0.0.0试试,或者直接填宿主机的实际内网IP,我之前就是卡在这个细节上。另外transport那块的协议类型也要跟你实际用的调用方式对上,stdio和sse差别挺大的,配错了也是connection refused。还有个容易忽略的点,有些MCP实现启动时会去读一个环境变量里的endpoint,配置文件里写了但环境变量没覆盖,实际生效的还是旧的。你可以开debug日志看看它最终解析出来的目标地址到底是啥,比对着排查快很多。
Connection refused 一般是客户端压根没连上服务端,跟模型本身没太大关系。你可以先确认 MCP server 是不是真的监听在 0.0.0.0,而不是只绑了 127.0.0.1,容器或外部调用很容易踩这个。我之前也遇到过,最后发现是 MCP 的 endpoint 和模型 API 地址写反了,建议把两侧的 base_url 和 transport 配置都逐行对一遍。
我之前也踩过类似的坑,Connection refused这个报错其实挺有迷惑性的,它不一定是你端口或者防火墙的问题,很可能是MCP服务压根没成功绑定到监听地址上。你可以先确认一下MCP server启动时到底listen在127.0.0.1还是0.0.0.0,有些默认配置只绑本地回环,外部工具通过容器或者另一台机器访问就会直接拒掉。另外Ollama和vLLM的API路径不一样,Ollama是/api/chat或者/api/generate,vLLM走的是OpenAI兼容的/v1/chat/completions,如果你MCP里endpoint填错了,它其实是能连上端口但拿不到正确响应,日志表现可能就像没收到请求一样。还有一点容易被忽略,MCP的transport如果是stdio模式,它根本不走HTTP端口,你配的endpoint可能完全没被使用,得确认你用的是SSE还是stdio。我之前卡最久的一次是环境变量里OPENAI_BASE_URL没传进去,MCP进程读的是默认值,结果一直往openai官方地址打,本地模型当然收不到。建议你把MCP的debug日志开到最详细,看它实际请求发到了哪个URL,这一步基本就能定位了。
试试把MCP的transport换成stdio,HTTP模式有时候会和本地模型端口打架。
我之前也踩过这个坑,折腾了一晚上才发现问题根本不在MCP本身。你日志里说模型端没收到请求,那大概率是MCP server压根没把流量转发出去,而不是模型那边的问题。建议你先用curl直接打一下你配置的那个endpoint,确认模型服务本身是通的,这一步能排除掉一半可能性。然后重点看MCP的transport配置,如果你用的是stdio模式,它压根不走网络端口,配了host和port反而会误导你,得换成SSE或者streamable http才行。还有个小细节,Ollama默认只监听127.0.0.1,如果你MCP跑在容器里或者另一台机器上,那肯定connection refused,得改成0.0.0.0。vLLM的话注意它的openai兼容路径要带/v1,很多人漏了这个后缀,请求直接404但日志看起来像连不上。你先把MCP的debug日志开到最详细,看看它到底往哪个地址发的请求,基本就能定位了。
我之前也踩过这个坑,Connection refused基本就是MCP的client压根没连上你的模型服务,跟协议栈关系不大。你先确认一下MCP配置里的endpoint是不是写成了localhost,有些容器环境下得换成宿主机的实际IP或者host.docker.internal才行。另外Ollama默认只监听127.0.0.1,要在环境变量里设OLLAMA_HOST=0.0.0.0重启才对外可用,vLLM那边也检查下--host参数。实在不行用curl直接打一下模型端口,能通再回头调MCP。
MCP的transport配成stdio试试,HTTP模式有些后端不认。我之前也卡这,换stdio秒通。
Connection refused但模型端日志完全没动静,说明请求根本没走到模型那边,大概率是MCP server本身的监听地址或transport配置有问题。你可以先单独用curl打一下MCP服务的健康检查端点,确认它自己有没有起来。我之前也踩过类似的坑,最后发现是transport选了stdio但配置文件里写的是sse,两边对不上就一直拒连。建议把MCP的日志级别调到debug,看看它到底在往哪个地址发请求,比盲猜端口快多了。
学到了,感谢分享!