Asana任务管理服务器

一个基于MCP协议的Asana任务管理服务器,用于通过Warp终端获取今日到期的任务。

  • by ChristianP93
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 christianp93/asana-mcp-server

使用说明

用于Warp的Asana MCP服务器(Hello World示例)

这个项目是一个MCP(模型上下文协议)服务器的“Hello World”示例,旨在与Asana交互。它是专门用来作为Warp终端的AI功能的“CLI服务器(命令)”的。

服务器公开了一个工具:

  • get_my_tasks_due_today:从配置的工作区中检索今天到期的Asana任务。

先决条件

  • Node.js (v18+推荐,具有全局 Workspace 如开发期间使用的v22.x.x是理想的)
  • npm (附带Node.js)
  • 一 姿势 账户
  • Asana个人访问令牌(PAT)
  • Asana工作区的GID(全局ID)

项目设置

  1. 克隆存储库(或设置文件): 如果这是一个Git仓库:

    git clone <your-repo-url>
    cd my-asana-mcp-server
    

    否则,请确保您拥有 package.json, tsconfig.json,以及 src/server.ts 文件。

  2. 安装依赖项:

    npm install
    

    这将安装 axios, zod,以及MCP SDK(@modelcontextprotocol/sdk).它还将安装开发依赖项,如 typescript, ts-node-dev,以及 prettier.

  3. 为本地开发配置环境变量(可选): 虽然Warp在运行服务器时会传递环境变量,但对于本地测试或直接执行,您可能需要 .env 文件(确保它在你的 .gitignore 和 未承诺). 创建一个 .env 项目根目录中的文件:

    ASANA_PERSONAL_ACCESS_TOKEN=your_asana_personal_access_token_here
    ASANA_WORKSPACE_GID=your_asana_workspace_gid_here
    # PORT=8002 # The SDK uses stdio, so PORT for HTTP is not directly used by Warp CLI mode
    
    • 体式_个人_访问_令牌:你的Asana PAT。
    • ASANA_WORKSPACE_GID:您要从中获取任务的Asana工作区的GID。
  4. 构建TypeScript代码:

    npm run build
    

    这将编译以下TypeScript代码 src/ JavaScript在 dist/.

配置曲速

此服务器设计为由Warp作为“CLI服务器(命令)”运行。

  1. 打开曲速。

  2. 首选 Settings > Warp AI > MCP Servers(确切的路径可能因Warp版本而异-请参阅Warp文档或之前的屏幕截图)。

  3. 点击 “+添加” 添加新的MCP服务器。

  4. 选择 “CLI服务器(命令)” 作为“运输类型”。

  5. 填写详细信息:

    • 姓名: 描述性名称。, My Asana Task Server

    • 运行命令: 这是Warp将执行的启动服务器的命令。用途:

      npm run start
      

      (此脚本在 package.json 跑 node ./dist/server.js). 或者,对于具有自动重新加载功能的开发(如果Warp的环境很好地支持它): npm run dev

    • CWD参数(可选但推荐): 这 绝对路径 转到此项目的根目录(my-asana-mcp-server).例如: /Users/yourusername/path/to/my-asana-mcp-server

    • 从Warp启动开始: 如果您希望服务器使用Warp自动启动,请选中此项。

    • 环境变量: 在此处添加以下变量:

      • ASANA_PERSONAL_ACCESS_TOKEN: your_asana_personal_access_token_here
      • ASANA_WORKSPACE_GID: your_asana_workspace_gid_here
      • NODE_ENV: production (建议通过以下方式运行 npm run start)
  6. 保存 Warp中的配置。

在Warp AI中使用该工具

一旦配置并运行了MCP服务器(由Warp启动或手动启动,如果“启动Warp启动”关闭并且您正在测试),您应该能够通过Warp AI调用该工具。

尝试以下查询:

  • “Warp,我今天要完成的Asana任务是什么?”
  • “使用Asana工具获取今天的任务。”

然后,Warp AI应该与您的MCP服务器通信,MCP服务器将执行 get_my_tasks_due_today 工具并返回结果。

运作原理

此服务器使用 @modelcontextprotocol/sdk 以实施MCP。

  1. 它初始化一个 McpServer 例子
  2. 它定义了一个名为 get_my_tasks_due_today 使用 server.tool().
    • Zod模式(GetMyAsanaTasksDueTodayInputSchema 和 GetMyAsanaTasksDueTodayLogicOutputSchema)用于定义工具处理程序的预期输入和逻辑输出。
  3. 工具的处理函数(WorkspaceAsanaTasksDueToday)包含以下逻辑:
    • 获取当前日期。
    • 从Asana获取已配置用户和工作区的用户任务列表GID。
    • 通过Asana API从用户任务列表中获取今天到期的任务。
    • 返回匹配的结构化结果 GetMyAsanaTasksDueTodayLogicOutputSchema.
  4. 服务器使用以下方式连接 StdioServerTransport,这意味着当作为CLI命令运行时,它通过标准输入/输出与客户端(Warp)通信。
  5. Warp的MCP客户端发送 initialize 请求(由SDK内部处理,可能使用注册的工具来描述功能)。
  6. 当Warp AI调用工具时,Warp会发送 CallTool 请求。SDK将此分派给适当的处理程序,根据Zod模式验证输入/输出,并管理JSON-RPC通信。

故障排除

  • ERR_REQUIRE_ESM 或 exports is not defined: 确保您的 package.json 有 "type": "module" 和你的 tsconfig.json 配置用于ES模块输出(例如。, "module": "NodeNext").
  • 扭曲错误(Serialization, RequestCancelled):
    • 检查Node.js服务器的日志(它们将转到 stderr 并且应该在Warp的MCP服务器日志中可见,或者如果您手动运行该命令)。
    • 确保 CWD parameter 将Warp的MCP服务器配置目标添加到正确的项目根目录。
    • 确认 ASANA_PERSONAL_ACCESS_TOKEN 和 ASANA_WORKSPACE_GID 在Warp的服务器配置中正确设置了环境变量。
    • 最常见的原因是 Serialization 错误之后 initialize 是的结构 tools (尤其是他们 input_schema 和 output_schema)提供给SDK的数据与客户端(Warp)的期望不完全匹配。请参阅MCP SDK文档和示例,如 gdrive 为了获得精确的模式结构。
  • Asana API错误: 检查 stderr 从服务器记录前缀为的消息 [ASANA MCP SERVER]这些将表明Asana API存在问题(例如,无效的PAT、不正确的工作区GID、网络问题)。