Asana任务管理服务器

该服务是一个Asana API的MCP服务器实现,允许通过MCP客户端(如Claude桌面应用)与Asana进行交互,提供任务、项目、工作区的管理和查询功能。

  • by roychri
  • TypeScript
  • 本地部署
  • 149 星标
  • 更新于
在 GitHub 查看 roychri/mcp-server-asana

使用说明

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

环境变量

  • ASANA_ACCESS_TOKEN:(必填)您的Asana访问令牌
  • READ_ONLY_MODE:(可选)设置为“true”可禁用所有写入操作。在此模式下:
    • 修改Asana数据(创建、更新、删除)的工具将被禁用
    • 这 create-task 提示将被禁用
    • 只有读取操作可用 这对于测试或当您想确保无法对Asana工作区进行任何更改时非常有用。

用法

在你选择的人工智能工具(例如:Claude Desktop)中,询问一些关于体式任务、项目、工作空间和/或评论的问题。提到“体式”这个词会增加法学硕士选择正确工具的机会。

例子:

在Sprint 30项目中,我们有多少未完成的体式任务?

另一个例子:

工具

  1. asana_list_workspaces
    • 列出Asana的所有可用工作区
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:工作区列表
  2. asana_search_projects
    • 使用名称模式匹配在Asana中搜索项目
    • 所需输入:
      • workspace(字符串):要搜索的工作区
      • name_pattern(字符串):匹配项目名称的正则表达式模式
    • 可选输入:
      • archived(布尔值):仅返回已存档的项目(默认值:false)
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:匹配项目列表
  3. asana_search_tasks
    • 使用高级筛选选项在工作区中搜索任务
    • 所需输入:
      • workspace(字符串):要搜索的工作区
    • 可选输入:
      • 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):包含自定义字段过滤器的对象
    • 返回:匹配任务列表
  4. asana_get_task
    • 获取特定任务的详细信息
    • 所需输入:
      • task_id(字符串):要检索的任务id
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:详细任务信息
  5. 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字符串映射到其值的对象
    • 返回:已创建任务信息
  6. asana_get_task_stories
    • 获取特定任务的评论和故事
    • 所需输入:
      • task_id(字符串):获取故事的任务id
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:任务故事/评论列表
  7. asana_update_task
    • 更新现有任务的详细信息
    • 所需输入:
      • task_id(字符串):要更新的任务id
    • 可选输入:
      • name(string):任务的新名称
      • notes(string):任务的新描述
      • html_notes(string):任务的html格式描述(支持html标签的子集)
      • due_on(字符串):YYYY-MM-DD格式的新截止日期
      • 受让人(字符串):新受让人(可以是“我”或用户ID)
      • followers(数组):要添加为关注者的用户ID数组
      • parent(字符串):用于移动此任务的父任务ID
      • complete(布尔值):将任务标记为已完成或未完成
      • resource_subtype(字符串):任务的类型(默认任务或里程碑)
      • custom_fields(object):将自定义字段GID字符串映射到其值的对象
    • 返回:更新的任务信息
  8. asana_get_project
    • 获取特定项目的详细信息
    • 所需输入:
      • project_id(字符串):要检索的项目id
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:详细项目信息
  9. asana_get_project_task_counts
    • 获取项目中的任务数
    • 所需输入:
      • project_id(字符串):用于获取任务计数的项目id
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:任务计数信息
  10. asana_get_project_sections
    • 获取项目中的部分
    • 所需输入:
      • project_id(字符串):用于获取节的项目id
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:项目部分列表
  11. asana_create_task_story
    • 为任务创建评论或故事
    • 所需输入:
      • task_id(字符串):要添加故事的任务id
      • text(string):故事/评论的文本内容
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:已创建的故事信息
  12. asana_add_task_dependencies
    • 设置任务的依赖关系
    • 所需输入:
      • task_id(string):要添加依赖项的任务id
      • 依赖关系(字符串数组):此任务所依赖的任务ID数组
    • 返回:更新了任务依赖关系
  13. asana_add_task_dependents
    • 设置任务的依赖项(依赖于此任务的任务)
    • 所需输入:
      • task_id(字符串):要添加依赖项的任务id
      • 依赖项(字符串数组):依赖于此任务的任务ID数组
    • 返回:更新了任务依赖项
  14. asana_create_subtask
    • 为现有任务创建新的子任务
    • 所需输入:
      • parent_task_id(字符串):用于创建子任务的父任务id
      • name(字符串):子任务的名称
    • 可选输入:
      • 注释(字符串):子任务的描述
      • due_on(字符串):YYYY-MM-DD格式的截止日期
      • 受让人(字符串):受让人(可以是“我”或用户ID)
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:已创建子任务信息
  15. asana_get_multiple_tasks_by_gid
    • 通过GID获取多个任务的详细信息(最多25个任务)
    • 所需输入:
      • task_ids(字符串数组或逗号分隔字符串):要检索的任务GID(最多25个)
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:详细任务信息列表
  16. asana_get_project_status
    • 获取项目状态更新
    • 所需输入:
      • project_status_gid(字符串):要检索的项目状态gid
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:项目状态信息
  17. asana_get_project_statuses
    • 获取项目的所有状态更新
    • 所需输入:
      • project_gid(字符串):用于获取其状态的项目gid
    • 可选输入:
      • 限制(数量):每页结果(1-100)
      • offset(字符串):分页偏移标记
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:项目状态更新列表
  18. asana_create_project_status
    • 为项目创建新的状态更新
    • 所需输入:
      • project_gid(字符串):用于创建其状态的项目gid
      • text(string):状态更新的文本内容
    • 可选输入:
      • color(string):状态的颜色(绿色、黄色、红色)
      • title(string):状态更新的标题
      • html_text(string):状态更新的html格式文本
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:已创建项目状态信息
  19. asana_delete_project_status
    • 删除项目状态更新
    • 所需输入:
      • project_status_gid(字符串):要删除的项目状态gid
    • 返回:删除确认
  20. asana_set_parent_for_task
    • 设置任务的父级,并将子任务定位在该父级的其他子任务中
    • 所需输入:
      • task_id(字符串):要操作的任务id
      • 数据(对象):
        • parent(string):任务的新父级,或null表示没有父级
    • 可选输入:
      • insert_after(string):父任务的一个子任务,用于在后面插入任务,或在列表开头插入null
      • insert_before(string):父任务的子任务,用于在列表之前插入任务,或在列表末尾插入null
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:更新的任务信息
  21. asana_get_tag
    • 获取特定标签的详细信息
    • 所需输入:
      • tag_gid(字符串):标记的全局唯一标识符
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:详细标签信息
  22. asana_get_tags_for_task
    • 获取任务的标签
    • 所需输入:
      • task_gid(string):要操作的任务
    • 可选输入:
      • 限制(数量):每页结果。每页要返回的对象数。该值必须介于1和100之间。
      • offset(字符串):偏移标记。API返回的下一页的偏移量。
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:与任务关联的标签列表
  23. asana_get_tasks_for_tag
    • 获取特定标签的任务
    • 所需输入:
      • tag_gid(字符串):用于检索任务的标记gid
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
      • opt_prety(boolean):以“漂亮”格式提供响应
      • limit(整数):每页返回的对象数。该值必须介于1和100之间。
      • offset(string):API返回的下一页的偏移量。
    • 返回:指定标记的任务列表
  24. asana_get_tags_for_workspace
    • 在工作区中获取标签
    • 所需输入:
      • workspace_gid(字符串):工作区或组织的全局唯一标识符
    • 可选输入:
      • limit(整数):每页结果。每页要返回的对象数。该值必须介于1和100之间。
      • offset(字符串):偏移标记。API返回的下一页的偏移量。
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:工作区中的标签列表
  25. asana_update_tag
    • 更新现有标记
    • 所需输入:
      • tag_gid(字符串):标记的全局唯一标识符
    • 可选输入:
      • name(string):标记的名称
      • color(string):标签的颜色。可以是以下之一:深粉色、深绿色、深蓝色、深红色、深青色、深棕色、深橙色、深紫色、深暖灰色、浅粉色、浅绿色、浅蓝色、浅红色、浅青色、浅棕色、浅橙色、浅紫色、浅暖灰色
      • notes(string):关于标签的注释
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:更新标签信息
  26. asana_delete_tag
    • 删除标签
    • 所需输入:
      • tag_gid(字符串):标记的全局唯一标识符
    • 返回:删除确认
  27. asana_create_tag_for_workspace
    • 在工作区中创建新标记
    • 所需输入:
      • workspace_gid(字符串):工作区或组织的全局唯一标识符
      • name(string):标记的名称
    • 可选输入:
      • color(string):标签的颜色。可以是以下之一:深粉色、深绿色、深蓝色、深红色、深青色、深棕色、深橙色、深紫色、深暖灰色、浅粉色、浅绿色、浅蓝色、浅红色、浅青色、浅棕色、浅橙色、浅紫色、浅暖灰色
      • notes(string):关于标签的注释
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:已创建标签信息
  28. asana_add_tag_to_task
    • 向任务添加标签
    • 所需输入:
      • task_gid(string):要添加标签的任务gid
      • tag_gid(字符串):要添加到任务中的标记gid
    • 返回:成功响应
  29. asana_remove_tag_from_task
    • 从任务中删除标记
    • 所需输入:
      • task_gid(string):从中删除标记的任务gid
      • tag_gid(字符串):要从任务中删除的标记gid
    • 返回:成功响应
  30. asana_add_project_to_task
    • 将现有任务添加到项目中
    • 所需输入:
      • task_id(字符串):要添加到项目中的任务id
      • project_id(字符串):要将任务添加到的项目id
    • 可选输入:
      • section(string):在项目中添加任务的节ID
      • insert_after(string):用于插入此任务的任务ID。最多只能指定insert_before、insert_after或section中的一个。
      • insert_before(string):用于插入此任务的任务ID。最多只能指定insert_before、insert_after或section中的一个。
    • 返回:成功消息,确认任务已添加到项目中
    • 注意:如果没有给出定位参数,则任务将添加到项目末尾
  31. asana_remove_project_from_task
    • 从项目中删除任务
    • 所需输入:
      • task_id(字符串):要从项目中删除的任务id
      • project_id(字符串):从中删除任务的项目id
    • 返回:成功消息,确认任务已从项目中删除
    • 注意:该任务仍将存在于系统中,但将不再存在于项目中
  32. asana_delete_task
    • 永久删除任务
    • 所需输入:
      • task_id(字符串):要删除的任务id
    • 返回:确认任务已删除的成功消息
    • 注意:此操作无法撤消。该任务将被永久删除。
  33. asana_create_project
    • 在工作区或团队中创建新项目
    • 所需输入:
      • workspace(string):在其中创建项目的工作区GID
      • name(string):项目名称
    • 可选输入:
      • team(string):团队GID(组织工作区所需)
      • 注释(字符串):项目的描述或注释
      • color(string):项目的颜色(例如,深粉色、深绿色、浅蓝色)
      • privacy_setting(字符串):隐私设置(public_to_workspace、private_to_team、private)
      • default_view(字符串):默认视图(列表、板、日历、时间线)
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:创建的项目对象
  34. asana_update_project
    • 更新项目的详细信息(名称、描述等)
    • 所需输入:
      • project_id(字符串):要更新的项目GID
    • 可选输入:
      • name(string):项目的新名称
      • 注释(字符串):项目的新纯文本描述
      • html_notes(字符串):新的html格式描述(必须是有效的Asana XML)
      • color(string):项目的颜色(例如,深粉色、深绿色、浅蓝色)
      • privacy_setting(字符串):隐私设置(public_to_workspace、private_to_team、private)
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:更新的项目信息
  35. asana_create_section
    • 在项目中创建新部分
    • 所需输入:
      • project_id(string):在中创建节的项目GID
      • name(string):新节的名称
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:已创建部分信息
  36. asana_update_section
    • 更新一个部分(重命名它)
    • 所需输入:
      • section_id(字符串):要更新的GID部分
      • name(string):节的新名称
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
    • 返回:更新了部分信息
  37. asana_delete_section
    • 从项目中删除部分
    • 所需输入:
      • section_id(字符串):要删除的节GID
    • 返回:删除确认
  38. asana_add_task_to_section
    • 将任务移动到其项目中的某个部分
    • 所需输入:
      • section_id(string):要将任务添加到的节GID
      • task_id(字符串):要移动的任务GID
    • 可选输入:
      • insert_before(string):一个任务GID,用于在之前插入任务
      • insert_after(string):一个任务GID,用于在后面插入任务
    • 返回:成功确认
  39. asana_get_subtasks
    • 获取给定任务的所有子任务。返回每个子任务的紧凑表示。
    • 所需输入:
      • task_gid(string):父任务的gid
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表(例如“name、completed、assistant、due_on”)
    • 返回:子任务对象数组
  40. asana_get_tasks_for_project
    • 获取项目中的所有任务。当您需要列出特定项目中的任务时,请使用此选项而不是search_tasks。适用于免费Asana计划(与需要额外费用的search_tasks不同)。支持分页和可选字段选择。
    • 所需输入:
      • project_id(字符串):获取任务的项目GID
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
      • 限制(数量):每页结果(1-100)
      • offset(字符串):来自先前响应的分页偏移标记
    • 返回:任务对象数组
  41. asana_get_my_tasks
    • 从工作区中经过身份验证的用户的“我的任务”列表中获取任务
    • 所需输入:
      • workspace(string):从中获取“我的任务”的工作区GID
    • 可选输入:
      • opt_fields(字符串):逗号分隔的可选字段列表
      • completed_since(string):仅返回自此时以来完成的任务(ISO 8601)。使用“现在”仅返回未完成的任务。
    • 返回:用户“我的任务”列表中的任务列表

