mcpField
M
Motion MCP Server

Motion MCP Server

本地服务
github.com/devondragon生产力305 周前更新

关于 Motion MCP Server

Motion MCP Server 是 Motion 任务管理与日程应用的 MCP 服务,让 LLM 通过自然对话管理任务、搜索项目并查看日程。适用于需要在桌面、网页和移动端使用 Motion 的用户,支持本地 npx 与 Cloudflare Workers 远程部署两种方式。

主要功能

  1. 01任务的创建、查询、更新、删除、移动与取消指派
  2. 02按名称解析工作区和项目
  3. 03跨工作区列出未完成任务,支持截止日期与优先级筛选
  4. 04评论、用户、状态与自定义字段管理
  5. 05周期性任务模板管理
  6. 06可通过 MOTION_MCP_TOOLS 限制暴露的工具数量

适用场景

  1. 01在 Claude 或 ChatGPT 中查询本周到期的任务
  2. 02通过对话创建带优先级和标签的任务
  3. 03在 Claude 移动端或网页端访问远程 MCP 服务管理任务

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露 10 个 Motion 工具,覆盖任务、项目、工作区、搜索等操作。远程部署时使用 Streamable HTTP 传输,并通过路径密钥或 Bearer 请求头进行访问控制。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"MotionMCP": {
"command": "npx",
"args": [
"-y",
"motionmcp"
],
"env": {
"MOTION_API_KEY": "<MOTION_API_KEY>"
}
}
}
}
启动命令npx -y motionmcp
需要配置的环境变量
MOTION_API_KEY密钥

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmotionmcp

工具

10

收录的工具列表 · 更新于 3 周前

参数类型必填说明
namestring否任务名称(创建时必填;列出时可选,作为不区分大小写的子字符串进行搜索,并在客户端筛选)
limitnumber否要返回的最大任务数(用于 list 和 list_all_uncompleted)
labelsarray否标签名称数组。创建或更新时应用于任务;列出时用于筛选结果
statusany否按状态筛选(用于 list)。可以是单个字符串或字符串数组(例如,["Todo", "Completed"])。如果未指定 status 或 includeAllStatuses,则仅返回活动(未解决)任务。使用 motion_statuses 列出每个工作区的有效值。
taskIdstring否任务 ID(用于 get/update/delete/move/unassign 时必填)
dueDatestring否截止日期(用于 create/update)或筛选条件(用于 list 和 list_all_uncompleted)。格式:YYYY-MM-DD、带偏移量的完整 ISO 8601 时间戳,或 'today'、'tomorrow' 等相对日期。筛选(list、list_all_uncompleted):按账户时区的日期粒度设置包含上限——返回截止日期为该日或更早的所有任务,包括已逾期任务。因此,dueDate:'today' 可在一次调用中回答“今天有哪些任务到期?”,并包括所有逾期任务。没有精确日期或日期范围筛选;若只显示某日到期的任务,请自行筛选返回结果中的 Due Date。创建/更新:仅日期值会在所有计划使用同一时区时,按账户计划时区存储为当天结束时间(23:59:59),因此显示时仍为同一日历日;如果无法确定唯一时区,则回退到 UTC 当天结束时间。传入带偏移量的明确 ISO 时间戳以控制精确时刻。相对关键词按同一账户时区解析;否则回退到 UTC。
assigneestring否负责人姓名、电子邮件或 'me' 快捷方式。对于 list、list_all_uncompleted、create、update 和 move,会自动解析为 ID。无法解析的姓名会返回错误。必须为非空值;要清除任务负责人,请使用 unassign 操作。
durationany否分钟数(数值)或 'NONE'/'REMINDER'(字符串)
priorityenum否任务优先级:ASAP、HIGH、MEDIUM、LOW。创建/更新时设置;列出和 list_all_uncompleted 时用于筛选结果(在客户端筛选)ASAP | HIGH | MEDIUM | LOW
operationenum是要执行的操作create | list | get | update | delete | move | unassign | list_all_uncompleted
projectIdstring否按项目筛选(用于 list)
assigneeIdstring否负责人用户 ID,或表示当前用户的 'me' 快捷方式。用于 list/list_all_uncompleted 筛选;用于 create/update 设置负责人;用于 move 重新分配负责人。对于所有这些操作,'me' 快捷方式都会解析为具体 ID。必须为非空值;要清除任务负责人,请使用 unassign 操作。
descriptionstring否任务描述
projectNamestring否项目名称(可替代 projectId)
workspaceIdstring否按工作区筛选(用于 list)。list_all_uncompleted 会忽略此项,始终涵盖所有工作区。
autoScheduledany否自动排期配置。可以是以下任一形式: - 排期名称字符串:"Work Hours"(简单形式,无开始日期) - 完整控制用对象:{"schedule": "Work Hours", "startDate": "2025-03-05", "deadlineType": "SOFT"} 用户指定开始日期时,必须使用对象形式。 使用 motion_schedules 查看可用的排期名称。
workspaceNamestring否按工作区名称筛选(用于 list)。list_all_uncompleted 会忽略此项,始终涵盖所有工作区。
completedAfterstring否筛选(用于 list):仅保留在此本地日历日期或之后完成的任务。格式:YYYY-MM-DD 或 'today'、'yesterday' 等相对日期。在客户端筛选,并自动包含已完成/已解决的任务,因此“这周我完成了什么?”应将 completedAfter 设为本周开始日期。与 completedBefore 组合可筛选时间段。注意:此项按完成日期而非截止日期筛选;如果时间段内任务量很大,分页可能会限制结果(响应中会说明),而非静默截断。
completedBeforestring否筛选(用于列表):仅保留在此本地日历日期或之前完成的任务。格式:YYYY-MM-DD 或类似 “today” 的相对日期。在客户端筛选;与 completedAfter 配合可限定完成时间范围。
targetWorkspaceIdstring否目标工作区 ID(移动操作必需)。移动会将任务从一个工作区转移到另一个工作区;Motion API 不支持按项目定位。
includeAllStatusesboolean否为 true 时,返回所有状态的任务,包括已完成/已解决的任务(用于列表)。不能与状态筛选器同时使用。

