使用说明
Asana的MCP服务器
Asana的模型上下文协议服务器实现允许您 与MCP客户的Asana API交谈,如Anthropic的Claude 桌面应用程序等等。
有关MCP的更多详细信息,请点击此处:
- https://www.anthropic.com/news/model-context-protocol
- https://modelcontextprotocol.io/introduction
- https://github.com/modelcontextprotocol
用法
在你选择的人工智能工具(例如:Claude Desktop)中,询问一些关于体式任务、项目、工作空间和/或评论的问题。提到“体式”这个词会增加法学硕士选择正确工具的机会。
例子:
在Sprint 30项目中,我们有多少未完成的体式任务?
另一个例子:
使用自定义字段
使用自定义字段更新或创建任务时,请使用以下格式:
asana_update_task({
task_id: "TASK_ID",
custom_fields: {
"custom_field_gid": value // The value format depends on the field type
}
})
值格式因字段类型而异:
- 枚举字段:使用
enum_option.gid选项(不是显示名称) - 文本字段:使用字符串
- 数域:使用数字
- 日期字段:使用YYYY-MM-DD格式的字符串
- 多枚举字段:使用枚举选项GID数组
查找自定义字段GID
要查找自定义字段的GID及其枚举选项:
-
使用
asana_get_task随着opt_fields设置参数以包含自定义字段:asana_get_task({ task_id: "TASK_ID", opt_fields: "custom_fields,custom_fields.enum_options" }) -
在回复中,查找
custom_fields阵列。每个自定义字段将具有:gid:自定义字段的唯一标识符name:自定义字段的显示名称resource_subtype:自定义字段的类型(文本、数字、枚举等)- 对于枚举字段,请检查
enum_options数组以查找每个选项的GID
示例:更新枚举自定义字段
// First, get the task with custom fields
const taskDetails = asana_get_task({
task_id: "1234567890",
opt_fields: "custom_fields,custom_fields.enum_options"
});
// Find the custom field GID and enum option GID
const priorityFieldGid = "11112222"; // From taskDetails.custom_fields
const highPriorityOptionGid = "33334444"; // From the enum_options of the priority field
// Update the task with the custom field
asana_update_task({
task_id: "1234567890",
custom_fields: {
[priorityFieldGid]: highPriorityOptionGid
}
});
工具
-
asana_list_workspaces- 列出Asana的所有可用工作区
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:工作区列表
- 注意:如果设置了DEFAULT_WORKSPACE_ID,则只会返回该工作区,而不会获取所有工作区
-
asana_search_projects- 使用名称模式匹配在Asana中搜索项目
- 所需输入:
- name_pattern(字符串):匹配项目名称的正则表达式模式
- 可选输入:
- workspace(字符串):要搜索的工作区(如果设置了DEFAULT_workspace_ID,则可选)
- team(string):筛选项目的团队
- archived(布尔值):仅返回已存档的项目(默认值:false)
- 限制(数量):每页结果(1-100)
- offset(字符串):分页偏移标记
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:匹配项目列表
- 注意:如果未设置DEFAULT_workspace_ID,则必须指定工作区或团队
-
asana_search_tasks- 使用高级筛选选项在工作区中搜索任务
- 所需输入:
- workspace(字符串):要搜索的工作区(如果设置了DEFAULT_workspace_ID,则可选)
- 可选输入:
- text(字符串):在任务名称和描述中搜索的文本
- resource_subtype(字符串):按任务子类型筛选(例如里程碑)
- complete(布尔值):已完成任务的筛选器
- is_subtask(布尔值):筛选子任务
- has_attachment(布尔值):过滤带有附件的任务
- is_blocked(布尔值):筛选依赖关系不完整的任务
- is_blocking(布尔值):筛选具有依赖项的未完成任务
- 受让人、项目、部分、标签、团队和许多其他高级过滤器
- sort_by(字符串):按due_date、created_at、completed_at、like、modified_at排序(默认值:modified_ad)
- sort_ascending(布尔值):按升序排序(默认值:false)
- opt_fields(字符串):逗号分隔的可选字段列表
- custom_fields(object):包含自定义字段过滤器的对象
- 返回:匹配任务列表
-
asana_get_task- 获取特定任务的详细信息
- 所需输入:
- task_id(字符串):要检索的任务id
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:详细任务信息
-
asana_create_task- 在项目中创建新任务
- 所需输入:
- project_id(string):在其中创建任务的项目
- name(string):任务的名称
- 可选输入:
- notes(string):任务描述
- html_notes(string):任务的html格式描述
- due_on(字符串):YYYY-MM-DD格式的截止日期
- 受让人(字符串):受让人(可以是“我”或用户ID)
- followers(字符串数组):要添加为关注者的用户ID数组
- parent(string):用于设置此任务的父任务ID
- projects(字符串数组):要将此任务添加到的项目ID数组
- resource_subtype(字符串):任务的类型(默认任务或里程碑)
- custom_fields(object):将自定义字段GID字符串映射到其值的对象
- 返回:已创建任务信息
-
asana_get_task_stories- 获取特定任务的评论和故事
- 所需输入:
- task_id(字符串):获取故事的任务id
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:任务故事/评论列表
-
asana_update_task- 更新现有任务的详细信息
- 所需输入:
- task_id(字符串):要更新的任务id
- 可选输入:
- name(string):任务的新名称
- notes(string):任务的新描述
- due_on(字符串):YYYY-MM-DD格式的新截止日期
- 受让人(字符串):新受让人(可以是“我”或用户ID)
- complete(布尔值):将任务标记为已完成或未完成
- resource_subtype(字符串):任务的类型(默认任务或里程碑)
- custom_fields(object):将自定义字段GID字符串映射到其值的对象
- 返回:更新的任务信息
-
asana_get_project- 获取特定项目的详细信息
- 所需输入:
- project_id(字符串):要检索的项目id
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:详细项目信息
-
asana_get_project_task_counts- 获取项目中的任务数
- 所需输入:
- project_id(字符串):用于获取任务计数的项目id
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:任务计数信息
-
asana_get_project_sections- 获取项目中的部分
- 所需输入:
- project_id(字符串):用于获取节的项目id
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:项目部分列表
-
asana_create_task_story- 为任务创建评论或故事
- 所需输入:
- task_id(字符串):要添加故事的任务id
- text(string):故事/评论的文本内容
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:已创建的故事信息
-
asana_add_task_dependencies- 设置任务的依赖关系
- 所需输入:
- task_id(string):要添加依赖项的任务id
- 依赖关系(字符串数组):此任务所依赖的任务ID数组
- 返回:更新了任务依赖关系
-
asana_add_task_dependents- 设置任务的依赖项(依赖于此任务的任务)
- 所需输入:
- task_id(字符串):要添加依赖项的任务id
- 依赖项(字符串数组):依赖于此任务的任务ID数组
- 返回:更新了任务依赖项
-
asana_create_subtask- 为现有任务创建新的子任务
- 所需输入:
- parent_task_id(字符串):用于创建子任务的父任务id
- name(字符串):子任务的名称
- 可选输入:
- 注释(字符串):子任务的描述
- due_on(字符串):YYYY-MM-DD格式的截止日期
- 受让人(字符串):受让人(可以是“我”或用户ID)
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:已创建子任务信息
-
asana_add_followers_to_task- 向任务添加关注者
- 所需输入:
- task_id(字符串):添加关注者的任务id
- followers(字符串数组):要添加为任务追随者的用户ID数组
- 返回:更新的任务信息
-
asana_get_multiple_tasks_by_gid- 通过GID获取多个任务的详细信息(最多25个任务)
- 所需输入:
- task_ids(字符串数组或逗号分隔字符串):要检索的任务GID(最多25个)
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:详细任务信息列表
-
asana_get_project_status- 获取项目状态更新
- 所需输入:
- project_status_gid(字符串):要检索的项目状态gid
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:项目状态信息
-
asana_get_project_statuses- 获取项目的所有状态更新
- 所需输入:
- project_gid(字符串):用于获取其状态的项目gid
- 可选输入:
- 限制(数量):每页结果(1-100)
- offset(字符串):分页偏移标记
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:项目状态更新列表
-
asana_create_project_status- 为项目创建新的状态更新
- 所需输入:
- project_gid(字符串):用于创建其状态的项目gid
- text(string):状态更新的文本内容
- 可选输入:
- color(string):状态的颜色(绿色、黄色、红色)
- title(string):状态更新的标题
- html_text(string):状态更新的html格式文本
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:已创建项目状态信息
-
asana_delete_project_status- 删除项目状态更新
- 所需输入:
- project_status_gid(字符串):要删除的项目状态gid
- 返回:删除确认
-
asana_set_parent_for_task- 设置任务的父级,并将子任务定位在该父级的其他子任务中
- 所需输入:
- task_id(字符串):要操作的任务id
- parent(string):任务的新父级,或null表示没有父级
- 可选输入:
- insert_after(string):父任务的一个子任务,用于在后面插入任务,或在列表开头插入null
- insert_before(string):父任务的子任务,用于在列表之前插入任务,或在列表末尾插入null
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:更新的任务信息
-
asana_get_tasks_for_tag- 获取特定标签的任务
- 所需输入:
- tag_gid(字符串):用于检索任务的标记gid
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- opt_prety(boolean):以“漂亮”格式提供响应
- limit(整数):每页返回的对象数。该值必须介于1和100之间。
- offset(string):API返回的下一页的偏移量。
- 返回:指定标记的任务列表
-
asana_get_tags_for_workspace- 在工作区中获取标签
- 所需输入:
- workspace_gid(字符串):工作区或组织的全局唯一标识符(如果设置了DEFAULT_workspace_ID,则可选)
- 可选输入:
- limit(整数):每页结果。每页要返回的对象数。该值必须介于1和100之间。
- offset(字符串):偏移标记。API返回的下一页的偏移量。
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:工作区中的标签列表
-
asana_create_section_for_project- 在项目中创建新部分
- 所需输入:
- project_id(字符串):在中创建节的项目id
- name(string):要创建的节的名称
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:已创建部分信息
-
asana_add_task_to_section- 将任务添加到项目中的特定部分
- 所需输入:
- section_id(字符串):要将任务添加到的节id
- task_id(string):要添加到节中的任务id
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:运算结果
-
asana_create_project- 在工作区中创建新项目
- 所需输入:
- workspace_id(字符串):在其中创建项目的工作区id(如果设置了DEFAULT_workspace_id,则可选)
- name(string):要创建的项目的名称
- team_id(字符串):组织工作区必需-与之共享项目的团队GID
- 可选输入:
- public(布尔值):项目是否对组织公开(默认值:false)
- archived(布尔值):项目是否已存档(默认值:false)
- color(string):项目的颜色(浅绿色、浅橙色、浅蓝色等)
- 布局(字符串):项目的布局(板、列表、时间线或日历)
- default_view(字符串):项目的默认视图(列表、板、日历、时间线或甘特图)
- due_on(字符串):此项目的到期日期(YYYY-MM-DD格式)
- start_on(字符串):此项目的工作开始日期(YYYY-MM-DD格式)
- notes(string):与项目关联的自由形式文本信息
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:已创建的项目信息
-
asana_get_teams_for_user- 获取用户有权访问的团队
- 所需输入:
- user_gid(string):用于获取团队的用户gid。使用“我”为当前用户获取团队。
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:用户有权访问的团队列表
-
asana_get_teams_for_workspace- 让团队进入工作空间
- 所需输入:
- workspace_gid(字符串):用于获取团队的工作区gid(如果设置了DEFAULT_workspace_ID,则可选)
- 可选输入:
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:工作区中的团队列表
-
asana_list_workspace_users- 让用户进入工作区
- 所需输入:
- workspace_id(字符串):获取用户的工作区id(如果设置了DEFAULT_workspace_id,则可选)
- 可选输入:
- limit(整数):每页结果(1-100)
- offset(字符串):分页偏移标记
- opt_fields(字符串):逗号分隔的可选字段列表(默认为“姓名,电子邮件”)
- auto_paginate(boolean):是否自动获取所有页面
- max_pages(整数):auto_paginate为true时要获取的最大页数
- 返回:工作区中的用户列表
-
asana_get_project_hierarchy- 获取Asana项目的完整层次结构,包括部分、任务和子任务
- 所需输入:
- project_id(字符串):获取层次结构的项目id
- 可选输入:
- include_collectd_tasks(布尔值):包括已完成的任务(默认值:false)
- include_subtasks(布尔值):包括每个任务的子任务(默认值:true)
- include_collectd_subtasks(布尔值):包括已完成的子任务(默认值:如下include_coplectd_tasks)
- max_subtract_depth(number):要检索的子任务的最大深度(默认值:1)
- opt_fields_tasks(字符串):任务的可选字段
- opt_fields_subtasks(字符串):子任务的可选字段
- opt_fields_sections(字符串):节的可选字段
- opt_fields_project(字符串):项目的可选字段
- 限制(数量):每页最大结果数(1-100)
- offset(字符串):来自先前响应的分页标记
- auto_paginate(boolean):是否自动获取所有页面
- max_pages(number):auto_paginate为true时获取的最大页面数
- 返回:具有统计信息的分层项目结构
-
asana_get_attachments_for_object- 列出特定对象(任务、项目等)的附件
- 所需输入:
- object_gid(字符串):用于检索附件的对象gid
- 可选输入:
- 限制(数量):每页结果(1-100)
- offset(字符串):分页偏移标记
- opt_fields(字符串):逗号分隔的可选字段列表
- 返回:附件列表
-
asana_upload_attachment_for_object- 上传本地文件作为任务或其他对象的附件
- 所需输入:
- object_gid(字符串):要将文件附加到的对象gid
- file_path(string):要上传的本地文件的路径
- 可选输入:
- file_name(字符串):自定义文件名
- file_type(string):上传文件的MIME类型
- 返回:上传附件的元数据
-
asana_download_attachment- 将附件下载到本地目录
- 所需输入:
- attachment_gid(字符串):要下载的附件gid
- 可选输入:
- output_dir(string):保存文件的目录(默认:~/downloads)
- 返回:下载文件的路径和MIME类型
提示
task-summary- 根据任务的注释、自定义字段和注释获取任务的摘要和状态更新
- 所需输入:
- task_id(字符串):用于获取摘要的任务id
- 返回:一个详细的提示,其中包含生成任务摘要的说明
资源
无
设置
-
创建Asana帐户:
- 访问 姿势.
- 点击“注册”。
-
取回Asana访问令牌:
- 您可以从Asana开发人员控制台生成个人访问令牌。
- https://app.asana.com/0/my-apps
- 更多详情请点击此处:https://developers.asana.com/docs/personal-access-token
- 您可以从Asana开发人员控制台生成个人访问令牌。
-
可选:获取默认工作区ID:
- 如果您主要使用一个工作区,则可以设置默认工作区ID。
- 使用Asana API列出您的工作区,或者转到Asana中的工作区并从URL复制ID。
- 设置默认工作空间ID时,不需要为每个API调用指定工作空间。
- 如果没有默认工作区,服务器将调用
asana_list_workspaces以获取可用工作区的列表。
-
配置Claude桌面: 将以下内容添加到您的
claude_desktop_config.json:{ "mcpServers": { "asana": { "command": "npx", "args": ["-y", "@cristip73/mcp-server-asana"], "env": { "ASANA_ACCESS_TOKEN": "your-asana-access-token", "DEFAULT_WORKSPACE_ID": "your-default-workspace-id" } } } }
故障排除
如果遇到权限错误:
- 确保你的体式计划允许API访问
- 确认在中正确设置了访问令牌和配置
claude_desktop_config.json.
贡献
克隆此仓库并开始黑客攻击。
使用MCP检查员进行本地测试
如果你想测试你的更改,你可以这样使用MCP检查器:
npm run inspector
这将使客户端暴露于端口 5173 服务器到端口 3000.
如果这些端口已被其他人使用,您可以使用:
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector
许可证
此MCP服务器根据MIT许可证获得许可。这意味着您可以根据MIT许可证的条款和条件自由使用、修改和分发软件。有关更多详细信息,请参阅项目存储库中的LICENSE文件。