提示

  1. task-summary

    • 根据任务的注释、自定义字段和注释获取任务的摘要和状态更新
    • 所需输入:
      • task_id(字符串):用于获取摘要的任务id
    • 返回:一个详细的提示,其中包含生成任务摘要的说明
  2. task-completeness

    • 分析任务描述是否包含完成任务所需的所有详细信息
    • 所需输入:
      • task_id(字符串):要分析的任务id或URL
    • 返回:一个详细的提示,其中包含分析任务完整性的说明
  3. create-task

    • 使用指定的详细信息创建新任务
    • 所需输入:
      • project_name(字符串):应在其中创建任务的Asana项目的名称
      • title(string):任务的标题
    • 可选输入:
      • notes(string):任务的注释或描述
      • due_date(字符串):任务的到期日期(YYYY-MM-DD格式)
    • 返回:一个详细的提示,其中包含创建综合任务的说明

资源

  1. 工作区- asana://workspace/{workspace_gid}

    • 将Asana工作空间表示为资源
    • 每个工作区都作为单独的资源公开
    • URI格式: asana://workspace/{workspace_gid}
    • 返回:带有工作区详细信息的JSON对象,包括:
      • name:工作区名称(字符串)
      • id:工作区全局ID(字符串)
      • type:资源类型(字符串)
      • is_organization:工作区是否为组织(布尔值)
      • email_domains:与工作区关联的电子邮件域列表(string[])
    • Mime类型: application/json
  2. 项目- asana://project/{project_gid}

    • 用于按GID检索项目详细信息的模板资源
    • URI格式: asana://project/{project_gid}
    • 返回:包含项目详细信息的JSON对象,包括:
      • name:项目名称(字符串)
      • id:项目全局ID(字符串)
      • type:资源类型(字符串)
      • archived:项目是否存档(布尔值)
      • public:项目是否公开(布尔值)
      • notes:项目描述/注释(字符串)
      • color:项目颜色(字符串)
      • default_view:默认视图类型(字符串)
      • due_date, due_on, start_on:项目日期信息(字符串)
      • workspace:包含工作区信息的对象
      • team:包含团队信息的对象
      • sections:项目中的截面对象数组
      • custom_fields:项目的自定义字段定义数组
    • Mime类型: application/json