详细介绍

NPM Version License

Motion MCP 服务

Motion 是一款由 AI 驱动的日历和任务管理应用,可自动安排你的工作。此 MCP 服务通过 Model Context Protocol 将 Motion 的 API 与 Claude 和 ChatGPT 等大模型连接起来,让你可以通过自然对话管理任务、搜索项目、查看日程等。它可在桌面、网页和移动设备上使用。

预览

Motion MCP 服务预览

点击上方图片查看完整尺寸

开始使用

前提条件: Node.js 20+ 和一个 Motion API 密钥。

本地设置(npx)

适用于桌面 MCP 客户端,例如 Claude Desktop、Claude Code、Cursor 等。

添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "motion": {
      "command": "npx",
      "args": ["motionmcp"],
      "env": {
        "MOTION_API_KEY": "your_api_key"
      }
    }
  }
}

从命令行进行测试:

MOTION_API_KEY=your_api_key npx motionmcp

提示: npx 始终运行最新发布的版本,无需安装。

远程设置(Cloudflare Workers)

适用于移动端和网页端客户端,例如 Claude 移动端/网页端、ChatGPT 移动端/网页端,或任何 HTTP MCP 客户端。

一键部署

部署到 Cloudflare Workers

部署后,在 Cloudflare 控制面板中设置密钥(Workers > 你的 worker > Settings > Variables):

  • MOTION_API_KEY — 你的 Motion API 密钥
  • MOTION_MCP_SECRET — 随机字符串(使用 openssl rand -hex 16 生成)
手动部署
# Set secrets
npx wrangler secret put MOTION_API_KEY
npx wrangler secret put MOTION_MCP_SECRET   # use: openssl rand -hex 16

# Deploy
npm run worker:deploy

你的 MCP URL 将为:

https://motion-mcp-server.YOUR_SUBDOMAIN.workers.dev/mcp/YOUR_SECRET

请使用这个确切的地址。密钥放在路径末尾,后面不能再添加任何内容。该服务在此单一端点上提供 MCP Streamable HTTP;不要附加 /sse 或任何其他子路径。

能够发送标头的客户端可以将密钥留在 URL 之外:将地址设为 https://motion-mcp-server.YOUR_SUBDOMAIN.workers.dev/mcp,并发送 Authorization: Bearer YOUR_SECRET。

从 Claude 连接
  1. 前往 claude.ai > Settings > Connectors
  2. 添加你的 MCP URL
  3. 服务会自动同步到 Claude 移动应用

对于 Claude Code,请使用 Streamable HTTP 传输:

claude mcp add --transport http motion https://motion-mcp-server.YOUR_SUBDOMAIN.workers.dev/mcp --header "Authorization: Bearer YOUR_SECRET"

在 Claude Desktop 中,将相同的 URL 添加为类型为 http(而非 sse)的远程服务。

从 ChatGPT 连接
  1. 前往 ChatGPT Settings > Connectors
  2. 添加你的 MCP URL

安全性: URL 中的密钥可防止被随意发现。请将完整 URL 视为密码,不要公开分享。

传输方式: 仅提供 Streamable HTTP。较旧的 HTTP+SSE 传输方式(一个 GET 流加上一个 /message 端点)在迁移到无状态服务时已停用;使用 sse 传输类型配置的客户端必须切换到 http。

工具配置方式与本地服务相同。在 wrangler.toml 的 [vars] 下设置 MOTION_MCP_TOOLS,或通过 wrangler secret put MOTION_MCP_TOOLS 覆盖。

有关本地 Worker 开发,请参阅 DEVELOPER.md。

API 密钥

该服务从 MOTION_API_KEY 环境变量中读取你的 Motion API 密钥。

内联设置(npx):

MOTION_API_KEY=your-key npx motionmcp

.env 文件(通过 npm 从源代码运行时):

MOTION_API_KEY=your-key

使用 npx 时,建议使用内联环境变量,因为 npx 不会读取本地 .env 文件。

工具配置

