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 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
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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
+ }