@intlayer/mcp 8.9.4 → 8.9.6-canary.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/dist/esm/client/client.mjs +1 -1
- package/dist/esm/client/sse.mjs +1 -1
- package/dist/esm/server/server.mjs +3 -3
- package/dist/esm/server/sse.mjs +79 -80
- package/dist/esm/server/sse.mjs.map +1 -1
- package/dist/esm/tools/cli.mjs +1 -1
- package/dist/esm/tools/index.mjs +2 -2
- package/dist/esm/tools/installSkills.mjs +2 -2
- package/dist/types/client/client.d.ts +1 -1
- package/package.json +13 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { createMCPClient } from "@ai-sdk/mcp";
|
|
1
2
|
import { dirname as dirname$1 } from "node:path";
|
|
2
3
|
import { fileURLToPath } from "node:url";
|
|
3
4
|
import { isESModule } from "@intlayer/config/utils";
|
|
4
|
-
import { createMCPClient } from "/Users/aymericpineau/Documents/intlayer_/node_modules/.bun/@ai-sdk+mcp@1.0.41+68a1e3a0c4588df3/node_modules/@ai-sdk/mcp/dist/index.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/client/client.ts
|
|
7
7
|
const dirname = isESModule ? dirname$1(fileURLToPath(import.meta.url)) : __dirname;
|
package/dist/esm/client/sse.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createMCPClient } from "
|
|
1
|
+
import { createMCPClient } from "@ai-sdk/mcp";
|
|
2
2
|
|
|
3
3
|
//#region src/client/sse.ts
|
|
4
4
|
const main = async () => {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { loadAPITools } from "../tools/api.mjs";
|
|
2
1
|
import { loadCLITools } from "../tools/cli.mjs";
|
|
3
|
-
import {
|
|
2
|
+
import { loadAPITools } from "../tools/api.mjs";
|
|
4
3
|
import { loadInstallSkillsTool } from "../tools/installSkills.mjs";
|
|
5
|
-
import {
|
|
4
|
+
import { loadDocsTools } from "../tools/docs.mjs";
|
|
6
5
|
import { dirname as dirname$1, resolve } from "node:path";
|
|
7
6
|
import { fileURLToPath } from "node:url";
|
|
8
7
|
import { isESModule } from "@intlayer/config/utils";
|
|
9
8
|
import z from "zod";
|
|
9
|
+
import { readFileSync } from "node:fs";
|
|
10
10
|
|
|
11
11
|
//#region src/server/server.ts
|
|
12
12
|
const dirname = isESModule ? dirname$1(fileURLToPath(import.meta.url)) : __dirname;
|
package/dist/esm/server/sse.mjs
CHANGED
|
@@ -1,90 +1,89 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { loadServer } from "./server.mjs";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
|
+
import fastifyCors from "@fastify/cors";
|
|
5
|
+
import fastifyHelmet from "@fastify/helmet";
|
|
4
6
|
import dotenv from "dotenv";
|
|
5
|
-
import
|
|
7
|
+
import Fastify from "fastify";
|
|
6
8
|
|
|
7
9
|
//#region src/server/sse.ts
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
server
|
|
38
|
-
currentSessionId
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
res.send("OK");
|
|
83
|
-
});
|
|
84
|
-
const PORT = process.env.PORT ?? 3e3;
|
|
85
|
-
app.listen(PORT, () => {
|
|
10
|
+
const startServer = async () => {
|
|
11
|
+
const app = Fastify();
|
|
12
|
+
const env = "development";
|
|
13
|
+
dotenv.config({
|
|
14
|
+
path: [
|
|
15
|
+
`.env.${env}.local`,
|
|
16
|
+
`.env.${env}`,
|
|
17
|
+
".env.local",
|
|
18
|
+
".env"
|
|
19
|
+
],
|
|
20
|
+
quiet: true
|
|
21
|
+
});
|
|
22
|
+
await app.register(fastifyHelmet, {
|
|
23
|
+
contentSecurityPolicy: false,
|
|
24
|
+
global: true
|
|
25
|
+
});
|
|
26
|
+
await app.register(fastifyCors, {
|
|
27
|
+
origin: "*",
|
|
28
|
+
methods: [
|
|
29
|
+
"GET",
|
|
30
|
+
"POST",
|
|
31
|
+
"DELETE",
|
|
32
|
+
"OPTIONS"
|
|
33
|
+
],
|
|
34
|
+
allowedHeaders: ["Content-Type", "mcp-session-id"]
|
|
35
|
+
});
|
|
36
|
+
const sessions = /* @__PURE__ */ new Map();
|
|
37
|
+
app.post("/", async (request, reply) => {
|
|
38
|
+
const sessionId = request.headers["mcp-session-id"];
|
|
39
|
+
let server;
|
|
40
|
+
let currentSessionId;
|
|
41
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
42
|
+
server = sessions.get(sessionId);
|
|
43
|
+
currentSessionId = sessionId;
|
|
44
|
+
} else if (!sessionId) {
|
|
45
|
+
currentSessionId = randomUUID();
|
|
46
|
+
server = loadServer({ isLocal: false });
|
|
47
|
+
sessions.set(currentSessionId, server);
|
|
48
|
+
reply.header("mcp-session-id", currentSessionId);
|
|
49
|
+
} else return reply.status(400).send({ messages: "Bad session id." });
|
|
50
|
+
try {
|
|
51
|
+
const response = await server.handleMessage(request.body);
|
|
52
|
+
if (response !== null && response !== void 0) return reply.send(response);
|
|
53
|
+
return reply.status(202).send();
|
|
54
|
+
} catch (error) {
|
|
55
|
+
return reply.status(500).send({
|
|
56
|
+
jsonrpc: "2.0",
|
|
57
|
+
id: request.body?.id ?? null,
|
|
58
|
+
error: {
|
|
59
|
+
code: -32e3,
|
|
60
|
+
message: ["Internal server error", error]
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
app.get("/", async (request, reply) => {
|
|
66
|
+
const sessionId = request.headers["mcp-session-id"];
|
|
67
|
+
if (!sessionId || !sessions.has(sessionId)) return reply.status(400).send({ messages: "Bad session id." });
|
|
68
|
+
return reply.status(200).send();
|
|
69
|
+
});
|
|
70
|
+
app.delete("/", async (request, reply) => {
|
|
71
|
+
const sessionId = request.headers["mcp-session-id"];
|
|
72
|
+
if (!sessionId || !sessions.has(sessionId)) return reply.status(400).send({ messages: "Bad session id." });
|
|
73
|
+
sessions.delete(sessionId);
|
|
74
|
+
return reply.status(200).send();
|
|
75
|
+
});
|
|
76
|
+
app.get("/health", async (_request, reply) => {
|
|
77
|
+
return reply.send("OK");
|
|
78
|
+
});
|
|
79
|
+
const PORT = Number(process.env.PORT) || 3e3;
|
|
80
|
+
await app.listen({
|
|
81
|
+
port: PORT,
|
|
82
|
+
host: "0.0.0.0"
|
|
83
|
+
});
|
|
86
84
|
console.info(`MCP Streamable HTTP Server listening on port ${PORT}`);
|
|
87
|
-
}
|
|
85
|
+
};
|
|
86
|
+
startServer();
|
|
88
87
|
|
|
89
88
|
//#endregion
|
|
90
89
|
//# sourceMappingURL=sse.mjs.map
|
|
@@ -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
|
|
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 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 return reply.status(200).send();\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,SAAS;CAErB,MAAM;CAEN,OAAO,OAAO;EACZ,MAAM;GAAC,QAAQ,IAAI;GAAS,QAAQ;GAAO;GAAc;GAAO;EAChE,OAAO;EACR,CAAC;CAEF,MAAM,IAAI,SAAS,eAAe;EAChC,uBAAuB;EACvB,QAAQ;EACT,CAAC;CAEF,MAAM,IAAI,SAAS,aAAa;EAC9B,QAAQ;EACR,SAAS;GAAC;GAAO;GAAQ;GAAU;GAAU;EAC7C,gBAAgB,CAAC,gBAAgB,iBAAiB;EACnD,CAAC;CAEF,MAAM,2BAAW,IAAI,KAAwB;CAE7C,IAAI,KAAK,KAAK,OAAO,SAAS,UAAU;EACtC,MAAM,YAAY,QAAQ,QAAQ;EAElC,IAAI;EACJ,IAAI;EAEJ,IAAI,aAAa,SAAS,IAAI,UAAU,EAAE;GACxC,SAAS,SAAS,IAAI,UAAU;GAChC,mBAAmB;SACd,IAAI,CAAC,WAAW;GACrB,mBAAmB,YAAY;GAC/B,SAAS,WAAW,EAAE,SAAS,OAAO,CAAC;GACvC,SAAS,IAAI,kBAAkB,OAAO;GACtC,MAAM,OAAO,kBAAkB,iBAAiB;SAEhD,OAAO,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,mBAAmB,CAAC;EAGhE,IAAI;GACF,MAAM,WAAW,MAAM,OAAO,cAAc,QAAQ,KAAK;GACzD,IAAI,aAAa,QAAQ,aAAa,QACpC,OAAO,MAAM,KAAK,SAAS;GAE7B,OAAO,MAAM,OAAO,IAAI,CAAC,MAAM;WACxB,OAAO;GACd,OAAO,MAAM,OAAO,IAAI,CAAC,KAAK;IAC5B,SAAS;IACT,IAAK,QAAQ,MAAc,MAAM;IACjC,OAAO;KAAE,MAAM;KAAQ,SAAS,CAAC,yBAAyB,MAAM;KAAE;IACnE,CAAC;;GAEJ;CAEF,IAAI,IAAI,KAAK,OAAO,SAAS,UAAU;EACrC,MAAM,YAAY,QAAQ,QAAQ;EAClC,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,UAAU,EACxC,OAAO,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,mBAAmB,CAAC;EAEhE,OAAO,MAAM,OAAO,IAAI,CAAC,MAAM;GAC/B;CAEF,IAAI,OAAO,KAAK,OAAO,SAAS,UAAU;EACxC,MAAM,YAAY,QAAQ,QAAQ;EAClC,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,UAAU,EACxC,OAAO,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,mBAAmB,CAAC;EAEhE,SAAS,OAAO,UAAU;EAC1B,OAAO,MAAM,OAAO,IAAI,CAAC,MAAM;GAC/B;CAEF,IAAI,IAAI,WAAW,OAAO,UAAU,UAAU;EAC5C,OAAO,MAAM,KAAK,KAAK;GACvB;CAEF,MAAM,OAAO,OAAO,QAAQ,IAAI,KAAK,IAAI;CACzC,MAAM,IAAI,OAAO;EAAE,MAAM;EAAM,MAAM;EAAW,CAAC;CACjD,QAAQ,KAAK,gDAAgD,OAAO;;AAGtE,aAAa"}
|
package/dist/esm/tools/cli.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { relative } from "node:path";
|
|
2
|
-
import z from "zod";
|
|
3
2
|
import { listProjects } from "@intlayer/chokidar/cli";
|
|
4
3
|
import { build, extract, fill, init, listContentDeclarationRows, listMissingTranslations, pull, push } from "@intlayer/cli";
|
|
5
4
|
import { ALL_LOCALES } from "@intlayer/types/allLocales";
|
|
5
|
+
import z from "zod";
|
|
6
6
|
|
|
7
7
|
//#region src/tools/cli.ts
|
|
8
8
|
const configOptionsSchema = z.object({
|
package/dist/esm/tools/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { loadAPITools } from "./api.mjs";
|
|
2
1
|
import { loadCLITools } from "./cli.mjs";
|
|
3
|
-
import {
|
|
2
|
+
import { loadAPITools } from "./api.mjs";
|
|
4
3
|
import { loadInstallSkillsTool } from "./installSkills.mjs";
|
|
4
|
+
import { loadDocsTools } from "./docs.mjs";
|
|
5
5
|
|
|
6
6
|
export { loadAPITools, loadCLITools, loadDocsTools, loadInstallSkillsTool };
|
|
@@ -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,4 +1,4 @@
|
|
|
1
|
-
import { MCPClient } from "
|
|
1
|
+
import { MCPClient } from "@ai-sdk/mcp";
|
|
2
2
|
|
|
3
3
|
//#region src/client/client.d.ts
|
|
4
4
|
declare const dirname: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/mcp",
|
|
3
|
-
"version": "8.9.
|
|
3
|
+
"version": "8.9.6-canary.0",
|
|
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": [
|
|
@@ -109,27 +109,28 @@
|
|
|
109
109
|
"typecheck": "tsc --noEmit --project tsconfig.types.json"
|
|
110
110
|
},
|
|
111
111
|
"dependencies": {
|
|
112
|
-
"@
|
|
113
|
-
"@
|
|
114
|
-
"@intlayer/
|
|
115
|
-
"@intlayer/
|
|
116
|
-
"@intlayer/
|
|
117
|
-
"@intlayer/
|
|
112
|
+
"@fastify/cors": "11.2.0",
|
|
113
|
+
"@fastify/helmet": "13.0.2",
|
|
114
|
+
"@intlayer/api": "8.9.6-canary.0",
|
|
115
|
+
"@intlayer/chokidar": "8.9.6-canary.0",
|
|
116
|
+
"@intlayer/cli": "8.9.6-canary.0",
|
|
117
|
+
"@intlayer/config": "8.9.6-canary.0",
|
|
118
|
+
"@intlayer/docs": "8.9.6-canary.0",
|
|
119
|
+
"@intlayer/types": "8.9.6-canary.0",
|
|
118
120
|
"dotenv": "17.4.2",
|
|
119
|
-
"
|
|
121
|
+
"fastify": "5.8.5",
|
|
120
122
|
"zod": "4.4.3"
|
|
121
123
|
},
|
|
122
124
|
"devDependencies": {
|
|
123
|
-
"@intlayer/types": "8.9.
|
|
124
|
-
"@types/
|
|
125
|
-
"@types/node": "25.6.2",
|
|
125
|
+
"@intlayer/types": "8.9.6-canary.0",
|
|
126
|
+
"@types/node": "25.8.0",
|
|
126
127
|
"@utils/ts-config": "1.0.4",
|
|
127
128
|
"@utils/ts-config-types": "1.0.4",
|
|
128
129
|
"@utils/tsdown-config": "1.0.4",
|
|
129
130
|
"rimraf": "6.1.3",
|
|
130
131
|
"tsdown": "0.22.00",
|
|
131
132
|
"typescript": "6.0.3",
|
|
132
|
-
"vitest": "4.1.
|
|
133
|
+
"vitest": "4.1.6"
|
|
133
134
|
},
|
|
134
135
|
"engines": {
|
|
135
136
|
"node": ">=14.18"
|