roychri/mcp-server-asana

分类Web
作者Community
星标196
定价Free

简介

roychri/mcp-server-asana 是一个将 Asana 项目管理能力接入 AI 客户端的 MCP 服务端实现。它通过标准协议打破了 LLM 与第三方 SaaS 之间的数据壁垒,让用户无需在浏览器和 AI 聊天窗口之间频繁切换。通过配置该服务,你可以直接在 Claude Desktop 等支持 MCP 的客户端中,用自然语言查询任务进度、创建新待办或更新项目状态。对于习惯使用 Asana 进行协作的开发者来说,这相当于给 AI 助手安装了一个实时同步的项目管理插件,大幅提升了任务跟进的效率,上手门槛较低,仅需简单的 API 配置即可运行。

核心亮点

  • 自然语言直接操作 Asana 任务与项目
  • 消除在 AI 界面与管理后台间的切换
  • 支持 Claude Desktop 等主流 MCP 客户端
  • 通过标准协议实现企业级 SaaS 数据互通

完整文档

Asana 的 MCP Server

![npm version](https://www.npmjs.com/package/@roychri/mcp-server-asana)

这个 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' 以禁用所有写操作。在此模式下:
- 修改 Asana 数据的 Tools(创建、更新、删除)将被禁用 - 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 中:

json
{
"mcpServers": {
"asana": {
"command": "npx",
"args": ["-y", "@roychri/mcp-server-asana"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}
### 对于 Claude Code:

使用以下命令安装并配置 MCP server:
bash
claude mcp add asana -e ASANA_ACCESS_TOKEN=<TOKEN> -- npx -y @roychri/mcp-server-asana
<TOKEN> 替换为你的 Asana access token。

### 对于 Codex CLI:

将以下内容添加到你的 ~/.codex/config.toml

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:

bash
npm run inspector
这将把 client 暴露在端口 5173,server 暴露在端口 3000

如果这些端口已被占用,你可以使用:

bash
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector
## License

此 MCP server 采用 MIT License 许可。这意味着您可以自由地使用、修改和分发该软件,但需遵守 MIT License 的条款和条件。欲了解更多详情,请参阅项目仓库中的 LICENSE 文件。