关于 Asana MCP Server
Asana MCP Server 是一款本地优先的服务,使用 Personal Access Token 通过 REST API 读取和修改 Asana。它将任务与项目操作、架构设计、诊断和汇总功能整合在一起。
主要功能
- 0175 种 Asana 读取、写入和设计工具
- 02自定义字段、分区和模板
- 03提供逐项结果的批量操作
- 04任务、看板和项目组合汇总
- 05工具筛选与本地诊断
适用场景
- 01通过 MCP 客户端更新任务和项目结构
- 02创建或扩展项目字段与分区
- 03整理任务队列并汇总看板状态
- 04限制 Agent 可使用的工具范围
MCP 相关
通过本地 stdio 向 MCP 客户端提供 75 种 Asana REST API 工具。工具注解、可选工具集及破坏性操作的明确确认机制可用于控制开放的操作范围。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @jtalk22/asana-mcpASANA_PAT密钥Asana Personal Access Token (create at https://app.asana.com/0/my-apps). Optional when stored via `asana-mcp --setup` (macOS Keychain or ~/.asana-mcp.json).ASANA_WORKSPACE_GIDWorkspace GID. Optional — auto-detected when the token sees exactly one workspace.ASANA_MCP_TOOLSTool surface filter: all | read | write | comma-list of tool names.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Asana MCP 服务
无需打开 Asana,即可更改 Asana。
一个本地优先的 Asana MCP 服务,通过 REST API 提供受控写入、架构操作、诊断,以及通过个人访问令牌一键生成简报。
npx -y @jtalk22/asana-mcp --setup
Claude Code Claude Desktop Cursor Copilot Windsurf Gemini CLI Codex CLI 任何 stdio MCP 客户端
为何开发此服务 · 安装 · 75 个工具 · 组合工具 · Slack + Asana · 如实说明限制 · API 参考
为何开发此服务
Asana 官方的 V2 MCP 服务是受支持的托管方案:采用 OAuth、按工作区限定访问权限、整合任务写入,并在受支持的客户端中提供交互式确认。其工具集会随时间变化,因此请参考 Asana 的当前工具参考,而不要依赖过时的对照表。
如果你需要透明的本地 stdio 进程和直接的 REST API 覆盖范围,请选择此服务:
| 需求 | 此服务的方案 |
|---|---|
| 本地运行 | PAT + stdio。没有托管中间层,也不收集产品遥测数据。 |
| 受控的 Agent 接口 | 挂载 read、write、all,或用逗号分隔的显式工具列表。 |
| 看板和字段设计 | 创建字段和枚举选项、将字段添加到项目、创建/重新排序分区,以及实例化模板。 |
| 可靠处理 REST 边界情况 | 类型化自定义字段值、分区位置、富文本任务备注、开始日期/截止日期排序、分页和有界重试。 |
| 大规模或重复性工作 | 批量循环会在个别项目失败后继续,并报告每项结果。 |
| 减少 Agent 往返次数 | 晨间简报、用户队列、项目组合汇总、看板汇总和收件箱分类,可直接返回用于决策的结果。 |
| 本地诊断 | --doctor、显式工作区检测、生成的工具参考,以及发布前检查。 |
你可以同时使用两者:官方服务用于托管 OAuth,此软件包用于本地优先的 REST 工作流,或满足你的运营模式所需的其他功能。要使用此软件包,请创建个人访问令牌,运行 --setup,并让进程保持在你的计算机上。它只会与 app.asana.com 通信。
Slack + Asana 连续性预览
此软件包仍是完整的 75 工具、MIT 许可的本地服务。下文中的任何内容都不是解锁缺失工具的功能。
同一维护者还在开发 Keep the Thread,这是一个托管连续性层,面向已经使用 Slack 和 Asana、但不想再用一个仪表板的独立运营者或二至五人的团队。它的首个跨工具约定提出了一个更具体的问题:
在选定的 Asana 项目中,哪项 Slack 承诺缺失、未完成或已过时?
flowchart LR
Slack["1–5 selected Slack channels"] --> Report["continuity_asana_discrepancy_report"]
Asana["1 selected Asana project\nincomplete tasks only"] --> Report
Report --> Gaps["matched commitments · gaps · task drift · next reviews"]
Gaps --> Receipt["source IDs preserved\nwrites_performed: 0"]
| 选择 | 适用场景 |
|---|---|
| 此开源软件包 | 你需要本地 stdio、自己的 PAT、全部 75 个 Asana REST 工具、受控写入、看板/架构设计,并且不需要托管中间层。 |
| Keep the Thread 预览版 | 你需要托管的远程 MCP 端点、官方连接器授权、Slack 到 Asana 的差异报告、已保存的连续性约定,或定时 Slack 消息推送。 |
托管版 Asana 连接器代码已上线,并且为只读,但公开 OAuth 激活仍在分阶段开放。请查看代表性输入/输出约定、检查实时连接器状态,或申请有范围限制的部署评审。创建、更新、完成或删除 Asana 任务,不属于托管版差异报告的功能范围。
安装
1. 获取令牌 — app.asana.com/0/my-apps → Personal access tokens → Create。然后任选其一:
npx -y @jtalk22/asana-mcp --setup # stores it in the macOS Keychain (or ~/.asana-mcp.json, mode 600)
或者自行导出 ASANA_PAT。
2. 将服务添加到 MCP 客户端:
{
"mcpServers": {
"asana": {
"command": "npx",
"args": ["-y", "@jtalk22/asana-mcp"]
}
}
}
Claude Code 单行命令:claude mcp add asana -- npx -y @jtalk22/asana-mcp
3. 验证:
npx -y @jtalk22/asana-mcp --doctor # token → identity → workspace → tool surface, as JSON
如果令牌恰好能访问一个工作区,系统会自动检测。若令牌能访问多个工作区:设置 ASANA_WORKSPACE_GID(doctor 会列出可选项),或在每次调用时传入 workspace。
75 个工具:读取、操作、设计
- 26 个读取工具 — 任务、项目、分区、用户、团队、标签、动态、子任务、依赖关系、附件、状态、项目组合、类型预输入(名称→GID),以及跨看板重复项检测;它能识别出一个任务位于多个看板时并非重复项。
- 40 个写入工具 — 创建/更新/完成/分配、评论、关注者、标签、依赖关系、成员关系、移动分区、日期(正确处理
start_on)、自定义字段(日期会封装,multi_enum使用数组)、富文本备注(已清理)、附件(上传上限为 100MB)、批量操作、项目状态、项目组合、带异步任务轮询的模板,以及用于处理自动化程序改写刚刚写入内容的看板的asana_set_notes_safe。 - 6 个架构/设计工具 — 创建自定义字段、扩展下拉选项、将字段附加到项目、分区,重新排序:Agent 能够构建看板,而不只是填充看板。
- 3 个破坏性操作 —
delete_task/delete_project/delete_section必须带有confirm: true才会执行。 - 本地文件边界 —
attach_file需要confirm: true,且只能读取当前目录或ASANA_MCP_FILE_ROOTS中的文件。 - 只读批处理 —
batch_ops会在架构层和运行时层拒绝所有非 GET 操作。
每个工具都声明了 MCP 注解 — readOnlyHint、destructiveHint、idempotentHint、openWorldHint 和标题。遵循这些注解的客户端(Claude Code 会遵循)会在计划模式下自动允许读取操作、安全地并行处理读取操作,并对三个破坏性操作进行限制。
通过 ASANA_MCP_TOOLS=read(30 个工具)、write 或逗号分隔列表精简公开的工具集 — 分诊 Agent 的上下文不需要包含删除工具。
完整输入和语义:docs/API.md。
组合工具:一次调用,得到一个答案
这五个工具可替代多达十次调用的往返流程,基于每天在真实看板上的使用经验构建:
asana_morning_brief— 一次调用,按逾期、今天到期、即将到期和受依赖关系阻塞分类未完成任务。asana_user_queue— 获取某人的完整队列,可分页突破 API 的 100 条搜索结果上限,按到期日期分类,并统计每个项目中的任务数量。用于回答“X 手头有哪些事情?”的调用。asana_portfolio_rollup— 汇总项目组合或项目列表中各项目的健康状况(未完成 / 逾期 / 本周完成 + 状态)。include_archived: true会包含隐藏在已归档看板上的未完成任务 — 默认列表都会跳过这些任务。asana_board_rollup— 按分区汇总单个看板,并按分区汇总任意数量的自定义字段(“交易金额”“索赔金额”);按名称检查截止日期字段是否逾期 — 字段会从看板自身设置中实时解析,不使用任何硬编码值。asana_triage_inbox— 从分诊列表批量创建(API 不支持批量创建),支持逐项覆盖设置,并在失败后继续处理。
坦诚说明限制
- Asana 的搜索 API 最多返回 100 条结果,且不支持分页。基于它构建的工具会说明这一点(
truncated: true),而不会假装后面的结果不存在;asana_user_queue和列表工具会在 REST API 支持的情况下继续分页。 /batch端点会在上游静默丢弃 PUT 请求体和 GET 选项,因此此服务不会通过它路由写入操作。asana_batch_ops仅用于带默认字段的 GET 请求,其说明也明确写出了这一点。- 故事中的评论富文本(
html_text)会被 Asana 转成转义后的纯文本——因此这里的评论特意采用纯文本,而不是静默地显示得很难看。 - 日期自定义字段返回的是完整 ISO 时间戳;比较逾期情况前,会先将日期规范化为
YYYY-MM-DD(我们曾遇到并修复过一个导致错误地显示全部正常的问题)。 - PAT 只能读取自己的「我的任务」(读取他人的任务会返回 403)——
asana_user_queue使用的是适用于任何人的受派人路由。
更多信息请参阅 docs/TROUBLESHOOTING.md。
安全
你的 PAT 拥有与你的 Asana 登录相同的访问权限。它从 ASANA_PAT、macOS 钥匙串(asana-mcp)或 ~/.asana-mcp.json(以 600 权限写入)读取——绝不会记录到日志中,也绝不会发送到 api.asana.com 主机以外的任何地方。没有遥测,也不会主动向外发送数据;请阅读 SECURITY.md。
开发
npm ci && npm test # 16 unit tests, no token needed
npm run doctor # live check against your workspace
npm run api-docs # regenerate docs/API.md from lib/tools.js
欢迎提交 PR——请参阅 CONTRIBUTING.md。MIT。
同一作者的其他作品:@jtalk22/slack-mcp — 不用阅读消息也能跟进 Slack。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。