@miragon/design-iq-mcp 5.4.0 → 5.6.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 +4 -3
- package/dist/http.js +1 -1
- package/dist/server.js +1 -1
- package/dist/{tools-Dtk-I0bV.js → tools-BdyXTS1w.js} +29 -27
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# @miragon/design-iq-mcp
|
|
2
2
|
|
|
3
|
-
designIQ's read-only MCP server: it exposes the models of a designIQ content repo
|
|
4
|
-
(
|
|
5
|
-
|
|
3
|
+
designIQ's read-only MCP server: it exposes the models of a designIQ content repo to any MCP
|
|
4
|
+
client (Claude Code, Claude Desktop, IDEs, ...): processes (BPMN), decisions (DMN), Wardley
|
|
5
|
+
Maps, Team Topologies, Event Storming boards, Context Maps, Value Chains and Markdown
|
|
6
|
+
documents, their diagrams as `mermaid` fences. A
|
|
6
7
|
content repo is a root `designiq.yml` naming its models folder (`models:`, legacy alias
|
|
7
8
|
`processes:`; the legacy file name `bpmiq.yml` is still read); a model IS a file with a
|
|
8
9
|
registered notation extension there (a process its `.bpmn`). Views are **derived from the
|
package/dist/http.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as createMcpServer, r as todosConfigFromEnv, t as DEFAULT_ROOT } from "./tools-
|
|
2
|
+
import { n as createMcpServer, r as todosConfigFromEnv, t as DEFAULT_ROOT } from "./tools-BdyXTS1w.js";
|
|
3
3
|
import { createServer } from "node:http";
|
|
4
4
|
import { timingSafeEqual } from "node:crypto";
|
|
5
5
|
import { NodeStreamableHTTPServerTransport } from "@modelcontextprotocol/node";
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as createMcpServer, r as todosConfigFromEnv, t as DEFAULT_ROOT } from "./tools-
|
|
2
|
+
import { n as createMcpServer, r as todosConfigFromEnv, t as DEFAULT_ROOT } from "./tools-BdyXTS1w.js";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { StdioServerTransport } from "@modelcontextprotocol/server/stdio";
|
|
@@ -178,18 +178,6 @@ const NOTATIONS = [
|
|
|
178
178
|
mediaKind: "markdown",
|
|
179
179
|
docShape: "text",
|
|
180
180
|
monacoLanguage: "markdown"
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
id: "mermaid",
|
|
184
|
-
label: "Mermaid",
|
|
185
|
-
noun: {
|
|
186
|
-
singular: "diagram",
|
|
187
|
-
plural: "diagrams"
|
|
188
|
-
},
|
|
189
|
-
extensions: [".mmd", ".mermaid"],
|
|
190
|
-
mediaKind: "dsl",
|
|
191
|
-
docShape: "text",
|
|
192
|
-
monacoLanguage: "plaintext"
|
|
193
181
|
}
|
|
194
182
|
];
|
|
195
183
|
function byId(id) {
|
|
@@ -552,20 +540,23 @@ function extractWardley(raw) {
|
|
|
552
540
|
}
|
|
553
541
|
function extractTeamTopology(raw) {
|
|
554
542
|
const data = JSON.parse(raw);
|
|
543
|
+
const list = (v) => Array.isArray(v) ? v : [];
|
|
544
|
+
const teams = list(data.nodes).map((n) => ({
|
|
545
|
+
id: n.id,
|
|
546
|
+
type: n.type ?? "team",
|
|
547
|
+
name: n.label ?? n.name,
|
|
548
|
+
extra: n.description ? { description: n.description } : void 0
|
|
549
|
+
}));
|
|
550
|
+
const interactions = list(data.interactions).filter((i) => i !== null && typeof i === "object" && "position" in i && "size" in i).map((i) => ({
|
|
551
|
+
id: i.id,
|
|
552
|
+
type: "interaction",
|
|
553
|
+
name: i.label,
|
|
554
|
+
extra: { mode: i.mode }
|
|
555
|
+
}));
|
|
555
556
|
return {
|
|
556
557
|
notation: "team-topology",
|
|
557
|
-
nodes:
|
|
558
|
-
|
|
559
|
-
type: n.type ?? "team",
|
|
560
|
-
name: n.label ?? n.name,
|
|
561
|
-
extra: n.description ? { description: n.description } : void 0
|
|
562
|
-
})),
|
|
563
|
-
edges: (data.edges ?? []).map((e, i) => ({
|
|
564
|
-
id: e.id ?? `edge-${i}`,
|
|
565
|
-
from: e.source ?? e.from,
|
|
566
|
-
to: e.target ?? e.to,
|
|
567
|
-
kind: e.interaction ?? e.type ?? "interaction"
|
|
568
|
-
}))
|
|
558
|
+
nodes: [...teams, ...interactions],
|
|
559
|
+
edges: []
|
|
569
560
|
};
|
|
570
561
|
}
|
|
571
562
|
const STORM_ID_PREFIX = {
|
|
@@ -816,7 +807,7 @@ function extractValueChain(raw) {
|
|
|
816
807
|
nodes: (data.elements ?? []).map((el) => ({
|
|
817
808
|
id: el.id,
|
|
818
809
|
type: el.elementType ?? "element",
|
|
819
|
-
name: el.
|
|
810
|
+
name: el.name
|
|
820
811
|
})),
|
|
821
812
|
edges: (data.connections ?? []).map((c, i) => ({
|
|
822
813
|
id: c.id ?? `conn-${i}`,
|
|
@@ -1122,6 +1113,15 @@ const READ = {
|
|
|
1122
1113
|
readOnlyHint: true,
|
|
1123
1114
|
openWorldHint: false
|
|
1124
1115
|
};
|
|
1116
|
+
/**
|
|
1117
|
+
* Where a diagram goes: ONE text in both servers' instructions (the Live
|
|
1118
|
+
* Host's and the read-only server's), so the two never steer an assistant two
|
|
1119
|
+
* ways. A Mermaid diagram is a fence in a Markdown document; a process, a
|
|
1120
|
+
* decision or a model of any other notation is a model of its own (the
|
|
1121
|
+
* instructions list the notations just before this). It names no tool, so it
|
|
1122
|
+
* holds in every mode the instructions' drift tests run.
|
|
1123
|
+
*/
|
|
1124
|
+
const DIAGRAMS_IN_DOCUMENTS = "A Mermaid diagram (a diagram as code) goes into a Markdown document as a ```mermaid fence, next to the prose that explains it, never into a file of its own. A process, a decision, a Wardley Map or a model in any other notation above is a model of its own: link it from the document when the repository holds it (a relative link such as [Order to cash](order-to-cash.bpmn)), create it as a model when it does not, and never redraw it in Mermaid.";
|
|
1125
1125
|
//#endregion
|
|
1126
1126
|
//#region ../notations/derive.ts
|
|
1127
1127
|
/**
|
|
@@ -1359,9 +1359,10 @@ const DERIVERS = {
|
|
|
1359
1359
|
};
|
|
1360
1360
|
},
|
|
1361
1361
|
"team-topology": (graph) => {
|
|
1362
|
+
const interactions = graph.nodes.filter((n) => n.type === "interaction").length;
|
|
1362
1363
|
const stats = {
|
|
1363
|
-
teams: graph.nodes.length,
|
|
1364
|
-
interactions
|
|
1364
|
+
teams: graph.nodes.length - interactions,
|
|
1365
|
+
interactions
|
|
1365
1366
|
};
|
|
1366
1367
|
return {
|
|
1367
1368
|
notation: "team-topology",
|
|
@@ -1603,6 +1604,7 @@ function readOnlyInstructions(on) {
|
|
|
1603
1604
|
return [
|
|
1604
1605
|
"designIQ is a Git-native workspace where teams model their business and their architecture together, live; this server reads one checkout of such a repository and never writes.",
|
|
1605
1606
|
`The repository keeps its models as files under the folder its designiq.yml names, one model per file with the file stem as its id, in these notations: ${NOTATION_FILES}.`,
|
|
1607
|
+
DIAGRAMS_IN_DOCUMENTS,
|
|
1606
1608
|
"Start with `list_models` to see which models it holds.",
|
|
1607
1609
|
"These tools are notation-neutral: `get_view` (the derived structure), `get_model` (the raw graph of nodes and edges), `enumerate_paths` and `find_cycles` (flow analysis where the notation has flow semantics) and `which_models_use` (which models reference a given one).",
|
|
1608
1610
|
"BPMN has deeper tooling: `list_processes`, `get_process` (the derived process view: roles, steps, flow, sub-process calls), `who_owns` (ownership from lanes) and `which_processes_use`" + (on.todos ? "; `list_todos` lists the open todos anchored to processes." : "."),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miragon/design-iq-mcp",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.6.0",
|
|
4
4
|
"description": "Read-only MCP server exposing a designIQ content repo's models — BPMN processes, DMN decisions, Wardley Maps, Team Topologies, Event Storming boards, Context Maps and more — to any MCP client. Discovered from designiq.yml, views derived from the models.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@modelcontextprotocol/client": "2.3.1",
|
|
51
51
|
"tsdown": "0.23.1",
|
|
52
|
-
"@designiq/github-app": "0.1.0",
|
|
53
52
|
"@designiq/contracts": "0.1.0",
|
|
54
53
|
"@designiq/http-kit": "0.1.0",
|
|
55
54
|
"@designiq/mcp-kit": "0.1.0",
|
|
55
|
+
"@designiq/github-app": "0.1.0",
|
|
56
56
|
"@designiq/notations": "0.1.0"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|