feat: upgrade fastmcp to v3.20.1 with Zod v4 support

Upgrades fastmcp dependency to v3.20.1 which includes xsschema 0.40-beta.5,
enabling full Zod v4 compatibility. This resolves MCP server connection failures
with Cursor IDE's latest update.

Changes:
- Remove all temporary zod/v3 imports across MCP tools
- Update all MCP tool schemas to use standard zod imports
- Fix capability negotiation issues with Cursor IDE

Fixes #1404
This commit is contained in:
Ralph Khreish
2025-11-14 11:49:06 +01:00
parent da8ed6aa11
commit d8479ad3a3
49 changed files with 69 additions and 145 deletions

View File

@@ -0,0 +1,8 @@
---
"task-master-ai": patch
---
Fix MCP server compatibility with Cursor IDE's latest update by upgrading to fastmcp v3.20.1 with Zod v4 support
- This resolves connection failures where the MCP server was unable to establish proper capability negotiation.
- Issue typically included wording like: `Server does not support completions`

View File

@@ -24,7 +24,7 @@
"dependencies": {
"@tm/core": "*",
"zod": "^4.1.11",
"fastmcp": "^3.19.2"
"fastmcp": "^3.23.0"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",

View File

@@ -3,9 +3,7 @@
* Abort a running TDD workflow and clean up state
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Create a git commit with automatic staging and message generation
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Complete the current TDD phase with test result validation
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Finalize and complete the workflow with working tree validation
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Get the next action to perform in the TDD workflow
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Resume a previously started TDD workflow from saved state
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Initialize and start a new TDD workflow for a task
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Get comprehensive workflow status and progress information
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Get detailed information about a specific task by ID
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Get all tasks from Task Master with optional filtering
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot

View File

@@ -3,9 +3,7 @@
* Tool for adding a dependency to a task
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool for adding subtasks to existing tasks
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to create a new tag
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to add a new task using AI
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool for analyzing task complexity and generating recommendations
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import path from 'path';
import fs from 'fs'; // Import fs for directory check/creation
import {

View File

@@ -3,9 +3,7 @@
* Tool for clearing subtasks from parent tasks
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool for displaying the complexity analysis report
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to copy an existing tag to a new tag
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to delete an existing tag
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool for expanding all pending tasks with subtasks
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to expand a task into subtasks
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool for automatically fixing invalid task dependencies
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to generate individual task files from tasks.json
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -1,7 +1,5 @@
// mcp-server/src/tools/get-operation-status.js
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import { createErrorResponse, createContentResponse } from './utils.js'; // Assuming these utils exist
/**

View File

@@ -1,6 +1,4 @@
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to list all available tags
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* MCP tool for managing AI model configurations
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool for moving tasks or subtasks to a new position
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to find the next task to work on based on dependencies and status
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to parse PRD document and generate tasks
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
withNormalizedProjectRoot,

View File

@@ -3,9 +3,7 @@
* Tool for removing a dependency from a task
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool for removing subtasks from parent tasks
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to remove a task by ID
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to rename an existing tag
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to perform AI-powered research queries with project context
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -1,6 +1,4 @@
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to add or remove rules from a project (MCP server)
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to scope down task complexity
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to scope up task complexity
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool to set the status of a task
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to append additional information to a specific subtask
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to update a single task by ID with new information
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to update tasks based on new context/prompt
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

View File

@@ -3,9 +3,7 @@
* Tool to switch to a different tag context
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
createErrorResponse,
handleApiResult,

View File

@@ -3,9 +3,7 @@
* Tool for validating task dependencies
*/
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
import { z } from 'zod/v3';
import { z } from 'zod';
import {
handleApiResult,
createErrorResponse,

22
package-lock.json generated
View File

@@ -47,7 +47,7 @@
"cors": "^2.8.5",
"dotenv": "^16.6.1",
"express": "^4.21.2",
"fastmcp": "^3.5.0",
"fastmcp": "^3.23.0",
"figlet": "^1.8.0",
"fs-extra": "^11.3.0",
"fuse.js": "^7.1.0",
@@ -756,7 +756,7 @@
"license": "MIT",
"dependencies": {
"@tm/core": "*",
"fastmcp": "^3.19.2",
"fastmcp": "^3.23.0",
"zod": "^4.1.11"
},
"devDependencies": {
@@ -14645,7 +14645,9 @@
}
},
"node_modules/fastmcp": {
"version": "3.18.0",
"version": "3.23.0",
"resolved": "https://registry.npmjs.org/fastmcp/-/fastmcp-3.23.0.tgz",
"integrity": "sha512-zojzKe0sgW5V8U6NVTLSd9DdSpFGvkpo6G/42n2qw7MFHqi46c4ZpQQ46m1JWnGM1/Uw+Cu7OeJRGe3/7P4k4g==",
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.17.2",
@@ -14653,11 +14655,11 @@
"execa": "^9.6.0",
"file-type": "^21.0.0",
"fuse.js": "^7.1.0",
"mcp-proxy": "^5.5.4",
"mcp-proxy": "^5.10.0",
"strict-event-emitter-types": "^2.0.0",
"undici": "^7.13.0",
"uri-templates": "^0.2.0",
"xsschema": "0.3.5",
"xsschema": "0.4.0-beta.5",
"yargs": "^18.0.0",
"zod": "^3.25.76",
"zod-to-json-schema": "^3.24.6"
@@ -15078,7 +15080,9 @@
}
},
"node_modules/fastmcp/node_modules/xsschema": {
"version": "0.3.5",
"version": "0.4.0-beta.5",
"resolved": "https://registry.npmjs.org/xsschema/-/xsschema-0.4.0-beta.5.tgz",
"integrity": "sha512-73pYwf1hMy++7SnOkghJdgdPaGi+Y5I0SaO6rIlxb1ouV6tEyDbEcXP82kyr32KQVTlUbFj6qewi9eUVEiXm+g==",
"license": "MIT",
"peerDependencies": {
"@valibot/to-json-schema": "^1.0.0",
@@ -20088,7 +20092,9 @@
}
},
"node_modules/mcp-proxy": {
"version": "5.6.1",
"version": "5.11.0",
"resolved": "https://registry.npmjs.org/mcp-proxy/-/mcp-proxy-5.11.0.tgz",
"integrity": "sha512-g+MfBENT5PtbxwTKaUnb2dSIGSbMBY3chFPenjzoSib66o+yZL0llV0a7i+8+8aqWI3JlyUziB+Ryrb1IX0rKQ==",
"license": "MIT",
"bin": {
"mcp-proxy": "dist/bin/mcp-proxy.js"
@@ -28447,7 +28453,7 @@
"@tm/core": "*",
"boxen": "^8.0.1",
"chalk": "5.6.2",
"cli-table3": "0.6.5",
"cli-table3": "^0.6.5",
"ora": "^8.1.1"
},
"devDependencies": {

View File

@@ -85,7 +85,7 @@
"cors": "^2.8.5",
"dotenv": "^16.6.1",
"express": "^4.21.2",
"fastmcp": "^3.5.0",
"fastmcp": "^3.23.0",
"figlet": "^1.8.0",
"fs-extra": "^11.3.0",
"fuse.js": "^7.1.0",