mcp-server-asana
从 MCP 客户端(例如 Anthropic 的 Claude 桌面应用程序)以及更多其他客户端执行 Asana 操作。
Tools
asana_create_task
Create a new task in a project
asana_get_task_stories
Get comments and stories for a specific task
asana_update_task
Update an existing task's details
asana_get_project
Get detailed information about a specific project
asana_get_project_task_counts
Get the number of tasks in a project
asana_get_project_sections
Get sections in a project
asana_create_task_story
Create a comment or story on a task
asana_add_task_dependencies
Set dependencies for a task
asana_add_task_dependents
Set dependents for a task (tasks that depend on this task)
asana_create_subtask
Create a new subtask for an existing task
asana_get_multiple_tasks_by_gid
Get detailed information about multiple tasks by their GIDs (maximum 25 tasks)
asana_get_project_status
Get a project status update
asana_get_project_statuses
Get all status updates for a project
asana_create_project_status
Create a new status update for a project
asana_delete_project_status
Delete a project status update
asana_set_parent_for_task
Set the parent of a task and position the subtask within the other subtasks of that parent
asana_get_tasks_for_tag
Get tasks for a specific tag
asana_get_tags_for_workspace
Get tags in a workspace
asana_list_workspaces
List all available workspaces in Asana
asana_search_projects
Search for projects in Asana using name pattern matching
asana_search_tasks
Search tasks in a workspace with advanced filtering options
asana_get_task
Get detailed information about a specific task
README
Asana 的 MCP 服务器
这个 Asana 的模型上下文协议服务器实现允许你从 MCP 客户端(例如 Anthropic 的 Claude 桌面应用程序)以及更多应用与 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>
用法
在你选择的 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): 按任务子类型过滤(例如,里程碑)
- 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): 要在其中创建任务的项目
- 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): 任务的新描述
- due_on (string): 新的截止日期,格式为 YYYY-MM-DD
- assignee (string): 新的受让人(可以是 'me' 或用户 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
- 通过 GID 获取有关多个任务的详细信息(最多 25 个任务)
- 必需输入:
- task_ids (array of strings or comma-separated string): 要检索的任务 GID(最多 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_tasks_for_tag
- 获取特定标签的任务
- 必需输入:
- tag_gid (string): 要检索任务的标签 GID
- 可选输入:
- opt_fields (string): 逗号分隔的可选字段列表,用于包含在返回结果中
- opt_pretty (boolean): 以“漂亮”格式提供响应
- 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): 逗号分隔的可选字段列表,用于包含在返回结果中
- 返回:工作区中的标签列表
Prompts
-
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 格式)
- 返回:包含创建全面任务的详细说明的提示
资源
-
工作区 -
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 Type:
application/json
-
项目 -
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 Type:
application/json
设置
-
创建一个 Asana 账户:
- 访问 Asana.
- 点击 "Sign up"。
-
检索 Asana 访问令牌:
- 你可以从 Asana 开发者控制台生成个人访问令牌。
- https://app.asana.com/0/my-apps
- 更多细节请参考:https://developers.asana.com/docs/personal-access-token
- 你可以从 Asana 开发者控制台生成个人访问令牌。
-
配置 Claude 桌面: 将以下内容添加到你的
claude_desktop_config.json
:{ "mcpServers": { "asana": { "command": "npx", "args": ["-y", "@roychri/mcp-server-asana"], "env": { "ASANA_ACCESS_TOKEN": "your-asana-access-token" } } } }
如果你想安装 beta 版本(尚未发布),你可以使用:
@roychri/mcp-server-asana@beta
你可以通过以下方式找到当前的 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
中正确设置。
贡献
克隆此仓库并开始 hacking。
使用 MCP Inspector 在本地进行测试
如果你想测试你的更改,你可以像这样使用 MCP Inspector:
npm run inspector
这会将客户端暴露到端口 5173
,并将服务器暴露到端口 3000
。
如果这些端口已被其他程序使用,你可以使用:
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector
许可证
此 MCP 服务器在 MIT 许可证下获得许可。 这意味着您可以自由使用、修改和分发该软件,但须遵守 MIT 许可证的条款和条件。 有关更多详细信息,请参阅项目存储库中的 LICENSE 文件。
推荐服务器
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Playwright MCP Server
提供一个利用模型上下文协议的服务器,以实现类人浏览器的自动化,该服务器使用 Playwright,允许控制浏览器行为,例如导航、元素交互和滚动。
Apple MCP Server
通过 MCP 协议与 Apple 应用(如“信息”、“备忘录”和“通讯录”)进行交互,从而使用自然语言发送消息、搜索和打开应用内容。
contentful-mcp
在你的 Contentful Space 中更新、创建、删除内容、内容模型和资源。
serper-search-scrape-mcp-server
这个 Serper MCP 服务器支持搜索和网页抓取,并且支持 Serper API 引入的所有最新参数,例如位置。
The Verge News MCP Server
提供从The Verge的RSS feed获取和搜索新闻的工具,允许用户获取今日新闻、检索过去一周的随机文章,以及在最近的Verge内容中搜索特定关键词。
MCP Server Trello
通过 Trello API 促进与 Trello 看板的交互,提供速率限制、类型安全、输入验证和错误处理等功能,以实现对卡片、列表和看板活动的无缝管理。
@kazuph/mcp-gmail-gas
用于 Gmail 集成的模型上下文协议 (Model Context Protocol, MCP) 服务器。它允许 Claude Desktop(或任何 MCP 客户端)通过 Google Apps Script 与您的 Gmail 帐户进行交互。
MCP DuckDB Knowledge Graph Memory Server
一个为 Claude 设计的记忆服务器,它使用 DuckDB 存储和检索知识图谱数据,从而增强了对话的性能和查询能力,并能持久保存用户信息。