最近在折腾MCP(Model Context Protocol),按教程把服务器跑在了自己电脑上(Python + FastMCP),本机通过Claude Desktop调用一切正常。但我想让办公室另一台电脑也连过来用,直接填我电脑的局域网IP+端口好像不行,报连接拒绝。查了半天看到说要配SSE或者streamable HTTP,但官方文档例子都默认localhost,没太看懂怎么改host和端口。另外是不是还要处理防火墙和CORS?有没有大佬实际部署过局域网可用的MCP服务,能给个大概思路或者踩坑提醒?先谢过了,卡在这两天了有点自闭。
MCP服务器部署在本地,怎么让局域网内其他电脑也能调用?
全部回复
共 11 条我之前也卡在这过,其实你本地能跑通说明服务本身没问题,问题基本出在监听地址和防火墙。FastMCP默认绑127.0.0.1,改成0.0.0.0再指定端口,然后记得把Windows防火墙的入站规则放行那个端口,不然局域网肯定拒连。SSE那块可以先不用管,FastMCP直接支持streamable HTTP,客户端填http://你的IP:端口/mcp就行。CORS的话如果只是Claude Desktop调用一般不用配,但如果你后面想用网页端调试就得加上。另外最好确认下办公室WiFi是不是AP隔离,那种情况局域网也互访不了,可以用手机热点先验证下。
防火墙放行端口后,记得把server里的host改成0.0.0.0,不然局域网肯定连不上。
这问题我上个月刚踩完一遍,你直接把FastMCP的host设成0.0.0.0就行,默认绑127.0.0.1所以局域网肯定连不上,端口记得别跟别的服务撞了。SSE那套真不用急着上,先确认你本机防火墙有没有放行那个TCP端口,Windows会弹提示你八成是点了取消,去高级设置里加条入站规则最稳。CORS倒是只有浏览器调用才需要管,Claude Desktop这种原生客户端不检查这个,但如果你后面想用网页版测试工具就得加上。还有个小坑,Python服务跑起来后别关那个终端窗口,我之前就是关了窗口还以为配置有问题。你让同事用http://你的IP:端口/mcp这个路径试试,如果还报错就在服务端打印一下请求日志,看到底是连不上还是协议不匹配。另外如果公司网络有AP隔离,那物理上就隔离了,怎么配都没用,拿手机热点验证一下最直接。
host改0.0.0.0就行,端口别被占用,防火墙放行TCP,CORS在FastMCP里配allow_origins=*试试。
我之前也卡在这过,关键就是FastMCP默认绑了127.0.0.1,你得在启动时把host改成0.0.0.0,端口别跟别的服务撞了。然后Windows防火墙记得放行那个TCP端口,入站规则加一下,不然别人连你肯定报拒绝。CORS倒不是必须,除非你前端有跨域调用,但我用Claude Desktop连没遇到这问题。另外你客户端那边别用http://ip:port,得写成http://ip:port/sse这种路径,不然404。
我之前也卡在这块儿过,问题八成不在代码而在绑定地址上。FastMCP默认监听127.0.0.1,你改成0.0.0.0让服务暴露到局域网,然后客户端填你电脑的实际IP,端口别被占就行。但光改这个还不够,Windows防火墙大概率会拦外网连接,你手动加个入站规则放行那个端口,不然还是报拒绝。至于SSE和streamable HTTP,其实不用太纠结,FastMCP新版本直接支持streamable HTTP,你把transport设成http就行,URL后面跟上/sse或者直接根路径,具体看版本。CORS的话,如果你客户端是Claude Desktop或者写代码调用,一般不用管,但如果是浏览器里的网页应用,那确实得加响应头,不然浏览器会拦。另外还有个坑,就是客户端那边填URL一定要带上协议,比如http://192.168.x.x:8000,别漏了。你先试试把host改0.0.0.0然后防火墙放行,大概率就能通,我当初就是这么解决的。
防火墙放行端口后,把host改成0.0.0.0,再用http://局域网IP:端口连,CORS记得加白名单。
这问题我上个月刚折腾完,你卡的点我全都踩过一遍。连接拒绝大概率是FastMCP默认绑定了127.0.0.1,你直接改成0.0.0.0监听所有接口就行,但光是这一步还不够,Windows防火墙的入站规则也得手动放行那个端口,不然外部请求还是会被拦下来。SSE那个方向其实不用太纠结,FastMCP新版本直接支持streamable HTTP,你只要在启动时把host参数传成0.0.0.0,客户端那边把URL改成http://你的局域网IP:端口/sse(或者对应路径)就能通,我自己就是这么干的。CORS倒不是重点,因为Claude Desktop不是浏览器,没有同源策略限制,但如果你后面想用网页调试工具或者某些Web客户端,那就得在服务端加一下CORS中间件。另外提醒一个隐蔽的坑:如果你电脑开了VPN或者虚拟网卡,局域网IP可能会变,最好在路由器里给MAC地址绑个固定IP,不然同事那边配置好了隔天又连不上。还有个小技巧,先别急着上Claude Desktop,用curl或者Postman请求一下health endpoint,能通再连客户端,排查起来快很多。
我之前搞的时候也卡在localhost上,其实FastMCP的host参数直接绑0.0.0.0就行,端口别被占用,然后客户端那边填http://你的局域网IP:端口/sse。防火墙大概率是拦你的,Windows记得放行对应端口,CORS倒不一定非配,除非你前端有跨域需求,纯桌面客户端一般没事。
还有个坑是Python的uvicorn默认只监听127.0.0.1,你如果直接用FastMCP的CLI可能没暴露出去,得手动指定host。另外客户端那边如果还报错,试试用http而不是https,有时候会有人习惯性加个s然后连接被拒。我最后是拿手机热点测了下局域网IP通不通,排除网段隔离的问题,你参考下。
这问题太典型了,我刚折腾完一遍。关键点其实不在SSE还是streamable HTTP,而是FastMCP默认绑定的是127.0.0.1,你改成0.0.0.0再配合指定端口就行,然后客户端那边填你电脑的实际局域网IP,别用localhost。防火墙确实得放行那个TCP端口,Windows的话入站规则加一条,不然外部连接肯定被拦。CORS这块倒是没那么玄乎,如果客户端是Claude Desktop或者直接走MCP协议,一般不用管,但如果你用浏览器调试工具去测,那就得加上跨域头。另外提醒一个巨坑,有些MCP SDK内部会做host校验,你服务端代码里如果写死了允许的origin或者host,局域网IP会被拒,检查下有没有类似白名单配置。最好先在你那台电脑上用curl带--connect-timeout试一下局域网IP加端口通不通,通了再去折腾应用层,不然容易瞎忙活。
我之前也卡这过,关键就是FastMCP默认绑的是127.0.0.1,你启动时得显式指定host=0.0.0.0,不然局域网根本访问不到。SSE那个路径一般就是/sse,客户端填http://你的IP:8000/sse就行。防火墙记得放行TCP端口,Windows的话入站规则要加一条,CORS那个其实主要影响浏览器调用,Claude Desktop这类客户端一般不用管。还有个小坑,如果公司网络有AP隔离,那设备间可能直接不通,可以先ping一下确认基础连通性。