tick-mcp-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +466 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Tick MCP Server
|
|
2
|
+
|
|
3
|
+
Model Context Protocol (MCP) server for Tick.md multi-agent coordination. Enables AI agents to use Tick commands for task management and coordination.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Task Management**: Create, claim, release, and complete tasks
|
|
8
|
+
- **Agent Coordination**: Register agents and track their work
|
|
9
|
+
- **Validation**: Validate TICK.md files for errors
|
|
10
|
+
- **Status Tracking**: Get real-time project status
|
|
11
|
+
- **Comments**: Add notes to task history
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
### From npm (when published)
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g tick-mcp-server
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Local Development
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
cd mcp
|
|
25
|
+
npm install
|
|
26
|
+
npm run build
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## MCP Configuration
|
|
30
|
+
|
|
31
|
+
Add to your MCP settings file (e.g., `claude_desktop_config.json`):
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"tick": {
|
|
37
|
+
"command": "node",
|
|
38
|
+
"args": ["/path/to/tick-md/mcp/dist/index.js"],
|
|
39
|
+
"cwd": "/path/to/your/tick/project"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Or use npx (when published):
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"mcpServers": {
|
|
50
|
+
"tick": {
|
|
51
|
+
"command": "npx",
|
|
52
|
+
"args": ["tick-mcp-server"],
|
|
53
|
+
"cwd": "/path/to/your/tick/project"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Available Tools
|
|
60
|
+
|
|
61
|
+
### `tick_status`
|
|
62
|
+
|
|
63
|
+
Get current project status including tasks, agents, and progress.
|
|
64
|
+
|
|
65
|
+
**Returns:** JSON with project overview, agent list, task summary by status
|
|
66
|
+
|
|
67
|
+
### `tick_add`
|
|
68
|
+
|
|
69
|
+
Create a new task.
|
|
70
|
+
|
|
71
|
+
**Parameters:**
|
|
72
|
+
- `title` (required): Task title
|
|
73
|
+
- `priority`: urgent|high|medium|low (default: medium)
|
|
74
|
+
- `tags`: Array of tags
|
|
75
|
+
- `assignedTo`: Agent to assign to
|
|
76
|
+
- `description`: Detailed description
|
|
77
|
+
- `dependsOn`: Array of task IDs this depends on
|
|
78
|
+
- `estimatedHours`: Estimated hours to complete
|
|
79
|
+
|
|
80
|
+
**Returns:** Task ID of created task
|
|
81
|
+
|
|
82
|
+
### `tick_claim`
|
|
83
|
+
|
|
84
|
+
Claim a task for an agent.
|
|
85
|
+
|
|
86
|
+
**Parameters:**
|
|
87
|
+
- `taskId` (required): Task ID (e.g., "TASK-001")
|
|
88
|
+
- `agent` (required): Agent name (e.g., "@agent-name")
|
|
89
|
+
|
|
90
|
+
**Returns:** Confirmation message
|
|
91
|
+
|
|
92
|
+
### `tick_release`
|
|
93
|
+
|
|
94
|
+
Release a claimed task back to todo.
|
|
95
|
+
|
|
96
|
+
**Parameters:**
|
|
97
|
+
- `taskId` (required): Task ID
|
|
98
|
+
- `agent` (required): Agent name
|
|
99
|
+
|
|
100
|
+
**Returns:** Confirmation message
|
|
101
|
+
|
|
102
|
+
### `tick_done`
|
|
103
|
+
|
|
104
|
+
Mark a task as complete. Automatically unblocks dependent tasks.
|
|
105
|
+
|
|
106
|
+
**Parameters:**
|
|
107
|
+
- `taskId` (required): Task ID
|
|
108
|
+
- `agent` (required): Agent name
|
|
109
|
+
|
|
110
|
+
**Returns:** Confirmation message
|
|
111
|
+
|
|
112
|
+
### `tick_comment`
|
|
113
|
+
|
|
114
|
+
Add a comment to a task's history.
|
|
115
|
+
|
|
116
|
+
**Parameters:**
|
|
117
|
+
- `taskId` (required): Task ID
|
|
118
|
+
- `agent` (required): Agent name
|
|
119
|
+
- `note` (required): Comment text
|
|
120
|
+
|
|
121
|
+
**Returns:** Confirmation message
|
|
122
|
+
|
|
123
|
+
### `tick_validate`
|
|
124
|
+
|
|
125
|
+
Validate TICK.md for errors and warnings.
|
|
126
|
+
|
|
127
|
+
**Returns:** JSON with validation results (errors, warnings, summary)
|
|
128
|
+
|
|
129
|
+
### `tick_agent_list`
|
|
130
|
+
|
|
131
|
+
List all registered agents.
|
|
132
|
+
|
|
133
|
+
**Parameters:**
|
|
134
|
+
- `status` (optional): Filter by status (working|idle|offline)
|
|
135
|
+
- `type` (optional): Filter by type (human|bot)
|
|
136
|
+
|
|
137
|
+
**Returns:** JSON with agent list
|
|
138
|
+
|
|
139
|
+
### `tick_agent_register`
|
|
140
|
+
|
|
141
|
+
Register a new agent.
|
|
142
|
+
|
|
143
|
+
**Parameters:**
|
|
144
|
+
- `name` (required): Agent name (e.g., "@bot-name")
|
|
145
|
+
- `type`: human|bot (default: human)
|
|
146
|
+
- `roles`: Array of roles (default: ["developer"])
|
|
147
|
+
- `status`: working|idle|offline (default: idle)
|
|
148
|
+
|
|
149
|
+
**Returns:** Confirmation message
|
|
150
|
+
|
|
151
|
+
## Usage Example
|
|
152
|
+
|
|
153
|
+
Once configured, AI agents (like Claude) can use these tools:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
AI: I'll help you create a task for the authentication system.
|
|
157
|
+
|
|
158
|
+
[Uses tick_add tool with:
|
|
159
|
+
title: "Build authentication system"
|
|
160
|
+
priority: "high"
|
|
161
|
+
tags: ["backend", "security"]
|
|
162
|
+
]
|
|
163
|
+
|
|
164
|
+
AI: I've created TASK-023. Now let me claim it for myself.
|
|
165
|
+
|
|
166
|
+
[Uses tick_claim tool with:
|
|
167
|
+
taskId: "TASK-023"
|
|
168
|
+
agent: "@claude-agent"
|
|
169
|
+
]
|
|
170
|
+
|
|
171
|
+
AI: I've claimed the task and I'm working on it now.
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Architecture
|
|
175
|
+
|
|
176
|
+
The MCP server acts as a bridge between AI agents and the Tick CLI:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
AI Agent (Claude/etc)
|
|
180
|
+
↓
|
|
181
|
+
MCP Protocol
|
|
182
|
+
↓
|
|
183
|
+
Tick MCP Server
|
|
184
|
+
↓
|
|
185
|
+
Tick CLI Commands
|
|
186
|
+
↓
|
|
187
|
+
TICK.md File
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Key Features
|
|
191
|
+
|
|
192
|
+
- **Reuses CLI Logic**: Imports commands from `../cli/src/commands/`
|
|
193
|
+
- **Stateless**: Each tool call reads/writes TICK.md
|
|
194
|
+
- **Safe**: All CLI validation and locking apply
|
|
195
|
+
- **JSON Responses**: Returns structured data for AI consumption
|
|
196
|
+
|
|
197
|
+
## Development
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Install dependencies
|
|
201
|
+
npm install
|
|
202
|
+
|
|
203
|
+
# Build
|
|
204
|
+
npm run build
|
|
205
|
+
|
|
206
|
+
# Watch mode
|
|
207
|
+
npm run dev
|
|
208
|
+
|
|
209
|
+
# Test (requires a Tick project in the directory)
|
|
210
|
+
node dist/index.js
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Requirements
|
|
214
|
+
|
|
215
|
+
- Node.js 18+
|
|
216
|
+
- A Tick project (with TICK.md file)
|
|
217
|
+
- MCP-compatible AI client
|
|
218
|
+
|
|
219
|
+
## Error Handling
|
|
220
|
+
|
|
221
|
+
All tools return error messages in the response if something goes wrong:
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"content": [
|
|
226
|
+
{
|
|
227
|
+
"type": "text",
|
|
228
|
+
"text": "Error: Task TASK-999 not found"
|
|
229
|
+
}
|
|
230
|
+
],
|
|
231
|
+
"isError": true
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Best Practices
|
|
236
|
+
|
|
237
|
+
1. **Check Status First**: Use `tick_status` to understand the project state
|
|
238
|
+
2. **Validate Often**: Run `tick_validate` after making changes
|
|
239
|
+
3. **Descriptive Comments**: Use `tick_comment` to explain progress
|
|
240
|
+
4. **Proper Workflow**: claim → work → comment → done
|
|
241
|
+
5. **Register First**: Register as an agent before claiming tasks
|
|
242
|
+
|
|
243
|
+
## License
|
|
244
|
+
|
|
245
|
+
MIT · Purple Horizons
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
|
+
// @ts-ignore - CLI imports resolved at runtime
|
|
7
|
+
import { parseTickFile } from "../../cli/dist/parser/parse.js";
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
import { addCommand } from "../../cli/dist/commands/add.js";
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
import { claimCommand, releaseCommand } from "../../cli/dist/commands/claim.js";
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
import { doneCommand, commentCommand } from "../../cli/dist/commands/done.js";
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
import { validateTickFile } from "../../cli/dist/utils/validator.js";
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
import { registerAgentCommand } from "../../cli/dist/commands/agent.js";
|
|
18
|
+
/**
|
|
19
|
+
* Tick MCP Server
|
|
20
|
+
*
|
|
21
|
+
* Provides MCP tools for AI agents to coordinate work via Tick.md files.
|
|
22
|
+
* Exposes tick CLI functionality as MCP tools.
|
|
23
|
+
*/
|
|
24
|
+
const server = new Server({
|
|
25
|
+
name: "tick-mcp-server",
|
|
26
|
+
version: "0.1.0",
|
|
27
|
+
}, {
|
|
28
|
+
capabilities: {
|
|
29
|
+
tools: {},
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
// Helper to check if TICK.md exists
|
|
33
|
+
function checkTickFile() {
|
|
34
|
+
if (!fs.existsSync("TICK.md")) {
|
|
35
|
+
throw new Error("TICK.md not found. Run 'tick init' first or navigate to a Tick project directory.");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Tool definitions
|
|
39
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
40
|
+
return {
|
|
41
|
+
tools: [
|
|
42
|
+
{
|
|
43
|
+
name: "tick_status",
|
|
44
|
+
description: "Get the current status of the Tick project, including all tasks, agents, and progress summary.",
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: "object",
|
|
47
|
+
properties: {},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "tick_add",
|
|
52
|
+
description: "Create a new task in the Tick project. Returns the new task ID.",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
title: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Task title (required)",
|
|
59
|
+
},
|
|
60
|
+
priority: {
|
|
61
|
+
type: "string",
|
|
62
|
+
enum: ["urgent", "high", "medium", "low"],
|
|
63
|
+
description: "Task priority (default: medium)",
|
|
64
|
+
},
|
|
65
|
+
tags: {
|
|
66
|
+
type: "array",
|
|
67
|
+
items: { type: "string" },
|
|
68
|
+
description: "Tags for the task",
|
|
69
|
+
},
|
|
70
|
+
assignedTo: {
|
|
71
|
+
type: "string",
|
|
72
|
+
description: "Agent to assign the task to",
|
|
73
|
+
},
|
|
74
|
+
description: {
|
|
75
|
+
type: "string",
|
|
76
|
+
description: "Detailed task description",
|
|
77
|
+
},
|
|
78
|
+
dependsOn: {
|
|
79
|
+
type: "array",
|
|
80
|
+
items: { type: "string" },
|
|
81
|
+
description: "Task IDs this task depends on",
|
|
82
|
+
},
|
|
83
|
+
estimatedHours: {
|
|
84
|
+
type: "number",
|
|
85
|
+
description: "Estimated hours to complete",
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
required: ["title"],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "tick_claim",
|
|
93
|
+
description: "Claim a task for an agent. Sets status to in_progress and acquires a lock.",
|
|
94
|
+
inputSchema: {
|
|
95
|
+
type: "object",
|
|
96
|
+
properties: {
|
|
97
|
+
taskId: {
|
|
98
|
+
type: "string",
|
|
99
|
+
description: "Task ID to claim (e.g., TASK-001)",
|
|
100
|
+
},
|
|
101
|
+
agent: {
|
|
102
|
+
type: "string",
|
|
103
|
+
description: "Agent name claiming the task (e.g., @agent-name)",
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
required: ["taskId", "agent"],
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "tick_release",
|
|
111
|
+
description: "Release a claimed task back to todo status and remove the lock.",
|
|
112
|
+
inputSchema: {
|
|
113
|
+
type: "object",
|
|
114
|
+
properties: {
|
|
115
|
+
taskId: {
|
|
116
|
+
type: "string",
|
|
117
|
+
description: "Task ID to release",
|
|
118
|
+
},
|
|
119
|
+
agent: {
|
|
120
|
+
type: "string",
|
|
121
|
+
description: "Agent name releasing the task",
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
required: ["taskId", "agent"],
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: "tick_done",
|
|
129
|
+
description: "Mark a task as complete. Automatically unblocks dependent tasks.",
|
|
130
|
+
inputSchema: {
|
|
131
|
+
type: "object",
|
|
132
|
+
properties: {
|
|
133
|
+
taskId: {
|
|
134
|
+
type: "string",
|
|
135
|
+
description: "Task ID to complete",
|
|
136
|
+
},
|
|
137
|
+
agent: {
|
|
138
|
+
type: "string",
|
|
139
|
+
description: "Agent completing the task",
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
required: ["taskId", "agent"],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: "tick_comment",
|
|
147
|
+
description: "Add a comment/note to a task's history.",
|
|
148
|
+
inputSchema: {
|
|
149
|
+
type: "object",
|
|
150
|
+
properties: {
|
|
151
|
+
taskId: {
|
|
152
|
+
type: "string",
|
|
153
|
+
description: "Task ID to comment on",
|
|
154
|
+
},
|
|
155
|
+
agent: {
|
|
156
|
+
type: "string",
|
|
157
|
+
description: "Agent adding the comment",
|
|
158
|
+
},
|
|
159
|
+
note: {
|
|
160
|
+
type: "string",
|
|
161
|
+
description: "Comment text",
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
required: ["taskId", "agent", "note"],
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: "tick_validate",
|
|
169
|
+
description: "Validate the TICK.md file for errors and warnings. Returns validation results.",
|
|
170
|
+
inputSchema: {
|
|
171
|
+
type: "object",
|
|
172
|
+
properties: {},
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: "tick_agent_list",
|
|
177
|
+
description: "List all registered agents with their current status and task assignments.",
|
|
178
|
+
inputSchema: {
|
|
179
|
+
type: "object",
|
|
180
|
+
properties: {
|
|
181
|
+
status: {
|
|
182
|
+
type: "string",
|
|
183
|
+
enum: ["working", "idle", "offline"],
|
|
184
|
+
description: "Filter agents by status",
|
|
185
|
+
},
|
|
186
|
+
type: {
|
|
187
|
+
type: "string",
|
|
188
|
+
enum: ["human", "bot"],
|
|
189
|
+
description: "Filter agents by type",
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
name: "tick_agent_register",
|
|
196
|
+
description: "Register a new agent (human or bot) in the Tick project.",
|
|
197
|
+
inputSchema: {
|
|
198
|
+
type: "object",
|
|
199
|
+
properties: {
|
|
200
|
+
name: {
|
|
201
|
+
type: "string",
|
|
202
|
+
description: "Agent name (e.g., @bot-name)",
|
|
203
|
+
},
|
|
204
|
+
type: {
|
|
205
|
+
type: "string",
|
|
206
|
+
enum: ["human", "bot"],
|
|
207
|
+
description: "Agent type (default: human)",
|
|
208
|
+
},
|
|
209
|
+
roles: {
|
|
210
|
+
type: "array",
|
|
211
|
+
items: { type: "string" },
|
|
212
|
+
description: "Agent roles (e.g., developer, reviewer)",
|
|
213
|
+
},
|
|
214
|
+
status: {
|
|
215
|
+
type: "string",
|
|
216
|
+
enum: ["working", "idle", "offline"],
|
|
217
|
+
description: "Initial status (default: idle)",
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
required: ["name"],
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
// Tool execution
|
|
227
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
228
|
+
const { name, arguments: args } = request.params;
|
|
229
|
+
try {
|
|
230
|
+
switch (name) {
|
|
231
|
+
case "tick_status": {
|
|
232
|
+
checkTickFile();
|
|
233
|
+
const content = fs.readFileSync("TICK.md", "utf-8");
|
|
234
|
+
const tickFile = parseTickFile(content);
|
|
235
|
+
// Group tasks by status
|
|
236
|
+
const tasksByStatus = tickFile.tasks.reduce((acc, task) => {
|
|
237
|
+
if (!acc[task.status])
|
|
238
|
+
acc[task.status] = [];
|
|
239
|
+
acc[task.status].push(task);
|
|
240
|
+
return acc;
|
|
241
|
+
}, {});
|
|
242
|
+
// Calculate progress
|
|
243
|
+
const done = tickFile.tasks.filter((t) => t.status === "done").length;
|
|
244
|
+
const total = tickFile.tasks.length;
|
|
245
|
+
const percentage = total > 0 ? Math.round((done / total) * 100) : 0;
|
|
246
|
+
return {
|
|
247
|
+
content: [
|
|
248
|
+
{
|
|
249
|
+
type: "text",
|
|
250
|
+
text: JSON.stringify({
|
|
251
|
+
project: tickFile.meta.project,
|
|
252
|
+
updated: tickFile.meta.updated,
|
|
253
|
+
agents: tickFile.agents.map((a) => ({
|
|
254
|
+
name: a.name,
|
|
255
|
+
type: a.type,
|
|
256
|
+
status: a.status,
|
|
257
|
+
roles: a.roles,
|
|
258
|
+
working_on: a.working_on,
|
|
259
|
+
})),
|
|
260
|
+
tasks: {
|
|
261
|
+
total,
|
|
262
|
+
done,
|
|
263
|
+
percentage,
|
|
264
|
+
by_status: Object.entries(tasksByStatus).map(([status, tasks]) => ({
|
|
265
|
+
status,
|
|
266
|
+
count: tasks.length,
|
|
267
|
+
tasks: tasks.map((t) => ({
|
|
268
|
+
id: t.id,
|
|
269
|
+
title: t.title,
|
|
270
|
+
priority: t.priority,
|
|
271
|
+
assigned_to: t.assigned_to,
|
|
272
|
+
claimed_by: t.claimed_by,
|
|
273
|
+
})),
|
|
274
|
+
})),
|
|
275
|
+
},
|
|
276
|
+
}, null, 2),
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
case "tick_add": {
|
|
282
|
+
checkTickFile();
|
|
283
|
+
const { title, priority = "medium", tags = [], assignedTo, description, dependsOn = [], estimatedHours, } = args;
|
|
284
|
+
// Capture stdout to get task ID
|
|
285
|
+
let taskId = "";
|
|
286
|
+
const originalLog = console.log;
|
|
287
|
+
console.log = (msg) => {
|
|
288
|
+
if (msg.includes("Created TASK-")) {
|
|
289
|
+
const match = msg.match(/TASK-\d+/);
|
|
290
|
+
if (match)
|
|
291
|
+
taskId = match[0];
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
await addCommand(title, {
|
|
295
|
+
priority: priority,
|
|
296
|
+
tags,
|
|
297
|
+
assignedTo,
|
|
298
|
+
description,
|
|
299
|
+
dependsOn,
|
|
300
|
+
estimatedHours,
|
|
301
|
+
});
|
|
302
|
+
console.log = originalLog;
|
|
303
|
+
return {
|
|
304
|
+
content: [
|
|
305
|
+
{
|
|
306
|
+
type: "text",
|
|
307
|
+
text: `Created task ${taskId}: ${title}`,
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
case "tick_claim": {
|
|
313
|
+
checkTickFile();
|
|
314
|
+
const { taskId, agent } = args;
|
|
315
|
+
await claimCommand(taskId, agent);
|
|
316
|
+
return {
|
|
317
|
+
content: [
|
|
318
|
+
{
|
|
319
|
+
type: "text",
|
|
320
|
+
text: `Task ${taskId} claimed by ${agent}`,
|
|
321
|
+
},
|
|
322
|
+
],
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
case "tick_release": {
|
|
326
|
+
checkTickFile();
|
|
327
|
+
const { taskId, agent } = args;
|
|
328
|
+
await releaseCommand(taskId, agent);
|
|
329
|
+
return {
|
|
330
|
+
content: [
|
|
331
|
+
{
|
|
332
|
+
type: "text",
|
|
333
|
+
text: `Task ${taskId} released by ${agent}`,
|
|
334
|
+
},
|
|
335
|
+
],
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
case "tick_done": {
|
|
339
|
+
checkTickFile();
|
|
340
|
+
const { taskId, agent } = args;
|
|
341
|
+
await doneCommand(taskId, agent);
|
|
342
|
+
return {
|
|
343
|
+
content: [
|
|
344
|
+
{
|
|
345
|
+
type: "text",
|
|
346
|
+
text: `Task ${taskId} completed by ${agent}`,
|
|
347
|
+
},
|
|
348
|
+
],
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
case "tick_comment": {
|
|
352
|
+
checkTickFile();
|
|
353
|
+
const { taskId, agent, note } = args;
|
|
354
|
+
await commentCommand(taskId, agent, note);
|
|
355
|
+
return {
|
|
356
|
+
content: [
|
|
357
|
+
{
|
|
358
|
+
type: "text",
|
|
359
|
+
text: `Added comment to ${taskId}`,
|
|
360
|
+
},
|
|
361
|
+
],
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
case "tick_validate": {
|
|
365
|
+
checkTickFile();
|
|
366
|
+
const content = fs.readFileSync("TICK.md", "utf-8");
|
|
367
|
+
const tickFile = parseTickFile(content);
|
|
368
|
+
const result = validateTickFile(tickFile);
|
|
369
|
+
return {
|
|
370
|
+
content: [
|
|
371
|
+
{
|
|
372
|
+
type: "text",
|
|
373
|
+
text: JSON.stringify({
|
|
374
|
+
valid: result.valid,
|
|
375
|
+
errors: result.errors,
|
|
376
|
+
warnings: result.warnings,
|
|
377
|
+
summary: {
|
|
378
|
+
tasks_validated: tickFile.tasks.length,
|
|
379
|
+
agents_registered: tickFile.agents.length,
|
|
380
|
+
},
|
|
381
|
+
}, null, 2),
|
|
382
|
+
},
|
|
383
|
+
],
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
case "tick_agent_list": {
|
|
387
|
+
checkTickFile();
|
|
388
|
+
const content = fs.readFileSync("TICK.md", "utf-8");
|
|
389
|
+
const tickFile = parseTickFile(content);
|
|
390
|
+
let agents = tickFile.agents;
|
|
391
|
+
const { status, type } = args || {};
|
|
392
|
+
if (status) {
|
|
393
|
+
agents = agents.filter((a) => a.status === status);
|
|
394
|
+
}
|
|
395
|
+
if (type) {
|
|
396
|
+
agents = agents.filter((a) => a.type === type);
|
|
397
|
+
}
|
|
398
|
+
return {
|
|
399
|
+
content: [
|
|
400
|
+
{
|
|
401
|
+
type: "text",
|
|
402
|
+
text: JSON.stringify({
|
|
403
|
+
agents: agents.map((a) => ({
|
|
404
|
+
name: a.name,
|
|
405
|
+
type: a.type,
|
|
406
|
+
status: a.status,
|
|
407
|
+
roles: a.roles,
|
|
408
|
+
working_on: a.working_on,
|
|
409
|
+
trust_level: a.trust_level,
|
|
410
|
+
})),
|
|
411
|
+
}, null, 2),
|
|
412
|
+
},
|
|
413
|
+
],
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
case "tick_agent_register": {
|
|
417
|
+
checkTickFile();
|
|
418
|
+
const { name, type = "human", roles = ["developer"], status = "idle" } = args;
|
|
419
|
+
// Suppress console output
|
|
420
|
+
const originalLog = console.log;
|
|
421
|
+
const originalError = console.error;
|
|
422
|
+
console.log = () => { };
|
|
423
|
+
console.error = () => { };
|
|
424
|
+
await registerAgentCommand(name, {
|
|
425
|
+
type,
|
|
426
|
+
roles,
|
|
427
|
+
status,
|
|
428
|
+
});
|
|
429
|
+
console.log = originalLog;
|
|
430
|
+
console.error = originalError;
|
|
431
|
+
return {
|
|
432
|
+
content: [
|
|
433
|
+
{
|
|
434
|
+
type: "text",
|
|
435
|
+
text: `Agent ${name} registered (type: ${type}, roles: ${roles.join(", ")})`,
|
|
436
|
+
},
|
|
437
|
+
],
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
default:
|
|
441
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
return {
|
|
446
|
+
content: [
|
|
447
|
+
{
|
|
448
|
+
type: "text",
|
|
449
|
+
text: `Error: ${error.message}`,
|
|
450
|
+
},
|
|
451
|
+
],
|
|
452
|
+
isError: true,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
// Start server
|
|
457
|
+
async function main() {
|
|
458
|
+
const transport = new StdioServerTransport();
|
|
459
|
+
await server.connect(transport);
|
|
460
|
+
console.error("Tick MCP server running on stdio");
|
|
461
|
+
}
|
|
462
|
+
main().catch((error) => {
|
|
463
|
+
console.error("Server error:", error);
|
|
464
|
+
process.exit(1);
|
|
465
|
+
});
|
|
466
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tick-mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Model Context Protocol server for Tick.md - enables AI agents to coordinate tasks programmatically",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"tick-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mcp",
|
|
18
|
+
"model-context-protocol",
|
|
19
|
+
"tick",
|
|
20
|
+
"multi-agent",
|
|
21
|
+
"coordination",
|
|
22
|
+
"task-management",
|
|
23
|
+
"ai-agents",
|
|
24
|
+
"automation",
|
|
25
|
+
"claude",
|
|
26
|
+
"cursor"
|
|
27
|
+
],
|
|
28
|
+
"author": "Purple Horizons",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/Purple-Horizons/tick-md.git",
|
|
33
|
+
"directory": "mcp"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/Purple-Horizons/tick-md#readme",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/Purple-Horizons/tick-md/issues"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
41
|
+
"chalk": "^5.3.0",
|
|
42
|
+
"gray-matter": "^4.0.3",
|
|
43
|
+
"yaml": "^2.3.4"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^20.10.0",
|
|
47
|
+
"typescript": "^5.3.3"
|
|
48
|
+
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=18.0.0"
|
|
51
|
+
},
|
|
52
|
+
"files": [
|
|
53
|
+
"dist/**/*",
|
|
54
|
+
"README.md"
|
|
55
|
+
]
|
|
56
|
+
}
|