@ign8t/mcp 0.2.0 → 0.3.1
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 +13 -1
- package/dist/index.js +62 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -205,9 +205,21 @@ The MCP server also provides quick access to resources:
|
|
|
205
205
|
| `reject_recommendations` | Reject recommendations | "Reject this duplicate recommendation" |
|
|
206
206
|
| `add_user_persona` | Add or replace a user persona in context | "Add admin operator persona" |
|
|
207
207
|
| `update_success_criteria`| Add or update measurable success criteria | "Add activation-rate target" |
|
|
208
|
+
| `update_context` | Change the tech stack and constraints after you confirm the exact change | "We moved from Firebase to Supabase" |
|
|
208
209
|
| `import_project` | Import the local codebase into project context (28 Sparks) | "Import this codebase into project abc123" |
|
|
209
210
|
|
|
210
|
-
The write tools (`create_task`, `update_task_status`, `accept_recommendations`, `reject_recommendations`, `add_feature_request`, `add_user_persona`, `update_success_criteria`) are free. Only `import_project` costs Sparks.
|
|
211
|
+
The write tools (`create_task`, `update_task_status`, `accept_recommendations`, `reject_recommendations`, `add_feature_request`, `add_user_persona`, `update_success_criteria`, `update_context`) are free. Only `import_project` costs Sparks.
|
|
212
|
+
|
|
213
|
+
### Updating the implementation context
|
|
214
|
+
|
|
215
|
+
`update_context` lets the project owner's AI change what ign8t knows about the implementation: the tech stack and the project constraints. Vision, features, users and success criteria are not writable through it.
|
|
216
|
+
|
|
217
|
+
- Any key already in the project's tech stack can be changed or removed, spelled exactly as stored (`backend` and `Backend` are different keys). A key stored as text takes a new text value; a key stored as a list takes items to add or remove (added values are trimmed, removed values must match the stored text exactly). Constraints work like a list.
|
|
218
|
+
- Besides the stored keys, only `platform`, `framework`, `database` and `ai_models` can be added, as text or as a list. Any other new key is rejected, so the stack doesn't split into near-duplicate keys.
|
|
219
|
+
|
|
220
|
+
- The AI reads the project with `get_project` first, shows you the exact change, and applies it only after you agree. The change is saved immediately and costs no Sparks.
|
|
221
|
+
- All previously generated documents (BRD/PRD/TRD, delivery brief, master spec, task specs) may be marked stale. They are not regenerated automatically, and regenerating them costs Sparks.
|
|
222
|
+
- If the context changed since the AI read it, nothing is saved: the AI reads it again and asks you again.
|
|
211
223
|
|
|
212
224
|
### Importing a local codebase
|
|
213
225
|
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
5
|
import { buildWorkspaceSnapshot } from "./workspace-snapshot.js";
|
|
6
|
-
const VERSION = "0.
|
|
6
|
+
const VERSION = "0.3.1";
|
|
7
7
|
// Parse command line arguments
|
|
8
8
|
function parseArgs() {
|
|
9
9
|
const args = process.argv.slice(2);
|
|
@@ -93,6 +93,12 @@ async function callIgn8tAPI(endpoint, data = {}) {
|
|
|
93
93
|
}
|
|
94
94
|
return response.json();
|
|
95
95
|
}
|
|
96
|
+
// update_context's add/remove of list items, each at most maxLength characters; the
|
|
97
|
+
// 20-operation cap is on the whole patch (see its description).
|
|
98
|
+
const listOps = (maxLength) => {
|
|
99
|
+
const items = { type: "array", items: { type: "string", minLength: 1, maxLength } };
|
|
100
|
+
return { type: "object", properties: { add: items, remove: items }, additionalProperties: false };
|
|
101
|
+
};
|
|
96
102
|
// Define available tools
|
|
97
103
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
98
104
|
return {
|
|
@@ -577,6 +583,58 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
577
583
|
required: ["project_id", "criteria"],
|
|
578
584
|
},
|
|
579
585
|
},
|
|
586
|
+
{
|
|
587
|
+
name: "update_context",
|
|
588
|
+
description: "Change the project's implementation context: tech_stack keys and constraints. Use the tech_stack key names you see in get_project's context.tech_stack, spelled exactly as stored (\"backend\" and \"Backend\" are different keys); besides those, only platform, framework, database and ai_models can be added. Every key follows what is stored: a key stored as text takes a new text value; a key stored as a list takes add/remove items (add values are trimmed; remove values must match the stored text exactly), as do constraints; a key not stored yet takes either. List keys in tech_stack.unset to remove them. Writes immediately and costs zero Sparks. Call get_project first and pass its context.context_version as expected_context_version. Before calling, show the user the exact change and tell them that all previously generated documents (BRD/PRD/TRD, delivery brief, master spec, task specs) may be marked stale, and that regenerating them costs Sparks; set confirmed_with_user to true only after the user agreed. A CONTEXT_CHANGED error means the context changed since you read it: read it again, reconcile, and ask the user again. Vision, features, users and success criteria are not writable here: use add_user_persona, update_success_criteria or add_feature_request.",
|
|
589
|
+
inputSchema: {
|
|
590
|
+
type: "object",
|
|
591
|
+
properties: {
|
|
592
|
+
project_id: {
|
|
593
|
+
type: "string",
|
|
594
|
+
format: "uuid",
|
|
595
|
+
description: "The project ID",
|
|
596
|
+
},
|
|
597
|
+
expected_context_version: {
|
|
598
|
+
type: "integer",
|
|
599
|
+
minimum: 1,
|
|
600
|
+
description: "context.context_version from the get_project call the user's confirmation was based on",
|
|
601
|
+
},
|
|
602
|
+
reason: {
|
|
603
|
+
type: "string",
|
|
604
|
+
minLength: 10,
|
|
605
|
+
maxLength: 500,
|
|
606
|
+
description: "Why this change is needed (e.g., what was discovered while implementing)",
|
|
607
|
+
},
|
|
608
|
+
confirmed_with_user: {
|
|
609
|
+
type: "boolean",
|
|
610
|
+
description: "Must be true, set only after the user saw the exact change and agreed to it; anything else is rejected",
|
|
611
|
+
},
|
|
612
|
+
patch: {
|
|
613
|
+
type: "object",
|
|
614
|
+
description: "At most 20 operations in total (each set, unset, added or removed item counts). A list can grow to at most 50 items, and the tech stack and constraints to at most 12000 characters together.",
|
|
615
|
+
properties: {
|
|
616
|
+
tech_stack: {
|
|
617
|
+
type: "object",
|
|
618
|
+
properties: {
|
|
619
|
+
unset: {
|
|
620
|
+
type: "array",
|
|
621
|
+
items: { type: "string", minLength: 1, maxLength: 60 },
|
|
622
|
+
description: "Keys to remove; a key cannot be both changed and unset",
|
|
623
|
+
},
|
|
624
|
+
},
|
|
625
|
+
additionalProperties: {
|
|
626
|
+
description: "A key already stored in tech_stack, or one of the canonical keys platform, framework, database, ai_models (at most 60 characters): a string of 1-200 characters if it is stored as text, {add, remove} arrays of 1-200 character strings if it is stored as a list, either if it is not stored yet. Other new keys are rejected with UNKNOWN_TECH_STACK_KEY.",
|
|
627
|
+
},
|
|
628
|
+
},
|
|
629
|
+
constraints: listOps(500),
|
|
630
|
+
},
|
|
631
|
+
additionalProperties: false,
|
|
632
|
+
},
|
|
633
|
+
},
|
|
634
|
+
required: ["project_id", "expected_context_version", "reason", "confirmed_with_user", "patch"],
|
|
635
|
+
additionalProperties: false,
|
|
636
|
+
},
|
|
637
|
+
},
|
|
580
638
|
],
|
|
581
639
|
};
|
|
582
640
|
});
|
|
@@ -688,6 +746,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
|
688
746
|
console.error("Success criteria updated successfully");
|
|
689
747
|
break;
|
|
690
748
|
}
|
|
749
|
+
case "update_context":
|
|
750
|
+
result = await callIgn8tAPI("/context/update", args);
|
|
751
|
+
break;
|
|
691
752
|
default:
|
|
692
753
|
throw new Error(`Unknown tool: ${name}`);
|
|
693
754
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ign8t/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "MCP server for ign8t project management - AI IDE integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"mcp": {
|
|
39
39
|
"name": "ign8t-mcp",
|
|
40
40
|
"description": "MCP server for ign8t project management - AI IDE integration",
|
|
41
|
-
"version": "0.
|
|
41
|
+
"version": "0.3.1"
|
|
42
42
|
},
|
|
43
43
|
"author": "nocodecat",
|
|
44
44
|
"license": "MIT",
|