使用说明
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登录
- 通过HTTP与此代理进行对话(
-
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 <access_token>Atlassian-Cloud-Id: <cloud_id>
- 官方
-
瑞迪斯
- 由LibreChat键入的共享令牌存储
user_id
- 由LibreChat键入的共享令牌存储
典型流量
1.用户身份验证(3LO)
- 用户点击 “连接Atlassian” 在一个简单的前端
- 前端呼叫:
GET /oauth/atlassian/start?user_id=<LIBRECHAT_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: <LIBRECHAT_USER_ID>
-
代理:
- 为此在Redis中查找令牌
user_id - 如果丢失→ 返回HTTP 401 使用JSON正文:
{ "error": "ATLASSIAN_AUTH_REQUIRED", "message": "No tokens stored for user", "user_id": "<LIBRECHAT_USER_ID>" } - 如果存在且已过期→ 使用Atlassian 3LO令牌端点刷新令牌
- 将MCP主体转发到
mcp-atlassian:POST http://mcp-atlassian:8000/mcp Authorization: Bearer <access_token> Atlassian-Cloud-Id: <cloud_id> MCP-Session-ID: <proxy-generated-or-forwarded> Content-Type: text/event-stream
- 为此在Redis中查找令牌
-
mcp-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:<user_id>
存储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