@intlayer/mcp 8.11.2 → 8.11.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/dist/esm/server/server.mjs +6 -4
- package/dist/esm/server/server.mjs.map +1 -1
- package/dist/esm/server/sse.mjs +1 -2
- package/dist/esm/server/sse.mjs.map +1 -1
- package/dist/esm/tools/cli.mjs +2 -2
- package/dist/esm/tools/index.mjs +4 -3
- package/dist/esm/tools/installLSP.mjs +31 -0
- package/dist/esm/tools/installLSP.mjs.map +1 -0
- package/dist/esm/tools/installSkills.mjs +2 -2
- package/dist/types/server/server.d.ts.map +1 -1
- package/dist/types/tools/index.d.ts +2 -1
- package/dist/types/tools/installLSP.d.ts +7 -0
- package/dist/types/tools/installLSP.d.ts.map +1 -0
- package/package.json +11 -9
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { loadInstallLSPTool } from "../tools/installLSP.mjs";
|
|
2
2
|
import { loadCLITools } from "../tools/cli.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { loadAPITools } from "../tools/api.mjs";
|
|
4
4
|
import { loadInstallSkillsTool } from "../tools/installSkills.mjs";
|
|
5
|
-
import {
|
|
5
|
+
import { loadDocsTools } from "../tools/docs.mjs";
|
|
6
|
+
import z from "zod";
|
|
6
7
|
import { dirname as dirname$1, resolve } from "node:path";
|
|
8
|
+
import { readFileSync } from "node:fs";
|
|
7
9
|
import { fileURLToPath } from "node:url";
|
|
8
10
|
import { isESModule } from "@intlayer/config/utils";
|
|
9
|
-
import z from "zod";
|
|
10
11
|
|
|
11
12
|
//#region src/server/server.ts
|
|
12
13
|
const dirname = isESModule ? dirname$1(fileURLToPath(import.meta.url)) : __dirname;
|
|
@@ -124,6 +125,7 @@ const loadServer = ({ isLocal }) => {
|
|
|
124
125
|
if (isLocal) try {
|
|
125
126
|
loadCLITools(server);
|
|
126
127
|
loadInstallSkillsTool(server);
|
|
128
|
+
loadInstallLSPTool(server);
|
|
127
129
|
} catch (error) {
|
|
128
130
|
console.error("Error loading CLI tools:", error);
|
|
129
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","names":["pathDirname"],"sources":["../../../src/server/server.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { dirname as pathDirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { isESModule } from '@intlayer/config/utils';\nimport z from 'zod';\nimport { loadAPITools } from '../tools/api';\nimport { loadCLITools } from '../tools/cli';\nimport { loadDocsTools } from '../tools/docs';\nimport { loadInstallSkillsTool } from '../tools/installSkills';\n\nexport const dirname: string = isESModule\n ? pathDirname(fileURLToPath(import.meta.url))\n : __dirname;\n\nconst packageJson: Record<string, any> = JSON.parse(\n readFileSync(resolve(dirname, '../../../package.json'), 'utf8')\n);\n\ntype ToolResult = {\n content: { type: string; text: string }[];\n isError?: boolean;\n};\n\ntype StoredTool = {\n name: string;\n description?: string;\n annotations?: Record<string, any>;\n inputSchema: Record<string, any>;\n handler: (params: any) => Promise<ToolResult>;\n};\n\nexport interface McpTransport {\n start(server: McpServer): Promise<void>;\n}\n\nexport class McpServer {\n private readonly _tools = new Map<string, StoredTool>();\n private readonly _info: { name: string; version: string };\n\n constructor(info: { name: string; version: string }) {\n this._info = info;\n }\n\n registerTool(\n name: string,\n config: {\n title?: string;\n description?: string;\n inputSchema?: Record<string, any>;\n annotations?: Record<string, any>;\n },\n handler: (params: any) => Promise<ToolResult>\n ): void {\n const shape = config.inputSchema ?? {};\n let inputSchema: Record<string, any>;\n try {\n inputSchema = z.toJSONSchema(z.object(shape)) as Record<string, any>;\n } catch {\n inputSchema = { type: 'object', properties: {} };\n }\n this._tools.set(name, {\n name,\n description: config.description,\n annotations: config.annotations,\n inputSchema,\n handler,\n });\n }\n\n async handleMessage(message: any): Promise<any> {\n const { id, method, params } = message;\n const isNotification = id === undefined;\n\n switch (method) {\n case 'initialize':\n return {\n jsonrpc: '2.0',\n id,\n result: {\n protocolVersion: '2024-11-05',\n capabilities: { tools: {} },\n serverInfo: this._info,\n },\n };\n\n case 'tools/list':\n return {\n jsonrpc: '2.0',\n id,\n result: {\n tools: Array.from(this._tools.values()).map((t) => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema,\n ...(t.annotations && { annotations: t.annotations }),\n })),\n },\n };\n\n case 'tools/call': {\n const { name, arguments: args } = params ?? {};\n const tool = this._tools.get(name);\n if (!tool) {\n if (isNotification) return null;\n return {\n jsonrpc: '2.0',\n id,\n error: { code: -32601, message: `Tool not found: ${name}` },\n };\n }\n try {\n const result = await tool.handler(args ?? {});\n if (isNotification) return null;\n return { jsonrpc: '2.0', id, result };\n } catch (error) {\n if (isNotification) return null;\n return {\n jsonrpc: '2.0',\n id,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n\n case 'ping':\n if (isNotification) return null;\n return { jsonrpc: '2.0', id, result: {} };\n\n default:\n if (isNotification) return null;\n return {\n jsonrpc: '2.0',\n id,\n error: { code: -32601, message: `Method not found: ${method}` },\n };\n }\n }\n\n async connect(transport: McpTransport): Promise<void> {\n await transport.start(this);\n }\n}\n\ntype LoadServer = (options: { isLocal: boolean }) => McpServer;\n\nexport const loadServer: LoadServer = ({ isLocal }) => {\n const server = new McpServer({\n name: 'intlayer',\n version: packageJson.version,\n });\n\n if (isLocal) {\n try {\n loadCLITools(server);\n loadInstallSkillsTool(server);\n } catch (error) {\n console.error('Error loading CLI tools:', error);\n }\n }\n\n try {\n loadDocsTools(server);\n } catch (error) {\n console.error('Error loading docs tools:', error);\n }\n\n try {\n loadAPITools(server);\n } catch (error) {\n console.error('Error loading API tools:', error);\n }\n\n return server;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["pathDirname"],"sources":["../../../src/server/server.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { dirname as pathDirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { isESModule } from '@intlayer/config/utils';\nimport z from 'zod';\nimport { loadAPITools } from '../tools/api';\nimport { loadCLITools } from '../tools/cli';\nimport { loadDocsTools } from '../tools/docs';\nimport { loadInstallLSPTool } from '../tools/installLSP';\nimport { loadInstallSkillsTool } from '../tools/installSkills';\n\nexport const dirname: string = isESModule\n ? pathDirname(fileURLToPath(import.meta.url))\n : __dirname;\n\nconst packageJson: Record<string, any> = JSON.parse(\n readFileSync(resolve(dirname, '../../../package.json'), 'utf8')\n);\n\ntype ToolResult = {\n content: { type: string; text: string }[];\n isError?: boolean;\n};\n\ntype StoredTool = {\n name: string;\n description?: string;\n annotations?: Record<string, any>;\n inputSchema: Record<string, any>;\n handler: (params: any) => Promise<ToolResult>;\n};\n\nexport interface McpTransport {\n start(server: McpServer): Promise<void>;\n}\n\nexport class McpServer {\n private readonly _tools = new Map<string, StoredTool>();\n private readonly _info: { name: string; version: string };\n\n constructor(info: { name: string; version: string }) {\n this._info = info;\n }\n\n registerTool(\n name: string,\n config: {\n title?: string;\n description?: string;\n inputSchema?: Record<string, any>;\n annotations?: Record<string, any>;\n },\n handler: (params: any) => Promise<ToolResult>\n ): void {\n const shape = config.inputSchema ?? {};\n let inputSchema: Record<string, any>;\n try {\n inputSchema = z.toJSONSchema(z.object(shape)) as Record<string, any>;\n } catch {\n inputSchema = { type: 'object', properties: {} };\n }\n this._tools.set(name, {\n name,\n description: config.description,\n annotations: config.annotations,\n inputSchema,\n handler,\n });\n }\n\n async handleMessage(message: any): Promise<any> {\n const { id, method, params } = message;\n const isNotification = id === undefined;\n\n switch (method) {\n case 'initialize':\n return {\n jsonrpc: '2.0',\n id,\n result: {\n protocolVersion: '2024-11-05',\n capabilities: { tools: {} },\n serverInfo: this._info,\n },\n };\n\n case 'tools/list':\n return {\n jsonrpc: '2.0',\n id,\n result: {\n tools: Array.from(this._tools.values()).map((t) => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema,\n ...(t.annotations && { annotations: t.annotations }),\n })),\n },\n };\n\n case 'tools/call': {\n const { name, arguments: args } = params ?? {};\n const tool = this._tools.get(name);\n if (!tool) {\n if (isNotification) return null;\n return {\n jsonrpc: '2.0',\n id,\n error: { code: -32601, message: `Tool not found: ${name}` },\n };\n }\n try {\n const result = await tool.handler(args ?? {});\n if (isNotification) return null;\n return { jsonrpc: '2.0', id, result };\n } catch (error) {\n if (isNotification) return null;\n return {\n jsonrpc: '2.0',\n id,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n\n case 'ping':\n if (isNotification) return null;\n return { jsonrpc: '2.0', id, result: {} };\n\n default:\n if (isNotification) return null;\n return {\n jsonrpc: '2.0',\n id,\n error: { code: -32601, message: `Method not found: ${method}` },\n };\n }\n }\n\n async connect(transport: McpTransport): Promise<void> {\n await transport.start(this);\n }\n}\n\ntype LoadServer = (options: { isLocal: boolean }) => McpServer;\n\nexport const loadServer: LoadServer = ({ isLocal }) => {\n const server = new McpServer({\n name: 'intlayer',\n version: packageJson.version,\n });\n\n if (isLocal) {\n try {\n loadCLITools(server);\n loadInstallSkillsTool(server);\n loadInstallLSPTool(server);\n } catch (error) {\n console.error('Error loading CLI tools:', error);\n }\n }\n\n try {\n loadDocsTools(server);\n } catch (error) {\n console.error('Error loading docs tools:', error);\n }\n\n try {\n loadAPITools(server);\n } catch (error) {\n console.error('Error loading API tools:', error);\n }\n\n return server;\n};\n"],"mappings":"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"}
|
package/dist/esm/server/sse.mjs
CHANGED
|
@@ -63,8 +63,7 @@ const startServer = async () => {
|
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
app.get("/", async (_request, reply) => {
|
|
66
|
-
reply.
|
|
67
|
-
return reply.status(405).send();
|
|
66
|
+
return reply.status(200).send("OK");
|
|
68
67
|
});
|
|
69
68
|
app.delete("/", async (request, reply) => {
|
|
70
69
|
const sessionId = request.headers["mcp-session-id"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.mjs","names":[],"sources":["../../../src/server/sse.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { randomUUID } from 'node:crypto';\nimport fastifyCors from '@fastify/cors';\nimport fastifyHelmet from '@fastify/helmet';\nimport dotenv from 'dotenv';\nimport Fastify from 'fastify';\nimport { loadServer, type McpServer } from './server';\n\nconst startServer = async () => {\n const app = Fastify();\n\n const env = process.env.NODE_ENV || 'development';\n\n dotenv.config({\n path: [`.env.${env}.local`, `.env.${env}`, '.env.local', '.env'],\n quiet: true,\n });\n\n await app.register(fastifyHelmet, {\n contentSecurityPolicy: false,\n global: true,\n });\n\n await app.register(fastifyCors, {\n origin: '*',\n methods: ['GET', 'POST', 'DELETE', 'OPTIONS'],\n allowedHeaders: ['Content-Type', 'mcp-session-id'],\n });\n\n const sessions = new Map<string, McpServer>();\n\n app.post('/', async (request, reply) => {\n const sessionId = request.headers['mcp-session-id'] as string | undefined;\n\n let server: McpServer;\n let currentSessionId: string;\n\n if (sessionId && sessions.has(sessionId)) {\n server = sessions.get(sessionId)!;\n currentSessionId = sessionId;\n } else if (!sessionId) {\n currentSessionId = randomUUID();\n server = loadServer({ isLocal: false });\n sessions.set(currentSessionId, server);\n reply.header('mcp-session-id', currentSessionId);\n } else {\n return reply.status(400).send({ messages: 'Bad session id.' });\n }\n\n try {\n const response = await server.handleMessage(request.body);\n if (response !== null && response !== undefined) {\n return reply.send(response);\n }\n return reply.status(202).send();\n } catch (error) {\n return reply.status(500).send({\n jsonrpc: '2.0',\n id: (request.body as any)?.id ?? null,\n error: { code: -32000, message: ['Internal server error', error] },\n });\n }\n });\n\n app.get('/', async (_request, reply) => {\n
|
|
1
|
+
{"version":3,"file":"sse.mjs","names":[],"sources":["../../../src/server/sse.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { randomUUID } from 'node:crypto';\nimport fastifyCors from '@fastify/cors';\nimport fastifyHelmet from '@fastify/helmet';\nimport dotenv from 'dotenv';\nimport Fastify from 'fastify';\nimport { loadServer, type McpServer } from './server';\n\nconst startServer = async () => {\n const app = Fastify();\n\n const env = process.env.NODE_ENV || 'development';\n\n dotenv.config({\n path: [`.env.${env}.local`, `.env.${env}`, '.env.local', '.env'],\n quiet: true,\n });\n\n await app.register(fastifyHelmet, {\n contentSecurityPolicy: false,\n global: true,\n });\n\n await app.register(fastifyCors, {\n origin: '*',\n methods: ['GET', 'POST', 'DELETE', 'OPTIONS'],\n allowedHeaders: ['Content-Type', 'mcp-session-id'],\n });\n\n const sessions = new Map<string, McpServer>();\n\n app.post('/', async (request, reply) => {\n const sessionId = request.headers['mcp-session-id'] as string | undefined;\n\n let server: McpServer;\n let currentSessionId: string;\n\n if (sessionId && sessions.has(sessionId)) {\n server = sessions.get(sessionId)!;\n currentSessionId = sessionId;\n } else if (!sessionId) {\n currentSessionId = randomUUID();\n server = loadServer({ isLocal: false });\n sessions.set(currentSessionId, server);\n reply.header('mcp-session-id', currentSessionId);\n } else {\n return reply.status(400).send({ messages: 'Bad session id.' });\n }\n\n try {\n const response = await server.handleMessage(request.body);\n if (response !== null && response !== undefined) {\n return reply.send(response);\n }\n return reply.status(202).send();\n } catch (error) {\n return reply.status(500).send({\n jsonrpc: '2.0',\n id: (request.body as any)?.id ?? null,\n error: { code: -32000, message: ['Internal server error', error] },\n });\n }\n });\n\n app.get('/', async (_request, reply) => {\n return reply.status(200).send('OK');\n });\n\n app.delete('/', async (request, reply) => {\n const sessionId = request.headers['mcp-session-id'] as string | undefined;\n if (!sessionId || !sessions.has(sessionId)) {\n return reply.status(400).send({ messages: 'Bad session id.' });\n }\n sessions.delete(sessionId);\n return reply.status(200).send();\n });\n\n app.get('/health', async (_request, reply) => {\n return reply.send('OK');\n });\n\n const PORT = Number(process.env.PORT) || 3000;\n await app.listen({ port: PORT, host: '0.0.0.0' });\n console.info(`MCP Streamable HTTP Server listening on port ${PORT}`);\n};\n\nstartServer();\n"],"mappings":";;;;;;;;;AASA,MAAM,cAAc,YAAY;CAC9B,MAAM,MAAM,QAAQ;CAEpB,MAAM;CAEN,OAAO,OAAO;EACZ,MAAM;GAAC,QAAQ,IAAI;GAAS,QAAQ;GAAO;GAAc;EAAM;EAC/D,OAAO;CACT,CAAC;CAED,MAAM,IAAI,SAAS,eAAe;EAChC,uBAAuB;EACvB,QAAQ;CACV,CAAC;CAED,MAAM,IAAI,SAAS,aAAa;EAC9B,QAAQ;EACR,SAAS;GAAC;GAAO;GAAQ;GAAU;EAAS;EAC5C,gBAAgB,CAAC,gBAAgB,gBAAgB;CACnD,CAAC;CAED,MAAM,2BAAW,IAAI,IAAuB;CAE5C,IAAI,KAAK,KAAK,OAAO,SAAS,UAAU;EACtC,MAAM,YAAY,QAAQ,QAAQ;EAElC,IAAI;EACJ,IAAI;EAEJ,IAAI,aAAa,SAAS,IAAI,SAAS,GAAG;GACxC,SAAS,SAAS,IAAI,SAAS;GAC/B,mBAAmB;EACrB,OAAO,IAAI,CAAC,WAAW;GACrB,mBAAmB,WAAW;GAC9B,SAAS,WAAW,EAAE,SAAS,MAAM,CAAC;GACtC,SAAS,IAAI,kBAAkB,MAAM;GACrC,MAAM,OAAO,kBAAkB,gBAAgB;EACjD,OACE,OAAO,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,UAAU,kBAAkB,CAAC;EAG/D,IAAI;GACF,MAAM,WAAW,MAAM,OAAO,cAAc,QAAQ,IAAI;GACxD,IAAI,aAAa,QAAQ,aAAa,QACpC,OAAO,MAAM,KAAK,QAAQ;GAE5B,OAAO,MAAM,OAAO,GAAG,EAAE,KAAK;EAChC,SAAS,OAAO;GACd,OAAO,MAAM,OAAO,GAAG,EAAE,KAAK;IAC5B,SAAS;IACT,IAAK,QAAQ,MAAc,MAAM;IACjC,OAAO;KAAE,MAAM;KAAQ,SAAS,CAAC,yBAAyB,KAAK;IAAE;GACnE,CAAC;EACH;CACF,CAAC;CAED,IAAI,IAAI,KAAK,OAAO,UAAU,UAAU;EACtC,OAAO,MAAM,OAAO,GAAG,EAAE,KAAK,IAAI;CACpC,CAAC;CAED,IAAI,OAAO,KAAK,OAAO,SAAS,UAAU;EACxC,MAAM,YAAY,QAAQ,QAAQ;EAClC,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,SAAS,GACvC,OAAO,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,UAAU,kBAAkB,CAAC;EAE/D,SAAS,OAAO,SAAS;EACzB,OAAO,MAAM,OAAO,GAAG,EAAE,KAAK;CAChC,CAAC;CAED,IAAI,IAAI,WAAW,OAAO,UAAU,UAAU;EAC5C,OAAO,MAAM,KAAK,IAAI;CACxB,CAAC;CAED,MAAM,OAAO,OAAO,QAAQ,IAAI,IAAI,KAAK;CACzC,MAAM,IAAI,OAAO;EAAE,MAAM;EAAM,MAAM;CAAU,CAAC;CAChD,QAAQ,KAAK,gDAAgD,MAAM;AACrE;AAEA,YAAY"}
|
package/dist/esm/tools/cli.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { relative } from "node:path";
|
|
2
|
-
import z from "zod";
|
|
3
1
|
import { listProjects } from "@intlayer/chokidar/cli";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
import { relative } from "node:path";
|
|
4
4
|
import { build, extract, fill, init, listContentDeclarationRows, listMissingTranslations, pull, push } from "@intlayer/cli";
|
|
5
5
|
import { ALL_LOCALES } from "@intlayer/types/allLocales";
|
|
6
6
|
|
package/dist/esm/tools/index.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { loadInstallLSPTool } from "./installLSP.mjs";
|
|
2
2
|
import { loadCLITools } from "./cli.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { loadAPITools } from "./api.mjs";
|
|
4
4
|
import { loadInstallSkillsTool } from "./installSkills.mjs";
|
|
5
|
+
import { loadDocsTools } from "./docs.mjs";
|
|
5
6
|
|
|
6
|
-
export { loadAPITools, loadCLITools, loadDocsTools, loadInstallSkillsTool };
|
|
7
|
+
export { loadAPITools, loadCLITools, loadDocsTools, loadInstallLSPTool, loadInstallSkillsTool };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { installLSP } from "@intlayer/chokidar/cli";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
|
|
4
|
+
//#region src/tools/installLSP.ts
|
|
5
|
+
const loadInstallLSPTool = (server) => {
|
|
6
|
+
server.registerTool("intlayer-install-lsp", {
|
|
7
|
+
title: "Install Intlayer LSP",
|
|
8
|
+
description: "Configure the Intlayer Language Server in the project. Writes `intlayer.languageServer.command` and `intlayer.languageServer.args` to `.vscode/settings.json` so that VS Code, Cursor, and Windsurf automatically start the language server, enabling Go-to-Definition for `useIntlayer` and `getIntlayer` calls. Returns next-step instructions for installing the `@intlayer/lsp` binary and, optionally, registering the Intlayer Claude Code plugin.",
|
|
9
|
+
inputSchema: { projectRoot: z.string().describe("Root directory of the project. Defaults to current working directory.").optional() },
|
|
10
|
+
annotations: { destructiveHint: true }
|
|
11
|
+
}, async ({ projectRoot }) => {
|
|
12
|
+
try {
|
|
13
|
+
return { content: [{
|
|
14
|
+
type: "text",
|
|
15
|
+
text: await installLSP(projectRoot ?? process.cwd())
|
|
16
|
+
}] };
|
|
17
|
+
} catch (error) {
|
|
18
|
+
return {
|
|
19
|
+
content: [{
|
|
20
|
+
type: "text",
|
|
21
|
+
text: `Failed to configure LSP: ${error instanceof Error ? error.message : String(error)}`
|
|
22
|
+
}],
|
|
23
|
+
isError: true
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { loadInstallLSPTool };
|
|
31
|
+
//# sourceMappingURL=installLSP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installLSP.mjs","names":[],"sources":["../../../src/tools/installLSP.ts"],"sourcesContent":["import { installLSP } from '@intlayer/chokidar/cli';\nimport z from 'zod';\nimport type { McpServer } from './docs';\n\nexport const loadInstallLSPTool = (server: McpServer): void => {\n server.registerTool(\n 'intlayer-install-lsp',\n {\n title: 'Install Intlayer LSP',\n description:\n 'Configure the Intlayer Language Server in the project. ' +\n 'Writes `intlayer.languageServer.command` and `intlayer.languageServer.args` to `.vscode/settings.json` ' +\n 'so that VS Code, Cursor, and Windsurf automatically start the language server, enabling Go-to-Definition ' +\n 'for `useIntlayer` and `getIntlayer` calls. ' +\n 'Returns next-step instructions for installing the `@intlayer/lsp` binary and, optionally, ' +\n 'registering the Intlayer Claude Code plugin.',\n inputSchema: {\n projectRoot: z\n .string()\n .describe(\n 'Root directory of the project. Defaults to current working directory.'\n )\n .optional(),\n },\n annotations: {\n destructiveHint: true,\n },\n },\n async ({ projectRoot }) => {\n try {\n const root = projectRoot ?? process.cwd();\n const message = await installLSP(root);\n\n return {\n content: [{ type: 'text', text: message }],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Failed to configure LSP: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n isError: true,\n };\n }\n }\n );\n};\n"],"mappings":";;;;AAIA,MAAa,sBAAsB,WAA4B;CAC7D,OAAO,aACL,wBACA;EACE,OAAO;EACP,aACE;EAMF,aAAa,EACX,aAAa,EACV,OAAO,EACP,SACC,uEACF,EACC,SAAS,EACd;EACA,aAAa,EACX,iBAAiB,KACnB;CACF,GACA,OAAO,EAAE,kBAAkB;EACzB,IAAI;GAIF,OAAO,EACL,SAAS,CAAC;IAAE,MAAM;IAAQ,MAAM,MAHZ,WADT,eAAe,QAAQ,IAAI,CACH;GAGK,CAAC,EAC3C;EACF,SAAS,OAAO;GACd,OAAO;IACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,4BAA4B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IACzF,CACF;IACA,SAAS;GACX;EACF;CACF,CACF;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as readline from "node:readline";
|
|
2
|
-
import z from "zod";
|
|
3
1
|
import { PLATFORMS, SKILLS, installSkills } from "@intlayer/chokidar/cli";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
import * as readline from "node:readline";
|
|
4
4
|
|
|
5
5
|
//#region src/tools/installSkills.ts
|
|
6
6
|
const loadInstallSkillsTool = (server) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","names":[],"sources":["../../../src/server/server.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"server.d.ts","names":[],"sources":["../../../src/server/server.ts"],"mappings":";cAWa,OAAA;AAAA,KAQR,UAAA;EACH,OAAA;IAAW,IAAA;IAAc,IAAA;EAAA;EACzB,OAAA;AAAA;AAAA,UAWe,YAAA;EACf,KAAA,CAAM,MAAA,EAAQ,SAAA,GAAY,OAAA;AAAA;AAAA,cAGf,SAAA;EAAA,iBACM,MAAA;EAAA,iBACA,KAAA;EAEjB,WAAA,CAAY,IAAA;IAAQ,IAAA;IAAc,OAAA;EAAA;EAIlC,YAAA,CACE,IAAA,UACA,MAAA;IACE,KAAA;IACA,WAAA;IACA,WAAA,GAAc,MAAA;IACd,WAAA,GAAc,MAAA;EAAA,GAEhB,OAAA,GAAU,MAAA,UAAgB,OAAA,CAAQ,UAAA;EAkBpC,aAAA,CAAoB,OAAA,QAAe,OAAA;EAwEnC,OAAA,CAAc,SAAA,EAAW,YAAA,GAAe,OAAA;AAAA;AAAA,KAKrC,UAAA,IAAc,OAAA;EAAW,OAAA;AAAA,MAAuB,SAAA;AAAA,cAExC,UAAA,EAAY,UAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { loadDocsTools } from "./docs.js";
|
|
2
2
|
import { loadAPITools } from "./api.js";
|
|
3
3
|
import { loadCLITools } from "./cli.js";
|
|
4
|
+
import { loadInstallLSPTool } from "./installLSP.js";
|
|
4
5
|
import { loadInstallSkillsTool } from "./installSkills.js";
|
|
5
|
-
export { loadAPITools, loadCLITools, loadDocsTools, loadInstallSkillsTool };
|
|
6
|
+
export { loadAPITools, loadCLITools, loadDocsTools, loadInstallLSPTool, loadInstallSkillsTool };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installLSP.d.ts","names":[],"sources":["../../../src/tools/installLSP.ts"],"mappings":";;;cAIa,kBAAA,GAAsB,MAAQ,EAAA,SAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/mcp",
|
|
3
|
-
"version": "8.11.
|
|
3
|
+
"version": "8.11.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Intlayer MCP server. Handle MCP to help IDE to use Intlayer. It build, fill, pull, push, dictionaries",
|
|
6
6
|
"keywords": [
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
"mcp-server",
|
|
10
10
|
"mcp-proxy",
|
|
11
11
|
"documentation",
|
|
12
|
-
"cli"
|
|
12
|
+
"cli",
|
|
13
|
+
"mcp-lsp",
|
|
14
|
+
"mcp-language-server"
|
|
13
15
|
],
|
|
14
16
|
"homepage": "https://intlayer.org",
|
|
15
17
|
"bugs": {
|
|
@@ -112,18 +114,18 @@
|
|
|
112
114
|
"@ai-sdk/mcp": "^1.0.44",
|
|
113
115
|
"@fastify/cors": "11.2.0",
|
|
114
116
|
"@fastify/helmet": "13.0.2",
|
|
115
|
-
"@intlayer/api": "8.11.
|
|
116
|
-
"@intlayer/chokidar": "8.11.
|
|
117
|
-
"@intlayer/cli": "8.11.
|
|
118
|
-
"@intlayer/config": "8.11.
|
|
119
|
-
"@intlayer/docs": "8.11.
|
|
120
|
-
"@intlayer/types": "8.11.
|
|
117
|
+
"@intlayer/api": "8.11.3",
|
|
118
|
+
"@intlayer/chokidar": "8.11.3",
|
|
119
|
+
"@intlayer/cli": "8.11.3",
|
|
120
|
+
"@intlayer/config": "8.11.3",
|
|
121
|
+
"@intlayer/docs": "8.11.3",
|
|
122
|
+
"@intlayer/types": "8.11.3",
|
|
121
123
|
"dotenv": "17.4.2",
|
|
122
124
|
"fastify": "5.8.5",
|
|
123
125
|
"zod": "4.4.3"
|
|
124
126
|
},
|
|
125
127
|
"devDependencies": {
|
|
126
|
-
"@intlayer/types": "8.11.
|
|
128
|
+
"@intlayer/types": "8.11.3",
|
|
127
129
|
"@types/node": "25.9.1",
|
|
128
130
|
"@utils/ts-config": "1.0.4",
|
|
129
131
|
"@utils/ts-config-types": "1.0.4",
|