roychri/mcp-server-asana
简介
核心亮点
- 自然语言直接操作 Asana 任务与项目
- 消除在 AI 界面与管理后台间的切换
- 支持 Claude Desktop 等主流 MCP 客户端
- 通过标准协议实现企业级 SaaS 数据互通
完整文档
Asana 的 MCP Server

这个 Asana 的 Model Context Protocol server 实现允许你通过 MCP Client(如 Anthropic 的 Claude Desktop Application 等)与 Asana API 进行交互。
更多关于 MCP 的详情请参阅:
- https://www.anthropic.com/news/model-context-protocol
- https://modelcontextprotocol.io/introduction
- https://github.com/modelcontextprotocol
<a href="https://glama.ai/mcp/servers/ln1qzdhwmc"><img width="380" height="200" src="https://glama.ai/mcp/servers/ln1qzdhwmc/badge" alt="mcp-server-asana MCP server" /></a>
Environment Variables
ASANA_ACCESS_TOKEN: (必填) 你的 Asana access token
READ_ONLY_MODE: (可选) 设置为 'true' 以禁用所有写操作。在此模式下:
create-task prompt 将被禁用
- 仅可用读操作
这适用于测试或当你需要确保 Asana workspace 不被更改时。
Usage
在你选择的 AI 工具(例如 Claude Desktop)中,询问关于 asana tasks, projects, workspaces 和/或 comments 的内容。提及 "asana" 一词将增加 LLM 选择正确 tool 的概率。
示例:
> How many unfinished asana tasks do we have in our Sprint 30 project?
另一个示例:!Claude Desktop Example
Tools1. asana_list_workspaces
* 列出 Asana 中所有可用的 workspace
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:workspace 列表
2. asana_search_projects
* 使用名称模式匹配在 Asana 中搜索 project
* 必填输入:
* workspace (string): 要搜索的 workspace
* name_pattern (string): 用于匹配 project 名称的正则表达式模式
* 可选输入:
* archived (boolean): 仅返回已归档的 project(默认:false)
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:匹配的 project 列表
3. asana_search_tasks
* 在 workspace 中使用高级过滤选项搜索 task
* 必填输入:
* workspace (string): 要搜索的 workspace
* 可选输入:
* text (string): 在 task 名称和描述中搜索的文本
* resource_subtype (string): 按 task 子类型过滤(例如 milestone)
* completed (boolean): 过滤已完成的 task
* is_subtask (boolean): 过滤子 task
* has_attachment (boolean): 过滤带有附件的 task
* is_blocked (boolean): 过滤具有未完成依赖项的 task
* is_blocking (boolean): 过滤具有依赖项且未完成的 task
* assignee, projects, sections, tags, teams 以及许多其他高级过滤器
* sort_by (string): 按 due_date, created_at, completed_at, likes, modified_at 排序(默认:modified_at)
* sort_ascending (boolean): 按升序排序(默认:false)
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* custom_fields (object): 包含自定义字段过滤器的对象
* 返回:匹配的 task 列表
4. asana_get_task
* 获取特定 task 的详细信息
* 必填输入:
* task_id (string): 要检索的 task ID
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:详细的 task 信息
5. asana_create_task
* 在 project 中创建新 task
* 必填输入:
* project_id (string): 创建 task 的 project
* name (string): task 名称
* 可选输入:
* notes (string): task 描述
* html_notes (string): 类 HTML 格式的 task 描述
* due_on (string): YYYY-MM-DD 格式的截止日期
* assignee (string): 执行人(可以是 'me' 或用户 ID)
* followers (array of strings): 要添加为关注者的用户 ID 数组
* parent (string): 将此 task 设置在下方的父 task ID
* projects (array of strings): 要将此 task 添加到的 project ID 数组
* resource_subtype (string): task 类型(default_task 或 milestone)
* custom_fields (object): 将自定义字段 GID 字符串映射到其值的对象
* 返回:创建的 task 信息
6. asana_get_task_stories
* 获取特定 task 的评论和 story
* 必填输入:
* task_id (string): 要获取 story 的 task ID
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:task story/评论列表
7. asana_update_task
* 更新现有 task 的详情
* 必填输入:
* task_id (string): 要更新的 task ID
* 可选输入:
* name (string): task 的新名称
* notes (string): task 的新描述
* html_notes (string): 类 HTML 格式的 task 描述(支持部分 HTML 标签)
* due_on (string): YYYY-MM-DD 格式的新截止日期
* assignee (string): 新执行人(可以是 'me' 或用户 ID)
* followers (array): 要添加为关注者的用户 ID 数组
* parent (string): 将此 task 移动到下方的父 task ID
* completed (boolean): 将 task 标记为已完成或未完成
* resource_subtype (string): task 类型(default_task 或 milestone)
* custom_fields (object): 将自定义字段 GID 字符串映射到其值的对象
* 返回:更新后的 task 信息
8. asana_get_project
* 获取特定 project 的详细信息
* 必填输入:
* project_id (string): 要检索的 project ID
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:详细的 project 信息
9. asana_get_project_task_counts
* 获取 project 中的 task 数量
* 必填输入:
* project_id (string): 要获取 task 数量的 project ID
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:task 数量信息
10. asana_get_project_sections
* 获取 project 中的 section
* 必填输入:
* project_id (string): 要获取 section 的 project ID
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:project section 列表
11. asana_create_task_story
* 在 task 上创建评论或 story
* 必填输入:
* task_id (string): 要添加 story 的 task ID
* text (string): story/评论的文本内容
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:创建的 story 信息
12. asana_add_task_dependencies
* 为 task 设置依赖项
* 必填输入:
* task_id (string): 要添加依赖项的 task ID
* dependencies (array of strings): 此 task 所依赖的 task ID 数组
* 返回:更新后的 task 依赖项
13. asana_add_task_dependents
* 为 task 设置被依赖项(依赖于此 task 的 task)
* 必填输入:
* task_id (string): 要添加被依赖项的 task ID
* dependents (array of strings): 依赖于此 task 的 task ID 数组
* 返回:更新后的 task 被依赖项
14. asana_create_subtask
* 为现有 task 创建新子 task
* 必填输入:
* parent_task_id (string): 创建子 task 的父 task ID
* name (string): 子 task 名称
* 可选输入:
* notes (string): 子 task 描述
* due_on (string): YYYY-MM-DD 格式的截止日期
* assignee (string): 执行人(可以是 'me' 或用户 ID)
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:创建的子 task 信息
15. asana_get_multiple_tasks_by_gid
* 通过 GID 获取多个 task 的详细信息(最多 25 个 task)
* 必填输入:
* task_ids (array of strings or comma-separated string): 要检索的 task GID(最多 25 个)
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:详细 task 信息列表
16. asana_get_project_status
* 获取 project 状态更新
* 必填输入:
* project_status_gid (string): 要检索的 project status GID
* 可选输入:
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:project 状态信息
17. asana_get_project_statuses
* 获取 project 的所有状态更新
* 必填输入:
* project_gid (string): 要获取状态的 project GID
* 可选输入:
* limit (number): 每页结果数 (1-100)
* offset (string): 分页偏移 token
* opt_fields (string): 要包含的可选字段的逗号分隔列表
* 返回:project 状态更新列表
18## Prompts
1. task-summary
* 根据任务的 notes、custom fields 和 comments 获取任务摘要和状态更新
* 必填输入:
* task_id (string):需要获取摘要的任务 ID
* 返回:包含生成任务摘要指令的详细 prompt
2. task-completeness
* 分析任务描述是否包含完成该任务所需的所有必要细节
* 必填输入:
* task_id (string):需要分析的任务 ID 或 URL
* 返回:包含分析任务完整性指令的详细 prompt
3. create-task
* 根据指定细节创建新任务
* 必填输入:
* project_name (string):创建该任务的 Asana 项目名称
* title (string):任务标题
* 可选输入:
* notes (string):任务的备注或描述
* due_date (string):任务截止日期(YYYY-MM-DD 格式)
* 返回:包含创建完整任务指令的详细 prompt
Resources1. Workspaces - asana://workspace/{workspace_gid}
* 将 Asana workspaces 表示为资源
* 每个 workspace 作为一个独立的资源公开
* URI 格式:asana://workspace/{workspace_gid}
* 返回值:包含 workspace 详情的 JSON 对象,包括:
* name: Workspace 名称 (string)
* id: Workspace 全局 ID (string)
* type: 资源类型 (string)
* is_organization: 该 workspace 是否为组织 (boolean)
* email_domains: 与该 workspace 关联的电子邮件域名列表 (string[])
* Mime Type: application/json2. Projects - asana://project/{project_gid}
* 用于通过 GID 获取项目详情的模板资源
* URI 格式:asana://project/{project_gid}
* 返回值:包含项目详情的 JSON 对象,包括:
* name: 项目名称 (string)
* id: 项目全局 ID (string)
* type: 资源类型 (string)
* archived: 项目是否已归档 (boolean)
* public: 项目是否公开 (boolean)
* notes: 项目描述/备注 (string)
* color: 项目颜色 (string)
* default_view: 默认视图类型 (string)
* due_date, due_on, start_on: 项目日期信息 (string)
* workspace: 包含 workspace 信息的对象
* team: 包含 team 信息的对象
* sections: 项目中 section 对象的数组
* custom_fields: 项目的 custom field 定义数组
* Mime Type: application/json
Setup
1. 创建 Asana 账号:
- 访问 Asana。
- 点击 "Sign up"。
2. 获取 Asana Access Token:
- 您可以从 Asana 开发者控制台生成个人访问令牌 (personal access token)。
- https://app.asana.com/0/my-apps
- 更多详情请参阅:https://developers.asana.com/docs/personal-access-token
3. 安装选项:
### 对于 Claude Desktop:
将以下内容添加到您的 claude_desktop_config.json 中:
{
"mcpServers": {
"asana": {
"command": "npx",
"args": ["-y", "@roychri/mcp-server-asana"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}使用以下命令安装并配置 MCP server:
claude mcp add asana -e ASANA_ACCESS_TOKEN=<TOKEN> -- npx -y @roychri/mcp-server-asana<TOKEN> 替换为你的 Asana access token。
### 对于 Codex CLI:
将以下内容添加到你的 ~/.codex/config.toml:
[mcp_servers.asana]
command = "npx"
args = [
"-y", "@roychri/mcp-server-asana"
]
env = {ASANA_ACCESS_TOKEN= "<TOKEN>"}<TOKEN> 替换为你的 Asana access token。
如果你想安装 beta 版本(尚未正式发布),可以使用:
@roychri/mcp-server-asana@beta
你可以通过以下任一方式查找当前的 beta 版本(如果有):
1. https://www.npmjs.com/package/@roychri/mcp-server-asana?activeTab=versions
2. npm dist-tag ls @roychri/mcp-server-asana
Troubleshooting
如果你遇到权限错误:
1. 确保你的 asana 方案允许 API 访问
2. 确认 claude_desktop_config.json 中的 access token 和配置设置正确。
Contributing
Clone 此 repo 并开始开发。
使用 MCP Inspector 进行本地测试
如果你想测试你的更改,可以这样使用 MCP Inspector:
npm run inspector5173,server 暴露在端口 3000。
如果这些端口已被占用,你可以使用:
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector此 MCP server 采用 MIT License 许可。这意味着您可以自由地使用、修改和分发该软件,但需遵守 MIT License 的条款和条件。欲了解更多详情,请参阅项目仓库中的 LICENSE 文件。