@sudocode-ai/mcp 0.1.0 → 0.1.2

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/dist/server.js ADDED
@@ -0,0 +1,575 @@
1
+ /**
2
+ * MCP Server for sudocode
3
+ *
4
+ * This module sets up the MCP server with tools and resources.
5
+ */
6
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
7
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
9
+ import { SudocodeClient } from "./client.js";
10
+ import * as issueTools from "./tools/issues.js";
11
+ import * as specTools from "./tools/specs.js";
12
+ import * as relationshipTools from "./tools/relationships.js";
13
+ import * as feedbackTools from "./tools/feedback.js";
14
+ import * as referenceTools from "./tools/references.js";
15
+ import { existsSync } from "fs";
16
+ import { join } from "path";
17
+ export class SudocodeMCPServer {
18
+ server;
19
+ client;
20
+ config;
21
+ isInitialized = false;
22
+ constructor(config) {
23
+ this.config = config || {};
24
+ this.server = new Server({
25
+ name: "sudocode",
26
+ version: "0.1.1",
27
+ }, {
28
+ capabilities: {
29
+ tools: {},
30
+ resources: {},
31
+ },
32
+ });
33
+ this.client = new SudocodeClient(config);
34
+ this.setupHandlers();
35
+ }
36
+ setupHandlers() {
37
+ // List available tools
38
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
39
+ return {
40
+ tools: [
41
+ {
42
+ name: "ready",
43
+ description: "Find issues ready to work on (no blockers) and gets project status.",
44
+ inputSchema: {
45
+ type: "object",
46
+ properties: {},
47
+ },
48
+ },
49
+ {
50
+ name: "list_issues",
51
+ description: "List all issues with optional filters",
52
+ inputSchema: {
53
+ type: "object",
54
+ properties: {
55
+ status: {
56
+ type: "string",
57
+ enum: ["open", "in_progress", "blocked", "closed"],
58
+ description: "Filter by status (optional)",
59
+ },
60
+ priority: {
61
+ type: "number",
62
+ description: "Filter by priority (0-4) (optional)",
63
+ },
64
+ archived: {
65
+ type: "boolean",
66
+ description: "Filter by archived status (optional, defaults to false to exclude archived)",
67
+ },
68
+ limit: {
69
+ type: "number",
70
+ description: "Max results (optional)",
71
+ default: 50,
72
+ },
73
+ search: {
74
+ type: "string",
75
+ description: "Search issues by title or description (optional)",
76
+ },
77
+ },
78
+ },
79
+ },
80
+ {
81
+ name: "show_issue",
82
+ description: "Show detailed issue information including relationships and feedback",
83
+ inputSchema: {
84
+ type: "object",
85
+ properties: {
86
+ issue_id: {
87
+ type: "string",
88
+ description: 'Issue ID (e.g., "ISSUE-001")',
89
+ },
90
+ },
91
+ required: ["issue_id"],
92
+ },
93
+ },
94
+ {
95
+ name: "upsert_issue",
96
+ description: "Create or update an issue. If issue_id is provided, updates the issue; otherwise creates a new one. To close an issue, set status='closed'. To archive an issue, set archived=true.",
97
+ inputSchema: {
98
+ type: "object",
99
+ properties: {
100
+ issue_id: {
101
+ type: "string",
102
+ description: "Issue ID (optional - if provided, updates the issue; if not, creates new)",
103
+ },
104
+ title: {
105
+ type: "string",
106
+ description: "Issue title (required for create, optional for update)",
107
+ },
108
+ description: {
109
+ type: "string",
110
+ description: "Issue descriptions. Supports inline references to other specs/issues by ID in Obsidian internal link format (e.g. `[[SPEC-002]]`).",
111
+ },
112
+ priority: {
113
+ type: "number",
114
+ description: "Priority (0-4, 0=highest) (optional)",
115
+ },
116
+ parent: {
117
+ type: "string",
118
+ description: "Parent issue ID (optional)",
119
+ },
120
+ tags: {
121
+ type: "array",
122
+ items: { type: "string" },
123
+ description: "Tags (optional)",
124
+ },
125
+ status: {
126
+ type: "string",
127
+ enum: ["open", "in_progress", "blocked", "closed"],
128
+ description: "Issue status (optional)",
129
+ },
130
+ archived: {
131
+ type: "boolean",
132
+ description: "Archive status (optional)",
133
+ },
134
+ },
135
+ },
136
+ },
137
+ {
138
+ name: "list_specs",
139
+ description: "List all specs with optional filters",
140
+ inputSchema: {
141
+ type: "object",
142
+ properties: {
143
+ limit: {
144
+ type: "number",
145
+ description: "Max results (optional)",
146
+ default: 50,
147
+ },
148
+ search: {
149
+ type: "string",
150
+ description: "Search specs by title or description (optional)",
151
+ },
152
+ },
153
+ },
154
+ },
155
+ {
156
+ name: "show_spec",
157
+ description: "Show detailed spec information including all feedback anchored to the spec",
158
+ inputSchema: {
159
+ type: "object",
160
+ properties: {
161
+ spec_id: {
162
+ type: "string",
163
+ description: 'Spec ID (e.g., "SPEC-001")',
164
+ },
165
+ },
166
+ required: ["spec_id"],
167
+ },
168
+ },
169
+ {
170
+ name: "upsert_spec",
171
+ description: "Create a new spec (update not yet supported in CLI)",
172
+ inputSchema: {
173
+ type: "object",
174
+ properties: {
175
+ spec_id: {
176
+ type: "string",
177
+ description: "Spec ID (optional - if provided, updates the spec; if not, creates new)",
178
+ },
179
+ title: {
180
+ type: "string",
181
+ description: "Spec title (required for create)",
182
+ },
183
+ priority: {
184
+ type: "number",
185
+ description: "Priority (0-4, 0=highest) (optional)",
186
+ },
187
+ description: {
188
+ type: "string",
189
+ description: "Spec description (optional)",
190
+ },
191
+ parent: {
192
+ type: "string",
193
+ description: "Parent spec ID (optional)",
194
+ },
195
+ tags: {
196
+ type: "array",
197
+ items: { type: "string" },
198
+ description: "Tags (optional)",
199
+ },
200
+ },
201
+ },
202
+ },
203
+ {
204
+ name: "link",
205
+ description: "Create a relationship between two entities (specs or issues)",
206
+ inputSchema: {
207
+ type: "object",
208
+ properties: {
209
+ from_id: {
210
+ type: "string",
211
+ description: "Source entity ID",
212
+ },
213
+ to_id: {
214
+ type: "string",
215
+ description: "Target entity ID",
216
+ },
217
+ type: {
218
+ type: "string",
219
+ enum: [
220
+ "blocks",
221
+ "implements",
222
+ "references",
223
+ "depends-on",
224
+ "discovered-from",
225
+ "related",
226
+ ],
227
+ description: "Relationship type",
228
+ },
229
+ },
230
+ required: ["from_id", "to_id"],
231
+ },
232
+ },
233
+ {
234
+ name: "add_reference",
235
+ description: "Add an inline cross-reference/mention to a spec or issue using Obsidian-style [[ID]] syntax. References are inserted at a specific location in the markdown content. Use this to add references to an issue or spec without having to modify the content directly.",
236
+ inputSchema: {
237
+ type: "object",
238
+ properties: {
239
+ entity_id: {
240
+ type: "string",
241
+ description: "Target entity ID (where to add the reference)",
242
+ },
243
+ reference_id: {
244
+ type: "string",
245
+ description: "ID to reference (e.g., ISSUE-001, SPEC-002)",
246
+ },
247
+ display_text: {
248
+ type: "string",
249
+ description: "Display text (optional)",
250
+ },
251
+ relationship_type: {
252
+ type: "string",
253
+ enum: [
254
+ "blocks",
255
+ "implements",
256
+ "references",
257
+ "depends-on",
258
+ "discovered-from",
259
+ "related",
260
+ ],
261
+ description: "Relationship type (optional)",
262
+ },
263
+ line: {
264
+ type: "number",
265
+ description: "Line number to insert reference (use line OR text, not both)",
266
+ },
267
+ text: {
268
+ type: "string",
269
+ description: "Text to search for insertion point (use line OR text, not both)",
270
+ },
271
+ format: {
272
+ type: "string",
273
+ enum: ["inline", "newline"],
274
+ description: "Format: inline (same line) or newline (new line)",
275
+ default: "inline",
276
+ },
277
+ // TODO: Add position handling later if needed.
278
+ },
279
+ required: ["entity_id", "reference_id"],
280
+ },
281
+ },
282
+ {
283
+ name: "add_feedback",
284
+ description: "Provide anchored feedback to a spec. IMPORTANT: You MUST specify either 'line' OR 'text' to anchor the feedback to a specific location in the spec. ",
285
+ inputSchema: {
286
+ type: "object",
287
+ properties: {
288
+ issue_id: {
289
+ type: "string",
290
+ description: "Issue ID providing feedback (required for create)",
291
+ },
292
+ spec_id: {
293
+ type: "string",
294
+ description: "Spec ID receiving feedback (required for create)",
295
+ },
296
+ content: {
297
+ type: "string",
298
+ description: "Feedback content (required for create)",
299
+ },
300
+ type: {
301
+ type: "string",
302
+ enum: ["comment", "suggestion", "request"],
303
+ description: "Feedback type",
304
+ },
305
+ line: {
306
+ type: "number",
307
+ description: "Line number to anchor feedback (REQUIRED: must use either 'line' OR 'text', not both). Use this if you know the exact line number in the spec markdown file.",
308
+ },
309
+ text: {
310
+ type: "string",
311
+ description: "Text snippet to anchor feedback (REQUIRED: must use either 'line' OR 'text', not both). Must be an EXACT substring match from the spec content - case-sensitive and whitespace-sensitive. Use show_spec first to see the exact content and copy the text precisely.",
312
+ },
313
+ // TODO: Re-enable when the agent data structure is more developed.
314
+ // agent: {
315
+ // type: "string",
316
+ // description: "Agent providing feedback",
317
+ // },
318
+ },
319
+ },
320
+ },
321
+ ],
322
+ };
323
+ });
324
+ // Handle tool calls
325
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
326
+ const { name, arguments: args } = request.params;
327
+ if (!this.isInitialized) {
328
+ const workingDir = this.client["workingDir"] || process.cwd();
329
+ return {
330
+ content: [
331
+ {
332
+ type: "text",
333
+ text: `⚠️ sudocode is not initialized in this directory.\n\nWorking directory: ${workingDir}\n\nPlease run 'sudocode init' in your project root first.`,
334
+ },
335
+ ],
336
+ isError: true,
337
+ };
338
+ }
339
+ try {
340
+ let result;
341
+ switch (name) {
342
+ case "ready":
343
+ result = await issueTools.ready(this.client, args);
344
+ break;
345
+ case "list_issues":
346
+ result = await issueTools.listIssues(this.client, args);
347
+ break;
348
+ case "show_issue":
349
+ result = await issueTools.showIssue(this.client, args);
350
+ break;
351
+ case "upsert_issue":
352
+ result = await issueTools.upsertIssue(this.client, args);
353
+ break;
354
+ case "list_specs":
355
+ result = await specTools.listSpecs(this.client, args);
356
+ break;
357
+ case "show_spec":
358
+ result = await specTools.showSpec(this.client, args);
359
+ break;
360
+ case "upsert_spec":
361
+ result = await specTools.upsertSpec(this.client, args);
362
+ break;
363
+ case "link":
364
+ result = await relationshipTools.link(this.client, args);
365
+ break;
366
+ case "add_reference":
367
+ result = await referenceTools.addReference(this.client, args);
368
+ break;
369
+ case "add_feedback":
370
+ result = await feedbackTools.addFeedback(this.client, args);
371
+ break;
372
+ default:
373
+ throw new Error(`Unknown tool: ${name}`);
374
+ }
375
+ return {
376
+ content: [
377
+ {
378
+ type: "text",
379
+ text: JSON.stringify(result, null, 2),
380
+ },
381
+ ],
382
+ };
383
+ }
384
+ catch (error) {
385
+ let errorText = `Error: ${error instanceof Error ? error.message : String(error)}`;
386
+ // Include stderr if this is a sudocode error
387
+ if (error instanceof Error && "stderr" in error && error.stderr) {
388
+ errorText += `\n\nStderr:\n${error.stderr}`;
389
+ }
390
+ return {
391
+ content: [
392
+ {
393
+ type: "text",
394
+ text: errorText,
395
+ },
396
+ ],
397
+ isError: true,
398
+ };
399
+ }
400
+ });
401
+ // List available resources
402
+ this.server.setRequestHandler(ListResourcesRequestSchema, async () => {
403
+ return {
404
+ resources: [
405
+ {
406
+ uri: "sudocode://quickstart",
407
+ name: "sudocode Quickstart Guide",
408
+ description: "Introduction to sudocode workflow and best practices for agents",
409
+ mimeType: "text/markdown",
410
+ },
411
+ ],
412
+ };
413
+ });
414
+ // Read resource content
415
+ this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
416
+ const { uri } = request.params;
417
+ if (uri === "sudocode://quickstart") {
418
+ return {
419
+ contents: [
420
+ {
421
+ uri,
422
+ mimeType: "text/markdown",
423
+ text: `# sudocode Quickstart
424
+
425
+ sudocode is a git-native spec and issue management system designed for AI-assisted development.
426
+
427
+ ## Core Concepts
428
+
429
+ **Specs**: Technical specifications stored as markdown files
430
+ - Types: architecture, api, database, feature, research
431
+ - Status: draft → review → approved → deprecated
432
+ - Each spec has a unique ID (e.g., SPEC-001) and file path
433
+
434
+ **Issues**: Work items tracked in the database
435
+ - Types: bug, feature, task, epic, chore
436
+ - Status: open → in_progress → blocked → closed
437
+ - Can reference and implement specs
438
+
439
+ **Feedback**: Issues can provide anchored feedback on specs
440
+ - Anchors track specific lines/sections in spec markdown
441
+ - Auto-relocates when specs change (smart anchoring)
442
+ - Types: comment, suggestion, request
443
+
444
+ ## Typical Workflow
445
+
446
+ 1. **Check ready work**: \`ready\` tool to find tasks with no blockers
447
+ 2. **Claim work**: \`update_issue\` with status=in_progress
448
+ 3. **Review specs**: \`show_spec\` to understand requirements
449
+ 4. **Provide feedback**: \`add_feedback\` when specs are unclear
450
+ 5. **Complete work**: \`close_issue\` when done
451
+ 6. **Link entities**: Use \`link\` to create relationships
452
+
453
+ ## Relationship Types
454
+ - \`blocks\`: Hard blocker (to_id must complete before from_id)
455
+ - \`implements\`: Issue implements a spec
456
+ - \`references\`: Soft reference
457
+ - \`depends-on\`: General dependency
458
+ - \`discovered-from\`: New work found during implementation
459
+ - \`related\`: General relationship
460
+ `,
461
+ },
462
+ ],
463
+ };
464
+ }
465
+ throw new Error(`Unknown resource: ${uri}`);
466
+ });
467
+ }
468
+ /**
469
+ * Check for .sudocode directory and required files
470
+ * Returns initialization status and handles auto-import if needed
471
+ */
472
+ async checkForInit() {
473
+ const workingDir = this.client["workingDir"] || process.cwd();
474
+ const sudocodeDir = join(workingDir, ".sudocode");
475
+ const cacheDbPath = join(sudocodeDir, "cache.db");
476
+ const issuesPath = join(sudocodeDir, "issues.jsonl");
477
+ const specsPath = join(sudocodeDir, "specs.jsonl");
478
+ // Check if .sudocode directory exists
479
+ if (!existsSync(sudocodeDir)) {
480
+ return {
481
+ initialized: false,
482
+ sudocodeExists: false,
483
+ message: "No .sudocode directory found",
484
+ };
485
+ }
486
+ // .sudocode exists, check for cache.db
487
+ if (!existsSync(cacheDbPath)) {
488
+ // Try to auto-import from JSONL files if they exist
489
+ if (existsSync(issuesPath) || existsSync(specsPath)) {
490
+ try {
491
+ console.error("Found .sudocode directory but no cache.db, running import...");
492
+ await this.client.exec(["import"]);
493
+ console.error("✓ Successfully imported data to cache.db");
494
+ return {
495
+ initialized: true,
496
+ sudocodeExists: true,
497
+ message: "Auto-imported from JSONL files",
498
+ };
499
+ }
500
+ catch (error) {
501
+ return {
502
+ initialized: false,
503
+ sudocodeExists: true,
504
+ message: `Failed to import: ${error instanceof Error ? error.message : String(error)}`,
505
+ };
506
+ }
507
+ }
508
+ else {
509
+ try {
510
+ console.error("Found .sudocode directory but no issues.jsonl or specs.jsonl, running init...");
511
+ await this.client.exec(["init"]);
512
+ console.error("✓ Successfully initialized sudocode");
513
+ await this.client.exec(["import"]);
514
+ return {
515
+ initialized: true,
516
+ sudocodeExists: true,
517
+ message: "Initialized sudocode",
518
+ };
519
+ }
520
+ catch (error) {
521
+ return {
522
+ initialized: false,
523
+ sudocodeExists: true,
524
+ message: `Failed to initialize: ${error instanceof Error ? error.message : String(error)}`,
525
+ };
526
+ }
527
+ }
528
+ }
529
+ return {
530
+ initialized: true,
531
+ sudocodeExists: true,
532
+ };
533
+ }
534
+ /**
535
+ * Check if sudocode is initialized in the working directory
536
+ * This provides early warning to users without blocking server startup
537
+ */
538
+ async checkInitialization() {
539
+ const initStatus = await this.checkForInit();
540
+ const workingDir = this.client["workingDir"] || process.cwd();
541
+ if (initStatus.initialized) {
542
+ this.isInitialized = true;
543
+ console.error("✓ sudocode initialized successfully");
544
+ if (initStatus.message) {
545
+ console.error(` ${initStatus.message}`);
546
+ }
547
+ }
548
+ else {
549
+ this.isInitialized = false;
550
+ console.error("");
551
+ console.error("⚠️ WARNING: sudocode is not initialized");
552
+ console.error(` Working directory: ${workingDir}`);
553
+ console.error("");
554
+ if (!initStatus.sudocodeExists) {
555
+ console.error(" No .sudocode directory found.");
556
+ console.error(" To initialize, run:");
557
+ console.error(" $ sudocode init");
558
+ }
559
+ else {
560
+ console.error(` Issue: ${initStatus.message}`);
561
+ console.error(" The .sudocode directory exists but is incomplete.");
562
+ console.error(" Try running:");
563
+ console.error(" $ sudocode import");
564
+ }
565
+ }
566
+ }
567
+ async run() {
568
+ // Check if sudocode is initialized (non-blocking warning)
569
+ await this.checkInitialization();
570
+ const transport = new StdioServerTransport();
571
+ await this.server.connect(transport);
572
+ console.error("sudocode MCP server running on stdio");
573
+ }
574
+ }
575
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * MCP tools for analytics and statistics
3
+ */
4
+ // Tool implementations
5
+ /**
6
+ * Get comprehensive project statistics
7
+ */
8
+ export async function stats(client) {
9
+ return client.exec(["stats"]);
10
+ }
11
+ /**
12
+ * Get quick project status
13
+ */
14
+ export async function status(client, params = {}) {
15
+ const args = ["status"];
16
+ if (params.verbose) {
17
+ args.push("--verbose");
18
+ }
19
+ return client.exec(args);
20
+ }
21
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoCH,uBAAuB;AAEvB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,MAAsB;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAsB,EACtB,SAAuB,EAAE;IAEzB,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * MCP tools for feedback management
3
+ */
4
+ /**
5
+ * Add anchored feedback to a spec
6
+ */
7
+ export async function addFeedback(client, params) {
8
+ const args = ["feedback", "add", params.issue_id, params.spec_id];
9
+ args.push("--content", params.content);
10
+ if (params.type) {
11
+ args.push("--type", params.type);
12
+ }
13
+ if (params.line !== undefined) {
14
+ args.push("--line", params.line.toString());
15
+ }
16
+ if (params.text) {
17
+ args.push("--text", params.text);
18
+ }
19
+ // if (params.agent) {
20
+ // args.push("--agent", params.agent);
21
+ // }
22
+ return client.exec(args);
23
+ }
24
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAsB,EACtB,MAAyB;IAEzB,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAElE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,sBAAsB;IACtB,wCAAwC;IACxC,IAAI;IAEJ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * MCP tool for initialization
3
+ */
4
+ // Tool implementation
5
+ /**
6
+ * Initialize sudocode in the current directory
7
+ */
8
+ export async function init(client, params = {}) {
9
+ const args = ["init"];
10
+ if (params.prefix) {
11
+ args.push("--prefix", params.prefix);
12
+ }
13
+ return client.exec(args);
14
+ }
15
+ //# sourceMappingURL=init.js.map