@intlayer/mcp 5.5.12 → 5.6.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.
Files changed (50) hide show
  1. package/README.md +107 -78
  2. package/dist/cjs/client/client.cjs +44 -0
  3. package/dist/cjs/client/client.cjs.map +1 -0
  4. package/dist/cjs/client/sse.cjs +61 -0
  5. package/dist/cjs/client/sse.cjs.map +1 -0
  6. package/dist/cjs/server/server.cjs +56 -0
  7. package/dist/cjs/server/server.cjs.map +1 -0
  8. package/dist/cjs/server/sse.cjs +123 -0
  9. package/dist/cjs/server/sse.cjs.map +1 -0
  10. package/dist/cjs/server/stdio.cjs +15 -0
  11. package/dist/cjs/server/stdio.cjs.map +1 -0
  12. package/dist/cjs/tools/cli.cjs +188 -0
  13. package/dist/cjs/tools/cli.cjs.map +1 -0
  14. package/dist/cjs/tools/docs.cjs +148 -0
  15. package/dist/cjs/tools/docs.cjs.map +1 -0
  16. package/dist/esm/client/client.mjs +18 -0
  17. package/dist/esm/client/client.mjs.map +1 -0
  18. package/dist/esm/client/sse.mjs +60 -0
  19. package/dist/esm/client/sse.mjs.map +1 -0
  20. package/dist/esm/server/server.mjs +30 -0
  21. package/dist/esm/server/server.mjs.map +1 -0
  22. package/dist/esm/server/sse.mjs +100 -0
  23. package/dist/esm/server/sse.mjs.map +1 -0
  24. package/dist/esm/server/stdio.mjs +14 -0
  25. package/dist/esm/server/stdio.mjs.map +1 -0
  26. package/dist/esm/tools/cli.mjs +154 -0
  27. package/dist/esm/tools/cli.mjs.map +1 -0
  28. package/dist/esm/tools/docs.mjs +114 -0
  29. package/dist/esm/tools/docs.mjs.map +1 -0
  30. package/dist/types/client/client.d.ts +26 -0
  31. package/dist/types/client/client.d.ts.map +1 -0
  32. package/dist/types/client/sse.d.ts +2 -0
  33. package/dist/types/client/sse.d.ts.map +1 -0
  34. package/dist/types/server/server.d.ts +4 -0
  35. package/dist/types/server/server.d.ts.map +1 -0
  36. package/dist/types/server/sse.d.ts +3 -0
  37. package/dist/types/server/sse.d.ts.map +1 -0
  38. package/dist/types/server/stdio.d.ts +3 -0
  39. package/dist/types/server/stdio.d.ts.map +1 -0
  40. package/dist/types/tools/cli.d.ts +3 -0
  41. package/dist/types/tools/cli.d.ts.map +1 -0
  42. package/dist/types/tools/docs.d.ts +3 -0
  43. package/dist/types/tools/docs.d.ts.map +1 -0
  44. package/package.json +32 -23
  45. package/dist/cjs/index.cjs +0 -358
  46. package/dist/cjs/index.cjs.map +0 -1
  47. package/dist/esm/index.mjs +0 -323
  48. package/dist/esm/index.mjs.map +0 -1
  49. package/dist/types/index.d.ts +0 -3
  50. package/dist/types/index.d.ts.map +0 -1
