linux.do
21K subscribers
116K photos
195 videos
115 files
249K links
linux.do最新话题和热议话题
Download Telegram
【有偿求助】怎么实现sse模式的mcp转发

最近研究MCP,发现remote模式的MCP有2种通信模式,streamableHttp 和 SSE,要对所有的MCP请求做统一转发管理,自己实现了streamableHttp的转发,但是SSE的搞不定,有佬帮忙看看吗,有偿求助

mcp测试工具:npx @modelcontextprotocol/inspector

streamableHttp MCP:npx @modelcontextprotocol/server-everything streamableHttp

sse MCP:npx @modelcontextprotocol/server-everything sse

下面是streamableHttp的转发代码
from fastapi import FastAPI, Request, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import httpx
from starlette.responses import StreamingResponse
import asyncio
import uvicorn

app = FastAPI()

# MCP服务器配置 - 所有远程URL都在这里集中管理,不对外暴露
MCP_SERVERS = {
'microsoft': 'https://learn.microsoft.com/api/mcp',
'everything': 'http://127.0.0.1:3001/mcp',
}

# 配置CORS中间件
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允许所有来源,生产环境应限制为特定域名
allow_credentials=True,
allow_methods=["*"], # 允许所有HTTP方法
allow_headers=["*"], # 允许所有请求头
expose_headers=["*"], # 允许暴露所有响应头
)

# 通用的异步请求转发函数
async def forward_request_async(target_url: str, request: Request):
# 构建请求头,移除不需要转发的头
headers = dict(request.headers)
headers.pop("host", None)
headers.pop("content-length", None)
headers.pop("connection", None)
headers.pop("accept-encoding", None)

# 获取请求体
body = await request.body()

# 创建httpx异步客户端
async with httpx.AsyncClient(timeout=30.0) as client:
try:
# 发送请求到目标服务器
response = await client.request(
method=request.method,
url=target_url,
headers=headers,
content=body,
params=dict(request.query_params),
follow_redirects=True
)

# 构建响应头,移除不能在响应中设置的头
response_headers = dict(response.headers)
response_headers.pop("content-encoding", None)
response_headers.pop("transfer-encoding", None)
response_headers.pop("connection", None)

# 返回响应
return StreamingResponse(
content=response.aiter_bytes(),
status_code=response.status_code,
headers=response_headers
)
except httpx.RequestError as e:
raise HTTPException(status_code=503, detail=f"无法连接到目标服务器: {str(e)}")

# MCP代理路由 - 处理/mcp/{server_id}路径
@app.api_route("/mcp/{server_id}", methods=["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"])
async def mcp_proxy(server_id: str, request: Request):
"""MCP服务代理转发端点"""
# 检查server_id是否在配置中
if server_id not in MCP_SERVERS:
raise HTTPException(
status_code=404,
detail=f"找不到配置的MCP服务器: {server_id}。可用的服务器: {list(MCP_SERVERS.keys())}"
)

# 获取目标URL
target_url = MCP_SERVERS[server_id]

# 对于OPTIONS请求,可以直接返回200,CORS中间件会添加必要的头
if request.method == "OPTIONS":
return {"status": "ok"}

# 转发请求到目标MCP服务器
return await forward_request_async(target_url, request)

if __name__ == "__main__":
# 使用uvicorn运行FastAPI应用
uvicorn.run(app, host="0.0.0.0", port=8000)


14 posts - 5 participants

Read full topic

via LINUX DO - 最新话题 (author: timeless)
pop-up-1480.webm
539.8 KB
Firefox 推出官方吉祥物 Kit

Firefox

Say hi to Kit

The Firefox brand is getting a refresh and you get the first look

大火狐狸 =w=~

13 posts - 7 participants

Read full topic

via LINUX DO - 最新话题 (author: Wixiuenne しかちゃん)

Invalid media:
image
image
image
抽个GPT team车位,截止时间22:00

[奖品 1]:ChatGPT TEAM 车位 * 1个

:three_o_clock: 活动时间:

