@coral-viz/mcp-server 0.2.3

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/LICENSE ADDED
@@ -0,0 +1,4 @@
1
+ Copyright 2026 Coral contributors
2
+
3
+ Licensed under the Apache License, Version 2.0. You may obtain a copy at
4
+ https://www.apache.org/licenses/LICENSE-2.0
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # @coral-viz/mcp-server 0.2.3
2
+
3
+ General-purpose Coral diagram tools over MCP stdio:
4
+
5
+ - `coral_generate` — heuristic description-to-diagram generation
6
+ - `coral_validate` — shared Coral parser and GraphIR validation
7
+ - `coral_convert` — Coral/Mermaid/DOT/PlantUML import with structured loss diagnostics and strict mode
8
+ - `coral_layout` — recursive ELK geometry with absolute nested-node output
9
+ - `coral_render` — deterministic SVG or standalone HTML; supplied complete positions are preserved
10
+ - `coral_explain` — graph summary
11
+
12
+ ```bash
13
+ npm run build -w @coral-viz/mcp-server
14
+ node packages/mcp-server/dist/index.js
15
+ ```
16
+
17
+ The server reports 0.2.3. Codebase analysis is not provided; Schooner owns that workflow.
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Coral MCP Server
4
+ *
5
+ * Provides tools for diagram generation, validation, and conversion
6
+ * via the Model Context Protocol.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
package/dist/index.js ADDED
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Coral MCP Server
4
+ *
5
+ * Provides tools for diagram generation, validation, and conversion
6
+ * via the Model Context Protocol.
7
+ */
8
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
11
+ import { generateTool, handleGenerate } from "./tools/generate.js";
12
+ import { validateTool, handleValidate } from "./tools/validate.js";
13
+ import { convertTool, handleConvert } from "./tools/convert.js";
14
+ import { explainTool, handleExplain } from "./tools/explain.js";
15
+ import { layoutTool, handleLayout } from "./tools/layout.js";
16
+ import { renderTool, handleRender } from "./tools/render.js";
17
+ const server = new Server({
18
+ name: "coral-mcp-server",
19
+ version: "0.2.3",
20
+ }, {
21
+ capabilities: {
22
+ tools: {},
23
+ },
24
+ });
25
+ // List available tools
26
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
27
+ return {
28
+ tools: [
29
+ generateTool,
30
+ validateTool,
31
+ convertTool,
32
+ layoutTool,
33
+ renderTool,
34
+ explainTool,
35
+ ],
36
+ };
37
+ });
38
+ // Handle tool calls
39
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
40
+ const { name, arguments: args } = request.params;
41
+ try {
42
+ switch (name) {
43
+ case "coral_generate":
44
+ return await handleGenerate(args);
45
+ case "coral_validate":
46
+ return await handleValidate(args);
47
+ case "coral_convert":
48
+ return await handleConvert(args);
49
+ case "coral_explain":
50
+ return await handleExplain(args);
51
+ case "coral_layout":
52
+ return await handleLayout(args);
53
+ case "coral_render":
54
+ return await handleRender(args);
55
+ default:
56
+ return {
57
+ content: [
58
+ {
59
+ type: "text",
60
+ text: `Unknown tool: ${name}`,
61
+ },
62
+ ],
63
+ isError: true,
64
+ };
65
+ }
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : String(error);
69
+ return {
70
+ content: [
71
+ {
72
+ type: "text",
73
+ text: `Error: ${message}`,
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ });
80
+ // Start the server
81
+ async function main() {
82
+ const transport = new StdioServerTransport();
83
+ await server.connect(transport);
84
+ console.error("Coral MCP Server running on stdio");
85
+ }
86
+ main().catch(console.error);
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * coral_convert tool
3
+ *
4
+ * Convert between diagram formats (Mermaid, DOT, PlantUML, Coral).
5
+ */
6
+ import { type Diagnostic } from "@coral-viz/language";
7
+ export declare const convertTool: {
8
+ name: string;
9
+ description: string;
10
+ inputSchema: {
11
+ type: "object";
12
+ properties: {
13
+ content: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ from: {
18
+ type: string;
19
+ enum: string[];
20
+ description: string;
21
+ default: string;
22
+ };
23
+ to: {
24
+ type: string;
25
+ enum: string[];
26
+ description: string;
27
+ default: string;
28
+ };
29
+ strict: {
30
+ type: string;
31
+ description: string;
32
+ default: boolean;
33
+ };
34
+ };
35
+ required: string[];
36
+ };
37
+ };
38
+ /**
39
+ * Detect the source format.
40
+ *
41
+ * One implementation, shared with the rest of the server, rather than the
42
+ * private copy this tool used to keep.
43
+ */
44
+ export declare function detectFormat(source: string): "mermaid" | "dot" | "plantuml" | "coral";
45
+ export declare function handleConvert(args: unknown): Promise<{
46
+ content: {
47
+ type: string;
48
+ text: string;
49
+ }[];
50
+ structuredContent: {
51
+ from: "mermaid" | "dot" | "plantuml" | "coral";
52
+ to: "json" | "coral";
53
+ nodeCount: number;
54
+ edgeCount: number;
55
+ diagnostics: Diagnostic[];
56
+ };
57
+ isError: boolean;
58
+ }>;
59
+ //# sourceMappingURL=convert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/tools/convert.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAOL,KAAK,UAAU,EAEhB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCvB,CAAC;AAUF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAUrF;AA4BD,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;GAsEhD"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * coral_convert tool
3
+ *
4
+ * Convert between diagram formats (Mermaid, DOT, PlantUML, Coral).
5
+ */
6
+ import { z } from "zod";
7
+ import { parse, parseMermaid, parseDot, parsePlantUml, printWithDiagnostics, } from "@coral-viz/language";
8
+ export const convertTool = {
9
+ name: "coral_convert",
10
+ description: "Convert diagrams between formats. Supports Mermaid, Graphviz DOT, PlantUML to Coral, and Coral to other formats.",
11
+ inputSchema: {
12
+ type: "object",
13
+ properties: {
14
+ content: {
15
+ type: "string",
16
+ description: "The diagram content to convert",
17
+ },
18
+ from: {
19
+ type: "string",
20
+ enum: ["mermaid", "dot", "plantuml", "coral", "auto"],
21
+ description: "Source format (use 'auto' to detect)",
22
+ default: "auto",
23
+ },
24
+ to: {
25
+ type: "string",
26
+ enum: ["coral", "json"],
27
+ description: "Target format",
28
+ default: "coral",
29
+ },
30
+ strict: {
31
+ type: "boolean",
32
+ description: "Fail the conversion when anything is lost, rather than reporting it and continuing",
33
+ default: false,
34
+ },
35
+ },
36
+ required: ["content"],
37
+ },
38
+ };
39
+ const ConvertArgsSchema = z.object({
40
+ content: z.string(),
41
+ from: z.enum(["mermaid", "dot", "plantuml", "coral", "auto"]).default("auto"),
42
+ to: z.enum(["coral", "json"]).default("coral"),
43
+ strict: z.boolean().default(false),
44
+ });
45
+ /**
46
+ * Detect the source format.
47
+ *
48
+ * One implementation, shared with the rest of the server, rather than the
49
+ * private copy this tool used to keep.
50
+ */
51
+ export function detectFormat(source) {
52
+ const trimmed = source.trim();
53
+ if (/^@start/i.test(trimmed))
54
+ return "plantuml";
55
+ // Mermaid is checked first: `graph TD` also matches a naive DOT pattern.
56
+ if (/^(flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|timeline|block-beta|packet-beta|kanban|architecture-beta)\b/i.test(trimmed)) {
57
+ return "mermaid";
58
+ }
59
+ if (/^graph\s+(TB|TD|BT|RL|LR)\b/i.test(trimmed))
60
+ return "mermaid";
61
+ if (/^(strict\s+)?(di)?graph\b[^{]*\{/i.test(trimmed))
62
+ return "dot";
63
+ return "coral";
64
+ }
65
+ function parseAs(format, content) {
66
+ switch (format) {
67
+ case "mermaid":
68
+ return parseMermaid(content);
69
+ case "dot":
70
+ return parseDot(content);
71
+ case "plantuml":
72
+ return parsePlantUml(content);
73
+ default:
74
+ return parse(content);
75
+ }
76
+ }
77
+ /** Human-readable notes, so a lossy conversion says what it lost. */
78
+ function formatNotes(result) {
79
+ const notes = result.diagnostics.filter((d) => d.severity !== "error");
80
+ if (notes.length === 0)
81
+ return "";
82
+ const lines = notes.map((d) => {
83
+ const where = d.position ? ` line ${d.position.line}:` : "";
84
+ const source = d.source ? ` \`${d.source}\`` : "";
85
+ return `- ${d.severity} [${d.code}]${where}${source}\n ${d.message}`;
86
+ });
87
+ return `\n\n## Conversion notes\n${lines.join("\n")}`;
88
+ }
89
+ export async function handleConvert(args) {
90
+ const { content, from, to, strict } = ConvertArgsSchema.parse(args);
91
+ const sourceFormat = from === "auto" ? detectFormat(content) : from;
92
+ const result = parseAs(sourceFormat, content);
93
+ if (!result.graph || result.graph.nodes.length === 0 || !result.success) {
94
+ const why = result.errors[0]?.message ?? "no nodes were produced";
95
+ return {
96
+ content: [
97
+ {
98
+ type: "text",
99
+ text: `Could not convert from ${sourceFormat}: ${why}` + formatNotes(result),
100
+ },
101
+ ],
102
+ structuredContent: {
103
+ from: sourceFormat,
104
+ to,
105
+ nodeCount: result.graph?.nodes.length ?? 0,
106
+ edgeCount: result.graph?.edges.length ?? 0,
107
+ diagnostics: result.diagnostics,
108
+ },
109
+ isError: true,
110
+ };
111
+ }
112
+ const graph = result.graph;
113
+ const printed = to === "coral" ? printWithDiagnostics(graph) : undefined;
114
+ const diagnostics = [...result.diagnostics, ...(printed?.diagnostics ?? [])];
115
+ const combined = { diagnostics };
116
+ const lossy = diagnostics.some((d) => d.severity !== "error");
117
+ if (strict && lossy) {
118
+ return {
119
+ content: [
120
+ {
121
+ type: "text",
122
+ text: `Refusing a lossy conversion from ${sourceFormat} in strict mode.` +
123
+ formatNotes(combined),
124
+ },
125
+ ],
126
+ structuredContent: {
127
+ from: sourceFormat,
128
+ to,
129
+ nodeCount: graph.nodes.length,
130
+ edgeCount: graph.edges.length,
131
+ diagnostics,
132
+ },
133
+ isError: true,
134
+ };
135
+ }
136
+ const output = to === "json" ? JSON.stringify(graph, null, 2) : printed.text;
137
+ const summary = `Converted from ${sourceFormat} to ${to}: ` +
138
+ `${graph.nodes.length} nodes, ${graph.edges.length} edges` +
139
+ (lossy ? `, ${diagnostics.filter((d) => d.severity !== "error").length} notes` : "");
140
+ return {
141
+ content: [{ type: "text", text: `${summary}\n\n${output}${formatNotes(combined)}` }],
142
+ structuredContent: {
143
+ from: sourceFormat,
144
+ to,
145
+ nodeCount: graph.nodes.length,
146
+ edgeCount: graph.edges.length,
147
+ diagnostics,
148
+ },
149
+ isError: !result.success,
150
+ };
151
+ }
152
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/tools/convert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * coral_explain tool
3
+ *
4
+ * Generate natural language explanations of diagrams.
5
+ */
6
+ export declare const explainTool: {
7
+ name: string;
8
+ description: string;
9
+ inputSchema: {
10
+ type: "object";
11
+ properties: {
12
+ content: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ level: {
17
+ type: string;
18
+ enum: string[];
19
+ description: string;
20
+ default: string;
21
+ };
22
+ focus: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ };
27
+ required: string[];
28
+ };
29
+ };
30
+ export declare function handleExplain(args: unknown): Promise<{
31
+ content: {
32
+ type: string;
33
+ text: string;
34
+ }[];
35
+ }>;
36
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/tools/explain.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;CAwBvB,CAAC;AAqZF,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO;;;;;GA2ChD"}