@mantine/mcp-server 9.0.0 → 9.0.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.
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ //#region \0rolldown/runtime.js
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
+ get: ((k) => from[k]).bind(null, key),
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
+ value: mod,
21
+ enumerable: true
22
+ }) : target, mod));
23
+ //#endregion
24
+ exports.__toESM = __toESM;
package/cjs/server.cjs CHANGED
@@ -1,5 +1,8 @@
1
1
  "use client";
2
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
3
  const require_data_client = require("./data-client.cjs");
4
+ let node_readline = require("node:readline");
5
+ node_readline = require_runtime.__toESM(node_readline);
3
6
  //#region packages/@mantine/mcp-server/src/server.ts
4
7
  const TOOL_DEFINITIONS = [
5
8
  {
@@ -114,9 +117,7 @@ function parseSearchDocsArgs(args) {
114
117
  };
115
118
  }
116
119
  function writeMessage(payload) {
117
- const body = JSON.stringify(payload);
118
- const header = `Content-Length: ${Buffer.byteLength(body, "utf8")}\r\n\r\n`;
119
- process.stdout.write(header + body);
120
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
120
121
  }
121
122
  function writeResponse(id, result) {
122
123
  writeMessage({
@@ -132,43 +133,24 @@ function writeError(id, code, message) {
132
133
  error: createJsonRpcError(code, message)
133
134
  });
134
135
  }
135
- function readContentLength(rawHeaders) {
136
- const contentLengthHeader = rawHeaders.split("\r\n").find((line) => line.toLowerCase().startsWith("content-length:"));
137
- if (!contentLengthHeader) return null;
138
- const value = Number(contentLengthHeader.split(":")[1]?.trim());
139
- return Number.isFinite(value) ? value : null;
140
- }
141
136
  function startServer() {
142
137
  const timeoutMs = Number(process.env.MANTINE_MCP_TIMEOUT_MS || 1e4);
143
138
  const client = new require_data_client.MantineMcpDataClient(process.env.MANTINE_MCP_DATA_URL || "https://mantine.dev/mcp", timeoutMs);
144
- let buffer = Buffer.alloc(0);
145
- process.stdin.on("data", (chunk) => {
146
- buffer = Buffer.concat([buffer, chunk]);
147
- while (true) {
148
- const separatorIndex = buffer.indexOf("\r\n\r\n");
149
- if (separatorIndex === -1) return;
150
- const contentLength = readContentLength(buffer.subarray(0, separatorIndex).toString("utf8"));
151
- if (contentLength == null) {
152
- writeError(null, -32600, "Invalid request: missing Content-Length header");
153
- buffer = Buffer.alloc(0);
154
- return;
155
- }
156
- const bodyStart = separatorIndex + 4;
157
- const bodyEnd = bodyStart + contentLength;
158
- if (buffer.length < bodyEnd) return;
159
- const bodyBuffer = buffer.subarray(bodyStart, bodyEnd);
160
- buffer = buffer.subarray(bodyEnd);
161
- let request;
162
- try {
163
- request = JSON.parse(bodyBuffer.toString("utf8"));
164
- } catch {
165
- writeError(null, -32700, "Parse error");
166
- continue;
167
- }
168
- handleRequest(client, request);
139
+ node_readline.default.createInterface({
140
+ input: process.stdin,
141
+ terminal: false
142
+ }).on("line", (line) => {
143
+ const trimmed = line.trim();
144
+ if (trimmed.length === 0) return;
145
+ let request;
146
+ try {
147
+ request = JSON.parse(trimmed);
148
+ } catch {
149
+ writeError(null, -32700, "Parse error");
150
+ return;
169
151
  }
152
+ handleRequest(client, request);
170
153
  });
171
- process.stdin.resume();
172
154
  }
173
155
  async function handleRequest(client, request) {
174
156
  const id = request.id ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"server.cjs","names":["MantineMcpDataClient"],"sources":["../src/server.ts"],"sourcesContent":["import { MantineMcpDataClient } from './data-client';\nimport { GetItemArgs, ListItemsArgs, SearchDocsArgs } from './types';\n\ninterface JsonRpcRequest {\n jsonrpc: '2.0';\n id?: string | number | null;\n method: string;\n params?: unknown;\n}\n\nconst TOOL_DEFINITIONS = [\n {\n name: 'list_items',\n description:\n 'List Mantine documentation items. Supports filtering by kind (component|hook), package and text query.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n package: { type: 'string' },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_doc',\n description: 'Get the LLM-ready markdown documentation for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_props',\n description: 'Get normalized props metadata for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'search_docs',\n description: 'Search Mantine docs by free text query and return ranked matches.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n required: ['query'],\n additionalProperties: false,\n },\n },\n];\n\nfunction createJsonRpcError(code: number, message: string) {\n return { code, message };\n}\n\nfunction toToolResult(content: unknown) {\n const text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);\n\n return {\n content: [{ type: 'text', text }],\n };\n}\n\nfunction toToolError(message: string) {\n return {\n isError: true,\n content: [{ type: 'text', text: message }],\n };\n}\n\nfunction parseListItemsArgs(args: Record<string, unknown>): ListItemsArgs {\n return {\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n package: typeof args.package === 'string' ? args.package : undefined,\n query: typeof args.query === 'string' ? args.query : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction parseGetItemArgs(args: Record<string, unknown>): GetItemArgs | null {\n if (typeof args.name !== 'string' || args.name.length === 0) {\n return null;\n }\n\n return {\n name: args.name,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n };\n}\n\nfunction parseSearchDocsArgs(args: Record<string, unknown>): SearchDocsArgs | null {\n if (typeof args.query !== 'string' || args.query.length === 0) {\n return null;\n }\n\n return {\n query: args.query,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction writeMessage(payload: unknown) {\n const body = JSON.stringify(payload);\n const header = `Content-Length: ${Buffer.byteLength(body, 'utf8')}\\r\\n\\r\\n`;\n process.stdout.write(header + body);\n}\n\nfunction writeResponse(id: string | number | null, result: unknown) {\n writeMessage({ jsonrpc: '2.0', id, result });\n}\n\nfunction writeError(id: string | number | null, code: number, message: string) {\n writeMessage({\n jsonrpc: '2.0',\n id,\n error: createJsonRpcError(code, message),\n });\n}\n\nfunction readContentLength(rawHeaders: string) {\n const lines = rawHeaders.split('\\r\\n');\n const contentLengthHeader = lines.find((line) =>\n line.toLowerCase().startsWith('content-length:')\n );\n\n if (!contentLengthHeader) {\n return null;\n }\n\n const value = Number(contentLengthHeader.split(':')[1]?.trim());\n return Number.isFinite(value) ? value : null;\n}\n\nexport function startServer() {\n const timeoutMs = Number(process.env.MANTINE_MCP_TIMEOUT_MS || 10000);\n const dataUrl = process.env.MANTINE_MCP_DATA_URL || 'https://mantine.dev/mcp';\n const client = new MantineMcpDataClient(dataUrl, timeoutMs);\n\n let buffer = Buffer.alloc(0);\n\n process.stdin.on('data', (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk]);\n\n while (true) {\n const separatorIndex = buffer.indexOf('\\r\\n\\r\\n');\n\n if (separatorIndex === -1) {\n return;\n }\n\n const headersBuffer = buffer.subarray(0, separatorIndex);\n const headers = headersBuffer.toString('utf8');\n const contentLength = readContentLength(headers);\n\n if (contentLength == null) {\n writeError(null, -32600, 'Invalid request: missing Content-Length header');\n buffer = Buffer.alloc(0);\n return;\n }\n\n const bodyStart = separatorIndex + 4;\n const bodyEnd = bodyStart + contentLength;\n\n if (buffer.length < bodyEnd) {\n return;\n }\n\n const bodyBuffer = buffer.subarray(bodyStart, bodyEnd);\n buffer = buffer.subarray(bodyEnd);\n\n let request: JsonRpcRequest;\n try {\n request = JSON.parse(bodyBuffer.toString('utf8'));\n } catch {\n writeError(null, -32700, 'Parse error');\n continue;\n }\n\n void handleRequest(client, request);\n }\n });\n\n process.stdin.resume();\n}\n\nasync function handleRequest(client: MantineMcpDataClient, request: JsonRpcRequest) {\n const id = request.id ?? null;\n\n if (!request || request.jsonrpc !== '2.0' || typeof request.method !== 'string') {\n writeError(id, -32600, 'Invalid request');\n return;\n }\n\n try {\n switch (request.method) {\n case 'initialize': {\n writeResponse(id, {\n protocolVersion: '2024-11-05',\n capabilities: {\n tools: {},\n },\n serverInfo: {\n name: '@mantine/mcp-server',\n version: '9.0.0-alpha.1',\n },\n });\n return;\n }\n\n case 'notifications/initialized': {\n return;\n }\n\n case 'tools/list': {\n writeResponse(id, { tools: TOOL_DEFINITIONS });\n return;\n }\n\n case 'tools/call': {\n const params =\n request.params && typeof request.params === 'object'\n ? (request.params as Record<string, unknown>)\n : {};\n const name = typeof params.name === 'string' ? params.name : '';\n const args =\n params.arguments && typeof params.arguments === 'object'\n ? (params.arguments as Record<string, unknown>)\n : {};\n\n if (!name) {\n writeResponse(id, toToolError('Tool name is required'));\n return;\n }\n\n if (name === 'list_items') {\n const result = await client.listItems(parseListItemsArgs(args));\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_doc') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemDoc(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_props') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemProps(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'search_docs') {\n const parsed = parseSearchDocsArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"query\" is required'));\n return;\n }\n\n const result = await client.searchDocs(parsed);\n writeResponse(id, toToolResult(result));\n return;\n }\n\n writeResponse(id, toToolError(`Unknown tool: ${name}`));\n return;\n }\n\n default: {\n if (id === null) {\n return;\n }\n\n writeError(id, -32601, `Method not found: ${request.method}`);\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unexpected error';\n\n if (request.method === 'tools/call') {\n writeResponse(id, toToolError(message));\n return;\n }\n\n writeError(id, -32000, message);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.cjs","names":["MantineMcpDataClient","readline"],"sources":["../src/server.ts"],"sourcesContent":["import readline from 'node:readline';\nimport { MantineMcpDataClient } from './data-client';\nimport { GetItemArgs, ListItemsArgs, SearchDocsArgs } from './types';\n\ninterface JsonRpcRequest {\n jsonrpc: '2.0';\n id?: string | number | null;\n method: string;\n params?: unknown;\n}\n\nconst TOOL_DEFINITIONS = [\n {\n name: 'list_items',\n description:\n 'List Mantine documentation items. Supports filtering by kind (component|hook), package and text query.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n package: { type: 'string' },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_doc',\n description: 'Get the LLM-ready markdown documentation for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_props',\n description: 'Get normalized props metadata for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'search_docs',\n description: 'Search Mantine docs by free text query and return ranked matches.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n required: ['query'],\n additionalProperties: false,\n },\n },\n];\n\nfunction createJsonRpcError(code: number, message: string) {\n return { code, message };\n}\n\nfunction toToolResult(content: unknown) {\n const text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);\n\n return {\n content: [{ type: 'text', text }],\n };\n}\n\nfunction toToolError(message: string) {\n return {\n isError: true,\n content: [{ type: 'text', text: message }],\n };\n}\n\nfunction parseListItemsArgs(args: Record<string, unknown>): ListItemsArgs {\n return {\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n package: typeof args.package === 'string' ? args.package : undefined,\n query: typeof args.query === 'string' ? args.query : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction parseGetItemArgs(args: Record<string, unknown>): GetItemArgs | null {\n if (typeof args.name !== 'string' || args.name.length === 0) {\n return null;\n }\n\n return {\n name: args.name,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n };\n}\n\nfunction parseSearchDocsArgs(args: Record<string, unknown>): SearchDocsArgs | null {\n if (typeof args.query !== 'string' || args.query.length === 0) {\n return null;\n }\n\n return {\n query: args.query,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction writeMessage(payload: unknown) {\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction writeResponse(id: string | number | null, result: unknown) {\n writeMessage({ jsonrpc: '2.0', id, result });\n}\n\nfunction writeError(id: string | number | null, code: number, message: string) {\n writeMessage({\n jsonrpc: '2.0',\n id,\n error: createJsonRpcError(code, message),\n });\n}\n\nexport function startServer() {\n const timeoutMs = Number(process.env.MANTINE_MCP_TIMEOUT_MS || 10000);\n const dataUrl = process.env.MANTINE_MCP_DATA_URL || 'https://mantine.dev/mcp';\n const client = new MantineMcpDataClient(dataUrl, timeoutMs);\n\n const rl = readline.createInterface({ input: process.stdin, terminal: false });\n\n rl.on('line', (line: string) => {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return;\n }\n\n let request: JsonRpcRequest;\n try {\n request = JSON.parse(trimmed);\n } catch {\n writeError(null, -32700, 'Parse error');\n return;\n }\n\n void handleRequest(client, request);\n });\n}\n\nasync function handleRequest(client: MantineMcpDataClient, request: JsonRpcRequest) {\n const id = request.id ?? null;\n\n if (!request || request.jsonrpc !== '2.0' || typeof request.method !== 'string') {\n writeError(id, -32600, 'Invalid request');\n return;\n }\n\n try {\n switch (request.method) {\n case 'initialize': {\n writeResponse(id, {\n protocolVersion: '2024-11-05',\n capabilities: {\n tools: {},\n },\n serverInfo: {\n name: '@mantine/mcp-server',\n version: '9.0.0-alpha.1',\n },\n });\n return;\n }\n\n case 'notifications/initialized': {\n return;\n }\n\n case 'tools/list': {\n writeResponse(id, { tools: TOOL_DEFINITIONS });\n return;\n }\n\n case 'tools/call': {\n const params =\n request.params && typeof request.params === 'object'\n ? (request.params as Record<string, unknown>)\n : {};\n const name = typeof params.name === 'string' ? params.name : '';\n const args =\n params.arguments && typeof params.arguments === 'object'\n ? (params.arguments as Record<string, unknown>)\n : {};\n\n if (!name) {\n writeResponse(id, toToolError('Tool name is required'));\n return;\n }\n\n if (name === 'list_items') {\n const result = await client.listItems(parseListItemsArgs(args));\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_doc') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemDoc(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_props') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemProps(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'search_docs') {\n const parsed = parseSearchDocsArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"query\" is required'));\n return;\n }\n\n const result = await client.searchDocs(parsed);\n writeResponse(id, toToolResult(result));\n return;\n }\n\n writeResponse(id, toToolError(`Unknown tool: ${name}`));\n return;\n }\n\n default: {\n if (id === null) {\n return;\n }\n\n writeError(id, -32601, `Method not found: ${request.method}`);\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unexpected error';\n\n if (request.method === 'tools/call') {\n writeResponse(id, toToolError(message));\n return;\n }\n\n writeError(id, -32000, message);\n }\n}\n"],"mappings":"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"}
package/esm/server.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { MantineMcpDataClient } from "./data-client.mjs";
3
+ import readline from "node:readline";
3
4
  //#region packages/@mantine/mcp-server/src/server.ts
4
5
  const TOOL_DEFINITIONS = [
5
6
  {
@@ -114,9 +115,7 @@ function parseSearchDocsArgs(args) {
114
115
  };
115
116
  }
116
117
  function writeMessage(payload) {
117
- const body = JSON.stringify(payload);
118
- const header = `Content-Length: ${Buffer.byteLength(body, "utf8")}\r\n\r\n`;
119
- process.stdout.write(header + body);
118
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
120
119
  }
121
120
  function writeResponse(id, result) {
122
121
  writeMessage({
@@ -132,43 +131,24 @@ function writeError(id, code, message) {
132
131
  error: createJsonRpcError(code, message)
133
132
  });
134
133
  }
135
- function readContentLength(rawHeaders) {
136
- const contentLengthHeader = rawHeaders.split("\r\n").find((line) => line.toLowerCase().startsWith("content-length:"));
137
- if (!contentLengthHeader) return null;
138
- const value = Number(contentLengthHeader.split(":")[1]?.trim());
139
- return Number.isFinite(value) ? value : null;
140
- }
141
134
  function startServer() {
142
135
  const timeoutMs = Number(process.env.MANTINE_MCP_TIMEOUT_MS || 1e4);
143
136
  const client = new MantineMcpDataClient(process.env.MANTINE_MCP_DATA_URL || "https://mantine.dev/mcp", timeoutMs);
144
- let buffer = Buffer.alloc(0);
145
- process.stdin.on("data", (chunk) => {
146
- buffer = Buffer.concat([buffer, chunk]);
147
- while (true) {
148
- const separatorIndex = buffer.indexOf("\r\n\r\n");
149
- if (separatorIndex === -1) return;
150
- const contentLength = readContentLength(buffer.subarray(0, separatorIndex).toString("utf8"));
151
- if (contentLength == null) {
152
- writeError(null, -32600, "Invalid request: missing Content-Length header");
153
- buffer = Buffer.alloc(0);
154
- return;
155
- }
156
- const bodyStart = separatorIndex + 4;
157
- const bodyEnd = bodyStart + contentLength;
158
- if (buffer.length < bodyEnd) return;
159
- const bodyBuffer = buffer.subarray(bodyStart, bodyEnd);
160
- buffer = buffer.subarray(bodyEnd);
161
- let request;
162
- try {
163
- request = JSON.parse(bodyBuffer.toString("utf8"));
164
- } catch {
165
- writeError(null, -32700, "Parse error");
166
- continue;
167
- }
168
- handleRequest(client, request);
137
+ readline.createInterface({
138
+ input: process.stdin,
139
+ terminal: false
140
+ }).on("line", (line) => {
141
+ const trimmed = line.trim();
142
+ if (trimmed.length === 0) return;
143
+ let request;
144
+ try {
145
+ request = JSON.parse(trimmed);
146
+ } catch {
147
+ writeError(null, -32700, "Parse error");
148
+ return;
169
149
  }
150
+ handleRequest(client, request);
170
151
  });
171
- process.stdin.resume();
172
152
  }
173
153
  async function handleRequest(client, request) {
174
154
  const id = request.id ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","names":[],"sources":["../src/server.ts"],"sourcesContent":["import { MantineMcpDataClient } from './data-client';\nimport { GetItemArgs, ListItemsArgs, SearchDocsArgs } from './types';\n\ninterface JsonRpcRequest {\n jsonrpc: '2.0';\n id?: string | number | null;\n method: string;\n params?: unknown;\n}\n\nconst TOOL_DEFINITIONS = [\n {\n name: 'list_items',\n description:\n 'List Mantine documentation items. Supports filtering by kind (component|hook), package and text query.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n package: { type: 'string' },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_doc',\n description: 'Get the LLM-ready markdown documentation for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_props',\n description: 'Get normalized props metadata for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'search_docs',\n description: 'Search Mantine docs by free text query and return ranked matches.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n required: ['query'],\n additionalProperties: false,\n },\n },\n];\n\nfunction createJsonRpcError(code: number, message: string) {\n return { code, message };\n}\n\nfunction toToolResult(content: unknown) {\n const text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);\n\n return {\n content: [{ type: 'text', text }],\n };\n}\n\nfunction toToolError(message: string) {\n return {\n isError: true,\n content: [{ type: 'text', text: message }],\n };\n}\n\nfunction parseListItemsArgs(args: Record<string, unknown>): ListItemsArgs {\n return {\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n package: typeof args.package === 'string' ? args.package : undefined,\n query: typeof args.query === 'string' ? args.query : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction parseGetItemArgs(args: Record<string, unknown>): GetItemArgs | null {\n if (typeof args.name !== 'string' || args.name.length === 0) {\n return null;\n }\n\n return {\n name: args.name,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n };\n}\n\nfunction parseSearchDocsArgs(args: Record<string, unknown>): SearchDocsArgs | null {\n if (typeof args.query !== 'string' || args.query.length === 0) {\n return null;\n }\n\n return {\n query: args.query,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction writeMessage(payload: unknown) {\n const body = JSON.stringify(payload);\n const header = `Content-Length: ${Buffer.byteLength(body, 'utf8')}\\r\\n\\r\\n`;\n process.stdout.write(header + body);\n}\n\nfunction writeResponse(id: string | number | null, result: unknown) {\n writeMessage({ jsonrpc: '2.0', id, result });\n}\n\nfunction writeError(id: string | number | null, code: number, message: string) {\n writeMessage({\n jsonrpc: '2.0',\n id,\n error: createJsonRpcError(code, message),\n });\n}\n\nfunction readContentLength(rawHeaders: string) {\n const lines = rawHeaders.split('\\r\\n');\n const contentLengthHeader = lines.find((line) =>\n line.toLowerCase().startsWith('content-length:')\n );\n\n if (!contentLengthHeader) {\n return null;\n }\n\n const value = Number(contentLengthHeader.split(':')[1]?.trim());\n return Number.isFinite(value) ? value : null;\n}\n\nexport function startServer() {\n const timeoutMs = Number(process.env.MANTINE_MCP_TIMEOUT_MS || 10000);\n const dataUrl = process.env.MANTINE_MCP_DATA_URL || 'https://mantine.dev/mcp';\n const client = new MantineMcpDataClient(dataUrl, timeoutMs);\n\n let buffer = Buffer.alloc(0);\n\n process.stdin.on('data', (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk]);\n\n while (true) {\n const separatorIndex = buffer.indexOf('\\r\\n\\r\\n');\n\n if (separatorIndex === -1) {\n return;\n }\n\n const headersBuffer = buffer.subarray(0, separatorIndex);\n const headers = headersBuffer.toString('utf8');\n const contentLength = readContentLength(headers);\n\n if (contentLength == null) {\n writeError(null, -32600, 'Invalid request: missing Content-Length header');\n buffer = Buffer.alloc(0);\n return;\n }\n\n const bodyStart = separatorIndex + 4;\n const bodyEnd = bodyStart + contentLength;\n\n if (buffer.length < bodyEnd) {\n return;\n }\n\n const bodyBuffer = buffer.subarray(bodyStart, bodyEnd);\n buffer = buffer.subarray(bodyEnd);\n\n let request: JsonRpcRequest;\n try {\n request = JSON.parse(bodyBuffer.toString('utf8'));\n } catch {\n writeError(null, -32700, 'Parse error');\n continue;\n }\n\n void handleRequest(client, request);\n }\n });\n\n process.stdin.resume();\n}\n\nasync function handleRequest(client: MantineMcpDataClient, request: JsonRpcRequest) {\n const id = request.id ?? null;\n\n if (!request || request.jsonrpc !== '2.0' || typeof request.method !== 'string') {\n writeError(id, -32600, 'Invalid request');\n return;\n }\n\n try {\n switch (request.method) {\n case 'initialize': {\n writeResponse(id, {\n protocolVersion: '2024-11-05',\n capabilities: {\n tools: {},\n },\n serverInfo: {\n name: '@mantine/mcp-server',\n version: '9.0.0-alpha.1',\n },\n });\n return;\n }\n\n case 'notifications/initialized': {\n return;\n }\n\n case 'tools/list': {\n writeResponse(id, { tools: TOOL_DEFINITIONS });\n return;\n }\n\n case 'tools/call': {\n const params =\n request.params && typeof request.params === 'object'\n ? (request.params as Record<string, unknown>)\n : {};\n const name = typeof params.name === 'string' ? params.name : '';\n const args =\n params.arguments && typeof params.arguments === 'object'\n ? (params.arguments as Record<string, unknown>)\n : {};\n\n if (!name) {\n writeResponse(id, toToolError('Tool name is required'));\n return;\n }\n\n if (name === 'list_items') {\n const result = await client.listItems(parseListItemsArgs(args));\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_doc') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemDoc(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_props') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemProps(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'search_docs') {\n const parsed = parseSearchDocsArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"query\" is required'));\n return;\n }\n\n const result = await client.searchDocs(parsed);\n writeResponse(id, toToolResult(result));\n return;\n }\n\n writeResponse(id, toToolError(`Unknown tool: ${name}`));\n return;\n }\n\n default: {\n if (id === null) {\n return;\n }\n\n writeError(id, -32601, `Method not found: ${request.method}`);\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unexpected error';\n\n if (request.method === 'tools/call') {\n writeResponse(id, toToolError(message));\n return;\n }\n\n writeError(id, -32000, message);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.mjs","names":[],"sources":["../src/server.ts"],"sourcesContent":["import readline from 'node:readline';\nimport { MantineMcpDataClient } from './data-client';\nimport { GetItemArgs, ListItemsArgs, SearchDocsArgs } from './types';\n\ninterface JsonRpcRequest {\n jsonrpc: '2.0';\n id?: string | number | null;\n method: string;\n params?: unknown;\n}\n\nconst TOOL_DEFINITIONS = [\n {\n name: 'list_items',\n description:\n 'List Mantine documentation items. Supports filtering by kind (component|hook), package and text query.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n package: { type: 'string' },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_doc',\n description: 'Get the LLM-ready markdown documentation for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'get_item_props',\n description: 'Get normalized props metadata for a Mantine item by name or id.',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n kind: { type: 'string', enum: ['component', 'hook'] },\n },\n required: ['name'],\n additionalProperties: false,\n },\n },\n {\n name: 'search_docs',\n description: 'Search Mantine docs by free text query and return ranked matches.',\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['component', 'hook'] },\n query: { type: 'string' },\n limit: { type: 'number' },\n },\n required: ['query'],\n additionalProperties: false,\n },\n },\n];\n\nfunction createJsonRpcError(code: number, message: string) {\n return { code, message };\n}\n\nfunction toToolResult(content: unknown) {\n const text = typeof content === 'string' ? content : JSON.stringify(content, null, 2);\n\n return {\n content: [{ type: 'text', text }],\n };\n}\n\nfunction toToolError(message: string) {\n return {\n isError: true,\n content: [{ type: 'text', text: message }],\n };\n}\n\nfunction parseListItemsArgs(args: Record<string, unknown>): ListItemsArgs {\n return {\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n package: typeof args.package === 'string' ? args.package : undefined,\n query: typeof args.query === 'string' ? args.query : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction parseGetItemArgs(args: Record<string, unknown>): GetItemArgs | null {\n if (typeof args.name !== 'string' || args.name.length === 0) {\n return null;\n }\n\n return {\n name: args.name,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n };\n}\n\nfunction parseSearchDocsArgs(args: Record<string, unknown>): SearchDocsArgs | null {\n if (typeof args.query !== 'string' || args.query.length === 0) {\n return null;\n }\n\n return {\n query: args.query,\n kind: args.kind === 'component' || args.kind === 'hook' ? args.kind : undefined,\n limit: typeof args.limit === 'number' ? args.limit : undefined,\n };\n}\n\nfunction writeMessage(payload: unknown) {\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction writeResponse(id: string | number | null, result: unknown) {\n writeMessage({ jsonrpc: '2.0', id, result });\n}\n\nfunction writeError(id: string | number | null, code: number, message: string) {\n writeMessage({\n jsonrpc: '2.0',\n id,\n error: createJsonRpcError(code, message),\n });\n}\n\nexport function startServer() {\n const timeoutMs = Number(process.env.MANTINE_MCP_TIMEOUT_MS || 10000);\n const dataUrl = process.env.MANTINE_MCP_DATA_URL || 'https://mantine.dev/mcp';\n const client = new MantineMcpDataClient(dataUrl, timeoutMs);\n\n const rl = readline.createInterface({ input: process.stdin, terminal: false });\n\n rl.on('line', (line: string) => {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return;\n }\n\n let request: JsonRpcRequest;\n try {\n request = JSON.parse(trimmed);\n } catch {\n writeError(null, -32700, 'Parse error');\n return;\n }\n\n void handleRequest(client, request);\n });\n}\n\nasync function handleRequest(client: MantineMcpDataClient, request: JsonRpcRequest) {\n const id = request.id ?? null;\n\n if (!request || request.jsonrpc !== '2.0' || typeof request.method !== 'string') {\n writeError(id, -32600, 'Invalid request');\n return;\n }\n\n try {\n switch (request.method) {\n case 'initialize': {\n writeResponse(id, {\n protocolVersion: '2024-11-05',\n capabilities: {\n tools: {},\n },\n serverInfo: {\n name: '@mantine/mcp-server',\n version: '9.0.0-alpha.1',\n },\n });\n return;\n }\n\n case 'notifications/initialized': {\n return;\n }\n\n case 'tools/list': {\n writeResponse(id, { tools: TOOL_DEFINITIONS });\n return;\n }\n\n case 'tools/call': {\n const params =\n request.params && typeof request.params === 'object'\n ? (request.params as Record<string, unknown>)\n : {};\n const name = typeof params.name === 'string' ? params.name : '';\n const args =\n params.arguments && typeof params.arguments === 'object'\n ? (params.arguments as Record<string, unknown>)\n : {};\n\n if (!name) {\n writeResponse(id, toToolError('Tool name is required'));\n return;\n }\n\n if (name === 'list_items') {\n const result = await client.listItems(parseListItemsArgs(args));\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_doc') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemDoc(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'get_item_props') {\n const parsed = parseGetItemArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"name\" is required'));\n return;\n }\n\n const result = await client.getItemProps(parsed);\n if (!result) {\n writeResponse(id, toToolError(`Item not found: ${parsed.name}`));\n return;\n }\n\n writeResponse(id, toToolResult(result));\n return;\n }\n\n if (name === 'search_docs') {\n const parsed = parseSearchDocsArgs(args);\n if (!parsed) {\n writeResponse(id, toToolError('Argument \"query\" is required'));\n return;\n }\n\n const result = await client.searchDocs(parsed);\n writeResponse(id, toToolResult(result));\n return;\n }\n\n writeResponse(id, toToolError(`Unknown tool: ${name}`));\n return;\n }\n\n default: {\n if (id === null) {\n return;\n }\n\n writeError(id, -32601, `Method not found: ${request.method}`);\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unexpected error';\n\n if (request.method === 'tools/call') {\n writeResponse(id, toToolError(message));\n return;\n }\n\n writeError(id, -32000, message);\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/mcp-server",
3
- "version": "9.0.0",
3
+ "version": "9.0.2",
4
4
  "description": "MCP server for Mantine documentation",
5
5
  "homepage": "https://mantine.dev",
6
6
  "license": "MIT",