开始时间:2025 年 11 月 8日 17:40
截止时间:2025 年 11 月 8日 22:00

📝 参与方式:

在本帖下回复。

🔍️ 抽奖规则:

每位用户仅允许参与一次。
使用论坛官方抽奖工具随机抽取中奖者。
中奖后请及时提供邮箱给我

⚠️ 注意事项:

本活动将在活动截止时间后关闭回帖,以确保公正性。
中奖者将在活动结束后 12 小时内在本帖公布,并通过私信通知领奖方式。
所有规则及抽奖结果由活动发起人和论坛管理团队最终解释。

期待您的积极参与,祝您好运!如有任何疑问,欢迎随时联系抽奖发起人。

27 posts - 27 participants

Read full topic

via LINUX DO - 最新话题 (author: 442497000)
claude在编程任务上的霸权还能持续多久

Click to view the poll.

天下苦anthropic久矣,奈何天下大模型无一人与之匹敌
从chatgpt-5-codex,glm-4.6,到现在的minimax-m2。挑战者们要么有明显的缺陷,要么根本就不对标claude sonnet,更别说旗舰模型opus了。

傲慢之罪
从高调官宣敌对国家,到近期trae下架claude系列模型。佬友们觉得我们还需要多久可以告别claude。

16 posts - 10 participants

Read full topic

via LINUX DO - 最新话题 (author: cedric chen)
从尼日利亚礼品卡到虚拟卡的极致省钱之路

还记得我之前分享过入坑尼日利亚区App Store内购的帖子吗? 今天来更新一波我的"省钱进化史"。

第一阶段:礼品卡时代
前几个月我一直在用尼区礼品卡, 优点很明显:

操作简单, 闲鱼直接下单
不用折腾, 适合新手
以Claude Pro为例, 比美区便宜35%

但是! 这还不够极限😎

第二阶段: 虚拟卡升级
今天我通过尼区虚拟卡开通Claude Pro, 最终成本只要76元, 价格优势直接拉满!

再举个例子, 我去年订阅的Inoreader:

尼区年费: 约200元
美区年费: 90美元

实操经验分享
关于虚拟卡:

我在闲鱼花95元买的GoMoney账号
虽然TG群更便宜, 但怕钱货两空, 还是稳妥点
没买电话卡, 因为试了三个号码都添加失败, 最后改邮箱凑合用了

重点提醒:
GoMoney的国际支付限额是隐藏的! 需要抓包才能看到: 找GoMoney域名下的limit路径, 查看响应体里的international_card_transactions字段, 我的额度是8.65 million

建议大家买号前先确认限额,避免踩坑! 另外,第一张卡开卡是免费的,后续每张卡不到1000奈拉。

最后说两句
尼区钱包确实有风险,但价格真的太香了。如果你也是订阅重度用户,可以考虑试试这个方案。当然,风险自负,量力而行~

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: Hims)
win 在win上面得到一個一直保持在桌面的訊息

讓桌面充滿訊息
效果

即使按下win + d 也能持續地看到這些訊息 今天主要講 一個 todo 列表怎麼做

teach

找到
https://www.rainmeter.net/
https://github.com/alperenozlu/rainmeter-todo/releases/download/1.0.2/Rainmeter.To-Do_1.0.2.rmskin

先打開第一個安裝完畢
第二個雙擊兩下就安裝完畢

然後找到第一個的操作面板
雖然不用找到就能直接使用就是

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: 善解人意屬實有點害羞)

Invalid media:
image
image
image
通过vscode上传自己的代码,配置了代理之后依然无法上传

为啥啊,
这么多年,这么多人都用成了,为到我这就不对了呢
2 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: Henry)

Invalid media: image
windsurf 无感换行?

佬友们,有没有实现windsurf无感换号的方法呀,或者直接切号的方法!!

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: 每天都要努力)
安卓chrome关闭一个标签后的 提醒 是怎么关的?

下面这个是否撤销这个条,没法左右滑动 也没法关闭 这东西是怎么关的呀
我不明白

