@intlayer/mcp
Version: 
Intlayer MCP server. Handle MCP to help IDE to use Intlayer. It build, fill, pull, push, dictionaries
1 lines • 14.5 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/tools/cli.ts"],"sourcesContent":["import {\n  fill,\n  listContentDeclarationRows,\n  listMissingTranslations,\n  pull,\n  push,\n} from '@intlayer/cli';\nimport { Locales } from '@intlayer/config';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport z from 'zod';\n\nexport const loadCLITools = async (server: McpServer) => {\n  server.tool(\n    'intlayer-fill',\n    'Fill the dictionaries with missing translations / review translations using Intlayer servers',\n    {\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    async (props) => {\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\n  server.tool(\n    'intlayer-push',\n    'Push local dictionaries to the server',\n    {\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    async (props) => {\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\n  server.tool(\n    'intlayer-pull',\n    'Pull dictionaries from the CMS',\n    {\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    async (props) => {\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\n  server.tool(\n    'intlayer-content-list',\n    'List the content declaration (.content.{ts,tsx,js,json,...}) files present in the project. That files contain the multilingual content of the application and are used to build the dictionaries.',\n    {\n      configOptions: z\n        .object({\n          baseDir: z.string().optional(),\n          env: z.string().optional(),\n          envFile: z.string().optional(),\n          override: z\n            .object({\n              log: z\n                .object({\n                  prefix: z.string().optional(),\n                  verbose: z.boolean().optional(),\n                })\n                .optional(),\n            })\n            .optional(),\n        })\n        .optional()\n        .describe('Configuration options'),\n    },\n    async (props) => {\n      try {\n        const rows = listContentDeclarationRows(props);\n        return {\n          content: [\n            {\n              type: 'text',\n              text: JSON.stringify(rows, null, 2),\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: `Content list failed: ${errorMessage}`,\n            },\n          ],\n        };\n      }\n    }\n  );\n\n  server.tool(\n    'intlayer-content-test',\n    'Test if there are missing translations in the content declaration files. That files contain the multilingual content of the application and are used to build the dictionaries.',\n    {\n      configOptions: z\n        .object({\n          baseDir: z.string().optional(),\n          env: z.string().optional(),\n          envFile: z.string().optional(),\n          override: z\n            .object({\n              log: z\n                .object({\n                  prefix: z.string().optional(),\n                  verbose: z.boolean().optional(),\n                })\n                .optional(),\n            })\n            .optional(),\n        })\n        .optional()\n        .describe('Configuration options'),\n    },\n    async (props) => {\n      try {\n        const missingTranslations = listMissingTranslations(\n          undefined,\n          props?.configOptions\n        );\n        return {\n          content: [\n            {\n              type: 'text',\n              text: JSON.stringify(missingTranslations, null, 2),\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: `Content test failed: ${errorMessage}`,\n            },\n          ],\n        };\n      }\n    }\n  );\n};\n"],"mappings":"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","names":[]}