最近在折腾MCP(Model Context Protocol),想把本地部署的Llama 3服务通过MCP暴露给外部工具调用。按照官方文档配置了transport和endpoint,但每次启动服务都报“Connection refused”,日志里显示模型端根本没收到请求。我检查了端口、防火墙,甚至换了不同的模型后端(Ollama和vLLM都试过),还是不行。是不是MCP和模型之间的协议栈有坑?还是我配置里漏了某个关键参数?求大佬指点,卡了两天了,心态快崩了。
部署MCP服务连不上大模型,有人遇到过这种报错吗?
全部回复
共 7 条MCP和模型之间确实可能有协议兼容问题,试试检查下transport的端口映射是否正确。
我前几天也遇到过一模一样的问题,折腾了一整天才发现是MCP服务端默认绑定了127.0.0.1,而模型后端监听的是0.0.0.0,所以请求根本过不去。你检查一下MCP配置文件里有没有类似host或bind_address的参数,改成0.0.0.0试试。另外Ollama和vLLM的API路径有时也会不一致,最好确认endpoint是不是精确匹配了/v1/chat/completions这种格式。
检查下MCP的transport配置是不是用了localhost但模型绑的是0.0.0.0,我上次就这样卡了半天。
老实说我也踩过类似的坑,折腾了两天才发现是MCP的transport层和模型后端之间有个“握手”问题。你用的Ollama和vLLM本身没问题,但MCP在启动时会对endpoint做一次健康检查,如果模型端返回的不是它期望的JSON格式(比如Ollama默认的响应里有个多余字段),就会直接判定连接失败,连日志都不打印详细原因。建议你先单独curl一下模型接口,看看返回的结构里有没有"error"或者非标准的status code,有时候是模型端没开启stream模式导致的。另外检查下MCP配置里的"protocol_version"字段,如果不匹配也会静默拒绝。我最后是换成了带显式health_check_path参数的MCP客户端才绕过去的,你可以试试调整下transport的超时时间,别让它在模型还没完全加载完就发起请求。
检查下MCP的transport配置里是不是漏了host绑定,默认可能是localhost,外部调用得改成0.0.0.0。
我也碰到过类似的坑,后来发现是MCP服务默认绑定的IP是127.0.0.1,而模型后端监听的是0.0.0.0或者别的网卡,导致请求根本发不过去。你可以看看MCP的配置里有没有host参数,手动改成0.0.0.0试试。另外,有些transport实现会要求显式设置Content-Type头,比如application/json,不然模型端会直接拒绝连接。
碰到过类似的坑,我当时折腾了快三天才找到原因。问题很可能出在MCP的transport配置上,尤其是如果你用的是streamable HTTP transport的话,它和普通HTTP请求的握手方式不太一样,需要模型端支持特定的协议头。我看你日志里说模型端根本没收到请求,这大概率不是模型后端的问题,而是MCP服务启动时自己没把端口真正绑定成功,或者绑错了地址——比如默认绑了127.0.0.1但外部工具走的是局域网IP。你可以试试先单独curl一下MCP服务暴露的endpoint,看看能不能拿到响应,如果连这个都失败,那就不是模型端的事了。另外有些MCP客户端(比如Claude Desktop或一些自定义工具)对认证和CORS头有隐性要求,配置里漏了也会导致连接被静默拒绝。建议检查一下MCP服务的启动日志里有没有“listening on”这样的确认信息,以及配置文件里是否明确定义了allowed_origins或者transport的具体模式。如果方便的话,可以贴一下你的config片段,大家更容易帮你定位。