3 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: louishino0524)

Invalid media: image
兄弟们,codex怎么才能快速切换多个不同站点的key?

现在必须把一堆站点的key放在环境变量里,实在太乱了。切站点特别麻烦。
补充一下,我都是ssh连到远程机器上使用。

3 posts - 3 participants

Read full topic

via LINUX DO - 最新话题 (author: iLibra)
怎么快速升级?一直在LV1

5 posts - 5 participants

Read full topic

via LINUX DO - 最新话题 (author: 木头人)
Surge 5 使用小技巧

各位Surge 大佬我刚用Surge遇到了一些问题

就是我的配置文件是放在substore托管的 主要是可以实时刷新我的配置 但是我遇到了一个问题 他是只读的 我想配置 MITM 安装不了证书 希望询问一下大家的意见

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: 󠅕󠅣)
图片/pdf去水印

佬们有没有图片或者pdf去水印的工具或者方法之类的,某些网站画的图不付费只能保存带水印的,直接截图的话又会失真,就很苦恼 😅

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: NHT)
微软的Edge浏览器反复横跳

Mica 效果在标题栏上被反复增删。最新版本右键菜单的 Mica 效果也消失了,仿佛又回到了切换到 Chromium 内核之前的无趣样子。

4 posts - 4 participants

Read full topic

via LINUX DO - 最新话题 (author: StarMist)
抽个vps 只送了一个月

之前商家的活动 送了我一个月 我没啥用 抽了吧~ 配置 2核 4内存
:three_o_clock: 活动时间:

开始时间:即发帖时间
截止时间:Sat, Nov 8, 2025 12:00 AM CST

📝 参与方式:

随意回复

🔍️ 抽奖规则:

每位用户仅允许参与一次。
使用论坛官方抽奖工具随机抽取中奖者。
中奖后请24小时之内私聊我,过时作废!

⚠️ 注意事项:

本活动将在活动截止时间后关闭回帖,以确保公正性。
中奖者将在活动结束后 12 小时内在本帖公布,并通过私信通知领奖方式。
所有规则及抽奖结果由活动发起人和论坛管理团队最终解释。

期待您的积极参与,祝您好运!如有任何疑问,欢迎随时联系抽奖发起人。

60 posts - 59 participants

Read full topic

via LINUX DO - 热门话题 (author: EthanX)
【意见征集】找到可以定制的商家了!:distorted_face:

扩散希望

我真的很需要这个 搞七捻三
[IMG_0887] 111官方会出这个周边吗,不然的话我就要定制了 distorted_face

现在已经找到可以定制:distorted_face:毛绒抱枕的商家了
商家名:铭创优趣
问过40-50cm毛绒可以
问下还有佬友想要吗,一个貌似不能做呢~

200个起订
价格30左右!

事已至此,先睡觉吧
晚安佬们 :distorted_face:

61 posts - 21 participants

Read full topic

via LINUX DO - 热门话题 (author: 池小橙 Official)

Invalid media: image
【喵自我臭美ing】周榜第一名?!

31 posts - 19 participants

Read full topic

via LINUX DO - 热门话题 (author: 【失业客服喵】)

Invalid media: image
今天也看看猫猫吧

在另一个话题中
你不水了,我真不习惯,麻烦恢复下,谢谢。


这是闺蜜家的,非常粘人,喜欢蹭蹭我

35 posts - 21 participants

Read full topic

via LINUX DO - 热门话题 (author: 【失业客服喵】)

Invalid media:
image
image
image
何意味……啊:distorted_face:

97 posts - 19 participants

Read full topic

via LINUX DO - 热门话题 (author: stevessr⁧)

Invalid media:
image
image
「ACK公益站」L站Auth修好了,佬们试一下[2修]

修了好久啊OwO
佬们快试一下能不能登录
https://free-qwen.qinyining.cn
套的是新加坡代理OwO

113 posts - 45 participants

Read full topic

via LINUX DO - 热门话题 (author: ACK握手失败)