Releases: devondragon/MotionMCP
v2.8.0
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 withparseObjectParam()andparseArrayParam()utilities that transparently handle both native and stringified inputs. Applied to: (#88, #89)autoScheduledparameter in task create/updatefrequencyobject in recurring task creationstatusarray in task list filteringvaluearray for multiSelect custom fields
Documentation
- Fixed stale README tool descriptions: Corrected
motion_searchoperations (onlycontentexists; removed references to deletedcontextandsmartoperations) andmotion_workspacesoperations (removed non-existentset_default).
Dependencies
v2.7.0
Refactoring
- Split
motionApi.tsinto resource modules (#52, #85): Decomposed the monolithic 1,850-lineMotionApiServiceinto 10 focused resource modules undersrc/services/api/. The facade class is now ~254 lines of pure delegation. Each module exports standalone async functions that accept aResourceContext({ 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) andCacheManager(per-resource TTL cache) as shared infrastructure - Added
facade-contract.spec.tsverifying facade delegation to all resource modules
- New modules:
Technical Improvements
- Consolidated error modules into single
errors.ts(#81) - Removed dead code and consolidated constants (#78)
- Added explicit
statusCodeparam toUserFacingErrorconstructor (#83) - Made
ToolRegistry.register()private (#79, #84)
Full Changelog: v2.6.0...v2.7.0
v2.6.0
What's New
Features
- Auto-generate
mcp-tool-args.tsfrom 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
dueDateto autoScheduled integration test - Correct schema, type, and behavioral bugs found in pre-release review
- Harden types, validation, and response formatting
- Expose custom field
valueIdand validateautoScheduledon update - Correct parameter naming, validation, caching, and log levels
Chores
- Remove dead code: stubs, placeholder comments, unused
validateArgsandValidationResult - Remove local Claude settings from tracking and gitignore
- Update CLAUDE.md to reflect current codebase state
v2.5.0
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 setMOTION_MCP_TOOLSare unaffected. (#71, #73) - MCP server instructions for tool discovery: Both entry points (stdio and Cloudflare Worker) now include a keyword-rich
instructionsstring in the MCP handshake, improving tool discoverability for clients that supportdefer_loadingor 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.exampledefault inconsistency: Updated.env.exampleto reflect the newcompletedefault.
Documentation
- Updated README tool configuration section: reframed from "tool limits" to "reducing tool noise", marked
completeas default. - Updated CLAUDE.md default reference.
Full Changelog: v2.4.0...v2.5.0
v2.4.0
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
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
getAllProjectsreturnedCount underreported: Fixed mid-loop count capture that understated returned items- dotenv v17 stdout pollution: Restored
quiet: trueto 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
CallToolResultcontent mutation - Bumped dotenv to 17.3.1 and @types/node to 24.10.13
- Added regression test for dotenv
quiet: trueflag
Full Changelog: https://github.com/devondragon/MotionMCP/blob/main/CHANGELOG.md
v2.2.3
Bug Fixes
- Assignee filtering for list_all_uncompleted: The
list_all_uncompletedoperation now supportsassigneeandassigneeIdparameters, 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: trueoption fromdotenv.config()that caused a TypeScript build error after the v17 upgrade
Technical Improvements
- Shared assignee resolution: Extracted duplicated assignee resolution logic from
handleListandhandleListAllUncompletedinto a reusableresolveAssignee()private method. Supports single-workspace and cross-workspace name lookups via an optionalworkspaceIdparameter.
v2.2.2
📦 Dependencies
- dotenv: Upgraded from v16 to v17.2.3
- Added
quiet: trueoption to maintain MCP stdio protocol compatibility
- Added
- @types/node: Updated to 24.10.10
v2.2.1
What's Changed
- Refreshing from main by @devondragon in #42
- Add claude GitHub actions 1759021578092 by @devondragon in #44
- Issue 39 frequency for reoccuring tasks are of the invalid type by @devondragon in #43
- test: add comprehensive unit test suite with vitest by @devondragon in #51
- perf: Pagination memory optimization and code quality improvements by @devondragon in #53
Full Changelog: 2.1.1...v2.2.1
2.1.1
What's Changed
- fix(tasks): normalize due dates for Motion API by @devondragon in #41
Full Changelog: 2.1.0...2.1.1