设置

  1. 创建Asana帐户:

    • 访问 姿势.
    • 点击“注册”。
  2. 取回Asana访问令牌:

    • 您可以从Asana开发人员控制台生成个人访问令牌。
      • 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服务器:

    claude mcp add asana -e ASANA_ACCESS_TOKEN=<TOKEN> -- npx -y @roychri/mcp-server-asana
    

    替换 <TOKEN> 使用您的Asana访问令牌。

    对于Codex CLI:

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

    [mcp_servers.asana]
    command = "npx"
    args = [
      "-y", "@roychri/mcp-server-asana"
    ]
    env = {ASANA_ACCESS_TOKEN= "<TOKEN>"}
    

    替换 <TOKEN> 使用您的Asana访问令牌。

如果你想安装测试版(尚未发布),你可以使用:

  • @roychri/mcp-server-asana@beta

您可以通过以下任一方式找到当前的测试版(如果有的话):

  1. https://www.npmjs.com/package/@罗奇里/mcp服务器体式?activeTab=版本
  2. npm dist-tag ls @roychri/mcp-server-asana

故障排除

如果遇到权限错误:

  1. 确保你的体式计划允许API访问
  2. 确认在中正确设置了访问令牌和配置 claude_desktop_config.json.

贡献

克隆此仓库并开始黑客攻击。

使用MCP检查员进行本地测试

如果你想测试你的更改,你可以这样使用MCP检查器:

npm run inspector

这将使客户端暴露于端口 5173 服务器到端口 3000.

如果这些端口已被其他人使用,您可以使用:

CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector

许可证

此MCP服务器根据MIT许可证获得许可。这意味着您可以根据MIT许可证的条款和条件自由使用、修改和分发软件。有关更多详细信息,请参阅项目存储库中的LICENSE文件。