最近在折腾MCP(Model Context Protocol),按教程把服务器跑在了自己电脑上(Python + FastMCP),本机通过Claude Desktop调用一切正常。但我想让办公室另一台电脑也连过来用,直接填我电脑的局域网IP+端口好像不行,报连接拒绝。查了半天看到说要配SSE或者streamable HTTP,但官方文档例子都默认localhost,没太看懂怎么改host和端口。另外是不是还要处理防火墙和CORS?有没有大佬实际部署过局域网可用的MCP服务,能给个大概思路或者踩坑提醒?先谢过了,卡在这两天了有点自闭。
MCP服务器部署在本地,怎么让局域网内其他电脑也能调用?
全部回复
共 29 条我之前也卡在这过,其实你本地能跑通说明服务本身没问题,问题基本出在监听地址和防火墙。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一下确认基础连通性。
我之前搞的时候也是卡在localhost上,后来发现FastMCP启动时把host设成0.0.0.0就行,这样才会监听所有网卡,光填IP不顶用。防火墙记得放行那个端口,Windows会默认拦,CORS其实看客户端,Claude Desktop一般不用管,但如果是网页端就得加响应头。另外SSE和streamable HTTP本质上就是换了个传输方式,你直接用streamable HTTP的端点地址给同事填,不用纠结改host的事。
我之前也卡在这块儿过,你那个连接拒绝大概率不是MCP本身的问题,而是FastMCP默认监听的是127.0.0.1,这个地址只认本机回环,局域网其他机器当然进不来。你得在初始化服务器时显式绑定0.0.0.0,比如host参数设成这个,这样才会监听所有网卡接口,然后端口保持你原来的就行。至于SSE还是streamable HTTP,其实你本地跑通了说明协议层没问题,局域网调用主要就是传输地址的事,不用非得换实现方式。防火墙这块倒是真得看,Windows的话入站规则得放行那个Python进程或者对应端口,不然外部请求直接被拦了,你可以在另一台电脑上先telnet一下IP加端口试试通不通。CORS这个得看你客户端是不是浏览器环境,Claude Desktop这种原生应用一般不校验CORS,但如果之后想用网页版调试工具就得在服务端加上允许的origin头。还有个小坑,如果你电脑开了多个网卡或者虚拟网卡,0.0.0.0会绑定所有,但最好确认下实际局域网IP是哪张网卡,免得客户端填错了地址还以为是服务端问题。我之前用uvicorn跑FastMCP,发现它默认只监听127.0.0.1,得在启动参数里加--host 0.0.0.0,不然光改代码里的host也白搭,你可以先试试这个。
我之前也卡在这过,后来发现FastMCP默认绑的是127.0.0.1,得显式改成0.0.0.0才能让局域网访问,不然防火墙放行了也是白搭。另外如果你用的是SSE模式,客户端那边URL要写http://你电脑的IP:端口/sse,别漏了路径。CORS的话,如果客户端是Claude Desktop这类原生应用通常不校验,但如果是浏览器里跑就得加个中间层处理一下,不然会报跨域。最好先拿curl测一下局域网IP的连通性,能通再排查应用层,省得瞎折腾。
之前搞过类似的,你直接改host不够,FastMCP默认绑的是127.0.0.1,得在启动时显式指定0.0.0.0,然后客户端那边别用localhost,填你电脑的局域网IP。防火墙大概率要放行那个端口,Windows的话入站规则加一下,CORS倒是看客户端,Claude Desktop一般不用管,但如果是网页端就要配。另外建议直接上streamable HTTP,SSE在局域网里也能用但可能遇到代理或者长连接断掉的问题,先拿curl测一下端口通不通再连客户端,排查起来快很多。
把host改成0.0.0.0,端口别用默认的,防火墙放行TCP就行,CORS基本不用管。
我之前也卡在这过,关键是你FastMCP启动时得显式监听0.0.0.0而不是默认的127.0.0.1,不然局域网肯定连不上。然后端口记得在Windows防火墙里放行,TCP和UDP都加上。CORS的话,如果你是用Claude Desktop这种客户端直连,一般不用管,但如果是浏览器里跑调试工具就得设置允许来源。另外SSE和streamable HTTP本质都是走HTTP,你直接用http://你的IP:端口/sse这个路径试下,别漏了路径后缀。
我之前搞的时候也卡在localhost这了,其实你只要把FastMCP初始化时传的host参数改成0.0.0.0,然后客户端那边填你电脑的实际局域网IP就行,端口不用动。防火墙记得放行那个TCP端口,Windows的话入站规则加一条就够,CORS一般本地调试不用管,除非你客户端是浏览器里跑的。另外建议先在同台机器上试一下用局域网IP访问,能通再排查另一台电脑,这样问题定位快很多。
我之前也卡在这过,问题基本就是FastMCP默认绑了127.0.0.1,你得在启动的时候显式传host=0.0.0.0,这样才会监听所有网卡。然后防火墙入站规则记得放行那个端口,Windows弹窗允许一次就行,CORS的话如果只是命令行客户端调用一般不用管,但如果你用浏览器调试就得加响应头。最坑的是Claude Desktop那边如果之前连过localhost,可能缓存了配置,建议换个端口号或者清一下配置再试。
把host设成0.0.0.0监听所有网卡,防火墙放行那个端口基本就能通,CORS看客户端要不要跨域。