Compare commits
10 Commits
docs/auto-
...
task-maste
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bed63fa99a | ||
|
|
55a7f8b3cc | ||
|
|
11ace9da1f | ||
|
|
c92cee72c7 | ||
|
|
a50e654e7b | ||
|
|
de11795dd0 | ||
|
|
ae65a7e6c2 | ||
|
|
dfbd5974da | ||
|
|
1f81077bc9 | ||
|
|
cc3850eccd |
@@ -1,21 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Fix MCP server compatibility with Draft-07 clients (Augment IDE, gemini-cli, gemini code assist)
|
|
||||||
|
|
||||||
- Resolves #1284
|
|
||||||
|
|
||||||
**Problem:**
|
|
||||||
|
|
||||||
- MCP tools were using Zod v4, which outputs JSON Schema Draft 2020-12
|
|
||||||
- MCP clients only support Draft-07
|
|
||||||
- Tools were not discoverable in gemini-cli and other clients
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
|
|
||||||
- Updated all MCP tools to import from `zod/v3` instead of `zod`
|
|
||||||
- Zod v3 schemas convert to Draft-07 via FastMCP's zod-to-json-schema
|
|
||||||
- Fixed logger to use stderr instead of stdout (MCP protocol requirement)
|
|
||||||
|
|
||||||
This is a temporary workaround until FastMCP adds JSON Schema version configuration.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add 4.5 haiku and sonnet to supported models for claude-code and anthropic ai providers
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"mode": "pre",
|
|
||||||
"tag": "rc",
|
|
||||||
"initialVersions": {
|
|
||||||
"task-master-ai": "0.29.0",
|
|
||||||
"@tm/cli": "",
|
|
||||||
"docs": "0.0.6",
|
|
||||||
"extension": "0.25.6",
|
|
||||||
"@tm/mcp": "0.28.0-rc.2",
|
|
||||||
"@tm/ai-sdk-provider-grok-cli": "",
|
|
||||||
"@tm/build-config": "",
|
|
||||||
"@tm/claude-code-plugin": "0.0.2",
|
|
||||||
"@tm/core": ""
|
|
||||||
},
|
|
||||||
"changesets": [
|
|
||||||
"dirty-hairs-know",
|
|
||||||
"fix-parent-directory-traversal",
|
|
||||||
"fix-warning-box-alignment",
|
|
||||||
"light-owls-stay",
|
|
||||||
"metal-rocks-help"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
---
|
|
||||||
"task-master-ai": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Add autonomous TDD workflow automation system with new `tm autopilot` commands and MCP tools for AI-driven test-driven development.
|
|
||||||
|
|
||||||
**New CLI Commands:**
|
|
||||||
|
|
||||||
- `tm autopilot start <taskId>` - Initialize TDD workflow
|
|
||||||
- `tm autopilot next` - Get next action in workflow
|
|
||||||
- `tm autopilot status` - Check workflow progress
|
|
||||||
- `tm autopilot complete` - Advance phase with test results
|
|
||||||
- `tm autopilot commit` - Save progress with metadata
|
|
||||||
- `tm autopilot resume` - Continue from checkpoint
|
|
||||||
- `tm autopilot abort` - Cancel workflow
|
|
||||||
|
|
||||||
**New MCP Tools:**
|
|
||||||
Seven new autopilot tools for programmatic control: `autopilot_start`, `autopilot_next`, `autopilot_status`, `autopilot_complete_phase`, `autopilot_commit`, `autopilot_resume`, `autopilot_abort`
|
|
||||||
|
|
||||||
**Features:**
|
|
||||||
|
|
||||||
- Complete RED → GREEN → COMMIT cycle enforcement
|
|
||||||
- Intelligent commit message generation with metadata
|
|
||||||
- Activity logging and state persistence
|
|
||||||
- Configurable workflow settings via `.taskmaster/config.json`
|
|
||||||
- Comprehensive AI agent integration documentation
|
|
||||||
|
|
||||||
**Documentation:**
|
|
||||||
|
|
||||||
- AI Agent Integration Guide (2,800+ lines)
|
|
||||||
- TDD Quick Start Guide
|
|
||||||
- Example prompts and integration patterns
|
|
||||||
|
|
||||||
> **Learn more:** [TDD Workflow Quickstart Guide](https://dev.task-master.dev/tdd-workflow/quickstart)
|
|
||||||
|
|
||||||
This release enables AI agents to autonomously execute test-driven development workflows with full state management and recovery capabilities.
|
|
||||||
@@ -1,7 +1,3 @@
|
|||||||
reviews:
|
reviews:
|
||||||
profile: chill
|
profile: chill
|
||||||
poem: false
|
poem: false
|
||||||
auto_review:
|
|
||||||
enabled: true
|
|
||||||
base_branches:
|
|
||||||
- ".*"
|
|
||||||
|
|||||||
45
CHANGELOG.md
45
CHANGELOG.md
@@ -1,50 +1,5 @@
|
|||||||
# task-master-ai
|
# task-master-ai
|
||||||
|
|
||||||
## 0.30.0-rc.0
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- [#1181](https://github.com/eyaltoledano/claude-task-master/pull/1181) [`a69d8c9`](https://github.com/eyaltoledano/claude-task-master/commit/a69d8c91dc9205a3fdaf9d32276144fa3bcad55d) Thanks [@karol-f](https://github.com/karol-f)! - Add configurable MCP tool loading to optimize LLM context usage
|
|
||||||
|
|
||||||
You can now control which Task Master MCP tools are loaded by setting the `TASK_MASTER_TOOLS` environment variable in your MCP configuration. This helps reduce context usage for LLMs by only loading the tools you need.
|
|
||||||
|
|
||||||
**Configuration Options:**
|
|
||||||
- `all` (default): Load all 36 tools
|
|
||||||
- `core` or `lean`: Load only 7 essential tools for daily development
|
|
||||||
- Includes: `get_tasks`, `next_task`, `get_task`, `set_task_status`, `update_subtask`, `parse_prd`, `expand_task`
|
|
||||||
- `standard`: Load 15 commonly used tools (all core tools plus 8 more)
|
|
||||||
- Additional tools: `initialize_project`, `analyze_project_complexity`, `expand_all`, `add_subtask`, `remove_task`, `generate`, `add_task`, `complexity_report`
|
|
||||||
- Custom list: Comma-separated tool names (e.g., `get_tasks,next_task,set_task_status`)
|
|
||||||
|
|
||||||
**Example .mcp.json configuration:**
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"mcpServers": {
|
|
||||||
"task-master-ai": {
|
|
||||||
"command": "npx",
|
|
||||||
"args": ["-y", "task-master-ai"],
|
|
||||||
"env": {
|
|
||||||
"TASK_MASTER_TOOLS": "standard",
|
|
||||||
"ANTHROPIC_API_KEY": "your_key_here"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
For complete details on all available tools, configuration examples, and usage guidelines, see the [MCP Tools documentation](https://docs.task-master.dev/capabilities/mcp#configurable-tool-loading).
|
|
||||||
|
|
||||||
- [#1312](https://github.com/eyaltoledano/claude-task-master/pull/1312) [`d7fca18`](https://github.com/eyaltoledano/claude-task-master/commit/d7fca1844f24ad8ce079c21d9799a3c4b4413381) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Improve next command to work with remote
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- [#1314](https://github.com/eyaltoledano/claude-task-master/pull/1314) [`6bc75c0`](https://github.com/eyaltoledano/claude-task-master/commit/6bc75c0ac68b59cb10cee70574a689f83e4de768) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Improve auth token refresh flow
|
|
||||||
|
|
||||||
- [#1302](https://github.com/eyaltoledano/claude-task-master/pull/1302) [`3283506`](https://github.com/eyaltoledano/claude-task-master/commit/3283506444d59896ecb97721ef2e96e290eb84d3) Thanks [@bjcoombs](https://github.com/bjcoombs)! - Enable Task Master commands to traverse parent directories to find project root from nested paths
|
|
||||||
|
|
||||||
Fixes #1301
|
|
||||||
|
|
||||||
## 0.29.0
|
## 0.29.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -186,54 +186,3 @@ The MCP tools can be categorized in the same way as the core functionalities:
|
|||||||
- **`use_tag`**: Switches to a different tag.
|
- **`use_tag`**: Switches to a different tag.
|
||||||
- **`rename_tag`**: Renames a tag.
|
- **`rename_tag`**: Renames a tag.
|
||||||
- **`copy_tag`**: Copies a tag.
|
- **`copy_tag`**: Copies a tag.
|
||||||
|
|
||||||
### 7. Scope Management
|
|
||||||
|
|
||||||
- **`scope_up`**: Moves a task up in the hierarchy.
|
|
||||||
- **`scope_down`**: Moves a task down in the hierarchy.
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### MCP Client Compatibility Issues
|
|
||||||
|
|
||||||
If you're experiencing issues with MCP clients not discovering Task Master tools, or seeing "vendor undefined" errors, this is likely due to JSON Schema compatibility differences.
|
|
||||||
|
|
||||||
**Common symptoms:**
|
|
||||||
- Tools show as "0 tools enabled" in MCP client settings
|
|
||||||
- "vendor undefined" errors in MCP client logs
|
|
||||||
- Task Master tools not appearing in tool lists
|
|
||||||
|
|
||||||
**Root cause:**
|
|
||||||
Some MCP clients (Augment IDE, gemini-cli, etc.) only support JSON Schema Draft-07, while newer schema generators output Draft 2020-12.
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
Task Master includes a compatibility fix (as of v2.1.2) that ensures all MCP tools use JSON Schema Draft-07. This fix:
|
|
||||||
|
|
||||||
- Uses Zod v3 compatibility mode for schema generation
|
|
||||||
- Ensures proper tool discovery across all MCP clients
|
|
||||||
- Maintains full functionality while improving compatibility
|
|
||||||
|
|
||||||
If you're still experiencing issues after updating to the latest version:
|
|
||||||
|
|
||||||
1. **Restart your MCP client** - Schema changes require a restart
|
|
||||||
2. **Verify API keys** - Tools may not load without proper authentication
|
|
||||||
3. **Check client logs** - Look for any remaining compatibility errors
|
|
||||||
4. **Try a different client** - Test with Claude Code or Cursor to isolate client-specific issues
|
|
||||||
|
|
||||||
### Custom MCP Tool Development
|
|
||||||
|
|
||||||
If you're extending Task Master with custom MCP tools, ensure you import from the Draft-07 compatible version:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// ✅ CORRECT - Draft-07 compatible
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
|
|
||||||
// ❌ WRONG - May cause compatibility issues
|
|
||||||
import { z } from 'zod';
|
|
||||||
```
|
|
||||||
|
|
||||||
This compatibility requirement applies only to MCP tool definitions in:
|
|
||||||
- `apps/mcp/src/tools/`
|
|
||||||
- `mcp-server/src/tools/`
|
|
||||||
|
|
||||||
The rest of the codebase can continue using standard Zod v4.
|
|
||||||
@@ -88,7 +88,7 @@ MCP (Model Control Protocol) lets you run Task Master directly from your editor.
|
|||||||
|
|
||||||
> 🔑 Replace `YOUR_…_KEY_HERE` with your real API keys. You can remove keys you don't use.
|
> 🔑 Replace `YOUR_…_KEY_HERE` with your real API keys. You can remove keys you don't use.
|
||||||
|
|
||||||
> **Note**: If you see `0 tools enabled` in the MCP settings, restart your editor and check that your API keys are correctly configured. Task Master v2.1.2+ includes compatibility fixes for MCP clients that only support JSON Schema Draft-07.
|
> **Note**: If you see `0 tools enabled` in the MCP settings, restart your editor and check that your API keys are correctly configured.
|
||||||
|
|
||||||
### VS Code (`servers` + `type`)
|
### VS Code (`servers` + `type`)
|
||||||
|
|
||||||
|
|||||||
@@ -275,7 +275,7 @@
|
|||||||
"tailwindcss": "4.1.11",
|
"tailwindcss": "4.1.11",
|
||||||
"typescript": "^5.9.2",
|
"typescript": "^5.9.2",
|
||||||
"@tm/core": "*",
|
"@tm/core": "*",
|
||||||
"task-master-ai": "0.30.0-rc.0"
|
"task-master-ai": "*"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"glob@<8": "^10.4.5",
|
"glob@<8": "^10.4.5",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"description": "Task Master MCP Tools - TypeScript MCP server tools for AI agent integration",
|
"description": "Task Master MCP Tools - TypeScript MCP server tools for AI agent integration",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "",
|
"version": "0.28.0-rc.2",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"types": "./src/index.ts",
|
"types": "./src/index.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
# Why MCP Tools Use Zod v3
|
|
||||||
|
|
||||||
## Problem
|
|
||||||
|
|
||||||
- **FastMCP** uses `xsschema` to convert schemas → outputs JSON Schema **Draft 2020-12**
|
|
||||||
- **MCP clients** (Augment IDE, gemini-cli, etc.) only support **Draft-07**
|
|
||||||
- Using Zod v4 in tools causes "vendor undefined" errors and tool discovery failures
|
|
||||||
|
|
||||||
## Temporary Solution
|
|
||||||
|
|
||||||
All MCP tool files import from `zod/v3` instead of `zod`:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { z } from 'zod/v3'; // ✅ Draft-07 compatible
|
|
||||||
// NOT: import { z } from 'zod'; // ❌ Would use Draft 2020-12
|
|
||||||
```
|
|
||||||
|
|
||||||
### Why This Works
|
|
||||||
|
|
||||||
- Zod v4 ships with v3 compatibility at `zod/v3`
|
|
||||||
- FastMCP + zod-to-json-schema converts Zod v3 schemas → **Draft-07**
|
|
||||||
- This ensures MCP clients can discover and use our tools
|
|
||||||
|
|
||||||
### What This Means
|
|
||||||
|
|
||||||
- ✅ **MCP tools** → use `zod/v3` (apps/mcp & mcp-server/src/tools)
|
|
||||||
- ✅ **Rest of codebase** → uses `zod` (Zod v4)
|
|
||||||
- ✅ **No conflicts** → they're from the same package, just different versions
|
|
||||||
|
|
||||||
## When Can We Remove This?
|
|
||||||
|
|
||||||
This workaround can be removed when **either**:
|
|
||||||
|
|
||||||
1. **FastMCP adds JSON Schema version configuration**
|
|
||||||
- e.g., `new FastMCP({ jsonSchema: { target: 'draft-07' } })`
|
|
||||||
- Tracking: https://github.com/punkpeye/fastmcp/issues/189
|
|
||||||
|
|
||||||
2. **MCP spec adds Draft 2020-12 support**
|
|
||||||
- Unlikely in the short term
|
|
||||||
|
|
||||||
3. **xsschema adds version targeting**
|
|
||||||
- Would allow FastMCP to use Draft-07
|
|
||||||
|
|
||||||
## How to Maintain
|
|
||||||
|
|
||||||
When adding new MCP tools:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// ✅ CORRECT
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
|
|
||||||
export function registerMyTool(server: FastMCP) {
|
|
||||||
server.addTool({
|
|
||||||
name: 'my_tool',
|
|
||||||
parameters: z.object({ ... }), // Will use Draft-07
|
|
||||||
execute: async (args, context) => { ... }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// ❌ WRONG - Will break MCP client compatibility
|
|
||||||
import { z } from 'zod'; // Don't do this in apps/mcp/src/tools/
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Last Updated:** 2025-10-18
|
|
||||||
**Affects:** All files in `apps/mcp/src/tools/`
|
|
||||||
**See Also:** `mcp-server/src/tools/README-ZOD-V3.md` (same workaround)
|
|
||||||
@@ -3,9 +3,7 @@
|
|||||||
* Abort a running TDD workflow and clean up state
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Create a git commit with automatic staging and message generation
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Complete the current TDD phase with test result validation
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Finalize and complete the workflow with working tree validation
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Get the next action to perform in the TDD workflow
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Resume a previously started TDD workflow from saved state
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Initialize and start a new TDD workflow for a task
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Get comprehensive workflow status and progress information
|
* Get comprehensive workflow status and progress information
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot
|
withNormalizedProjectRoot
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Available Models as of October 18, 2025
|
# Available Models as of October 5, 2025
|
||||||
|
|
||||||
## Main Models
|
## Main Models
|
||||||
|
|
||||||
@@ -8,11 +8,8 @@
|
|||||||
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
||||||
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
||||||
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
||||||
| anthropic | claude-sonnet-4-5-20250929 | 0.73 | 3 | 15 |
|
|
||||||
| anthropic | claude-haiku-4-5-20251001 | 0.45 | 1 | 5 |
|
|
||||||
| claude-code | opus | 0.725 | 0 | 0 |
|
| claude-code | opus | 0.725 | 0 | 0 |
|
||||||
| claude-code | sonnet | 0.727 | 0 | 0 |
|
| claude-code | sonnet | 0.727 | 0 | 0 |
|
||||||
| claude-code | haiku | 0.45 | 0 | 0 |
|
|
||||||
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
||||||
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
||||||
| mcp | mcp-sampling | — | 0 | 0 |
|
| mcp | mcp-sampling | — | 0 | 0 |
|
||||||
@@ -105,7 +102,6 @@
|
|||||||
| ----------- | -------------------------------------------- | --------- | ---------- | ----------- |
|
| ----------- | -------------------------------------------- | --------- | ---------- | ----------- |
|
||||||
| claude-code | opus | 0.725 | 0 | 0 |
|
| claude-code | opus | 0.725 | 0 | 0 |
|
||||||
| claude-code | sonnet | 0.727 | 0 | 0 |
|
| claude-code | sonnet | 0.727 | 0 | 0 |
|
||||||
| claude-code | haiku | 0.45 | 0 | 0 |
|
|
||||||
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
||||||
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
||||||
| mcp | mcp-sampling | — | 0 | 0 |
|
| mcp | mcp-sampling | — | 0 | 0 |
|
||||||
@@ -146,11 +142,8 @@
|
|||||||
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
| anthropic | claude-opus-4-20250514 | 0.725 | 15 | 75 |
|
||||||
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
| anthropic | claude-3-7-sonnet-20250219 | 0.623 | 3 | 15 |
|
||||||
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
| anthropic | claude-3-5-sonnet-20241022 | 0.49 | 3 | 15 |
|
||||||
| anthropic | claude-sonnet-4-5-20250929 | 0.73 | 3 | 15 |
|
|
||||||
| anthropic | claude-haiku-4-5-20251001 | 0.45 | 1 | 5 |
|
|
||||||
| claude-code | opus | 0.725 | 0 | 0 |
|
| claude-code | opus | 0.725 | 0 | 0 |
|
||||||
| claude-code | sonnet | 0.727 | 0 | 0 |
|
| claude-code | sonnet | 0.727 | 0 | 0 |
|
||||||
| claude-code | haiku | 0.45 | 0 | 0 |
|
|
||||||
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5 | 0.749 | 0 | 0 |
|
||||||
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
| codex-cli | gpt-5-codex | 0.749 | 0 | 0 |
|
||||||
| mcp | mcp-sampling | — | 0 | 0 |
|
| mcp | mcp-sampling | — | 0 | 0 |
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ function log(level, ...args) {
|
|||||||
// is responsible for directing logs correctly (e.g., to stderr)
|
// is responsible for directing logs correctly (e.g., to stderr)
|
||||||
// during tool execution without upsetting the client connection.
|
// during tool execution without upsetting the client connection.
|
||||||
// Logs outside of tool execution (like startup) will go to stdout.
|
// Logs outside of tool execution (like startup) will go to stdout.
|
||||||
console.error(prefix, ...coloredArgs);
|
console.log(prefix, ...coloredArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,67 +0,0 @@
|
|||||||
# Why MCP Tools Use Zod v3
|
|
||||||
|
|
||||||
## Problem
|
|
||||||
|
|
||||||
- **FastMCP** uses `xsschema` to convert schemas → outputs JSON Schema **Draft 2020-12**
|
|
||||||
- **MCP clients** (Augment IDE, gemini-cli, etc.) only support **Draft-07**
|
|
||||||
- Using Zod v4 in tools causes "vendor undefined" errors and tool discovery failures
|
|
||||||
|
|
||||||
## Temporary Solution
|
|
||||||
|
|
||||||
All MCP tool files import from `zod/v3` instead of `zod`:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import { z } from 'zod/v3'; // ✅ Draft-07 compatible
|
|
||||||
// NOT: import { z } from 'zod'; // ❌ Would use Draft 2020-12
|
|
||||||
```
|
|
||||||
|
|
||||||
### Why This Works
|
|
||||||
|
|
||||||
- Zod v4 ships with v3 compatibility at `zod/v3`
|
|
||||||
- FastMCP + zod-to-json-schema converts Zod v3 schemas → **Draft-07**
|
|
||||||
- This ensures MCP clients can discover and use our tools
|
|
||||||
|
|
||||||
### What This Means
|
|
||||||
|
|
||||||
- ✅ **MCP tools** → use `zod/v3` (this directory)
|
|
||||||
- ✅ **Rest of codebase** → uses `zod` (Zod v4)
|
|
||||||
- ✅ **No conflicts** → they're from the same package, just different versions
|
|
||||||
|
|
||||||
## When Can We Remove This?
|
|
||||||
|
|
||||||
This workaround can be removed when **either**:
|
|
||||||
|
|
||||||
1. **FastMCP adds JSON Schema version configuration**
|
|
||||||
- e.g., `new FastMCP({ jsonSchema: { target: 'draft-07' } })`
|
|
||||||
- Tracking: https://github.com/punkpeye/fastmcp/issues/189
|
|
||||||
|
|
||||||
2. **MCP spec adds Draft 2020-12 support**
|
|
||||||
- Unlikely in the short term
|
|
||||||
|
|
||||||
3. **xsschema adds version targeting**
|
|
||||||
- Would allow FastMCP to use Draft-07
|
|
||||||
|
|
||||||
## How to Maintain
|
|
||||||
|
|
||||||
When adding new MCP tools:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// ✅ CORRECT
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
|
|
||||||
server.addTool({
|
|
||||||
name: 'my_tool',
|
|
||||||
parameters: z.object({ ... }), // Will use Draft-07
|
|
||||||
execute: async (args) => { ... }
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// ❌ WRONG - Will break MCP client compatibility
|
|
||||||
import { z } from 'zod'; // Don't do this in mcp-server/src/tools/
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Last Updated:** 2025-10-18
|
|
||||||
**Affects:** All files in `mcp-server/src/tools/`
|
|
||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for adding a dependency to a task
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for adding subtasks to existing tasks
|
* Tool for adding subtasks to existing tasks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to create a new tag
|
* Tool to create a new tag
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to add a new task using AI
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for analyzing task complexity and generating recommendations
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs'; // Import fs for directory check/creation
|
import fs from 'fs'; // Import fs for directory check/creation
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for clearing subtasks from parent tasks
|
* Tool for clearing subtasks from parent tasks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for displaying the complexity analysis report
|
* Tool for displaying the complexity analysis report
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to copy an existing tag to a new tag
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to delete an existing tag
|
* Tool to delete an existing tag
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for expanding all pending tasks with subtasks
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to expand a task into subtasks
|
* Tool to expand a task into subtasks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for automatically fixing invalid task dependencies
|
* Tool for automatically fixing invalid task dependencies
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to generate individual task files from tasks.json
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
// mcp-server/src/tools/get-operation-status.js
|
// 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import { createErrorResponse, createContentResponse } from './utils.js'; // Assuming these utils exist
|
import { createErrorResponse, createContentResponse } from './utils.js'; // Assuming these utils exist
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to get task details by ID
|
* Tool to get task details by ID
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to get all tasks from Task Master
|
* Tool to get all tasks from Task Master
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to list all available tags
|
* Tool to list all available tags
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* MCP tool for managing AI model configurations
|
* MCP tool for managing AI model configurations
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for moving tasks or subtasks to a new position
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to find the next task to work on based on dependencies and status
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to parse PRD document and generate tasks
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
withNormalizedProjectRoot,
|
withNormalizedProjectRoot,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for removing a dependency from a task
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for removing subtasks from parent tasks
|
* Tool for removing subtasks from parent tasks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to remove a task by ID
|
* Tool to remove a task by ID
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to rename an existing tag
|
* Tool to rename an existing tag
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to perform AI-powered research queries with project context
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to add or remove rules from a project (MCP server)
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to scope down task complexity
|
* Tool to scope down task complexity
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to scope up task complexity
|
* Tool to scope up task complexity
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to set the status of a task
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to append additional information to a specific subtask
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to update a single task by ID with new information
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to update tasks based on new context/prompt
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool to switch to a different tag context
|
* 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
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
|
|||||||
@@ -3,9 +3,7 @@
|
|||||||
* Tool for validating task dependencies
|
* Tool for validating task dependencies
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TEMPORARY: Using zod/v3 for Draft-07 JSON Schema compatibility with FastMCP's zod-to-json-schema
|
import { z } from 'zod';
|
||||||
// TODO: Revert to 'zod' when MCP spec issue is resolved (see PR #1323)
|
|
||||||
import { z } from 'zod/v3';
|
|
||||||
import {
|
import {
|
||||||
handleApiResult,
|
handleApiResult,
|
||||||
createErrorResponse,
|
createErrorResponse,
|
||||||
|
|||||||
55
output.txt
55
output.txt
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "task-master-ai",
|
"name": "task-master-ai",
|
||||||
"version": "0.30.0-rc.0",
|
"version": "0.29.0",
|
||||||
"description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.",
|
"description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export interface LoggerConfig {
|
|||||||
export class Logger {
|
export class Logger {
|
||||||
private config: Required<LoggerConfig>;
|
private config: Required<LoggerConfig>;
|
||||||
private static readonly DEFAULT_CONFIG: Required<LoggerConfig> = {
|
private static readonly DEFAULT_CONFIG: Required<LoggerConfig> = {
|
||||||
level: LogLevel.SILENT,
|
level: LogLevel.WARN,
|
||||||
silent: false,
|
silent: false,
|
||||||
prefix: '',
|
prefix: '',
|
||||||
timestamp: false,
|
timestamp: false,
|
||||||
|
|||||||
@@ -307,20 +307,6 @@ function validateProviderModelCombination(providerName, modelId) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the list of supported model IDs for a given provider from supported-models.json
|
|
||||||
* @param {string} providerName - The name of the provider (e.g., 'claude-code', 'anthropic')
|
|
||||||
* @returns {string[]} Array of supported model IDs, or empty array if provider not found
|
|
||||||
*/
|
|
||||||
export function getSupportedModelsForProvider(providerName) {
|
|
||||||
if (!MODEL_MAP[providerName]) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
return MODEL_MAP[providerName]
|
|
||||||
.filter((model) => model.supported !== false)
|
|
||||||
.map((model) => model.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates Claude Code AI provider custom settings
|
* Validates Claude Code AI provider custom settings
|
||||||
* @param {object} settings The settings to validate
|
* @param {object} settings The settings to validate
|
||||||
|
|||||||
@@ -43,28 +43,6 @@
|
|||||||
"allowed_roles": ["main", "fallback"],
|
"allowed_roles": ["main", "fallback"],
|
||||||
"max_tokens": 8192,
|
"max_tokens": 8192,
|
||||||
"supported": true
|
"supported": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "claude-sonnet-4-5-20250929",
|
|
||||||
"swe_score": 0.73,
|
|
||||||
"cost_per_1m_tokens": {
|
|
||||||
"input": 3.0,
|
|
||||||
"output": 15.0
|
|
||||||
},
|
|
||||||
"allowed_roles": ["main", "fallback"],
|
|
||||||
"max_tokens": 64000,
|
|
||||||
"supported": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "claude-haiku-4-5-20251001",
|
|
||||||
"swe_score": 0.45,
|
|
||||||
"cost_per_1m_tokens": {
|
|
||||||
"input": 1.0,
|
|
||||||
"output": 5.0
|
|
||||||
},
|
|
||||||
"allowed_roles": ["main", "fallback"],
|
|
||||||
"max_tokens": 200000,
|
|
||||||
"supported": true
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"claude-code": [
|
"claude-code": [
|
||||||
@@ -89,17 +67,6 @@
|
|||||||
"allowed_roles": ["main", "fallback", "research"],
|
"allowed_roles": ["main", "fallback", "research"],
|
||||||
"max_tokens": 64000,
|
"max_tokens": 64000,
|
||||||
"supported": true
|
"supported": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "haiku",
|
|
||||||
"swe_score": 0.45,
|
|
||||||
"cost_per_1m_tokens": {
|
|
||||||
"input": 0,
|
|
||||||
"output": 0
|
|
||||||
},
|
|
||||||
"allowed_roles": ["main", "fallback", "research"],
|
|
||||||
"max_tokens": 200000,
|
|
||||||
"supported": true
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"codex-cli": [
|
"codex-cli": [
|
||||||
|
|||||||
@@ -12,10 +12,7 @@
|
|||||||
|
|
||||||
import { createClaudeCode } from 'ai-sdk-provider-claude-code';
|
import { createClaudeCode } from 'ai-sdk-provider-claude-code';
|
||||||
import { BaseAIProvider } from './base-provider.js';
|
import { BaseAIProvider } from './base-provider.js';
|
||||||
import {
|
import { getClaudeCodeSettingsForCommand } from '../../scripts/modules/config-manager.js';
|
||||||
getClaudeCodeSettingsForCommand,
|
|
||||||
getSupportedModelsForProvider
|
|
||||||
} from '../../scripts/modules/config-manager.js';
|
|
||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import { log } from '../../scripts/modules/utils.js';
|
import { log } from '../../scripts/modules/utils.js';
|
||||||
|
|
||||||
@@ -27,24 +24,14 @@ let _claudeCliAvailable = null;
|
|||||||
*
|
*
|
||||||
* Features:
|
* Features:
|
||||||
* - No API key required (uses local Claude Code CLI)
|
* - No API key required (uses local Claude Code CLI)
|
||||||
* - Supported models loaded from supported-models.json
|
* - Supports 'sonnet' and 'opus' models
|
||||||
* - Command-specific configuration support
|
* - Command-specific configuration support
|
||||||
*/
|
*/
|
||||||
export class ClaudeCodeProvider extends BaseAIProvider {
|
export class ClaudeCodeProvider extends BaseAIProvider {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.name = 'Claude Code';
|
this.name = 'Claude Code';
|
||||||
// Load supported models from supported-models.json
|
this.supportedModels = ['sonnet', 'opus'];
|
||||||
this.supportedModels = getSupportedModelsForProvider('claude-code');
|
|
||||||
|
|
||||||
// Validate that models were loaded successfully
|
|
||||||
if (this.supportedModels.length === 0) {
|
|
||||||
log(
|
|
||||||
'warn',
|
|
||||||
'No supported models found for claude-code provider. Check supported-models.json configuration.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Claude Code requires explicit JSON schema mode
|
// Claude Code requires explicit JSON schema mode
|
||||||
this.needsExplicitJsonSchema = true;
|
this.needsExplicitJsonSchema = true;
|
||||||
// Claude Code does not support temperature parameter
|
// Claude Code does not support temperature parameter
|
||||||
|
|||||||
@@ -10,10 +10,7 @@ import { createCodexCli } from 'ai-sdk-provider-codex-cli';
|
|||||||
import { BaseAIProvider } from './base-provider.js';
|
import { BaseAIProvider } from './base-provider.js';
|
||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import { log } from '../../scripts/modules/utils.js';
|
import { log } from '../../scripts/modules/utils.js';
|
||||||
import {
|
import { getCodexCliSettingsForCommand } from '../../scripts/modules/config-manager.js';
|
||||||
getCodexCliSettingsForCommand,
|
|
||||||
getSupportedModelsForProvider
|
|
||||||
} from '../../scripts/modules/config-manager.js';
|
|
||||||
|
|
||||||
export class CodexCliProvider extends BaseAIProvider {
|
export class CodexCliProvider extends BaseAIProvider {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -23,17 +20,8 @@ export class CodexCliProvider extends BaseAIProvider {
|
|||||||
this.needsExplicitJsonSchema = false;
|
this.needsExplicitJsonSchema = false;
|
||||||
// Codex CLI does not support temperature parameter
|
// Codex CLI does not support temperature parameter
|
||||||
this.supportsTemperature = false;
|
this.supportsTemperature = false;
|
||||||
// Load supported models from supported-models.json
|
// Restrict to supported models for OAuth subscription usage
|
||||||
this.supportedModels = getSupportedModelsForProvider('codex-cli');
|
this.supportedModels = ['gpt-5', 'gpt-5-codex'];
|
||||||
|
|
||||||
// Validate that models were loaded successfully
|
|
||||||
if (this.supportedModels.length === 0) {
|
|
||||||
log(
|
|
||||||
'warn',
|
|
||||||
'No supported models found for codex-cli provider. Check supported-models.json configuration.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// CLI availability check cache
|
// CLI availability check cache
|
||||||
this._codexCliChecked = false;
|
this._codexCliChecked = false;
|
||||||
this._codexCliAvailable = null;
|
this._codexCliAvailable = null;
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ describe('Claude Code Error Handling', () => {
|
|||||||
|
|
||||||
// These should work even if CLI is not available
|
// These should work even if CLI is not available
|
||||||
expect(provider.name).toBe('Claude Code');
|
expect(provider.name).toBe('Claude Code');
|
||||||
expect(provider.getSupportedModels()).toEqual(['opus', 'sonnet', 'haiku']);
|
expect(provider.getSupportedModels()).toEqual(['sonnet', 'opus']);
|
||||||
expect(provider.isModelSupported('sonnet')).toBe(true);
|
expect(provider.isModelSupported('sonnet')).toBe(true);
|
||||||
expect(provider.isModelSupported('haiku')).toBe(true);
|
expect(provider.isModelSupported('haiku')).toBe(false);
|
||||||
expect(provider.isRequiredApiKey()).toBe(false);
|
expect(provider.isRequiredApiKey()).toBe(false);
|
||||||
expect(() => provider.validateAuth()).not.toThrow();
|
expect(() => provider.validateAuth()).not.toThrow();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -40,14 +40,14 @@ describe('Claude Code Integration (Optional)', () => {
|
|||||||
it('should create a working provider instance', () => {
|
it('should create a working provider instance', () => {
|
||||||
const provider = new ClaudeCodeProvider();
|
const provider = new ClaudeCodeProvider();
|
||||||
expect(provider.name).toBe('Claude Code');
|
expect(provider.name).toBe('Claude Code');
|
||||||
expect(provider.getSupportedModels()).toEqual(['opus', 'sonnet', 'haiku']);
|
expect(provider.getSupportedModels()).toEqual(['sonnet', 'opus']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should support model validation', () => {
|
it('should support model validation', () => {
|
||||||
const provider = new ClaudeCodeProvider();
|
const provider = new ClaudeCodeProvider();
|
||||||
expect(provider.isModelSupported('sonnet')).toBe(true);
|
expect(provider.isModelSupported('sonnet')).toBe(true);
|
||||||
expect(provider.isModelSupported('opus')).toBe(true);
|
expect(provider.isModelSupported('opus')).toBe(true);
|
||||||
expect(provider.isModelSupported('haiku')).toBe(true);
|
expect(provider.isModelSupported('haiku')).toBe(false);
|
||||||
expect(provider.isModelSupported('unknown')).toBe(false);
|
expect(provider.isModelSupported('unknown')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -28,14 +28,6 @@ jest.unstable_mockModule('../../../src/ai-providers/base-provider.js', () => ({
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Mock config getters
|
|
||||||
jest.unstable_mockModule('../../../scripts/modules/config-manager.js', () => ({
|
|
||||||
getClaudeCodeSettingsForCommand: jest.fn(() => ({})),
|
|
||||||
getSupportedModelsForProvider: jest.fn(() => ['opus', 'sonnet', 'haiku']),
|
|
||||||
getDebugFlag: jest.fn(() => false),
|
|
||||||
getLogLevel: jest.fn(() => 'info')
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Import after mocking
|
// Import after mocking
|
||||||
const { ClaudeCodeProvider } = await import(
|
const { ClaudeCodeProvider } = await import(
|
||||||
'../../../src/ai-providers/claude-code.js'
|
'../../../src/ai-providers/claude-code.js'
|
||||||
@@ -104,13 +96,13 @@ describe('ClaudeCodeProvider', () => {
|
|||||||
describe('model support', () => {
|
describe('model support', () => {
|
||||||
it('should return supported models', () => {
|
it('should return supported models', () => {
|
||||||
const models = provider.getSupportedModels();
|
const models = provider.getSupportedModels();
|
||||||
expect(models).toEqual(['opus', 'sonnet', 'haiku']);
|
expect(models).toEqual(['sonnet', 'opus']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should check if model is supported', () => {
|
it('should check if model is supported', () => {
|
||||||
expect(provider.isModelSupported('sonnet')).toBe(true);
|
expect(provider.isModelSupported('sonnet')).toBe(true);
|
||||||
expect(provider.isModelSupported('opus')).toBe(true);
|
expect(provider.isModelSupported('opus')).toBe(true);
|
||||||
expect(provider.isModelSupported('haiku')).toBe(true);
|
expect(provider.isModelSupported('haiku')).toBe(false);
|
||||||
expect(provider.isModelSupported('unknown')).toBe(false);
|
expect(provider.isModelSupported('unknown')).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ jest.unstable_mockModule('ai-sdk-provider-codex-cli', () => ({
|
|||||||
// Mock config getters
|
// Mock config getters
|
||||||
jest.unstable_mockModule('../../../scripts/modules/config-manager.js', () => ({
|
jest.unstable_mockModule('../../../scripts/modules/config-manager.js', () => ({
|
||||||
getCodexCliSettingsForCommand: jest.fn(() => ({ allowNpx: true })),
|
getCodexCliSettingsForCommand: jest.fn(() => ({ allowNpx: true })),
|
||||||
getSupportedModelsForProvider: jest.fn(() => ['gpt-5', 'gpt-5-codex']),
|
|
||||||
// Provide commonly imported getters to satisfy other module imports if any
|
// Provide commonly imported getters to satisfy other module imports if any
|
||||||
getDebugFlag: jest.fn(() => false),
|
getDebugFlag: jest.fn(() => false),
|
||||||
getLogLevel: jest.fn(() => 'info')
|
getLogLevel: jest.fn(() => 'info')
|
||||||
|
|||||||
Reference in New Issue
Block a user