Jira至Asana MCP大桥
您是否使用以下方式管理项目 Jira 但需要让利益相关者了解最新情况 阿萨纳?
如果是这样,那么我完全能感受到你的痛苦!这是一个轻量级的 模型上下文协议(MCP) 同步的服务器(HTTP变体) Jira 功能进度 阿萨纳 项目状态更新。
专为运行的企业环境而设计 VS代码,以及 GitHub,这座桥让开发或PMO团队在Asana中保持项目组合的可见性,同时将Jira作为唯一的信息来源。
______________________________________________________________________
特性
- 从Jira到Asana的只读集成
- 计算两周进度快照 *特性* 级别(基于用户故事完成情况和故事点数)。 - 在单个功能下汇总多个功能 *史诗* (这可能取决于您的组织模型如何在Jira中工作项目)。
- 自动更新Asana项目状态
- 发布干净、标记格式的摘要,带有颜色编码状态(绿色/黄色/红色)。 - 可选地记录Asana项目中“进度日志”任务的更新。
- HTTP MCP兼容
- 暴露两者 *资源* (用于只读查询)和 *工具* (用于受控写入)通过REST。 - 可以直接从VS Code的MCP客户端或LLM代理调用。
- 安全且可审计
- Jira和Asana令牌通过环境变量或Azure密钥库传递。 - 按设计只读;没有给Jira写信。 - 轻松容器化并部署到Azure容器应用程序或AKS。
______________________________________________________________________
架构概述
┌──────────────────────────┐
│ VS Code / MCP Client │
└─────────────┬────────────┘
│ HTTP (JSON)
┌─────────────▼────────────┐
│ jira-asana-mcp │
│ (FastAPI + MCP facade) │
└──────┬────────┬──────────┘
│ │
┌───────────▼───┐ ┌──▼────────────┐
│ Jira Cloud API│ │ Asana REST API│
└───────────────┘ └───────────────┘- 资源
/resources/jira/feature/{feature_key}/profiles
/资源/jira/epic/{epic_key}/rollup
- 工具
/工具/post_asana_project_status
/工具/sync_one_feature
jira-asana-mcp/
├─ app/
│ ├─ server.py # FastAPI + MCP HTTP layer
│ ├─ jira_client.py # Jira REST wrapper
│ ├─ asana_client.py # Asana REST wrapper
│ ├─ logic.py # Story-point math, markdown rendering
│ ├─ mapping.py # Epic-to-Project map utilities
│ └─ settings.py # Env configuration
├─ mappings/
│ └─ epic_asana_map.yaml # Optional static mapping
├─ Dockerfile
├─ requirements.txt
├─ .env.example
└─ README.md快速入门(本地)
git clone https://github.com/RaInta/jira-asana-mcp.git
cd jira-asana-mcp
cp .env.example .env编辑 .env 添加您的Jira和Asana代币。确保 .env 在你的 .gitignore!这是在此仓库中默认设置的。
JIRA_BASE=https://yourcompany.atlassian.net
JIRA_EMAIL=svc-jira@yourcompany.com
JIRA_TOKEN=***************
ASANA_TOKEN=1/***************
JIRA_STORY_POINTS_FIELD=customfield_10016
JIRA_PARENT_LINK_FIELD="Parent Link"在Docker中构建和运行:
docker build -t jira-asana-mcp:local .
docker run --env-file .env -p 8080:8080 jira-asana-mcp:local服务器监听端口8080。
用法
获取一个功能的进度
curl http://localhost:8080/resources/jira/feature/FEATURE-123/progress将所有功能汇总到Epic下
curl http://localhost:8080/resources/jira/epic/EPIC-456/rollup发布为期两周的Asana状态更新
curl -X POST "http://localhost:8080/tools/post_asana_project_status" \
-H "Content-Type: application/json" \
-d '{
"epic_key": "EPIC-123",
"asana_project_gid": "12001234567890"
}'该工具将:
- 收集EPIC-123下的所有功能。
- 统计过去14天内完成的故事点数。
- 计算完成百分比并渲染降价。
- 在Asana发布新的项目状态。
VS代码MCP集成
- 安装 MCP客户端扩展 在VS代码中。
将此块添加到.vcode/settings.json中:
{
"mcpServers": {
"jira-asana-bridge": {
"type": "http",
"baseUrl": "http://localhost:8080",
"tools": {
"post_asana_project_status": { "path": "/tools/post_asana_project_status", "method": "POST" },
"sync_one_feature": { "path": "/tools/sync_one_feature", "method": "POST" }
},
"resources": {
"jira-feature-progress": { "path": "/resources/jira/feature/{feature_key}/progress" },
"jira-epic-rollup": { "path": "/resources/jira/epic/{epic_key}/rollup" }
}
}
}
}然后,您可以直接通过MCP接口查询或触发工具。
部署(Azure容器应用程序)
az acr create -g my-rg -n myacr --sku Basic
docker tag jira-asana-mcp:local myacr.azurecr.io/jira-asana-mcp:v1
docker push myacr.azurecr.io/jira-asana-mcp:v1
az containerapp create \
-g my-rg -n jira-asana-mcp \
--environment my-env \
--image myacr.azurecr.io/jira-asana-mcp:v1 \
--target-port 8080 --ingress internal \
--env-vars-file .env- 将入口设置为 内部的 为了安全。
- 使用Azure密钥库进行注入
JIRA_TOKEN和ASANA_TOKEN.
配置选项
| 变量 | 描述 |
|---|---|
JIRA_BASE | Jira云基础URL |
JIRA_EMAIL | Jira服务帐户电子邮件 |
JIRA_TOKEN | Jira API代币 |
ASANA_TOKEN | Asana个人访问令牌 |
JIRA_STORY_POINTS_FIELD | 故事点的自定义字段ID |
JIRA_PARENT_LINK_FIELD | 父字段名称(通常 "Parent Link") |
EPIC_ASANA_MAP_PATH | Epic的YAML映射文件→ Asana项目 |
ASANA_PROGRESS_LOG_TASK_NAME | 用于记录更新的可选任务名称 |
安全与治理
- 只读Jira访问--无写操作。
- Asana PAT仅限于发布项目状态更新。
- 可审计性——记录所有工具调用;与你的标准可观测性堆栈配对。
- 部署选项——在本地、Azure容器应用程序中或内部入口后面的AKS上运行。
状态逻辑
- 收集每个功能下的故事。
- 计算总计:
- 故事总得分。 - 在两周内完成的故事点。
- 聚合Epic下的所有功能。
- 渲染标记表并发布Asana项目状态:
- 🟢 绿色≥60% - 🟡 黄色20-59% - 🔴 红色\ JIRA_TOKEN=
5. 确认您的服务帐户对正在查询的Jira项目和Epics具有读取权限。
> 如果您的组织通过SSO(Okta/AzureAD)限制个人令牌,请您的Jira管理员使用API令牌和有限的“只读”权限创建服务帐户。
### Asana个人访问令牌(PAT)
1. 导航至 `https://app.asana.com/0/developer-console` (您可能需要成为Asana管理员或工作区所有者。)
1. 在“个人访问令牌”下,单击 `Create new token`.
1. 给它一个描述性的名字,例如。 `jira-asana-mcp`.
1. 复制生成的令牌并添加到 `.env`:
ASANA_TOKEN=1/
1. 确保PAT有足够的范围来发布项目状态更新(至少 `Edit Project Status` 许可)。
> 对于企业SSO管理的帐户,Asana可能需要通过管理员控制的服务帐户创建令牌。如果禁用令牌创建,请通过Asana管理面板请求一个。
### 推荐做法
- 将令牌存储在Azure密钥库中,并在运行时注入(而不是提交 `.env` 文件)。
- 每90天(或更短时间,如果你足够多疑的话)旋转Jira和Asana代币。
- 将所有服务帐户记录在您的内部访问注册表中。
______________________________________________________________________