MCP Atlassian代理
Atlassian模型上下文协议(MCP)服务器的一个小型HTTP代理,它:
- 手柄 Atlassian OAuth 2.0(3LO) 每个librechat用户
- 商店 访问/刷新令牌 在Redis中
- 注射用户的 承载令牌+云ID 转化为发送到上游的请求
mcp-atlassian服务器 - 规范化 可流式传输http (SSE风格)MCP响应,以便简单的前端(或LibreChat)可以使用它们
目标是保持LibreChat的MCP集成简单,同时将所有Atlassian特定的身份验证复杂性卸载到此代理中。
______________________________________________________________________
1.高层架构
组件
- LibreChat(UI+MCP客户端)
- 通过HTTP与此代理进行对话(/mcp/forward) - 可选地使用小型前端触发Atlassian登录
- MCP Atlassian代理(本项目)
- 暴露: - /oauth/atlassian/start –启动基于浏览器的Atlassian 3LO - /oauth/atlassian/callback –OAuth重定向类型 - /auth/status –检查给定用户的令牌是否存在 - /mcp/forward –将MCP JSON-RPC请求转发到 mcp-atlassian - 用途 瑞迪斯 用于令牌存储
- Atlassian MCP服务器(
mcp-atlassian)
- 官方 ghcr.io/sooperset/mcp-atlassian 图像 - 暴露 /mcp 具有可流式传输的http(SSE over http POST) - 接受: - Authorization: Bearer - Atlassian-Cloud-Id:
- 瑞迪斯
- 由LibreChat键入的共享令牌存储 user_id
典型流量
1.用户身份验证(3LO)
- 用户点击 “连接Atlassian” 在一个简单的前端
- 前端呼叫:\
GET /oauth/atlassian/start?user_id=
- 代理重定向到Atlassian授权URL:
https://auth.atlassian.com/authorize?...
- 用户认证+同意
- Atlassian重定向回:
GET /oauth/atlassian/callback?code=...&state=...
- 代理:
- 交易所 code 对于代币(access_token, refresh_token, expires_in, scope) - 呼叫Atlassian discovery查找 cloud_id - 坚持一切 瑞迪斯 根据给定 user_id
- Proxy显示一个简单的确认页面:\
“Atlassian已连接✅ 你可以回到LibreChat。”
2.来自LibreChat的MCP呼叫
- LibreChat通过HTTP POST将MCP JSON-RPC发送到:\
POST /mcp/forward\ 标题包括以下内容:
- X-User-ID:
- 代理:
- 为此在Redis中查找令牌 user_id - 如果丢失→ 返回HTTP 401 使用JSON正文:
{
"error": "ATLASSIAN_AUTH_REQUIRED",
"message": "No tokens stored for user",
"user_id": "
"
}- 如果存在且已过期→ 使用Atlassian 3LO令牌端点刷新令牌 - 将MCP主体转发到 mcp-atlassian:
POST http://mcp-atlassian:8000/mcp
Authorization: Bearer
Atlassian-Cloud-Id:
MCP-Session-ID:
Content-Type: text/event-streammcp-atlassian响应为 上海证券交易所 (服务器发送的事件)包含一个或多个data:线。
- 代理解析SSE流,提取 最后一个MCP JSON payload,并将其作为单个JSON响应返回给客户端:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
} {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "confluence_search",
"arguments": {
"query": "title ~ \"Theophile\" AND type=page",
"limit": 10,
"spaces_filter": null
}
}
}2.配置
所有行为都是通过环境变量控制的。
Atlassian OAuth(3LO)
必需变量
ATLASSIAN_CLIENT_IDATLASSIAN_CLIENT_SECRETATLASSIAN_REDIRECT_URI
必须与Atlassian开发人员控制台中注册的重定向URI匹配。\ 例子: https://your-domain.example.com/oauth/atlassian/callback
可选变量
ATLASSIAN_AUTH_BASE_URL(默认值:https://auth.atlassian.com)ATLASSIAN_API_BASE_URL(默认值:https://api.atlassian.com)ATLASSIAN_SCOPE(空格分隔的范围),示例:
read:confluence-space.summary
read:confluence-props
read:confluence-content.all
read:confluence-content.summary
search:confluence
read:jira-work
offline_access______________________________________________________________________
瑞迪斯
变量:
REDIS_URL例子:
redis://redis:6379/0典型密钥格式:
atlassian:tokens:存储JSON示例:
{
"access_token": "...",
"refresh_token": "...",
"expires_at": 1763895800,
"scope": "read:confluence-content.all read:jira-work offline_access",
"cloud_id": "e2adebfa-67ae-44fc-97c8-4dba48249464"
}______________________________________________________________________
代理/MCP
MCP_ATLASSIAN_URL--上游MCP Atlassian服务器的URLFLASK_ENV—development或productionAPP_HOST--默认值:0.0.0.0APP_PORT--默认值:9100
