MCP Server for Asana
Asana的Model Context Protocol服务器实现,允许您从MCP客户端(如Anthropic的Claude桌面应用程序)等与Asana API进行交互。
关于MCP的更多详情:
- https://www.anthropic.com/news/model-context-protocol
- https://modelcontextprotocol.io/introduction
- https://github.com/modelcontextprotocol
环境变量
ASANA_ACCESS_TOKEN: (必需) 您的Asana访问令牌READ_ONLY_MODE: (可选) 设置为'true'以禁用所有写入操作。在此模式下:- 修改Asana数据(创建、更新、删除)的工具将被禁用
create-task提示将被禁用- 仅可使用读取操作 这对于测试或在您希望确保无法更改您的Asana工作区时非常有用。
使用方法
在您选择的AI工具中(例如Claude桌面应用程序)询问有关Asana任务、项目、工作区或评论的问题。提及"asana"一词将增加LLM选择正确工具的可能性。
示例:
我们在Sprint 30项目中有多少未完成的Asana任务?
另一个示例:

工具
asana_list_workspaces- 列出Asana中所有可用的工作区
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:工作区列表
asana_search_projects- 使用名称模式匹配在Asana中搜索项目
- 必需输入:
- workspace (string): 要在其中搜索的工作区
- name_pattern (string): 匹配项目名称的正则表达式模式
- 可选输入:
- archived (boolean): 仅返回已归档的项目(默认为false)
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:匹配的项目列表
asana_search_tasks- 在工作区中搜索任务,具有高级过滤选项
- 必需输入:
- workspace (string): 要在其中搜索的工作区
- 可选输入:
- text (string): 在任务名称和描述中搜索的文本
- resource_subtype (string): 按任务子类型过滤(例如milestone)
- completed (boolean): 过滤已完成任务
- is_subtask (boolean): 过滤子任务
- has_attachment (boolean): 过滤具有附件的任务
- is_blocked (boolean): 过滤具有不完整依赖关系的任务
- is_blocking (boolean): 过滤具有依赖项的不完整任务
- 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): 包含自定义字段过滤器的对象
- 返回:匹配的任务列表
asana_get_task- 获取特定任务的详细信息
- 必需输入:
- task_id (string): 要检索的任务ID
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:任务详细信息
asana_create_task- 在项目中创建新任务
- 必需输入:
- project_id (string): 要在其中创建任务的项目的ID
- name (string): 任务名称
- 可选输入:
- notes (string): 任务描述
- html_notes (string): 类似HTML格式的任务描述
- due_on (string): YYYY-MM-DD格式的截止日期
- assignee (string): 指派对象(可以是'me'或用户ID)
- followers (array of strings): 要添加为关注者的用户ID数组
- parent (string): 要将此任务设置为子任务的父任务ID
- projects (array of strings): 要添加到此任务的数组项目ID
- resource_subtype (string): 任务类型(default_task或milestone)
- custom_fields (object): 将自定义字段GID字符串映射到其值的对象
- 返回:创建的任务信息
asana_get_task_stories- 获取特定任务的评论和故事
- 必需输入:
- task_id (string): 要获取故事的任务ID
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:任务故事/评论列表
asana_update_task- 更新现有任务的详细信息
- 必需输入:
- task_id (string): 要更新的任务ID
- 可选输入:
- name (string): 新的任务名称
- notes (string): 新的任务描述
- html_notes (string): 类似HTML格式的任务描述(支持HTML标签子集)
- due_on (string): YYYY-MM-DD格式的新截止日期
- assignee (string): 新的指派对象(可以是'me'或用户ID)
- followers (array): 要添加为关注者的用户ID数组
- parent (string): 要将此任务移动到其下的父任务ID
- completed (boolean): 将任务标记为已完成或未完成
- resource_subtype (string): 任务类型(default_task或milestone)
- custom_fields (object): 将自定义字段GID字符串映射到其值的对象
- 返回:更新的任务信息
asana_get_project- 获取特定项目的详细信息
- 必需输入:
- project_id (string): 要检索的项目ID
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:项目详细信息
asana_get_project_task_counts- 获取项目中的任务数量
- 必需输入:
- project_id (string): 要获取任务计数的项目ID
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:任务计数信息
asana_get_project_sections- 获取项目中的部分
- 必需输入:
- project_id (string): 要获取部分的项目ID
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:项目部分列表
asana_create_task_story- 在任务上创建评论或故事
- 必需输入:
- task_id (string): 要添加故事的任务ID
- text (string): 故事/评论的文本内容
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:创建的故事信息
asana_add_task_dependencies- 为任务设置依赖关系
- 必需输入:
- task_id (string): 要添加依赖关系的任务ID
- dependencies (array of strings): 此任务依赖的任务ID数组
- 返回:更新的任务依赖关系
asana_add_task_dependents- 为任务设置依赖项(依赖于此任务的任务)
- 必需输入:
- task_id (string): 要添加依赖项的任务ID
- dependents (array of strings): 依赖于此任务的任务ID数组
- 返回:更新的任务依赖项
asana_create_subtask- 为现有任务创建新子任务
- 必需输入:
- parent_task_id (string): 要在其下创建子任务的父任务ID
- name (string): 子任务名称
- 可选输入:
- notes (string): 子任务描述
- due_on (string): YYYY-MM-DD格式的截止日期
- assignee (string): 指派对象(可以是'me'或用户ID)
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:创建的子任务信息
asana_get_multiple_tasks_by_gid- 通过其GIDs获取多个任务的详细信息(最多25个任务)
- 必需输入:
- task_ids (array of strings or comma-separated string): 要检索的任务GIDs(最多25个)
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:详细的任务信息列表
asana_get_project_status- 获取项目状态更新
- 必需输入:
- project_status_gid (string): 要检索的项目状态GID
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:项目状态信息
asana_get_project_statuses- 获取项目的所有状态更新
- 必需输入:
- project_gid (string): 要获取状态的项目GID
- 可选输入:
- limit (number): 每页结果(1-100)
- offset (string): 分页偏移标记
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:项目状态更新列表
asana_create_project_status- 为项目创建新的状态更新
- 必需输入:
- project_gid (string): 要创建状态的项目GID
- text (string): 状态更新的文本内容
- 可选输入:
- color (string): 状态的颜色(green, yellow, red)
- title (string): 状态更新的标题
- html_text (string): HTML格式的状态更新文本
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:创建的项目状态信息
asana_delete_project_status- 删除项目状态更新
- 必需输入:
- project_status_gid (string): 要删除的项目状态GID
- 返回:删除确认
asana_set_parent_for_task- 设置任务的父级,并在该父任务的子任务中定位子任务
- 必需输入:
- task_id (string): 要操作的任务ID
- data (object):
- parent (string): 任务的新父级,或null表示无父级
- 可选输入:
- insert_after (string): 父任务的一个子任务,要在其后插入此任务,或null表示在列表开头插入
- insert_before (string): 父任务的一个子任务,要在其前插入此任务,或null表示在列表末尾插入
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:更新的任务信息
asana_get_tag- 获取特定标签的详细信息
- 必需输入:
- tag_gid (string): 标签的全局唯一标识符
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:详细的标签信息
asana_get_tags_for_task- 获取任务的标签
- 必需输入:
- task_gid (string): 要操作的任务
- 可选输入:
- limit (number): 每页结果。每页返回的对象数量。值必须在1和100之间。
- offset (string): API返回的下一页的偏移标记。
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:与任务关联的标签列表
asana_get_tasks_for_tag- 获取特定标签的任务
- 必需输入:
- tag_gid (string): 要检索任务的标签GID
- 可选输入:
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- opt_pretty (boolean): 以'pretty'格式提供响应
- limit (integer): 每页返回的对象数量。值必须在1和100之间。
- offset (string): API返回的下一页的偏移标记。
- 返回:指定标签的任务列表
asana_get_tags_for_workspace- 获取工作区中的标签
- 必需输入:
- workspace_gid (string): 工作区或组织的全局唯一标识符
- 可选输入:
- limit (integer): 每页结果。每页返回的对象数量。值必须在1和100之间。
- offset (string): API返回的下一页的偏移标记。
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:工作区中的标签列表
asana_update_tag- 更新现有标签
- 必需输入:
- tag_gid (string): 标签的全局唯一标识符
- 可选输入:
- name (string): 标签名称
- color (string): 标签颜色。可以是以下之一:dark-pink, dark-green, dark-blue, dark-red, dark-teal, dark-brown, dark-orange, dark-purple, dark-warm-gray, light-pink, light-green, light-blue, light-red, light-teal, light-brown, light-orange, light-purple, light-warm-gray
- notes (string): 标签的备注
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:更新的标签信息
asana_delete_tag- 删除标签
- 必需输入:
- tag_gid (string): 标签的全局唯一标识符
- 返回:删除确认
asana_create_tag_for_workspace- 在工作区中创建新标签
- 必需输入:
- workspace_gid (string): 工作区或组织的全局唯一标识符
- name (string): 标签名称
- 可选输入:
- color (string): 标签颜色。可以是以下之一:dark-pink, dark-green, dark-blue, dark-red, dark-teal, dark-brown, dark-orange, dark-purple, dark-warm-gray, light-pink, light-green, light-blue, light-red, light-teal, light-brown, light-orange, light-purple, light-warm-gray
- notes (string): 标签的备注
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:创建的标签信息
asana_add_tag_to_task- 将标签添加到任务
- 必需输入:
- task_gid (string): 要添加标签的任务GID
- tag_gid (string): 要添加到任务的标签GID
- 返回:成功响应
asana_remove_tag_from_task- 从任务中移除标签
- 必需输入:
- task_gid (string): 要移除标签的任务GID
- tag_gid (string): 要从任务中移除的标签GID
- 返回:成功响应
asana_add_project_to_task- 将现有任务添加到项目
- 必需输入:
- task_id (string): 要添加到项目的任务ID
- project_id (string): 要添加任务的项目ID
- 可选输入:
- section (string): 在项目中添加任务的部分ID
- insert_after (string): 要在此任务之后插入的任务ID。最多只能指定insert_before, insert_after, 或section中的一个。
- insert_before (string): 要在此任务之前插入的任务ID。最多只能指定insert_before, insert_after, 或section中的一个。
- 返回:成功消息,确认任务已添加到项目
- 备注:如果未提供定位参数,任务将被添加到项目的末尾
asana_remove_project_from_task- 从项目中移除任务
- 必需输入:
- task_id (string): 要从项目中移除的任务ID
- project_id (string): 要从项目中移除任务的项目ID
- 返回:成功消息,确认任务已从项目中移除
- 备注:任务仍然存在于系统中,但将不再属于该项目
asana_delete_task- 永久删除任务
- 必需输入:
- task_id (string): 要删除的任务ID
- 返回:成功消息,确认任务已删除
- 备注:此操作无法撤销。任务将被永久删除。
asana_create_project- 在工作区或团队中创建新项目
- 必需输入:
- workspace (string): 要在其中创建项目的 workspace GID
- name (string): 项目名称
- 可选输入:
- team (string): 团队 GID(组织工作区必需)
- notes (string): 项目的描述或备注
- color (string): 项目颜色(例如dark-pink, dark-green, light-blue)
- privacy_setting (string): 隐私设置(public_to_workspace, private_to_team, private)
- default_view (string): 默认视图(list, board, calendar, timeline)
- opt_fields (string): 要包含的可选字段列表,以逗号分隔
- 返回:创建的项目对象
提示
-
task-summary- 基于任务的备注、自定义字段和评论获取任务摘要和状态更新
- 必需输入:
- task_id (string): 要获取摘要的任务ID
- 返回:包含生成任务摘要说明的详细提示
-
task-completeness- 分析任务描述是否包含完成所需的全部细节
- 必需输入:
- task_id (string): 要分析的任务ID或URL
- 返回:包含分析任务完整性说明的详细提示
-
create-task- 创建具有指定详细信息的新任务
- 必需输入:
- project_name (string): 应该在其中创建任务的Asana项目名称
- title (string): 任务标题
- 可选输入:
- notes (string): 任务备注或描述
- due_date (string): 任务的截止日期(YYYY-MM-DD格式)
- 返回:包含创建全面任务说明的详细提示
资源
-
Workspaces -
asana://workspace/{workspace_gid}- Asana工作区作为资源的表示
- 每个工作区都作为单独的资源暴露
- URI格式:
asana://workspace/{workspace_gid} - 返回:包含工作区详细信息的JSON对象:
name: 工作区名称(string)id: 工作区全局ID(string)type: 资源类型(string)is_organization: 工作区是否为组织(boolean)email_domains: 与工作区关联的电子邮件域名列表(string[])
- Mime类型:
application/json
-
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: 包含工作区信息的对象team: 包含团队信息的对象sections: 项目中的部分对象数组custom_fields: 项目的自定义字段定义数组
- Mime类型:
application/json
设置
-
创建Asana账户:
- 访问Asana。
- 点击"注册"。
-
获取Asana访问令牌:
- 您可以从Asana开发者控制台生成个人访问令牌。
- 更多详情:https://developers.asana.com/docs/personal-access-token
-
安装选项:
对于Claude桌面应用程序:
将以下内容添加到您的
claude_desktop_config.json:{ "mcpServers": { "asana": { "command": "npx", "args": ["-y", "@roychri/mcp-server-asana"], "env": { "ASANA_ACCESS_TOKEN": "your-asana-access-token" } } } }对于Claude代码:
使用以下命令安装和配置MCP服务器:
claude mcp add asana -e ASANA_ACCESS_TOKEN=<TOKEN> -- npx -y @roychri/mcp-server-asana将
<TOKEN>替换为您的Asana访问令牌。
如果您想安装测试版(尚未发布),您可以使用:
@roychri/mcp-server-asana@beta
您可以通过以下方式找到当前的测试版(如果有):
- https://www.npmjs.com/package/@roychri/mcp-server-asana?activeTab=versions
npm dist-tag ls @roychri/mcp-server-asana
故障排除
如果您遇到权限错误:
- 确保您拥有的asana计划允许API访问
- 确认访问令牌和配置在
claude_desktop_config.json中设置正确。
贡献
克隆此仓库并开始开发。
使用MCP Inspector本地测试
如果您想测试您的更改,您可以使用MCP Inspector,如下所示:
npm run inspector
这将客户端暴露在端口5173,服务器暴露在端口3000。
如果这些端口已被其他内容使用,您可以使用:
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector
许可证
此MCP服务器根据MIT许可证授权。这意味着您可以自由使用、修改和分发该软件,但需遵守MIT许可证的条款和条件。更多详情,请参阅项目仓库中的LICENSE文件。
