Asana项目运营MCP服务器
   
Asana项目运营 是一个高性能的模型上下文协议(MCP)服务器,它改变了AI助手与Asana的交互方式。通过遵循以下最佳实践的高级批处理操作,优化了效率和速度 Vulcan文件操作MCP服务器 批量操作和选择性工具激活。
该服务器专为项目经理、开发人员以及在任何领域从事项目的任何人而设计,他们需要在不离开人工智能应用程序的情况下管理复杂的任务层次结构。与最初的单一操作方法不同,这种方法对数百个任务效率低下(人工智能代理积极阻止),Asana Project Ops实现了从项目头脑风暴到完全在人工智能应用程序中执行任务的无缝工作流程。
这是一个增强的fork roychri/mcp服务器体式 具有企业级优化和全面的批处理功能。
主要新特性/功能
高级批处理操作
- 150个操作批次限制 设计用于在Asana的免费套餐费率限制内工作(150个请求/分钟)
- 统一区段管理 和
asana_section_operations(在单个工具中创建/更新/删除) - 复杂的任务层次结构 和
asana_batch_create_tasks_with_subtasks(50个任务×每个任务50个子任务)
直接部门分配
- 在创建期间直接在特定部分中创建的任务(消除了单独的API调用)
- 大幅减少 在API中调用分段的工作流(从每个任务2个调用到1个)
- 适用于所有任务创建工具
企业级可靠性
- 增强的错误处理 和
continue_on_error支持 - 全面的输入验证 对于所有操作
选择性工具激活
- 用于集中工作流的工具类别(工作区、项目、任务、批处理等)
- 限制敏感操作的安全控制
- 通过限制可用工具进行性能优化
目录
安全
Asana Project Ops实施了专为安全项目管理运营而设计的企业级安全措施:
凭证保护
- 仅环境变量:Asana访问令牌仅通过环境变量进行管理,从不在应用程序输出中记录或公开
- 无令牌持久性:令牌不会在当前会话之后存储、缓存或持久化
- 安全传输:所有API通信都使用HTTPS与Asana的官方端点
操作控制
- 只读模式:设置
READ_ONLY_MODE=true禁用所有写入操作,非常适合测试、审核或受限环境 - 选择性工具激活:配置可用的工具
--enabled-tool-categories或--enabled-tools根据用户角色或合规性要求限制功能 - 批量操作安全:所有批处理操作包括
continue_on_error支持防止单个项目错误导致的完全失败
内容安全
- HTML验证:对任务描述和注释中的HTML内容进行全面验证,防止注入攻击,同时支持Asana允许的HTML标签
- 输入净化:在提交API之前,所有用户输入都经过验证和消毒
- 错误隔离:批处理操作隔离每个项目的错误,防止可能暴露敏感信息的级联故障
合规性特征
- 审计跟踪:清除错误消息和操作日志,以进行合规性监控
- 速率限制意识:对Asana API费率限制的固有尊重防止意外滥用
- 访问控制:工具级限制为不同的团队成员启用基于角色的访问控制
背景
项目来源
Asana项目运营是对 roychri/mcp服务器体式,Asana API集成的基础MCP服务器。虽然最初的项目提供了必要的连接,但它受到单一操作工作流的限制,无法扩展到企业项目管理需求。
问题已解决
Asana的传统项目管理通常涉及低效的工作流程:
- 单一操作限制:创建数百个任务需要单独的API调用
- 上下文切换:用户必须离开AI应用程序进行CSV导入或手动组织
- 利率限制挑战:顺序操作快速达到API限制
- 手动整理:在默认部分中创建的任务需要单独的重新分配调用
企业级解决方案
Asana项目运营将这些限制转化为简化的工作流程:
- 批量操作:在单个操作中创建、更新和组织数百个任务
- 直接部门分配:任务创建在它们所属的位置,消除了重组步骤
- 智能限速管理:针对Asana的免费等级限制(150个请求/分钟)进行了优化
- AI原生工作流:无需离开人工智能应用程序即可完成项目生命周期
技术创新
服务器引入了几个架构改进:
- 统一分段作业:创建、更新和删除操作的单一工具
- 复杂的任务层次结构:支持具有批处理的嵌套子任务
- 增强验证:全面的HTML内容验证和错误报告
- 选择性工具激活:通过可配置的工具集进行性能优化
安装
先决条件
- Node.js 18+(用于开发)或Node.js 22+(用于MCP检查器)
- 使用API访问令牌的有效Asana帐户
环境设置
创建Asana个人访问令牌:
- 访问 Asana开发者控制台
- 生成个人访问令牌
- 设置环境变量:
ASANA_ACCESS_TOKEN=your_token_here
安装选项
适用于克劳德桌面
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"asana-project-ops": {
"command": "npx",
"args": ["-y", "@n0zer0d4y/asana-project-ops"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}用于本地开发/Cursor
- 构建项目:
npm run build- 添加到
claude_desktop_config.json:
{
"mcpServers": {
"asana-project-ops-local": {
"command": "node",
"args": ["/path/to/your/project/dist/index.js"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}克劳德代码
claude mcp add asana-project-ops -e ASANA_ACCESS_TOKEN= -- npx -y @n0zer0d4y/asana-project-ops用法
Asana Project Ops可在您的AI应用程序中实现无缝的项目管理工作流程。激活特定的工具类别或单个工具,以优化性能并专注于当前的工作流程。
环境变量
ASANA_ACCESS_TOKEN:(必填)您的Asana访问令牌READ_ONLY_MODE:(可选)设置为“true”可禁用所有写入操作。在此模式下:
- 修改Asana数据(创建、更新、删除)的工具将被禁用 - 这 create-task 提示将被禁用 - 只有读取操作可用 这对于测试或当您想确保无法对Asana工作区进行任何更改时非常有用。
速率限制
Asana API强制执行费率限制,以确保公平使用:
- 免费版:每分钟150个请求
- 付费层:每分钟1500个请求
- 并发请求:15个同时进行的POST/PUT/PATCH/DELETE操作
批量操作 使用顺序处理,使其自然符合速率限制。批处理中的每个单个API调用都计入速率限制(免费层为150个请求/分钟)。虽然批处理工具每批最多支持150个操作,但建议使用较小的批处理(10个操作)以获得最佳性能并避免速率限制。
选择性工具激活
您可以通过在MCP客户端配置中配置工具类别或特定工具来控制AI助手可以使用哪些工具。这有助于:
- 通过限制可用工具减少认知负荷
- 通过限制对敏感操作的访问来实现安全
- 通过减少刀具数量实现性能优化
- 通过仅启用相关工具来集中工作流程
工具类别
以下类别可用:
workspaces-工作区管理工具projects-项目管理工具project-status-项目状态更新工具tasks-个人任务管理工具subtasks-子任务创建工具batch-批量操作工具(创建、更新、删除多个项目)dependencies-任务依赖性工具stories-任务故事/评论工具tags-标签管理工具sections-部门管理工具all-所有工具(默认行为)
配置示例
仅启用与任务相关的工具:
{
"mcpServers": {
"asana-project-ops-local": {
"command": "node",
"args": [
"/path/to/dist/index.js",
"--enabled-tool-categories",
"tasks,batch"
],
"env": {
"ASANA_ACCESS_TOKEN": "your-token"
}
}
}
}启用特定工具:
{
"mcpServers": {
"asana-project-ops-local": {
"command": "node",
"args": [
"/path/to/dist/index.js",
"--enabled-tools",
"asana_create_task,asana_update_task,asana_search_tasks"
],
"env": {
"ASANA_ACCESS_TOKEN": "your-token"
}
}
}
}混合配置:
{
"mcpServers": {
"asana-project-ops-local": {
"command": "node",
"args": [
"/path/to/dist/index.js",
"--enabled-tool-categories",
"projects",
"--enabled-tools",
"asana_create_task,asana_update_task"
],
"env": {
"ASANA_ACCESS_TOKEN": "your-token"
}
}
}
}工作流特定示例:
对于批处理操作和任务管理:
# Enable task and batch operations for efficient project setup
--enabled-tool-categories "tasks,batch"对于全面的项目管理:
# Enable all project, section, and task management tools
--enabled-tool-categories "projects,tasks,batch"对于特定工作流:
# Enable only section operations and task creation
--enabled-tools "asana_section_operations,asana_create_task,asana_batch_create_tasks"备注:如果没有 --enabled-tool-categories 或 --enabled-tools 如果指定了,则默认启用所有工具(向后兼容)。
工作流示例
有关涵盖项目设置、任务管理、子任务和组织的全面端到端工作流,请参阅 基本工作流程指南.
快速示例:
项目设置工作流:
- 激活批处理操作:
--enabled-tool-categories "batch" - 问你的AI代理: _创建一个名为“Q1产品发布”的新项目,包括规划、开发、测试和部署部分_
任务创建工作流:
- 激活任务工具:
--enabled-tool-categories "tasks" - 问你的AI代理: _在“开发”部分为sprint积压创建20个用户故事任务,每个任务都有接受标准作为子任务_
部门组织工作流程:
- 激活剖面工具:
--enabled-tools "asana_section_operations" - 问你的AI代理: _“重新组织项目部分-将“部署前测试”移动,并将“计划”重命名为“发现”_
批量任务管理:
- 激活批处理工具:
--enabled-tool-categories "batch" - 问你的AI代理: _“更新“开发”部分中的所有任务,使其截止日期为下周五,并添加“高优先级”标签”_
效率效益
- 零上下文切换:无需离开AI应用程序即可完成项目工作流程
- 批量操作:在单个操作中创建数百个任务和子任务
- 直接部门分配:任务创建在它们所属的位置,消除了手动组织
- 智能刀具选择:提及“Asana”或特定操作来指导AI工具选择
AI代理将根据您的请求自动选择最合适的工具,利用先进的批处理功能实现最高效率。
API
工具
Asana Project Ops为高效的工作流管理提供了全面的工具分类。工具按功能类别组织,以帮助您根据特定需求选择合适的功能。
工具类别
workspaces-工作区管理工具projects-项目管理工具project-status-项目状态更新工具tasks-个人任务管理工具subtasks-子任务创建工具batch-批量操作工具(创建、更新、删除多个项目)dependencies-任务依赖性工具stories-任务故事/评论工具tags-标签管理工具sections-部门管理工具all-所有工具(默认行为)
工具概述
工作区工具
asana_list_workspaces
项目工具
asana_search_projectsasana_get_projectasana_get_project_task_countsasana_get_project_sectionsasana_create_project
项目状态工具
asana_get_project_statusasana_get_project_statusesasana_create_project_statusasana_delete_project_status
任务工具
asana_search_tasksasana_get_taskasana_create_taskasana_create_task_with_subtasksasana_update_taskasana_delete_taskasana_get_multiple_tasks_by_gidasana_add_project_to_taskasana_remove_project_from_task
子任务工具
asana_create_subtask
批量操作工具
asana_batch_create_tasksasana_batch_update_tasksasana_batch_create_subtasksasana_batch_delete_tasksasana_batch_create_tasks_with_subtasks
依赖工具
asana_add_task_dependenciesasana_add_task_dependentsasana_set_parent_for_task
故事/评论工具
asana_get_task_storiesasana_create_task_story
标签管理工具
asana_get_tagasana_get_tags_for_taskasana_get_tags_for_workspaceasana_update_tagasana_delete_tagasana_get_tasks_for_tagasana_create_tag_for_workspaceasana_add_tag_to_taskasana_remove_tag_from_task
部门管理工具
asana_section_operations
工作区工具
asana_list_workspaces
- 列出Asana的所有可用工作区 - 可选输入: - opt_fields (string):以逗号分隔的可选字段列表 - 退货: 工作空间列表
项目工具
asana_search_projects
- 使用名称模式匹配在Asana中搜索项目 - 所需输入: - workspace (string):要搜索的工作区 - name_pattern (string):匹配项目名称的正则表达式模式 - 可选输入: - archived (boolean):仅返回已存档的项目(默认值:false) - opt_fields (string):以逗号分隔的可选字段列表 - 退货: 匹配项目列表
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_project
- 在工作区或团队中创建新项目 - 所需输入: - workspace (string):用于创建项目的工作区GID - name (string):项目名称 - 可选输入: - team (string):团队GID(组织工作区所需) - notes (string):项目的描述或注释 - color (string):项目的颜色(例如,深粉色、深绿色、浅蓝色) - privacy_setting (string):隐私设置(public_to_workspace、private_to_team、private) - default_view (string):默认视图(列表、板、日历、时间线) - opt_fields (string):以逗号分隔的可选字段列表 - 退货: 创建的项目对象
项目状态工具
asana_get_project_status
- 获取项目状态更新 - 所需输入: - project_status_gid (string):要检索的项目状态GID - 可选输入: - opt_fields (string):以逗号分隔的可选字段列表 - 退货: 项目状态信息
asana_get_project_statuses
- 获取项目的所有状态更新 - 所需输入: - project_gid (string):用于获取状态的项目GID - 可选输入: - limit (数量):每页结果(1-100) - offset (string):分页偏移标记 - opt_fields (string):以逗号分隔的可选字段列表 - 退货: 项目状态更新列表
asana_create_project_status
- 为项目创建新的状态更新 - 所需输入: - project_gid (string):用于创建状态的项目GID - text (string):状态更新的文本内容 - 可选输入: - color (string):状态的颜色(绿色、黄色、红色) - title (string):状态更新的标题 - html_text (string):状态更新的HTML格式文本 - opt_fields (string):以逗号分隔的可选字段列表 - 退货: 已创建项目状态信息
asana_delete_project_status
- 删除项目状态更新 - 所需输入: - project_status_gid (string):要删除的项目状态GID - 退货: 删除确认
任务工具
asana_search_tasks
- 使用高级筛选选项在工作区中搜索任务
- 所需保费: 此终结点需要Asana Premium、Business或Enterprise订阅。免费会员将获得
402 Payment Required错误。对于免费等级的替代方案,请使用asana_get_task使用已知的任务ID,或通过客户端的项目/部分和过滤器检索任务。 - 可选输入:
- 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、like、modified_at排序(默认值:modified_ad) - 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 (字符串):到期日期,格式为YYYY-MM-DD - assignee (string):受让人(可以是“我”或用户ID) - followers (字符串数组):要添加为关注者的用户ID数组 - parent (string):用于设置此任务的父任务ID - projects (字符串数组):要将此任务添加到的项目ID数组 - resource_subtype (string):任务的类型(默认任务、里程碑或批准) - custom_fields (object):将自定义字段GID字符串映射到其值的对象 - section (string):创建任务的GID部分(任务将直接在此部分创建,而不是默认部分)
- 退货: 已创建任务信息
asana_create_task_with_subtasks
- 在单个操作中创建具有可选子任务的任何类型的任务(常规、里程碑、审批)
- 所需输入:
- project_id (string):创建任务的项目 - name (string):任务名称
- 可选输入:
- notes (string):任务描述 - html_notes (string):HTML格式的描述,支持@-提及 - due_on (字符串):到期日期,格式为YYYY-MM-DD - assignee (string):受让人用户标识符(“我”、电子邮件或用户GID) - followers (array):要添加为关注者的用户ID数组 - resource_subtype (string):任务类型(默认任务、里程碑、审批) - custom_fields (对象):自定义字段值 - section (string):创建任务的GID部分(任务将直接在此部分创建,而不是默认部分) - subtasks (array):可选的子任务数组(最多50个) - continue_on_error (boolean):如果主任务创建失败,则继续创建子任务(默认值:false)
- 退货: 完成任务对象,包括子任务结果和成功/失败摘要
- 笔记: 任务创建工作流的通用替代品。每个操作最多50个子任务。可以在一次调用中创建常规任务或复杂任务层次结构。
asana_update_task
- 更新现有任务的详细信息
- 所需输入:
- task_id (string):要更新的任务ID
- 可选输入:
- name (string):任务的新名称 - notes (string):任务的新描述 - due_on (字符串):YYYY-MM-DD格式的新截止日期 - assignee (string):新受让人(可以是“我”或用户ID) - completed (boolean):将任务标记为已完成或未完成 - resource_subtype (string):任务的类型(默认任务、里程碑或批准) - custom_fields (object):将自定义字段GID字符串映射到其值的对象
- 退货: 更新任务信息
asana_delete_task
- 永久删除任务
- 所需输入:
- task_id (string):要删除的任务ID
- 退货: 确认任务已删除的成功消息
- 笔记: 此操作无法撤消。该任务将被永久删除。
asana_get_multiple_tasks_by_gid
- 通过GID获取多个任务的详细信息(最多25个任务)
- 所需输入:
- task_ids (字符串数组或逗号分隔字符串):要检索的任务GID(最多25个)
- 可选输入:
- opt_fields (string):以逗号分隔的可选字段列表
- 退货: 任务详细信息列表
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_create_subtask
- 为现有任务创建新的子任务
- 所需输入:
- parent_task_id (string):创建子任务的父任务ID - name (string):子任务的名称
- 可选输入:
- notes (string):子任务的描述 - html_notes (string):子任务的HTML格式描述 - due_on (字符串):到期日期,格式为YYYY-MM-DD - assignee (string):受让人(可以是“我”或用户ID) - opt_fields (string):以逗号分隔的可选字段列表
- 退货: 已创建子任务信息
批量操作工具
asana_batch_create_tasks
- 在同一项目中批量创建多个任务
- 所需输入:
- project_id (string):在中创建任务的项目 - tasks (array):要创建的任务对象数组(最多150个)
- 可选输入:
- continue_on_error (boolean):如果单个任务创建失败,则继续处理(默认值:false)
- 退货: 每个任务的成功/失败状态的结果数组
- 笔记: 每批最多150个任务(建议使用10个任务以获得最佳性能)。每个任务对象都支持与相同的属性
asana_create_task,包括可选section用于直接分段分配的参数。
asana_batch_update_tasks
- 批量更新多个现有任务
- 所需输入:
- task_updates (array):任务更新对象数组(最多150个)
- 可选输入:
- continue_on_error (boolean):如果单个任务更新失败,则继续处理(默认值:false)
- 退货: 每个任务更新的成功/失败状态的结果数组
- 笔记: 每批最多150个任务(建议使用10个任务以获得最佳性能)。每个更新对象都支持与相同的属性
asana_update_task.
asana_batch_create_subtasks
- 批量为现有父任务创建多个子任务
- 所需输入:
- subtasks (array):要创建的子任务对象数组(最多150个)
- 可选输入:
- continue_on_error (boolean):如果单个子任务创建失败,则继续处理(默认值:false)
- 退货: 每个子任务的成功/失败状态的结果数组
- 笔记: 每批最多150个子任务(建议10个子任务以获得最佳性能)。每个子任务对象都支持与相同的属性
asana_create_subtask.
asana_batch_delete_tasks
- 批量删除多个任务
- 所需输入:
- task_ids (array):要删除的任务ID数组(最多150个)
- 可选输入:
- continue_on_error (boolean):如果单个任务删除失败,则继续处理(默认值:false)
- 退货: 每个任务删除的成功/失败状态的结果数组
- 笔记: 每批最多150个任务(建议使用10个任务以获得最佳性能)。此操作无法撤消。
asana_batch_create_tasks_with_subtasks
- 在同一项目中批量创建具有可选子任务的多个任务
- 所需输入:
- project_id (string):在中创建任务的项目 - tasks (array):要创建的任务对象数组(最多50个)
- 可选输入:
- continue_on_error (boolean):如果单个任务创建失败,则继续处理(默认值:false)
- 退货: 对象,包含每个任务及其子任务的摘要和结果数组,以及成功/失败状态
- 笔记: 每批最多50个任务(建议使用10个任务以获得最佳性能)。每个任务最多可以有50个子任务。支持通过可选配置直接分配部分
section每个任务对象中的参数。该工具整合了以下功能asana_batch_create_tasks和asana_create_task_with_subtasks成为一个单一的综合行动。
依赖工具
asana_add_task_dependencies
- 设置任务的依赖关系
- 所需输入:
- task_id (string):要添加依赖项的任务ID - dependencies (字符串数组):此任务所依赖的任务ID数组
- 退货: 成功响应
asana_add_task_dependents
- 设置任务的依赖项(依赖于此任务的任务)
- 所需输入:
- task_id (string):要添加依赖项的任务ID - dependents (字符串数组):依赖于此任务的任务ID数组
- 退货: 成功响应
asana_set_parent_for_task
- 设置任务的父级,并将子任务定位在该父级的其他子任务中
- 所需输入:
- task_id (string):要操作的任务ID - data (对象): - parent (string):任务的新父级,或null表示没有父级
- 可选输入:
- insert_after (string):父任务的一个子任务,用于在列表后面插入任务,或在列表开头插入null - insert_before (string):父任务的一个子任务,用于在列表之前插入任务,或在列表末尾插入null - opt_fields (string):以逗号分隔的可选字段列表
- 退货: 更新任务信息
故事/评论工具
asana_get_task_stories
- 获取特定任务的评论和故事
- 所需输入:
- task_id (string):获取故事的任务ID
- 可选输入:
- opt_fields (string):以逗号分隔的可选字段列表
- 退货: 任务故事/评论列表
asana_create_task_story
- 为任务创建评论或故事
- 所需输入:
- task_id (string):要添加故事的任务ID
- 可选输入:
- text (string):故事/评论的纯文本内容 - html_text (string):评论的HTML格式文本 - opt_fields (string):以逗号分隔的可选字段列表
- 退货: 创建故事信息
- 笔记: 要么
text或html_text是必需的,但不是两者都需要
标签管理工具
asana_get_tag
- 获取特定标签的详细信息
- 所需输入:
- tag_gid (string):标签的全局唯一标识符
- 可选输入:
- opt_fields (string):以逗号分隔的可选字段列表
- 退货: 详细标签信息
asana_get_tags_for_task
- 获取任务的标签
- 所需输入:
- task_gid (string):要操作的任务
- 可选输入:
- limit (数字):每页结果。每页要返回的对象数。该值必须介于1和100之间。 - offset (string):偏移标记。API返回的下一页的偏移量。 - opt_fields (string):以逗号分隔的可选字段列表
- 退货: 与任务关联的标签列表
asana_get_tasks_for_tag
- 获取特定标签的任务
- 所需输入:
- tag_gid (string):用于检索任务的标签GID
- 可选输入:
- opt_fields (string):以逗号分隔的可选字段列表 - opt_pretty (boolean):以“漂亮”的格式提供响应 - limit (整数):每页返回的对象数。该值必须介于1和100之间。 - offset (字符串):API返回的下一页的偏移量。
- 退货: 指定标记的任务列表
asana_get_tags_for_workspace
- 在工作区中获取标签
- 所需输入:
- workspace_gid (string):工作区或组织的全局唯一标识符
- 可选输入:
- limit (整数):每页结果。每页要返回的对象数。该值必须介于1和100之间。 - offset (string):偏移标记。API返回的下一页的偏移量。 - opt_fields (string):以逗号分隔的可选字段列表
- 退货: 工作区中的标签列表
asana_update_tag
- 更新现有标记
- 所需输入:
- tag_gid (string):标签的全局唯一标识符
- 可选输入:
- name (string):标记的名称 - color (string):标签的颜色。可以是以下之一:深粉色、深绿色、深蓝色、深红色、深青色、深棕色、深橙色、深紫色、深暖灰色、浅粉色、浅绿色、浅蓝色、浅红色、浅青色、浅棕色、浅橙色、浅紫色、浅暖灰色 - notes (string):关于标签的注释 - opt_fields (string):以逗号分隔的可选字段列表
- 退货: 更新标签信息
asana_delete_tag
- 删除标签
- 所需输入:
- tag_gid (string):标签的全局唯一标识符
- 退货: 删除确认
asana_create_tag_for_workspace
- 在工作区中创建新标记
- 所需输入:
- workspace_gid (string):工作区或组织的全局唯一标识符 - name (string):标记的名称
- 可选输入:
- followers (字符串数组):标识用户的字符串数组。这些可以是字符串“me”、电子邮件或用户的gid。 - color (string):标签的颜色。可以是以下之一:深粉色、深绿色、深蓝色、深红色、深青色、深棕色、深橙色、深紫色、深暖灰色、浅粉色、浅绿色、浅蓝色、浅红色、浅青色、浅棕色、浅橙色、浅紫色、浅暖灰色 - 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_section_operations
- 通过创建、更新和删除操作管理Asana项目部分。支持批量操作,以实现高效的部门管理。
- 所需输入:
- operations (array):要执行的节操作列表(最多50个) - 每个操作对象必须包括: - operation (string):操作类型(“创建”、“更新”或“删除”) - 对于“创建”操作(必填字段): - project_gid (string):将创建节的项目GID - name (string):节名称 - insert_before (字符串,可选):在GID节之前插入 - insert_after (字符串,可选):插入GID节之后 - 对于“更新”操作(必填字段): - section_gid (string):要更新的GID部分 - name (string):新节名称 - 对于“删除”操作(必填字段): - section_gid (string):要删除的GID部分(必须为空)
- 可选输入:
- continue_on_error (boolean):如果单个操作失败,则继续处理(默认值:false)
- 退货: 操作结果,包括显示总操作、成功操作和失败操作的摘要,以及每个操作的详细结果
- 限制:
- 删除操作需要空的部分,不能删除项目中的最后一个部分 - 更新操作只能修改节名称(Asana API限制)
提示
task-summary
- 根据任务的注释、自定义字段和注释获取任务的摘要和状态更新 - 所需输入: - task_id(字符串):用于获取摘要的任务id - 返回:一个详细的提示,其中包含生成任务摘要的说明
task-completeness
- 分析任务描述是否包含完成任务所需的所有详细信息 - 所需输入: - task_id(字符串):要分析的任务id或URL - 返回:一个详细的提示,其中包含分析任务完整性的说明
create-task
- 使用指定的详细信息创建新任务 - 所需输入: - project_name(字符串):应在其中创建任务的Asana项目的名称 - title(string):任务的标题 - 可选输入: - notes(string):任务的注释或描述 - due_date(字符串):任务的到期日期(YYYY-MM-DD格式) - 返回:一个详细的提示,其中包含创建综合任务的说明
资源
- 工作区-
asana://workspace/{workspace_gid}
- 将Asana工作空间表示为资源 - 每个工作区都作为单独的资源公开 - URI格式: asana://workspace/{workspace_gid} - 返回:带有工作区详细信息的JSON对象,包括: - name:工作区名称(字符串) - id:工作区全局ID(字符串) - type:资源类型(字符串) - is_organization:工作区是否为组织(布尔值) - email_domains:与工作区关联的电子邮件域列表(string\[\]) - Mime类型: application/json
- 项目-
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
设置
- 创建Asana帐户:
- 访问 阿萨纳. - 点击“注册”。
- 取回Asana访问令牌:
- 您可以从Asana开发人员控制台生成个人访问令牌。 - https://app.asana.com/0/my-apps - 更多详情请点击此处:https://developers.asana.com/docs/personal-access-token
- 安装选项:
### 对于Claude Desktop:
将以下内容添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"asana-project-ops": {
"command": "npx",
"args": ["-y", "@n0zer0d4y/asana-project-ops"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}### 对于Cursor中的本地开发/测试:
首先,构建项目:
npm run build然后将以下内容添加到您的 claude_desktop_config.json 对于本地测试:
{
"mcpServers": {
"asana-project-ops-local": {
"command": "node",
"args": ["/path/to/your/project/dist/index.js"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}备注:使用 asana-project-ops-local 作为服务器名称,以避免与任何生产冲突 asana-project-ops 服务器配置。您必须使用 完全绝对路径 到 dist/index.js 文件。服务器将从您的本地运行 dist/ 目录。
Windows示例:
{
"mcpServers": {
"asana-project-ops-local": {
"command": "node",
"args": ["C:\\Path\\To\\Your\\Project\\dist\\index.js"],
"env": {
"ASANA_ACCESS_TOKEN": "your-asana-access-token"
}
}
}
}要找到正确的路径:
1. 在项目目录中打开终端 1. 运行: pwd (Linux/Mac)或 cd (Windows)查看完整路径 1. 追加 \\dist\\index.js (Windows)或 /dist/index.js (Linux/Mac)
### 克劳德代码:
使用以下命令安装和配置MCP服务器:
claude mcp add asana-project-ops -e ASANA_ACCESS_TOKEN= -- npx -y @n0zer0d4y/asana-project-ops替换 `` 使用您的Asana访问令牌。
如果你想安装测试版(尚未发布),你可以使用:
@n0zer0d4y/asana-project-ops@beta
您可以通过以下任一方式找到当前的测试版(如果有的话):
- https://www.npmjs.com/package/@n0zer0d4y/体式项目操作?activeTab=版本
npm dist-tag ls @n0zer0d4y/asana-project-ops
故障排除
常见问题
权限错误
如果遇到权限错误:
- 验证您的Asana帐户是否已启用API访问(适用于包括免费层在内的所有计划)
- 确认您的访问令牌在中设置正确
ASANA_ACCESS_TOKEN环境变量 - 检查您的令牌是否具有您尝试的操作所需的权限
工具未找到错误
如果工具未出现在您的AI应用程序中:
- 配置更改后重新启动MCP客户端(Claude Desktop、Cursor等)
- 验证配置中的服务器名称是否完全匹配
- 检查软件包是否已安装:
npm list @n0zer0d4y/asana-project-ops - 确保你的Node.js版本符合要求(18+用于开发,22+用于MCP Inspector)
批量操作失败
对于批处理操作的问题:
- 如果达到速率限制,请减少批量大小(尝试10批而不是150批)
- 检查
continue_on_error支持批处理操作调用 - 使用直接分段分配时,验证分段GID是否存在
- 查看特定验证失败的错误消息
HTML内容问题
如果任务创建失败并出现HTML验证错误:
- 确保HTML标签已正确关闭和嵌套
- 检查是否只使用了支持的Asana HTML标签
- 如果HTML验证继续失败,请使用纯文本注释
- 查看特定的错误消息以查明问题
速率限制
如果遇到速率限制错误:
- 分隔大批量操作
- 使用较小的批量(建议10-50次操作)
- 如果需要,在批处理操作之间等待
- 考虑升级到Asana的付费级别以获得更高的限制(1500个请求/分钟)
获取帮助
- 检查 Asana开发者文档 针对特定于API的问题
- 审查实施计划文件
docs/有关详细的功能说明 - 使用MCP检查员进行测试:
npm run inspector
贡献
我们欢迎为加强Asana项目运营做出贡献!该项目侧重于提高项目管理工作流程的效率和可靠性。
开发设置
- 克隆并安装:
git clone https://github.com/n0zer0d4y/asana-project-ops.git
cd asana-project-ops
npm install- 构建项目:
npm run build- 测试您的更改 与MCP检查员:
npm run inspector这将暴露端口上的客户端 5173 端口上的服务器 3000.
自定义端口 (如果占用了默认值):
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector测试
MCP检验员测试
使用MCP检查器对工具功能进行交互式测试,特别是批量操作和错误处理。
CLI测试
获取自动化测试的测试助手脚本:
source scripts/test-mcp.sh可用测试命令:
mcp_list_tools # List all available tools
mcp_call asana_list_workspaces '{}' # Test individual tools
mcp_test asana_list_workspaces '{}' 'length > 0' # Run assertions代码指南
工具开发
- 遵循中的现有工具模式
src/tools/ - 添加全面的输入验证
- 包括错误处理和可操作的错误消息
- 更新工具定义和处理程序路由
批量操作
- 实施
continue_on_error支持复原力 - 根据API约束条件设置适当的最大限制
- 为大型运营提供明确的进度反馈
- 使用各种批量(1、10、50、150)进行测试
文档
- 更新任何新工具的README.md工具说明
- 添加实施计划
docs/主要特征 - 在“使用”部分包含工作流示例
- 按照专业标准更新CHANGELOG.md
贡献领域
高优先级
- 其他批处理操作工具
- 增强的错误恢复机制
- 大型项目的性能优化
- 与Asana的其他功能集成
功能请求
- 自定义字段批量操作
- 高级过滤和搜索功能
- 与外部项目管理工具集成
- 移动优化工作流程
拉取请求流程
- 分叉 仓库
- 创建 特征分支:
git checkout -b feature/your-feature-name - 测试 通过MCP检查器和CLI测试进行彻底测试
- 更新 文档,包括README和CHANGELOG
- 提交 带有明确变更描述的拉取请求
所有贡献都应保持向后兼容性,并包括全面的测试。
许可证
Asana Project Ops根据MIT许可证获得许可。此许可证允许您自由使用、修改和分发软件,同时保留原始的版权声明和许可条款。
归因
该项目是 roychri/mcp服务器体式,有实质性的改进,包括企业级批量操作、直接分段分配和全面的错误处理。
完整许可证文本
有关完整的许可条款和条件,请参阅 许可证 此存储库中的文件。
______________________________________________________________________
版权所有(c)2025 n0zer0d4y -根据MIT许可条款保留所有权利。
