Skip to content

Releases: devondragon/MotionMCP

v2.8.0

02 Mar 21:33
70561d6

Choose a tag to compare

Bug Fixes

  • Hardened object/array parameters against LLM stringification: Some MCP transports serialize structured parameters as JSON strings (e.g., '{"type":"weekly"}' instead of {"type":"weekly"}). Added defensive parsing with parseObjectParam() and parseArrayParam() utilities that transparently handle both native and stringified inputs. Applied to: (#88, #89)
    • autoScheduled parameter in task create/update
    • frequency object in recurring task creation
    • status array in task list filtering
    • value array for multiSelect custom fields

Documentation

  • Fixed stale README tool descriptions: Corrected motion_search operations (only content exists; removed references to deleted context and smart operations) and motion_workspaces operations (removed non-existent set_default).

Dependencies

  • hono: 4.12.1 → 4.12.2 (#86)
  • rollup: 4.57.1 → 4.59.0 (#87)

v2.7.0

25 Feb 17:38

Choose a tag to compare

Refactoring

  • Split motionApi.ts into resource modules (#52, #85): Decomposed the monolithic 1,850-line MotionApiService into 10 focused resource modules under src/services/api/. The facade class is now ~254 lines of pure delegation. Each module exports standalone async functions that accept a ResourceContext ({ api, cache }), making the codebase easier to navigate, test, and extend.
    • New modules: tasks, projects, workspaces, users, comments, customFields, recurringTasks, schedules, search, statuses
    • Extracted ApiClient (HTTP + retry) and CacheManager (per-resource TTL cache) as shared infrastructure
    • Added facade-contract.spec.ts verifying facade delegation to all resource modules

Technical Improvements

  • Consolidated error modules into single errors.ts (#81)
  • Removed dead code and consolidated constants (#78)
  • Added explicit statusCode param to UserFacingError constructor (#83)
  • Made ToolRegistry.register() private (#79, #84)

Full Changelog: v2.6.0...v2.7.0

v2.6.0

24 Feb 16:28
38360c7

Choose a tag to compare

What's New

Features

  • Auto-generate mcp-tool-args.ts from JSON Schema definitions (#76)

Fixes

  • Multi-status filtering: include all statuses, loosen types, fix truncation count, reduce extra fetches (#76)
  • Align Motion API calls with official documentation
  • Warn when priority/dueDate client-side filtering may be incomplete
  • Remove wrong-ID cleanup call and clarify truncation notice for client-filtered results
  • Add missing dueDate to autoScheduled integration test
  • Correct schema, type, and behavioral bugs found in pre-release review
  • Harden types, validation, and response formatting
  • Expose custom field valueId and validate autoScheduled on update
  • Correct parameter naming, validation, caching, and log levels

Chores

  • Remove dead code: stubs, placeholder comments, unused validateArgs and ValidationResult
  • Remove local Claude settings from tracking and gitignore
  • Update CLAUDE.md to reflect current codebase state

v2.5.0

23 Feb 01:38

Choose a tag to compare

What's Changed

New Features

  • Default tool configuration changed to complete: All 10 tools are now enabled by default. With only 10 consolidated tools and MCP clients supporting deferred tool loading, gating 3 useful tools behind opt-in provided no practical benefit. Users who explicitly set MOTION_MCP_TOOLS are unaffected. (#71, #73)
  • MCP server instructions for tool discovery: Both entry points (stdio and Cloudflare Worker) now include a keyword-rich instructions string in the MCP handshake, improving tool discoverability for clients that support defer_loading or tool search.

Bug Fixes

  • Handler test mock shape mismatch: Fixed 4 handler test files where mocks returned plain arrays instead of ListResult<T> objects, matching the refactored service method signatures. (#74, #75)
  • .env.example default inconsistency: Updated .env.example to reflect the new complete default.

Documentation

  • Updated README tool configuration section: reframed from "tool limits" to "reducing tool noise", marked complete as default.
  • Updated CLAUDE.md default reference.

Full Changelog: v2.4.0...v2.5.0

v2.4.0

23 Feb 00:32

Choose a tag to compare

What's New

Cloudflare Workers Remote MCP Server

A new entry point that runs the MCP server as a Cloudflare Worker using Streamable HTTP/SSE transport. This enables access from mobile and web clients (Claude mobile, claude.ai, ChatGPT) without requiring a local stdio process. Deploy via npm run worker:deploy or the one-click "Deploy to Cloudflare Workers" button in the README. (#60)

Multi-Status Filtering for Task Listing

The motion_tasks list operation now accepts status as an array of strings, enabling filtering by multiple statuses in a single request (e.g., status: ["Todo", "In Progress"]). Also adds includeAllStatuses to retrieve tasks in all statuses including completed/canceled. Fully backward compatible. (#68, #69)

Documentation

  • Restructured README for clarity and reduced redundancy
  • Added "Deploy to Cloudflare Workers" button
  • Updated CLAUDE.md and DEVELOPER.md with Worker architecture details

See the full CHANGELOG for details.

v2.3.0

19 Feb 02:44

Choose a tag to compare

What's New

Truncation Notices for MCP Clients

When paginated API responses are incomplete, MCP clients now receive a human-readable Note: explaining that results were limited and suggesting filters to narrow results. Previously, truncation warnings only appeared in stderr logs, leaving LLMs unaware when data was incomplete.

Bug Fixes

  • Truncation aggregation in multi-workspace methods: Fixed overwriting of earlier truncation info when iterating multiple workspaces
  • Stale truncation notices from cache: Caches no longer store truncation metadata, preventing stale "there may be more items" notices
  • SearchHandler combined truncation mismatch: Properly preserves truncation when both task and project searches are truncated
  • getAllProjects returnedCount underreported: Fixed mid-loop count capture that understated returned items
  • dotenv v17 stdout pollution: Restored quiet: true to prevent MCP JSON-RPC transport corruption

Security Updates

  • @modelcontextprotocol/sdk: 1.25.3 → 1.26.0 (cross-client data leak fix)
  • axios: 1.13.4 → 1.13.5 (DoS via __proto__ key fix)
  • qs: 6.14.1 → 6.14.2 (arrayLimit bypass fix)
  • ajv: 8.17.1 → 8.18.0 (ReDoS fix)

Other

  • Refactored formatters to eliminate fragile CallToolResult content mutation
  • Bumped dotenv to 17.3.1 and @types/node to 24.10.13
  • Added regression test for dotenv quiet: true flag

Full Changelog: https://github.com/devondragon/MotionMCP/blob/main/CHANGELOG.md

v2.2.3

18 Feb 23:17

Choose a tag to compare

Bug Fixes

  • Assignee filtering for list_all_uncompleted: The list_all_uncompleted operation now supports assignee and assigneeId parameters, including the 'me' shortcut. Previously these were silently ignored, returning all users' tasks instead of the requested assignee's tasks. (#58, closes #59)
  • dotenv config: Removed invalid quiet: true option from dotenv.config() that caused a TypeScript build error after the v17 upgrade

Technical Improvements

  • Shared assignee resolution: Extracted duplicated assignee resolution logic from handleList and handleListAllUncompleted into a reusable resolveAssignee() private method. Supports single-workspace and cross-workspace name lookups via an optional workspaceId parameter.

v2.2.2

03 Feb 14:05

Choose a tag to compare

📦 Dependencies

  • dotenv: Upgraded from v16 to v17.2.3
    • Added quiet: true option to maintain MCP stdio protocol compatibility
  • @types/node: Updated to 24.10.10

v2.2.1

03 Feb 13:48

Choose a tag to compare

What's Changed

Full Changelog: 2.1.1...v2.2.1

2.1.1

21 Sep 22:50

Choose a tag to compare

What's Changed

#40

Full Changelog: 2.1.0...2.1.1