默认启用全部 10 个工具。如果运行多个 MCP 服务并想减少工具选择噪声,可以通过 MOTION_MCP_TOOLS 环境变量限制公开的工具:

级别工具描述
minimal3仅任务、项目和工作区
essential8增加用户、搜索、评论、日程和状态
complete(默认)10完整 API 访问权限,包括自定义字段和重复任务
custom不定精确选择所需工具

自定义示例:

MOTION_MCP_TOOLS=custom:motion_tasks,motion_projects,motion_search npx motionmcp

工具参考

motion_tasks

操作: create、list、list_all_uncompleted、get、update、delete、move、unassign

主要的任务管理工具。支持所有 Motion API 参数,包括 name、description、priority、dueDate、duration、labels、assigneeId 和 autoScheduled。你可以按名称引用工作区和项目,服务会自动解析。

list_all_uncompleted 一次调用即可遍历所有工作区(忽略 workspaceId/workspaceName),并遵循 dueDate 和 priority 筛选条件,因此“我所有工作区本周有哪些任务到期?”可以直接得到答案。对于 list,dueDate 是包含当天的“截至日期”界限,也会包含逾期任务(因此 dueDate: "today" 可以回答“今天有哪些任务到期?”);completedAfter / completedBefore 则按账户时区中的完成日期筛选,以回答“我本周完成了什么?”。日期按 Motion 账户的时区解读,列表响应会先显示标明该时区和当天本地日期的标题。

{
  "operation": "create",
  "name": "Complete API integration",
  "workspaceName": "Development",
  "projectName": "Release Cycle Q2",
  "dueDate": "2025-06-15T09:00:00Z",
  "priority": "HIGH",
  "labels": ["api", "release"]
}
motion_projects

操作: create、list、get

管理 Motion 项目。工作区和项目名称会进行模糊匹配;如果未指定工作区,服务会自动选择你的“Personal”工作区。

{"operation": "create", "name": "New Project", "workspaceName": "Personal"}
motion_workspaces

操作: list、get

列出并查看工作区。

motion_users

操作: list、current

列出工作区中的用户,或获取当前已通过身份验证的用户。

motion_search

操作: content

按查询内容搜索工作区中的任务和项目。

{"operation": "content", "query": "API integration", "workspaceName": "Development"}
motion_comments

操作: list、create

读取任务和项目的评论,并添加评论。

{"operation": "create", "taskId": "task_123", "content": "Updated the API endpoints as discussed"}
motion_schedules

操作: list

获取用户日程,显示每天的工作时间(每天的开始和结束时间)及其时区。这些仅是重复工作时间模板,不会公开实际日历事件或会议,因此无法单独显示真实的空闲/忙碌情况;可结合任务的 scheduledStart/scheduledEnd 查看 Motion 自动安排的内容。

motion_custom_fields

操作: list、create、delete、add_to_project、remove_from_project、add_to_task、remove_from_task

在工作区、项目和任务中定义并管理自定义字段。

{
  "operation": "create",
  "name": "Sprint",
  "type": "DROPDOWN",
  "options": ["Sprint 1", "Sprint 2", "Sprint 3"],
  "workspaceName": "Development"
}
motion_recurring_tasks

操作: list、create、delete

管理重复任务模板。

{
  "operation": "create",
  "name": "Weekly Team Standup",
  "recurrence": "WEEKLY",
  "projectName": "Team Meetings",
  "daysOfWeek": ["MONDAY", "WEDNESDAY", "FRIDAY"],
  "duration": 30
}
motion_statuses

操作: list

列出工作区可用的状态。

高级配置

最简设置(仅 3 个工具):

{
  "mcpServers": {
    "motion": {
      "command": "npx",
      "args": ["motionmcp"],
      "env": {
        "MOTION_API_KEY": "your_api_key",
        "MOTION_MCP_TOOLS": "minimal"
      }
    }
  }
}

自定义工具选择:

{
  "mcpServers": {
    "motion": {
      "command": "npx",
      "args": ["motionmcp"],
      "env": {
        "MOTION_API_KEY": "your_api_key",
        "MOTION_MCP_TOOLS": "custom:motion_tasks,motion_projects,motion_search"
      }
    }
  }
}

使用本地工作区(npm):

{
  "mcpServers": {
    "motion": {
      "command": "npm",
      "args": ["run", "mcp:dev"],
      "cwd": "/absolute/path/to/your/MotionMCP",
      "env": {
        "MOTION_API_KEY": "your_api_key"
      }
    }
  }
}

请参阅 DEVELOPER.md 了解完整的开发者设置。

调试

  • 日志以 JSON 格式输出到 stderr
  • 检查是否缺少密钥、工作区/项目名称或权限
  • 使用 motion_workspaces(list)和 motion_projects(list)验证 ID
{
  "level": "info",
  "msg": "Task created successfully",
  "method": "createTask",
  "taskId": "task_789",
  "workspace": "Development"
}

许可证

Apache-2.0 许可证


如需了解更多信息,请参阅完整的 Motion API 文档 或 Model Context Protocol 文档。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。