diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ad21e1..6dfaa89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.1] - 2026-02-01 + +- Fix MCP notifications handling + ## [0.1.1] - 2026-02-01 - Release fixes for publishing diff --git a/bindings/python/pyproject.toml b/bindings/python/pyproject.toml index eecc3cb..19f7cad 100644 --- a/bindings/python/pyproject.toml +++ b/bindings/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "mermkit" -version = "0.1.1" +version = "0.2.1" description = "Python bindings for mermkit (Mermaid rendering toolkit)" readme = "README.md" requires-python = ">=3.8" diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml index a99ab89..ae0ae6b 100644 --- a/bindings/rust/Cargo.toml +++ b/bindings/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mermkit" -version = "0.1.1" +version = "0.2.1" edition = "2021" description = "Rust bindings for mermkit (Mermaid rendering toolkit)" license = "MIT" diff --git a/package.json b/package.json index 8274da3..8cc50a5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mermkit", "private": true, - "version": "0.1.1", + "version": "0.2.1", "repository": { "type": "git", "url": "https://github.com/MermaidKit/mermkit.git" diff --git a/packages/adapters/package.json b/packages/adapters/package.json index 4e8b9ba..e96cca3 100644 --- a/packages/adapters/package.json +++ b/packages/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@mermkit/adapters", - "version": "0.1.1", + "version": "0.2.1", "repository": { "type": "git", "url": "https://github.com/MermaidKit/mermkit.git" @@ -18,6 +18,6 @@ "build": "tsc -b" }, "dependencies": { - "@mermkit/core": "0.1.1" + "@mermkit/core": "0.2.1" } } diff --git a/packages/cli/package.json b/packages/cli/package.json index 1c95bd9..ebc11d8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@mermkit/cli", - "version": "0.1.1", + "version": "0.2.1", "repository": { "type": "git", "url": "https://github.com/MermaidKit/mermkit.git" @@ -19,8 +19,8 @@ "build": "tsc -b" }, "dependencies": { - "@mermkit/core": "0.1.1", - "@mermkit/render": "0.1.1", - "@mermkit/adapters": "0.1.1" + "@mermkit/core": "0.2.1", + "@mermkit/render": "0.2.1", + "@mermkit/adapters": "0.2.1" } } diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index 570de64..ed13d75 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -744,7 +744,7 @@ type JsonRpcRequest = { type JsonRpcResponse = { jsonrpc: "2.0"; - id: string | number | null; + id: string | number; result?: unknown; error?: { code: number; message: string }; }; @@ -753,6 +753,14 @@ function writeMcpResponse(response: JsonRpcResponse): void { stdout.write(`${JSON.stringify(response)}\n`); } +function maybeWriteMcpResponse( + id: string | number | undefined, + response: Omit +): void { + if (typeof id !== "string" && typeof id !== "number") return; + writeMcpResponse({ ...response, id }); +} + function buildMcpToolDefinitions(): Array<{ name: string; description: string; inputSchema: Record }> { return buildToolDefinitions().map((tool) => ({ name: tool.name, @@ -771,20 +779,14 @@ async function cmdMcp(): Promise { try { request = JSON.parse(trimmed) as JsonRpcRequest; } catch (error) { - writeMcpResponse({ - jsonrpc: "2.0", - id: null, - error: { code: -32700, message: `parse error: ${errorMessage(error)}` } - }); continue; } - const id = request.id ?? null; + const id = request.id; if (request.method === "initialize") { - writeMcpResponse({ + maybeWriteMcpResponse(id, { jsonrpc: "2.0", - id, result: { protocolVersion: "2024-11-05", capabilities: { tools: {} }, @@ -795,9 +797,8 @@ async function cmdMcp(): Promise { } if (request.method === "tools/list") { - writeMcpResponse({ + maybeWriteMcpResponse(id, { jsonrpc: "2.0", - id, result: { tools: buildMcpToolDefinitions() } }); continue; @@ -810,11 +811,10 @@ async function cmdMcp(): Promise { try { const content = await executeMcpTool(toolName, toolInput); - writeMcpResponse({ jsonrpc: "2.0", id, result: { content } }); + maybeWriteMcpResponse(id, { jsonrpc: "2.0", result: { content } }); } catch (error) { - writeMcpResponse({ + maybeWriteMcpResponse(id, { jsonrpc: "2.0", - id, result: { content: [{ type: "text", text: `error: ${errorMessage(error)}` }], isError: true @@ -824,9 +824,8 @@ async function cmdMcp(): Promise { continue; } - writeMcpResponse({ + maybeWriteMcpResponse(id, { jsonrpc: "2.0", - id, error: { code: -32601, message: `method not found: ${request.method}` } }); } diff --git a/packages/core/package.json b/packages/core/package.json index a7e75b5..741a458 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@mermkit/core", - "version": "0.1.1", + "version": "0.2.1", "repository": { "type": "git", "url": "https://github.com/MermaidKit/mermkit.git" diff --git a/packages/render/package.json b/packages/render/package.json index d0a6c61..b0c0e94 100644 --- a/packages/render/package.json +++ b/packages/render/package.json @@ -1,6 +1,6 @@ { "name": "@mermkit/render", - "version": "0.1.1", + "version": "0.2.1", "repository": { "type": "git", "url": "https://github.com/MermaidKit/mermkit.git" @@ -18,7 +18,7 @@ "build": "tsc -b" }, "dependencies": { - "@mermkit/core": "0.1.1" + "@mermkit/core": "0.2.1" }, "optionalDependencies": { "dompurify": "^3.1.5",