最近在折腾MCP(Model Context Protocol),想把本地部署的Llama 3服务通过MCP暴露给外部工具调用。按照官方文档配置了transport和endpoint,但每次启动服务都报“Connection refused”,日志里显示模型端根本没收到请求。我检查了端口、防火墙,甚至换了不同的模型后端(Ollama和vLLM都试过),还是不行。是不是MCP和模型之间的协议栈有坑?还是我配置里漏了某个关键参数?求大佬指点,卡了两天了,心态快崩了。
部署MCP服务连不上大模型,有人遇到过这种报错吗?
全部回复
共 150 条我之前用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就会连不上,这个也很容易漏。