@@ -1,358 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
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 __export = (target, all) => {
10
- for (var name in all)
11
- __defProp(target, name, { get: all[name], enumerable: true });
12
- };
13
- var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from))
16
- if (!__hasOwnProp.call(to, key) && key !== except)
17
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
- }
19
- return to;
20
- };
21
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
- // If the importer is in node compatibility mode or this is not an ESM
23
- // file that has been converted to a CommonJS file using a Babel-
24
- // compatible transform (i.e. "__esModule" has not been set), then set
25
- // "default" to the CommonJS "module.exports" for node compatibility.
26
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
- mod
28
- ));
29
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
- var index_exports = {};
31
- __export(index_exports, {
32
- dirname: () => dirname
33
- });
34
- module.exports = __toCommonJS(index_exports);
35
- var import_cli = require("@intlayer/cli");
36
- var import_config = require("@intlayer/config");
37
- var import_docs = require("@intlayer/docs");
38
- var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
39
- var import_sse = require("@modelcontextprotocol/sdk/server/sse.js");
40
- var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
41
- var import_express = __toESM(require("express"));
42
- var import_fs = require("fs");
43
- var import_path = require("path");
44
- var import_url = require("url");
45
- var import_zod = require("zod");
46
- const import_meta = {};
47
- const dirname = import_config.isESModule ? (0, import_path.dirname)((0, import_url.fileURLToPath)(import_meta.url)) : __dirname;
48
- const packageJson = JSON.parse(
49
- (0, import_fs.readFileSync)((0, import_path.resolve)(dirname, "../../package.json"), "utf8")
50
- );
51
- const buildToolSchema = {
52
- watch: import_zod.z.boolean().optional().describe("Watch for changes"),
53
- baseDir: import_zod.z.string().optional().describe("Base directory"),
54
- env: import_zod.z.string().optional().describe("Environment"),
55
- envFile: import_zod.z.string().optional().describe("Environment file"),
56
- verbose: import_zod.z.boolean().optional().describe("Verbose output"),
57
- prefix: import_zod.z.string().optional().describe("Log prefix")
58
- };
59
- const fillToolSchema = {
60
- sourceLocale: import_zod.z.nativeEnum(import_config.Locales).optional().describe("Source locale"),
61
- outputLocales: import_zod.z.union([import_zod.z.nativeEnum(import_config.Locales), import_zod.z.array(import_zod.z.nativeEnum(import_config.Locales))]).optional().describe("Output locales"),
62
- file: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional().describe("File path"),
63
- mode: import_zod.z.enum(["complete", "review"]).optional().describe("Fill mode"),
64
- keys: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional().describe("Keys to include"),
65
- excludedKeys: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional().describe("Keys to exclude"),
66
- pathFilter: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional().describe("Path filter"),
67
- gitOptions: import_zod.z.object({
68
- gitDiff: import_zod.z.boolean().optional(),
69
- gitDiffBase: import_zod.z.string().optional(),
70
- gitDiffCurrent: import_zod.z.string().optional(),
71
- uncommitted: import_zod.z.boolean().optional(),
72
- unpushed: import_zod.z.boolean().optional(),
73
- untracked: import_zod.z.boolean().optional()
74
- }).optional().describe("Git options"),
75
- aiOptions: import_zod.z.object({
76
- provider: import_zod.z.string().optional(),
77
- temperature: import_zod.z.number().optional(),
78
- model: import_zod.z.string().optional(),
79
- apiKey: import_zod.z.string().optional(),
80
- customPrompt: import_zod.z.string().optional(),
81
- applicationContext: import_zod.z.string().optional()
82
- }).optional().describe("AI options")
83
- };
84
- const pushToolSchema = {
85
- deleteLocaleDictionary: import_zod.z.boolean().optional().describe("Delete local dictionary after push"),
86
- keepLocaleDictionary: import_zod.z.boolean().optional().describe("Keep local dictionary after push"),
87
- dictionaries: import_zod.z.array(import_zod.z.string()).optional().describe("List of dictionaries to push"),
88
- gitOptions: import_zod.z.object({
89
- gitDiff: import_zod.z.boolean().optional(),
90
- gitDiffBase: import_zod.z.string().optional(),
91
- gitDiffCurrent: import_zod.z.string().optional(),
92
- uncommitted: import_zod.z.boolean().optional(),
93
- unpushed: import_zod.z.boolean().optional(),
94
- untracked: import_zod.z.boolean().optional()
95
- }).optional().describe("Git options")
96
- };
97
- const pullToolSchema = {
98
- dictionaries: import_zod.z.array(import_zod.z.string()).optional().describe("List of dictionaries to pull"),
99
- newDictionariesPath: import_zod.z.string().optional().describe("Path to save new dictionaries")
100
- };
101
- const server = new import_mcp.McpServer({
102
- name: "intlayer",
103
- version: packageJson.version,
104
- capabilities: {
105
- resources: {}
106
- }
107
- });
108
- server.tool(
109
- "intlayer-build",
110
- "Build the dictionaries. List all content declarations files `.content.{ts,tsx,js,json,...}` to update the content callable using the `useIntlayer` hook.",
111
- buildToolSchema,
112
- async ({ watch, baseDir, env, envFile, verbose, prefix }) => {
113
- try {
114
- const log = {};
115
- if (verbose) {
116
- log.mode = "verbose";
117
- }
118
- if (prefix) {
119
- log.prefix = prefix;
120
- }
121
- await (0, import_cli.build)({
122
- watch,
123
- configOptions: {
124
- baseDir,
125
- env,
126
- envFile,
127
- override: {
128
- log
129
- }
130
- }
131
- });
132
- return {
133
- content: [
134
- {
135
- type: "text",
136
- text: "Build successful."
137
- }
138
- ]
139
- };
140
- } catch (error) {
141
- const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
142
- return {
143
- content: [
144
- {
145
- type: "text",
146
- text: `Build failed: ${errorMessage}`
147
- }
148
- ]
149
- };
150
- }
151
- }
152
- );
153
- server.tool(
154
- "intlayer-fill",
155
- "Fill the dictionaries with missing translations / review translations using Intlayer servers",
156
- fillToolSchema,
157
- async (props) => {
158
- try {
159
- const { gitOptions, ...rest } = props;
160
- const fillOptions = { ...rest, gitOptions: void 0 };
161
- if (gitOptions) {
162
- const { gitDiff, uncommitted, unpushed, untracked, ...restGit } = gitOptions;
163
- const mode = [];
164
- if (gitDiff) mode.push("gitDiff");
165
- if (uncommitted) mode.push("uncommitted");
166
- if (unpushed) mode.push("unpushed");
167
- if (untracked) mode.push("untracked");
168
- fillOptions.gitOptions = { ...restGit, mode };
169
- }
170
- await (0, import_cli.fill)(fillOptions);
171
- return {
172
- content: [
173
- {
174
- type: "text",
175
- text: "Fill successful."
176
- }
177
- ]
178
- };
179
- } catch (error) {
180
- const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
181
- return {
182
- content: [
183
- {
184
- type: "text",
185
- text: `Fill failed: ${errorMessage}`
186
- }
187
- ]
188
- };
189
- }
190
- }
191
- );
192
- server.tool(
193
- "intlayer-push",
194
- "Push locale dictionaries to the server",
195
- pushToolSchema,
196
- async (props) => {
197
- try {
198
- const { gitOptions, ...rest } = props;
199
- const pushOptions = { ...rest, gitOptions: void 0 };
200
- if (gitOptions) {
201
- const { gitDiff, uncommitted, unpushed, untracked, ...restGit } = gitOptions;
202
- const mode = [];
203
- if (gitDiff) mode.push("gitDiff");
204
- if (uncommitted) mode.push("uncommitted");
205
- if (unpushed) mode.push("unpushed");
206
- if (untracked) mode.push("untracked");
207
- pushOptions.gitOptions = { ...restGit, mode };
208
- }
209
- await (0, import_cli.push)(pushOptions);
210
- return {
211
- content: [
212
- {
213
- type: "text",
214
- text: "Push successful."
215
- }
216
- ]
217
- };
218
- } catch (error) {
219
- const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
220
- return {
221
- content: [
222
- {
223
- type: "text",
224
- text: `Push failed: ${errorMessage}`
225
- }
226
- ]
227
- };
228
- }
229
- }
230
- );
231
- server.tool(
232
- "intlayer-pull",
233
- "Pull dictionaries from the CMS",
234
- pullToolSchema,
235
- async (props) => {
236
- try {
237
- await (0, import_cli.pull)(props);
238
- return {
239
- content: [
240
- {
241
- type: "text",
242
- text: "Pull successful."
243
- }
244
- ]
245
- };
246
- } catch (error) {
247
- const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
248
- return {
249
- content: [
250
- {
251
- type: "text",
252
- text: `Pull failed: ${errorMessage}`
253
- }
254
- ]
255
- };
256
- }
257
- }
258
- );
259
- server.tool(
260
- "get-doc-list",
261
- "Get the list of docs names and their metadata to get more details about what doc to retrieve",
262
- {
263
- lang: import_zod.z.nativeEnum(import_config.Locales).optional().describe("Language of the docs")
264
- },
265
- async ({ lang }) => {
266
- const docsMetadataRecord = await (0, import_docs.getDocMetadataRecord)(lang);
267
- return {
268
- content: [
269
- {
270
- type: "text",
271
- text: JSON.stringify(docsMetadataRecord, null, 2)
272
- }
273
- ]
274
- };
275
- }
276
- );
277
- server.tool(
278
- "get-doc",
279
- "Get a doc by his key. Example: `./docs/en/getting-started.md`. List all docs metadata first to get more details about what doc key to retrieve.",
280
- {
281
- docKey: import_zod.z.string(),
282
- lang: import_zod.z.nativeEnum(import_config.Locales).optional().describe("Language of the docs")
283
- },
284
- async ({ docKey, lang }) => {
285
- const doc = await (0, import_docs.getDoc)(docKey, lang);
286
- return {
287
- content: [{ type: "text", text: doc }]
288
- };
289
- }
290
- );
291
- server.tool(
292
- "get-doc-by-slug",
293
- "Get an array of docs by their slugs. If not slug is provided, return all docs (1.2Mb). List all docs metadata first to get more details about what doc to retrieve.",
294
- {
295
- slug: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).optional().describe(
296
- "Slug of the docs. If not provided, return all docs. If not provided, return all docs."
297
- ),
298
- lang: import_zod.z.nativeEnum(import_config.Locales).optional().describe("Language of the docs"),
299
- strict: import_zod.z.boolean().optional().describe(
300
- "Strict mode - only return docs that match all slugs, by excluding additional slugs"
301
- ),
302
- description: "Get an array of docs by their slugs"
303
- },
304
- async ({ slug, lang, strict }) => {
305
- const doc = await (0, import_docs.getDocBySlug)(slug, lang, strict);
306
- return {
307
- content: doc.map((d) => ({ type: "text", text: d }))
308
- };
309
- }
310
- );
311
- const main = async () => {
312
- const args = process.argv.slice(2);
313
- const useHttp = args.includes("--http") ?? process.env.MCP_TRANSPORT === "http";
314
- const port = parseInt(process.env.MCP_PORT ?? "6274");
315
- if (useHttp) {
316
- const app = (0, import_express.default)();
317
- app.use(import_express.default.json());
318
- const transports = {};
319
- app.get("/mcp", async (req, res) => {
320
- console.error("SSE connection request received");
321
- const transport = new import_sse.SSEServerTransport("/messages", res);
322
- transports[transport.sessionId] = transport;
323
- res.on("close", () => {
324
- console.error("SSE connection closed");
325
- delete transports[transport.sessionId];
326
- });
327
- await server.connect(transport);
328
- });
329
- app.post("/messages", async (req, res) => {
330
- const sessionId = req.query.sessionId;
331
- if (!sessionId || !transports[sessionId]) {
332
- res.status(400).json({ error: "Invalid session ID" });
333
- return;
334
- }
335
- const transport = transports[sessionId];
336
- await transport.handlePostMessage(req, res, req.body);
337
- });
338
- app.get("/health", (req, res) => {
339
- res.json({ status: "ok", transport: "http" });
340
- });
341
- app.listen(port, () => {
342
- console.error(`Intlayer MCP Server running on HTTP port ${port}`);
343
- });
344
- } else {
345
- const transport = new import_stdio.StdioServerTransport();
346
- await server.connect(transport);
347
- console.error("Intlayer MCP Server running on stdio");
348
- }
349
- };
350
- main().catch((error) => {
351
- console.error("Fatal error in main():", error);
352
- process.exit(1);
353
- });
354
- // Annotate the CommonJS export names for ESM import in node:
355
- 0 && (module.exports = {
356
- dirname
357
- });
358
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { build, fill, pull, push } from '@intlayer/cli';\nimport { isESModule, Locales, type LogConfig } from '@intlayer/config';\nimport { getDoc, getDocBySlug, getDocMetadataRecord } from '@intlayer/docs';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport express, { Request, Response } from 'express';\nimport { readFileSync } from 'fs';\nimport { dirname as pathDirname, resolve } from 'path';\nimport { fileURLToPath } from 'url';\nimport { z } from 'zod';\n\nexport const dirname = isESModule\n ? pathDirname(fileURLToPath(import.meta.url))\n : __dirname;\n\nconst packageJson = JSON.parse(\n readFileSync(resolve(dirname, '../../package.json'), 'utf8')\n);\n\nconst buildToolSchema = {\n watch: z.boolean().optional().describe('Watch for changes'),\n baseDir: z.string().optional().describe('Base directory'),\n env: z.string().optional().describe('Environment'),\n envFile: z.string().optional().describe('Environment file'),\n verbose: z.boolean().optional().describe('Verbose output'),\n prefix: z.string().optional().describe('Log prefix'),\n};\n\ntype BuildToolProps = z.infer<z.ZodObject<typeof buildToolSchema>>;\n\nconst fillToolSchema = {\n sourceLocale: z.nativeEnum(Locales).optional().describe('Source locale'),\n outputLocales: z\n .union([z.nativeEnum(Locales), z.array(z.nativeEnum(Locales))])\n .optional()\n .describe('Output locales'),\n file: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe('File path'),\n mode: z.enum(['complete', 'review']).optional().describe('Fill mode'),\n keys: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe('Keys to include'),\n excludedKeys: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe('Keys to exclude'),\n pathFilter: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe('Path filter'),\n gitOptions: z\n .object({\n gitDiff: z.boolean().optional(),\n gitDiffBase: z.string().optional(),\n gitDiffCurrent: z.string().optional(),\n uncommitted: z.boolean().optional(),\n unpushed: z.boolean().optional(),\n untracked: z.boolean().optional(),\n })\n .optional()\n .describe('Git options'),\n aiOptions: z\n .object({\n provider: z.string().optional(),\n temperature: z.number().optional(),\n model: z.string().optional(),\n apiKey: z.string().optional(),\n customPrompt: z.string().optional(),\n applicationContext: z.string().optional(),\n })\n .optional()\n .describe('AI options'),\n};\n\ntype FillToolProps = z.infer<z.ZodObject<typeof fillToolSchema>>;\n\nconst pushToolSchema = {\n deleteLocaleDictionary: z\n .boolean()\n .optional()\n .describe('Delete local dictionary after push'),\n keepLocaleDictionary: z\n .boolean()\n .optional()\n .describe('Keep local dictionary after push'),\n dictionaries: z\n .array(z.string())\n .optional()\n .describe('List of dictionaries to push'),\n gitOptions: z\n .object({\n gitDiff: z.boolean().optional(),\n gitDiffBase: z.string().optional(),\n gitDiffCurrent: z.string().optional(),\n uncommitted: z.boolean().optional(),\n unpushed: z.boolean().optional(),\n untracked: z.boolean().optional(),\n })\n .optional()\n .describe('Git options'),\n};\n\ntype PushToolProps = z.infer<z.ZodObject<typeof pushToolSchema>>;\n\nconst pullToolSchema = {\n dictionaries: z\n .array(z.string())\n .optional()\n .describe('List of dictionaries to pull'),\n newDictionariesPath: z\n .string()\n .optional()\n .describe('Path to save new dictionaries'),\n};\n\ntype PullToolProps = z.infer<z.ZodObject<typeof pullToolSchema>>;\n\nconst server = new McpServer({\n name: 'intlayer',\n version: packageJson.version,\n capabilities: {\n resources: {},\n },\n});\n\nserver.tool(\n 'intlayer-build',\n 'Build the dictionaries. List all content declarations files `.content.{ts,tsx,js,json,...}` to update the content callable using the `useIntlayer` hook.',\n buildToolSchema,\n async ({ watch, baseDir, env, envFile, verbose, prefix }: BuildToolProps) => {\n try {\n const log: Partial<LogConfig> = {};\n if (verbose) {\n log.mode = 'verbose';\n }\n if (prefix) {\n log.prefix = prefix;\n }\n\n await build({\n watch,\n configOptions: {\n baseDir,\n env,\n envFile,\n override: {\n log,\n },\n },\n });\n\n return {\n content: [\n {\n type: 'text',\n text: 'Build successful.',\n },\n ],\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n content: [\n {\n type: 'text',\n text: `Build failed: ${errorMessage}`,\n },\n ],\n };\n }\n }\n);\n\nserver.tool(\n 'intlayer-fill',\n 'Fill the dictionaries with missing translations / review translations using Intlayer servers',\n fillToolSchema,\n async (props: FillToolProps) => {\n try {\n const { gitOptions, ...rest } = props;\n const fillOptions: any = { ...rest, gitOptions: undefined };\n\n if (gitOptions) {\n const { gitDiff, uncommitted, unpushed, untracked, ...restGit } =\n gitOptions;\n const mode = [];\n if (gitDiff) mode.push('gitDiff');\n if (uncommitted) mode.push('uncommitted');\n if (unpushed) mode.push('unpushed');\n if (untracked) mode.push('untracked');\n\n fillOptions.gitOptions = { ...restGit, mode };\n }\n\n await fill(fillOptions);\n\n return {\n content: [\n {\n type: 'text',\n text: 'Fill successful.',\n },\n ],\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n content: [\n {\n type: 'text',\n text: `Fill failed: ${errorMessage}`,\n },\n ],\n };\n }\n }\n);\n\nserver.tool(\n 'intlayer-push',\n 'Push locale dictionaries to the server',\n pushToolSchema,\n async (props: PushToolProps) => {\n try {\n const { gitOptions, ...rest } = props;\n const pushOptions: any = { ...rest, gitOptions: undefined };\n\n if (gitOptions) {\n const { gitDiff, uncommitted, unpushed, untracked, ...restGit } =\n gitOptions;\n const mode = [];\n if (gitDiff) mode.push('gitDiff');\n if (uncommitted) mode.push('uncommitted');\n if (unpushed) mode.push('unpushed');\n if (untracked) mode.push('untracked');\n\n pushOptions.gitOptions = { ...restGit, mode };\n }\n\n await push(pushOptions);\n\n return {\n content: [\n {\n type: 'text',\n text: 'Push successful.',\n },\n ],\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n content: [\n {\n type: 'text',\n text: `Push failed: ${errorMessage}`,\n },\n ],\n };\n }\n }\n);\n\nserver.tool(\n 'intlayer-pull',\n 'Pull dictionaries from the CMS',\n pullToolSchema,\n async (props: PullToolProps) => {\n try {\n await pull(props);\n\n return {\n content: [\n {\n type: 'text',\n text: 'Pull successful.',\n },\n ],\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n content: [\n {\n type: 'text',\n text: `Pull failed: ${errorMessage}`,\n },\n ],\n };\n }\n }\n);\n\nserver.tool(\n 'get-doc-list',\n 'Get the list of docs names and their metadata to get more details about what doc to retrieve',\n {\n lang: z.nativeEnum(Locales).optional().describe('Language of the docs'),\n },\n async ({ lang }) => {\n const docsMetadataRecord = await getDocMetadataRecord(lang);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(docsMetadataRecord, null, 2),\n },\n ],\n };\n }\n);\n\nserver.tool(\n 'get-doc',\n 'Get a doc by his key. Example: `./docs/en/getting-started.md`. List all docs metadata first to get more details about what doc key to retrieve.',\n {\n docKey: z.string(),\n lang: z.nativeEnum(Locales).optional().describe('Language of the docs'),\n },\n async ({ docKey, lang }) => {\n const doc = await getDoc(docKey as any, lang);\n return {\n content: [{ type: 'text', text: doc }],\n };\n }\n);\n\nserver.tool(\n 'get-doc-by-slug',\n 'Get an array of docs by their slugs. If not slug is provided, return all docs (1.2Mb). List all docs metadata first to get more details about what doc to retrieve.',\n {\n slug: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe(\n 'Slug of the docs. If not provided, return all docs. If not provided, return all docs.'\n ),\n lang: z.nativeEnum(Locales).optional().describe('Language of the docs'),\n strict: z\n .boolean()\n .optional()\n .describe(\n 'Strict mode - only return docs that match all slugs, by excluding additional slugs'\n ),\n description: 'Get an array of docs by their slugs',\n },\n async ({ slug, lang, strict }) => {\n const doc = await getDocBySlug(slug, lang, strict);\n return {\n content: doc.map((d) => ({ type: 'text', text: d })),\n };\n }\n);\n\nconst main = async () => {\n const args = process.argv.slice(2);\n const useHttp =\n args.includes('--http') ?? process.env.MCP_TRANSPORT === 'http';\n const port = parseInt(process.env.MCP_PORT ?? '6274');\n\n if (useHttp) {\n // HTTP/SSE transport for Docker/remote usage\n const app = express();\n app.use(express.json());\n\n const transports: { [sessionId: string]: SSEServerTransport } = {};\n\n // SSE connection endpoint\n app.get('/mcp', async (req: Request, res: Response) => {\n console.error('SSE connection request received');\n\n const transport = new SSEServerTransport('/messages', res);\n transports[transport.sessionId] = transport;\n\n res.on('close', () => {\n console.error('SSE connection closed');\n delete transports[transport.sessionId];\n });\n\n await server.connect(transport);\n });\n\n // Message handling endpoint\n app.post('/messages', async (req: Request, res: Response) => {\n const sessionId = req.query.sessionId as string;\n\n if (!sessionId || !transports[sessionId]) {\n res.status(400).json({ error: 'Invalid session ID' });\n return;\n }\n\n const transport = transports[sessionId];\n await transport.handlePostMessage(req, res, req.body);\n });\n\n // Health check endpoint\n app.get('/health', (req: Request, res: Response) => {\n res.json({ status: 'ok', transport: 'http' });\n });\n\n app.listen(port, () => {\n console.error(`Intlayer MCP Server running on HTTP port ${port}`);\n });\n } else {\n // Original stdio transport for local usage\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('Intlayer MCP Server running on stdio');\n }\n};\n\nmain().catch((error) => {\n console.error('Fatal error in main():', error);\n process.exit(1);\n});\n"],"mappings":"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","names":["pathDirname","express"]}