Motion MCP by usefulapi

Read tasks, projects, workspaces and schedules; create tasks in Motion.

Should I use this

Quality & Safety

B
Description quality
100%
Schema completeness
75%
Naming quality
80%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • HIGHTool poisoning patterns detected
  • LOWTool description contains role marker that could confuse chat modelsin motion_get_schedules

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,143Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (0.89% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "motion": {
      "url": "https://motion.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://motion.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢motion_get_my_user

Get the owner of the API key: id, name and email. Good first call to confirm which Motion account is connected. Motion API: GET /v1/users/me.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢motion_list_workspaces(cursor)

List the workspaces this user belongs to, with their statuses and labels. Use the workspace ids in the other tools. Motion API: GET /v1/workspaces.

Input Schema

{
  "type": "object",
  "properties": {
    "cursor": {
      "description": "Cursor from meta.nextCursor of the previous call, to get the next page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢motion_list_projects(workspaceId, cursor)

List the projects in a workspace, with status and custom field values. Motion API: GET /v1/projects.

Input Schema

{
  "type": "object",
  "properties": {
    "workspaceId": {
      "description": "Limit results to one workspace id (from motion_list_workspaces).",
      "type": "string"
    },
    "cursor": {
      "description": "Cursor from meta.nextCursor of the previous call, to get the next page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢motion_list_tasks(workspaceId, projectId, assigneeId, label, name, ...)

List tasks, filtered by workspace, project, assignee, label or name. Completed tasks are left out unless includeAllStatuses is true. Motion API: GET /v1/tasks.

Input Schema

{
  "type": "object",
  "properties": {
    "workspaceId": {
      "description": "Limit results to one workspace id (from motion_list_workspaces).",
      "type": "string"
    },
    "projectId": {
      "description": "Limit results to one project id.",
      "type": "string"
    },
    "assigneeId": {
      "description": "Limit results to one assignee user id.",
      "type": "string"
    },
    "label": {
      "description": "Limit results to tasks with this label name.",
      "type": "string"
    },
    "name": {
      "description": "Limit results to tasks whose name contains this text (not case-sensitive).",
      "type": "string"
    },
    "includeAllStatuses": {
      "description": "Include tasks in every status, not only the open ones.",
      "type": "boolean"
    },
    "cursor": {
      "description": "Cursor from meta.nextCursor of the previous call, to get the next page.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢motion_get_task(task_id)

Get one task by id: name, description, due date, duration, status, project, assignee and completion time. Motion API: GET /v1/tasks/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "string",
      "description": "The task id (from motion_list_tasks)."
    }
  },
  "required": [
    "task_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴motion_create_task(name, workspaceId, description, dueDate, duration, ...)

Create a task in a workspace. Writes to the Motion account: it adds a new task each time it runs, so call it once per task. Motion API: POST /v1/tasks.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Title of the task."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "description": "The workspace id the task belongs to (from motion_list_workspaces)."
    },
    "description": {
      "description": "Description in GitHub Flavored Markdown.",
      "type": "string"
    },
    "dueDate": {
      "description": "Due date and time in ISO 8601, for example 2026-11-30T17:00:00Z.",
      "type": "string"
    },
    "duration": {
      "description": "Minutes as a whole number above 0, or NONE, or REMINDER.",
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "string",
          "enum": [
            "NONE",
            "REMINDER"
          ]
        }
      ]
    },
    "status": {
      "description": "Status name. Defaults to the workspace default status.",
      "type": "string"
    },
    "priority": {
      "description": "Task priority.",
      "type": "string",
      "enum": [
        "ASAP",
        "HIGH",
        "MEDIUM",
        "LOW"
      ]
    },
    "deadlineType": {
      "description": "Deadline type. Motion defaults to SOFT.",
      "type": "string",
      "enum": [
        "HARD",
        "SOFT",
        "NONE"
      ]
    },
    "projectId": {
      "description": "The project id the task belongs to.",
      "type": "string"
    },
    "assigneeId": {
      "description": "The user id the task is assigned to.",
      "type": "string"
    },
    "labels": {
      "description": "Label names to add to the task.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "name",
    "workspaceId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢motion_get_schedules

Get the working schedules of this user: the weekly hours and timezone for each schedule. Motion API: GET /v1/schedules.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools