@better-i18n/mcp 0.0.1 → 0.1.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 (63) hide show
  1. package/README.md +15 -14
  2. package/dist/base-tool.d.ts +5 -1
  3. package/dist/base-tool.d.ts.map +1 -1
  4. package/dist/base-tool.js +16 -1
  5. package/dist/base-tool.js.map +1 -1
  6. package/dist/client.d.ts +6 -0
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +1 -1
  9. package/dist/client.js.map +1 -1
  10. package/dist/index.js +44 -22
  11. package/dist/index.js.map +1 -1
  12. package/dist/tools/addLanguage.d.ts +8 -0
  13. package/dist/tools/addLanguage.d.ts.map +1 -0
  14. package/dist/tools/addLanguage.js +42 -0
  15. package/dist/tools/addLanguage.js.map +1 -0
  16. package/dist/tools/createKeys.d.ts +8 -0
  17. package/dist/tools/createKeys.d.ts.map +1 -0
  18. package/dist/tools/{bulkCreateKeys.js → createKeys.js} +17 -15
  19. package/dist/tools/createKeys.js.map +1 -0
  20. package/dist/tools/deleteKeys.d.ts +9 -0
  21. package/dist/tools/deleteKeys.d.ts.map +1 -0
  22. package/dist/tools/deleteKeys.js +47 -0
  23. package/dist/tools/deleteKeys.js.map +1 -0
  24. package/dist/tools/getProject.d.ts +8 -0
  25. package/dist/tools/getProject.d.ts.map +1 -0
  26. package/dist/tools/{getProjectInfo.js → getProject.js} +7 -7
  27. package/dist/tools/getProject.js.map +1 -0
  28. package/dist/tools/getSync.d.ts +8 -0
  29. package/dist/tools/getSync.d.ts.map +1 -0
  30. package/dist/tools/getSync.js +31 -0
  31. package/dist/tools/getSync.js.map +1 -0
  32. package/dist/tools/getSyncs.d.ts +8 -0
  33. package/dist/tools/getSyncs.d.ts.map +1 -0
  34. package/dist/tools/getSyncs.js +57 -0
  35. package/dist/tools/getSyncs.js.map +1 -0
  36. package/dist/tools/listProjects.d.ts +9 -0
  37. package/dist/tools/listProjects.d.ts.map +1 -0
  38. package/dist/tools/listProjects.js +36 -0
  39. package/dist/tools/listProjects.js.map +1 -0
  40. package/dist/tools/updateKeys.d.ts +8 -0
  41. package/dist/tools/updateKeys.d.ts.map +1 -0
  42. package/dist/tools/{bulkUpdateTranslations.js → updateKeys.js} +35 -17
  43. package/dist/tools/updateKeys.js.map +1 -0
  44. package/dist/types/index.d.ts +15 -2
  45. package/dist/types/index.d.ts.map +1 -1
  46. package/package.json +2 -2
  47. package/dist/tools/bulkCreateKeys.d.ts +0 -8
  48. package/dist/tools/bulkCreateKeys.d.ts.map +0 -1
  49. package/dist/tools/bulkCreateKeys.js.map +0 -1
  50. package/dist/tools/bulkUpdateTranslations.d.ts +0 -8
  51. package/dist/tools/bulkUpdateTranslations.d.ts.map +0 -1
  52. package/dist/tools/bulkUpdateTranslations.js.map +0 -1
  53. package/dist/tools/createTranslationKey.d.ts +0 -8
  54. package/dist/tools/createTranslationKey.d.ts.map +0 -1
  55. package/dist/tools/createTranslationKey.js +0 -55
  56. package/dist/tools/createTranslationKey.js.map +0 -1
  57. package/dist/tools/getProjectInfo.d.ts +0 -8
  58. package/dist/tools/getProjectInfo.d.ts.map +0 -1
  59. package/dist/tools/getProjectInfo.js.map +0 -1
  60. package/dist/tools/updateTranslation.d.ts +0 -8
  61. package/dist/tools/updateTranslation.d.ts.map +0 -1
  62. package/dist/tools/updateTranslation.js +0 -61
  63. package/dist/tools/updateTranslation.js.map +0 -1
package/README.md CHANGED
@@ -35,7 +35,7 @@ npm install -g @better-i18n/mcp
35
35
  import { createI18n } from "@better-i18n/next";
36
36
 
37
37
  export const i18n = createI18n({
38
- project: "your-org/your-project", // Format: "org-slug/project-slug"
38
+ project: "your-org/your-project", // Format: "org-slug/project-slug"
39
39
  defaultLocale: "en",
40
40
  });
41
41
  ```
@@ -64,14 +64,15 @@ Add to `~/.cursor/mcp.json`:
64
64
 
65
65
  All tools require a `project` parameter in `org/project` format (e.g., `aliosman-co/personal`).
66
66
 
67
- | Tool | Description |
68
- |------|-------------|
69
- | `getProjectInfo` | Get project overview: namespaces, languages, key count |
70
- | `listKeys` | List all translation keys with filtering |
71
- | `createTranslationKey` | Create a single key with source text |
72
- | `bulkCreateKeys` | Create multiple keys at once (more efficient) |
73
- | `updateTranslation` | Update a single translation |
74
- | `bulkUpdateTranslations` | Update multiple translations at once (more efficient) |
67
+ | Tool | Description |
68
+ | -------------------- | ------------------------------------------------------------------------ |
69
+ | `listProjects` | List all accessible projects |
70
+ | `getProject` | Get project overview: namespaces, languages, coverage stats |
71
+ | `getAllTranslations` | Fetch all keys with translations (no pagination) |
72
+ | `listKeys` | List translation keys with filtering and pagination |
73
+ | `createKeys` | Create one or more keys (Compact: `n`, `ns`, `v`, `t`) |
74
+ | `updateKeys` | Update one or more translations (Compact: `k`, `n`, `ns`, `l`, `t`, `s`) |
75
+ | `addLanguage` | Add a new target language to the project |
75
76
 
76
77
  ## Example Prompts
77
78
 
@@ -94,11 +95,11 @@ Ask your AI assistant:
94
95
 
95
96
  ## Environment Variables
96
97
 
97
- | Variable | Required | Description |
98
- |----------|----------|-------------|
99
- | `BETTER_I18N_API_KEY` | Yes | Your API key |
100
- | `BETTER_I18N_API_URL` | No | API URL (default: dash.better-i18n.com) |
101
- | `BETTER_I18N_DEBUG` | No | Enable verbose logging |
98
+ | Variable | Required | Description |
99
+ | --------------------- | -------- | --------------------------------------- |
100
+ | `BETTER_I18N_API_KEY` | Yes | Your API key |
101
+ | `BETTER_I18N_API_URL` | No | API URL (default: dash.better-i18n.com) |
102
+ | `BETTER_I18N_DEBUG` | No | Enable verbose logging |
102
103
 
103
104
  ## License
104
105
 
@@ -35,9 +35,13 @@ export declare function success(data: Record<string, unknown>): ToolResult;
35
35
  */
36
36
  export declare function error(message: string): ToolResult;
37
37
  /**
38
- * Wraps tool execution with common error handling
38
+ * Wraps tool execution with common error handling for project-scoped tools
39
39
  */
40
40
  export declare function executeTool<T extends {
41
41
  project: string;
42
42
  }>(args: unknown, schema: z.ZodType<T>, handler: (input: T, parsed: ParsedProject) => Promise<ToolResult>): Promise<ToolResult>;
43
+ /**
44
+ * Wraps tool execution with common error handling for non-project tools
45
+ */
46
+ export declare function executeSimpleTool<T>(args: unknown, schema: z.ZodType<T>, handler: (input: T) => Promise<ToolResult>): Promise<ToolResult>;
43
47
  //# sourceMappingURL=base-tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-tool.d.ts","sourceRoot":"","sources":["../src/base-tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;EAExB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;CAMhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CASjE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAUjD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAC7D,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,UAAU,CAAC,GAChE,OAAO,CAAC,UAAU,CAAC,CAWrB"}
1
+ {"version":3,"file":"base-tool.d.ts","sourceRoot":"","sources":["../src/base-tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;EAExB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;CAMhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CASjE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAUjD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAC7D,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,UAAU,CAAC,GAChE,OAAO,CAAC,UAAU,CAAC,CAWrB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACzC,OAAO,CAAC,UAAU,CAAC,CAUrB"}
package/dist/base-tool.js CHANGED
@@ -49,7 +49,7 @@ export function error(message) {
49
49
  };
50
50
  }
51
51
  /**
52
- * Wraps tool execution with common error handling
52
+ * Wraps tool execution with common error handling for project-scoped tools
53
53
  */
54
54
  export async function executeTool(args, schema, handler) {
55
55
  try {
@@ -64,4 +64,19 @@ export async function executeTool(args, schema, handler) {
64
64
  return error(err instanceof Error ? err.message : String(err));
65
65
  }
66
66
  }
67
+ /**
68
+ * Wraps tool execution with common error handling for non-project tools
69
+ */
70
+ export async function executeSimpleTool(args, schema, handler) {
71
+ try {
72
+ const input = schema.parse(args);
73
+ return await handler(input);
74
+ }
75
+ catch (err) {
76
+ if (err instanceof z.ZodError) {
77
+ return error(`Validation error: ${err.errors.map(e => e.message).join(", ")}`);
78
+ }
79
+ return error(err instanceof Error ? err.message : String(err));
80
+ }
81
+ }
67
82
  //# sourceMappingURL=base-tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-tool.js","sourceRoot":"","sources":["../src/base-tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAGhE;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE;QACP,IAAI,EAAE,QAAiB;QACvB,WAAW,EACT,6HAA6H;KAChI;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAA6B;IACnD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAa,EACb,MAAoB,EACpB,OAAiE;IAEjE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"base-tool.js","sourceRoot":"","sources":["../src/base-tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAGhE;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE;QACP,IAAI,EAAE,QAAiB;QACvB,WAAW,EACT,6HAA6H;KAChI;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAA6B;IACnD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACpC;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAa,EACb,MAAoB,EACpB,OAAiE;IAEjE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAa,EACb,MAAoB,EACpB,OAA0C;IAE1C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
package/dist/client.d.ts CHANGED
@@ -6,6 +6,12 @@ export interface ClientConfig {
6
6
  apiKey: string;
7
7
  debug?: boolean;
8
8
  }
9
+ /**
10
+ * Loosely typed client for MCP server usage.
11
+ * The MCP package runs standalone without API router types,
12
+ * so we allow arbitrary nested property access on the tRPC client.
13
+ */
14
+ export type BetterI18nClient = Record<string, any>;
9
15
  /**
10
16
  * Create a tRPC client authenticated with API key
11
17
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,0CAgExF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AAEH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,0CAmEnD"}
package/dist/client.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * tRPC client for Better i18n API with API key authentication
3
3
  */
4
- import { createTRPCClient, httpBatchLink } from "@trpc/client";
4
+ import { createTRPCClient, httpBatchLink, } from "@trpc/client";
5
5
  /**
6
6
  * Create a tRPC client authenticated with API key
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAY/D;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAkD;IACvF,mDAAmD;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC;IAEnD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,gGAAgG;IAChG,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,OAAO,gBAAgB,CAAY;QACjC,KAAK,EAAE;YACL,aAAa,CAAC;gBACZ,GAAG;gBACH,OAAO,EAAE,GAAG,EAAE;oBACZ,MAAM,OAAO,GAA2B;wBACtC,WAAW,EAAE,MAAM,CAAC,MAAM;qBAC3B,CAAC;oBACF,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;wBAC1B,OAAO,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;oBACvD,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;oBAE/B,oFAAoF;oBACpF,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;wBAC/C,aAAa,GAAG,QAAQ,CAAC;wBAEzB,sCAAsC;wBACtC,IAAI,CAAC;4BACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACpC,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;4BACtD,OAAO,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;wBAChD,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;wBAC/C,CAAC;oBACH,CAAC;oBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAE1C,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;wBAC/C,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;4BAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;wBACzD,CAAC;6BAAM,CAAC;4BACN,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACxC,IAAI,CAAC;gCACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;gCACzC,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;4BACvF,CAAC;4BAAC,MAAM,CAAC;gCACP,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;4BAC5D,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,OAAO,QAAQ,CAAC;gBAClB,CAAC;aACF,CAAC;SACH;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,cAAc,CAAC;AAoBtB;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAkD;IAElD,mDAAmD;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC;IAEnD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,gGAAgG;IAChG,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,OAAO,gBAAgB,CAAgB;QACrC,KAAK,EAAE;YACL,aAAa,CAAC;gBACZ,GAAG;gBACH,OAAO,EAAE,GAAG,EAAE;oBACZ,MAAM,OAAO,GAA2B;wBACtC,WAAW,EAAE,MAAM,CAAC,MAAM;qBAC3B,CAAC;oBACF,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;wBAC1B,OAAO,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;oBACvD,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;oBAE/B,oFAAoF;oBACpF,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;wBAC/C,aAAa,GAAG,QAAQ,CAAC;wBAEzB,sCAAsC;wBACtC,IAAI,CAAC;4BACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACpC,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;4BACtD,OAAO,CAAC,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;wBAChD,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;wBAC/C,CAAC;oBACH,CAAC;oBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAE1C,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;wBAC/C,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;4BAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;wBACzD,CAAC;6BAAM,CAAC;4BACN,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACxC,IAAI,CAAC;gCACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;gCACzC,OAAO,CAAC,KAAK,CACX,mBAAmB,QAAQ,CAAC,MAAM,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACtE,CAAC;4BACJ,CAAC;4BAAC,MAAM,CAAC;gCACP,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;4BAC5D,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,OAAO,QAAQ,CAAC;gBAClB,CAAC;aACF,CAAC;SACH;KACF,CAAC,CAAC;AACL,CAAC"}
package/dist/index.js CHANGED
@@ -10,12 +10,15 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
10
10
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
11
11
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
12
12
  import { createBetterI18nClient } from "./client.js";
13
- import { bulkCreateKeys } from "./tools/bulkCreateKeys.js";
14
- import { bulkUpdateTranslations } from "./tools/bulkUpdateTranslations.js";
15
- import { createTranslationKey } from "./tools/createTranslationKey.js";
16
- import { getProjectInfo } from "./tools/getProjectInfo.js";
13
+ import { addLanguage } from "./tools/addLanguage.js";
14
+ import { createKeys } from "./tools/createKeys.js";
15
+ import { deleteKeys } from "./tools/deleteKeys.js";
16
+ import { getProject } from "./tools/getProject.js";
17
+ import { getSync } from "./tools/getSync.js";
18
+ import { getSyncs } from "./tools/getSyncs.js";
17
19
  import { listKeys } from "./tools/listKeys.js";
18
- import { updateTranslation } from "./tools/updateTranslation.js";
20
+ import { listProjects } from "./tools/listProjects.js";
21
+ import { updateKeys } from "./tools/updateKeys.js";
19
22
  class BetterI18nServer {
20
23
  server;
21
24
  apiClient;
@@ -56,37 +59,53 @@ class BetterI18nServer {
56
59
  // List available tools
57
60
  this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
58
61
  tools: [
59
- getProjectInfo.definition,
62
+ listProjects.definition,
63
+ getProject.definition,
64
+ addLanguage.definition,
60
65
  listKeys.definition,
61
- createTranslationKey.definition,
62
- bulkCreateKeys.definition,
63
- updateTranslation.definition,
64
- bulkUpdateTranslations.definition,
66
+ createKeys.definition,
67
+ updateKeys.definition,
68
+ deleteKeys.definition,
69
+ getSyncs.definition,
70
+ getSync.definition,
65
71
  ],
66
72
  }));
67
73
  // Execute tools
68
74
  this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
69
75
  const { name, arguments: args } = request.params;
76
+ if (!this.apiClient) {
77
+ throw new Error("API client not initialized. Call init() first.");
78
+ }
79
+ const client = this.apiClient;
70
80
  try {
71
81
  let result;
72
82
  switch (name) {
73
- case "getProjectInfo":
74
- result = await getProjectInfo.execute(this.apiClient, args);
83
+ case "listProjects":
84
+ result = await listProjects.execute(client, args);
75
85
  break;
76
- case "createTranslationKey":
77
- result = await createTranslationKey.execute(this.apiClient, args);
86
+ case "getProject":
87
+ result = await getProject.execute(client, args);
78
88
  break;
79
- case "updateTranslation":
80
- result = await updateTranslation.execute(this.apiClient, args);
89
+ case "addLanguage":
90
+ result = await addLanguage.execute(client, args);
81
91
  break;
82
92
  case "listKeys":
83
- result = await listKeys.execute(this.apiClient, args);
93
+ result = await listKeys.execute(client, args);
94
+ break;
95
+ case "createKeys":
96
+ result = await createKeys.execute(client, args);
97
+ break;
98
+ case "updateKeys":
99
+ result = await updateKeys.execute(client, args);
100
+ break;
101
+ case "deleteKeys":
102
+ result = await deleteKeys.execute(client, args);
84
103
  break;
85
- case "bulkCreateKeys":
86
- result = await bulkCreateKeys.execute(this.apiClient, args);
104
+ case "getSyncs":
105
+ result = await getSyncs.execute(client, args);
87
106
  break;
88
- case "bulkUpdateTranslations":
89
- result = await bulkUpdateTranslations.execute(this.apiClient, args);
107
+ case "getSync":
108
+ result = await getSync.execute(client, args);
90
109
  break;
91
110
  default:
92
111
  throw new Error(`Unknown tool: ${name}`);
@@ -114,7 +133,10 @@ class BetterI18nServer {
114
133
  }
115
134
  // Start the server
116
135
  const server = new BetterI18nServer();
117
- server.init().then(() => server.run()).catch((error) => {
136
+ server
137
+ .init()
138
+ .then(() => server.run())
139
+ .catch((error) => {
118
140
  console.error("[better-i18n] Fatal error:", error);
119
141
  process.exit(1);
120
142
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * addLanguage MCP Tool
3
+ *
4
+ * Adds a new target language to the project.
5
+ */
6
+ import type { Tool } from "../types/index.js";
7
+ export declare const addLanguage: Tool;
8
+ //# sourceMappingURL=addLanguage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addLanguage.d.ts","sourceRoot":"","sources":["../../src/tools/addLanguage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAM9C,eAAO,MAAM,WAAW,EAAE,IAkCzB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * addLanguage MCP Tool
3
+ *
4
+ * Adds a new target language to the project.
5
+ */
6
+ import { z } from "zod";
7
+ import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
8
+ const inputSchema = projectSchema.extend({
9
+ languageCode: z.string().min(2).max(5),
10
+ });
11
+ export const addLanguage = {
12
+ definition: {
13
+ name: "addLanguage",
14
+ description: "Add a new target language to the project for translation. Use ISO 639-1 codes (e.g., 'fr' for French, 'ja' for Japanese).",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ ...projectInputProperty,
19
+ languageCode: {
20
+ type: "string",
21
+ description: "ISO 639-1 language code (e.g., 'fr', 'ja', 'de', 'es')",
22
+ },
23
+ },
24
+ required: ["project", "languageCode"],
25
+ },
26
+ },
27
+ execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
28
+ const result = await client.mcp.addLanguage.mutate({
29
+ orgSlug: workspaceId,
30
+ projectSlug,
31
+ languageCode: input.languageCode,
32
+ });
33
+ return success({
34
+ success: result.success,
35
+ message: result.message,
36
+ languageCode: input.languageCode,
37
+ project: input.project,
38
+ alreadyExists: result.alreadyExists,
39
+ });
40
+ }),
41
+ };
42
+ //# sourceMappingURL=addLanguage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addLanguage.js","sourceRoot":"","sources":["../../src/tools/addLanguage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,UAAU,EAAE;QACV,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,2HAA2H;QAC7H,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;SACtC;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;YACjD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * createKeys MCP Tool
3
+ *
4
+ * Creates one or more translation keys with source text and optional translations.
5
+ */
6
+ import type { Tool } from "../types/index.js";
7
+ export declare const createKeys: Tool;
8
+ //# sourceMappingURL=createKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createKeys.d.ts","sourceRoot":"","sources":["../../src/tools/createKeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAa9C,eAAO,MAAM,UAAU,EAAE,IAuExB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * bulkCreateKeys MCP Tool
2
+ * createKeys MCP Tool
3
3
  *
4
- * Creates multiple translation keys with all translations in a single request.
4
+ * Creates one or more translation keys with source text and optional translations.
5
5
  */
6
6
  import { z } from "zod";
7
7
  import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
@@ -13,10 +13,10 @@ const inputSchema = projectSchema.extend({
13
13
  translations: z.record(z.string(), z.string()).optional(),
14
14
  })),
15
15
  });
16
- export const bulkCreateKeys = {
16
+ export const createKeys = {
17
17
  definition: {
18
- name: "bulkCreateKeys",
19
- description: "Create multiple translation keys in a SINGLE efficient request. ALWAYS use this instead of calling createTranslationKey multiple times when adding 2 or more keys.",
18
+ name: "createKeys",
19
+ description: "Create one or more translation keys with source text. Accepts an array - use for single or multiple keys.",
20
20
  inputSchema: {
21
21
  type: "object",
22
22
  properties: {
@@ -37,11 +37,11 @@ export const bulkCreateKeys = {
37
37
  },
38
38
  sourceText: {
39
39
  type: "string",
40
- description: "English source text",
40
+ description: "Source text in default language (usually English)",
41
41
  },
42
42
  translations: {
43
43
  type: "object",
44
- description: "Translations for other languages. Keys are language codes, values are translated text.",
44
+ description: "Translations for target languages. Keys are language codes, values are translated text.",
45
45
  },
46
46
  },
47
47
  required: ["key", "sourceText"],
@@ -52,16 +52,18 @@ export const bulkCreateKeys = {
52
52
  },
53
53
  },
54
54
  execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
55
- const formattedKeys = input.keys.map((k) => ({
56
- key: k.key,
57
- namespace: k.namespace || "default",
58
- sourceText: k.sourceText,
59
- translations: k.translations,
55
+ // Map to compact format expected by API
56
+ // k: array of keys { n, ns, v, t }
57
+ const compactKeys = input.keys.map((k) => ({
58
+ n: k.key,
59
+ ns: k.namespace || "default",
60
+ v: k.sourceText,
61
+ t: k.translations,
60
62
  }));
61
- const result = await client.mcp.bulkCreateKeys.mutate({
63
+ const result = await client.mcp.createKeys.mutate({
62
64
  orgSlug: workspaceId,
63
65
  projectSlug,
64
- keys: formattedKeys,
66
+ k: compactKeys,
65
67
  });
66
68
  return success({
67
69
  success: true,
@@ -71,4 +73,4 @@ export const bulkCreateKeys = {
71
73
  });
72
74
  }),
73
75
  };
74
- //# sourceMappingURL=bulkCreateKeys.js.map
76
+ //# sourceMappingURL=createKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createKeys.js","sourceRoot":"","sources":["../../src/tools/createKeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC1D,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,qCAAqC;oBAClD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,GAAG,EAAE;gCACH,IAAI,EAAE,QAAQ;gCACd,WAAW,EACT,sEAAsE;6BACzE;4BACD,SAAS,EAAE;gCACT,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,+CAA+C;6BAC7D;4BACD,UAAU,EAAE;gCACV,IAAI,EAAE,QAAQ;gCACd,WAAW,EACT,mDAAmD;6BACtD;4BACD,YAAY,EAAE;gCACZ,IAAI,EAAE,QAAQ;gCACd,WAAW,EACT,yFAAyF;6BAC5F;yBACF;wBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;qBAChC;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;SAC9B;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CACT,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC5C,wCAAwC;QACxC,mCAAmC;QACnC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,CAAC,EAAE,CAAC,CAAC,GAAG;YACR,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;YAC5B,CAAC,EAAE,CAAC,CAAC,UAAU;YACf,CAAC,EAAE,CAAC,CAAC,YAAY;SAClB,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAChD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,CAAC,EAAE,WAAW;SACf,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC,CACF;CACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * deleteKeys MCP Tool
3
+ *
4
+ * Soft-deletes translation keys by marking them with a deletedAt timestamp.
5
+ * Keys are not permanently removed until the next publish.
6
+ */
7
+ import type { Tool } from "../types/index.js";
8
+ export declare const deleteKeys: Tool;
9
+ //# sourceMappingURL=deleteKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteKeys.d.ts","sourceRoot":"","sources":["../../src/tools/deleteKeys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAM9C,eAAO,MAAM,UAAU,EAAE,IA2CxB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * deleteKeys MCP Tool
3
+ *
4
+ * Soft-deletes translation keys by marking them with a deletedAt timestamp.
5
+ * Keys are not permanently removed until the next publish.
6
+ */
7
+ import { z } from "zod";
8
+ import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
9
+ const inputSchema = projectSchema.extend({
10
+ keyIds: z.array(z.string().uuid()).min(1).max(100),
11
+ });
12
+ export const deleteKeys = {
13
+ definition: {
14
+ name: "deleteKeys",
15
+ description: "Delete one or more translation keys (soft delete). Keys are marked for deletion and removed from CDN/GitHub on the next publish. Accepts an array of key UUIDs.",
16
+ inputSchema: {
17
+ type: "object",
18
+ properties: {
19
+ ...projectInputProperty,
20
+ keyIds: {
21
+ type: "array",
22
+ description: "Array of translation key UUIDs to delete. Get these from listKeys or getAllTranslations.",
23
+ items: {
24
+ type: "string",
25
+ description: "UUID of the translation key",
26
+ },
27
+ },
28
+ },
29
+ required: ["project", "keyIds"],
30
+ },
31
+ },
32
+ execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
33
+ const result = await client.mcp.deleteKeys.mutate({
34
+ orgSlug: workspaceId,
35
+ projectSlug,
36
+ keyIds: input.keyIds,
37
+ });
38
+ return success({
39
+ success: true,
40
+ project: input.project,
41
+ markedCount: result.markedCount,
42
+ marked: result.marked,
43
+ skipped: result.skipped,
44
+ });
45
+ }),
46
+ };
47
+ //# sourceMappingURL=deleteKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteKeys.js","sourceRoot":"","sources":["../../src/tools/deleteKeys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,iKAAiK;QACnK,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,0FAA0F;oBAC5F,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,6BAA6B;qBAC3C;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;SAChC;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CACT,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAChD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;IACL,CAAC,CACF;CACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * getProject MCP Tool
3
+ *
4
+ * Gets project information including namespaces, languages, key count, and coverage stats.
5
+ */
6
+ import type { Tool } from "../types/index.js";
7
+ export declare const getProject: Tool;
8
+ //# sourceMappingURL=getProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProject.d.ts","sourceRoot":"","sources":["../../src/tools/getProject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C,eAAO,MAAM,UAAU,EAAE,IAsBxB,CAAC"}
@@ -1,14 +1,14 @@
1
1
  /**
2
- * getProjectInfo MCP Tool
2
+ * getProject MCP Tool
3
3
  *
4
- * Gets project information including available namespaces, languages, and stats.
4
+ * Gets project information including namespaces, languages, key count, and coverage stats.
5
5
  */
6
6
  import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
7
7
  const inputSchema = projectSchema;
8
- export const getProjectInfo = {
8
+ export const getProject = {
9
9
  definition: {
10
- name: "getProjectInfo",
11
- description: "Get project information including available namespaces, languages, and key count. Use this to understand the project structure before adding or updating translations.",
10
+ name: "getProject",
11
+ description: "Get project details including namespaces, languages, key count, and translation coverage. Use this after listProjects to understand a specific project's structure.",
12
12
  inputSchema: {
13
13
  type: "object",
14
14
  properties: {
@@ -18,11 +18,11 @@ export const getProjectInfo = {
18
18
  },
19
19
  },
20
20
  execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
21
- const result = await client.mcp.getProjectInfo.query({
21
+ const result = await client.mcp.getProject.query({
22
22
  orgSlug: workspaceId,
23
23
  projectSlug,
24
24
  });
25
25
  return success(result);
26
26
  }),
27
27
  };
28
- //# sourceMappingURL=getProjectInfo.js.map
28
+ //# sourceMappingURL=getProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProject.js","sourceRoot":"","sources":["../../src/tools/getProject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,qKAAqK;QACvK,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;aACxB;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;YAC/C,OAAO,EAAE,WAAW;YACpB,WAAW;SACZ,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;CACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * getSync MCP Tool
3
+ *
4
+ * Get detailed information about a specific sync operation including logs and affected keys.
5
+ */
6
+ import type { Tool } from "../types/index.js";
7
+ export declare const getSync: Tool;
8
+ //# sourceMappingURL=getSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSync.d.ts","sourceRoot":"","sources":["../../src/tools/getSync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAM9C,eAAO,MAAM,OAAO,EAAE,IAuBrB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * getSync MCP Tool
3
+ *
4
+ * Get detailed information about a specific sync operation including logs and affected keys.
5
+ */
6
+ import { z } from "zod";
7
+ import { executeSimpleTool, success } from "../base-tool.js";
8
+ const inputSchema = z.object({
9
+ syncId: z.string().describe("The sync job ID to retrieve details for"),
10
+ });
11
+ export const getSync = {
12
+ definition: {
13
+ name: "getSync",
14
+ description: "Get detailed information about a specific sync operation. Returns full sync job details including activity logs, timing, status, and affected translation keys. Use this to troubleshoot sync issues or check if specific keys were included in a sync.",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ syncId: {
19
+ type: "string",
20
+ description: "The sync job ID (e.g., from getSyncs response or error messages)",
21
+ },
22
+ },
23
+ required: ["syncId"],
24
+ },
25
+ },
26
+ execute: (client, args) => executeSimpleTool(args, inputSchema, async (input) => {
27
+ const result = await client.mcp.getSync.query({ syncId: input.syncId });
28
+ return success(result);
29
+ }),
30
+ };
31
+ //# sourceMappingURL=getSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSync.js","sourceRoot":"","sources":["../../src/tools/getSync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG7D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CACvE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,UAAU,EAAE;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EACT,yPAAyP;QAC3P,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,kEAAkE;iBACrE;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;CACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * getSyncs MCP Tool
3
+ *
4
+ * Lists recent sync operations for a project with filtering by status and type.
5
+ */
6
+ import type { Tool } from "../types/index.js";
7
+ export declare const getSyncs: Tool;
8
+ //# sourceMappingURL=getSyncs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncs.d.ts","sourceRoot":"","sources":["../../src/tools/getSyncs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAU9C,eAAO,MAAM,QAAQ,EAAE,IA6CtB,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * getSyncs MCP Tool
3
+ *
4
+ * Lists recent sync operations for a project with filtering by status and type.
5
+ */
6
+ import { z } from "zod";
7
+ import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
8
+ const inputSchema = projectSchema.extend({
9
+ limit: z.number().min(1).max(50).optional(),
10
+ status: z.enum(["pending", "in_progress", "completed", "failed"]).optional(),
11
+ type: z
12
+ .enum(["initial_import", "source_sync", "cdn_upload", "publish_batch"])
13
+ .optional(),
14
+ });
15
+ export const getSyncs = {
16
+ definition: {
17
+ name: "getSyncs",
18
+ description: "List recent sync operations for a project. Returns sync jobs with their status, type, timing, and results. Use this to check if syncs succeeded or failed, or to see recent sync activity.",
19
+ inputSchema: {
20
+ type: "object",
21
+ properties: {
22
+ ...projectInputProperty,
23
+ limit: {
24
+ type: "number",
25
+ description: "Maximum number of sync jobs to return (default: 10, max: 50)",
26
+ },
27
+ status: {
28
+ type: "string",
29
+ enum: ["pending", "in_progress", "completed", "failed"],
30
+ description: "Filter syncs by status",
31
+ },
32
+ type: {
33
+ type: "string",
34
+ enum: [
35
+ "initial_import",
36
+ "source_sync",
37
+ "cdn_upload",
38
+ "publish_batch",
39
+ ],
40
+ description: "Filter syncs by job type",
41
+ },
42
+ },
43
+ required: ["project"],
44
+ },
45
+ },
46
+ execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
47
+ const result = await client.mcp.getSyncs.query({
48
+ orgSlug: workspaceId,
49
+ projectSlug,
50
+ limit: input.limit,
51
+ status: input.status,
52
+ type: input.type,
53
+ });
54
+ return success(result);
55
+ }),
56
+ };
57
+ //# sourceMappingURL=getSyncs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncs.js","sourceRoot":"","sources":["../../src/tools/getSyncs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5E,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;SACtE,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,4LAA4L;QAC9L,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8DAA8D;iBACjE;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC;oBACvD,WAAW,EAAE,wBAAwB;iBACtC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE;wBACJ,gBAAgB;wBAChB,aAAa;wBACb,YAAY;wBACZ,eAAe;qBAChB;oBACD,WAAW,EAAE,0BAA0B;iBACxC;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC7C,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;CACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * listProjects MCP Tool
3
+ *
4
+ * Lists all projects the user has access to across all organizations.
5
+ * Use this tool FIRST to discover available projects before other operations.
6
+ */
7
+ import type { Tool } from "../types/index.js";
8
+ export declare const listProjects: Tool;
9
+ //# sourceMappingURL=listProjects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listProjects.d.ts","sourceRoot":"","sources":["../../src/tools/listProjects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,eAAO,MAAM,YAAY,EAAE,IA4B1B,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * listProjects MCP Tool
3
+ *
4
+ * Lists all projects the user has access to across all organizations.
5
+ * Use this tool FIRST to discover available projects before other operations.
6
+ */
7
+ import { success } from "../base-tool.js";
8
+ export const listProjects = {
9
+ definition: {
10
+ name: "listProjects",
11
+ description: "List all projects you have access to. Call this first to discover available projects before using other tools.",
12
+ inputSchema: {
13
+ type: "object",
14
+ properties: {},
15
+ required: [],
16
+ },
17
+ },
18
+ execute: async (client, _args) => {
19
+ try {
20
+ const result = await client.mcp.listProjects.query();
21
+ return success(result);
22
+ }
23
+ catch (err) {
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: `Error listing projects: ${err instanceof Error ? err.message : String(err)}`,
29
+ },
30
+ ],
31
+ isError: true,
32
+ };
33
+ }
34
+ },
35
+ };
36
+ //# sourceMappingURL=listProjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listProjects.js","sourceRoot":"","sources":["../../src/tools/listProjects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,UAAU,EAAE;QACV,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,gHAAgH;QAClH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;KACF;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACrD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACpF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * updateKeys MCP Tool
3
+ *
4
+ * Updates translations for one or more keys in a single request.
5
+ */
6
+ import type { Tool } from "../types/index.js";
7
+ export declare const updateKeys: Tool;
8
+ //# sourceMappingURL=updateKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateKeys.d.ts","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAY9C,eAAO,MAAM,UAAU,EAAE,IAoFxB,CAAC"}
@@ -1,26 +1,26 @@
1
1
  /**
2
- * bulkUpdateTranslations MCP Tool
2
+ * updateKeys MCP Tool
3
3
  *
4
- * Updates translations for multiple keys in a single request.
4
+ * Updates translations for one or more keys in a single request.
5
5
  */
6
6
  import { z } from "zod";
7
7
  import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
8
8
  const inputSchema = projectSchema.extend({
9
- updates: z.array(z.object({
9
+ keys: z.array(z.object({
10
10
  key: z.string(),
11
11
  namespace: z.string().optional(),
12
12
  translations: z.record(z.string(), z.string()),
13
13
  })),
14
14
  });
15
- export const bulkUpdateTranslations = {
15
+ export const updateKeys = {
16
16
  definition: {
17
- name: "bulkUpdateTranslations",
18
- description: "Update translations for multiple keys in a SINGLE efficient request. ALWAYS use this instead of calling updateTranslation multiple times when updating 2 or more translations.",
17
+ name: "updateKeys",
18
+ description: "Update translations for one or more keys. Accepts an array - use for single or multiple updates.",
19
19
  inputSchema: {
20
20
  type: "object",
21
21
  properties: {
22
22
  ...projectInputProperty,
23
- updates: {
23
+ keys: {
24
24
  type: "array",
25
25
  description: "Array of translation updates",
26
26
  items: {
@@ -36,26 +36,44 @@ export const bulkUpdateTranslations = {
36
36
  },
37
37
  translations: {
38
38
  type: "object",
39
- description: "Translations for target languages. Keys are language codes, values are translated text.",
39
+ description: "Translations to update. Keys are language codes, values are translated text. Include source language to update sourceText.",
40
40
  },
41
41
  },
42
42
  required: ["key", "translations"],
43
43
  },
44
44
  },
45
45
  },
46
- required: ["project", "updates"],
46
+ required: ["project", "keys"],
47
47
  },
48
48
  },
49
49
  execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
50
- const formattedUpdates = input.updates.map((u) => ({
51
- key: u.key,
52
- namespace: u.namespace || "default",
53
- translations: u.translations,
54
- }));
55
- const result = await client.mcp.bulkUpdateTranslations.mutate({
50
+ // First, get project info to determine source language
51
+ const projectInfo = await client.mcp.getProject.query({
56
52
  orgSlug: workspaceId,
57
53
  projectSlug,
58
- updates: formattedUpdates,
54
+ });
55
+ const sourceLanguage = projectInfo.sourceLanguage;
56
+ // Flatten and map to compact format expected by API
57
+ // t: array of updates { k, n, ns, l, t, s, st }
58
+ const compactUpdates = [];
59
+ for (const k of input.keys) {
60
+ for (const [lang, text] of Object.entries(k.translations)) {
61
+ const isSourceLanguage = lang === sourceLanguage;
62
+ compactUpdates.push({
63
+ k: k.key, // Identifier
64
+ n: k.key, // Name
65
+ ns: k.namespace || "default",
66
+ l: lang,
67
+ t: text,
68
+ s: isSourceLanguage, // Explicitly mark source language updates
69
+ st: "approved", // Status for approved updates (used by AI approval flow)
70
+ });
71
+ }
72
+ }
73
+ const result = await client.mcp.updateKeys.mutate({
74
+ orgSlug: workspaceId,
75
+ projectSlug,
76
+ t: compactUpdates,
59
77
  });
60
78
  return success({
61
79
  success: true,
@@ -65,4 +83,4 @@ export const bulkUpdateTranslations = {
65
83
  });
66
84
  }),
67
85
  };
68
- //# sourceMappingURL=bulkUpdateTranslations.js.map
86
+ //# sourceMappingURL=updateKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateKeys.js","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,22 @@
4
4
  /**
5
5
  * MCP Tool definition
6
6
  */
7
+ /** JSON Schema property definition */
8
+ interface JsonSchemaProperty {
9
+ type: string;
10
+ description?: string;
11
+ enum?: string[];
12
+ items?: JsonSchemaProperty;
13
+ properties?: Record<string, JsonSchemaProperty>;
14
+ required?: string[];
15
+ default?: unknown;
16
+ }
7
17
  export interface ToolDefinition {
8
18
  name: string;
9
19
  description: string;
10
20
  inputSchema: {
11
21
  type: "object";
12
- properties: Record<string, any>;
22
+ properties: Record<string, JsonSchemaProperty>;
13
23
  required?: string[];
14
24
  };
15
25
  }
@@ -27,11 +37,14 @@ export interface ToolResult {
27
37
  isError?: boolean;
28
38
  [key: string]: unknown;
29
39
  }
40
+ /** API client type for MCP tools */
41
+ import type { BetterI18nClient } from "../client.js";
30
42
  /**
31
43
  * MCP Tool implementation
32
44
  */
33
45
  export interface Tool {
34
46
  definition: ToolDefinition;
35
- execute: (client: any, args: unknown) => Promise<ToolResult>;
47
+ execute: (client: BetterI18nClient, args: unknown) => Promise<ToolResult>;
36
48
  }
49
+ export {};
37
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAC9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,sCAAsC;AACtC,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,oCAAoC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAC3E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-i18n/mcp",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "description": "MCP server for Better i18n translation management - AI-powered translation workflow for Cursor, Claude, and other AI assistants",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -44,7 +44,7 @@
44
44
  "dev": "bun run src/index.ts",
45
45
  "typecheck": "tsc --noEmit",
46
46
  "clean": "rm -rf dist",
47
- "prepublishOnly": "npm run clean && npm run build"
47
+ "prepublishOnly": "npm run clean && npm run build && chmod +x ./dist/index.js"
48
48
  },
49
49
  "dependencies": {
50
50
  "@modelcontextprotocol/sdk": "^1.0.4",
@@ -1,8 +0,0 @@
1
- /**
2
- * bulkCreateKeys MCP Tool
3
- *
4
- * Creates multiple translation keys with all translations in a single request.
5
- */
6
- import type { Tool } from "../types/index.js";
7
- export declare const bulkCreateKeys: Tool;
8
- //# sourceMappingURL=bulkCreateKeys.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bulkCreateKeys.d.ts","sourceRoot":"","sources":["../../src/tools/bulkCreateKeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAa9C,eAAO,MAAM,cAAc,EAAE,IA8D5B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bulkCreateKeys.js","sourceRoot":"","sources":["../../src/tools/bulkCreateKeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC1D,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,UAAU,EAAE;QACV,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,oKAAoK;QACtK,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,qCAAqC;oBAClD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,GAAG,EAAE;gCACH,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,sEAAsE;6BACpF;4BACD,SAAS,EAAE;gCACT,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,+CAA+C;6BAC7D;4BACD,UAAU,EAAE;gCACV,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,qBAAqB;6BACnC;4BACD,YAAY,EAAE;gCACZ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,wFAAwF;6BACtG;yBACF;wBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;qBAChC;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;SAC9B;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;YACnC,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,YAAY,EAAE,CAAC,CAAC,YAAY;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC;YACpD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * bulkUpdateTranslations MCP Tool
3
- *
4
- * Updates translations for multiple keys in a single request.
5
- */
6
- import type { Tool } from "../types/index.js";
7
- export declare const bulkUpdateTranslations: Tool;
8
- //# sourceMappingURL=bulkUpdateTranslations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bulkUpdateTranslations.d.ts","sourceRoot":"","sources":["../../src/tools/bulkUpdateTranslations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAY9C,eAAO,MAAM,sBAAsB,EAAE,IAyDpC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bulkUpdateTranslations.js","sourceRoot":"","sources":["../../src/tools/bulkUpdateTranslations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KAC/C,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,UAAU,EAAE;QACV,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,gLAAgL;QAClL,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,8BAA8B;oBAC3C,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,GAAG,EAAE;gCACH,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,sEAAsE;6BACpF;4BACD,SAAS,EAAE;gCACT,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,+CAA+C;6BAC7D;4BACD,YAAY,EAAE;gCACZ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,yFAAyF;6BACvG;yBACF;wBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC;qBAClC;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;SACjC;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;YACnC,YAAY,EAAE,CAAC,CAAC,YAAY;SAC7B,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC;YAC5D,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * createTranslationKey MCP Tool
3
- *
4
- * Creates a new translation key with source text in the default language.
5
- */
6
- import type { Tool } from "../types/index.js";
7
- export declare const createTranslationKey: Tool;
8
- //# sourceMappingURL=createTranslationKey.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createTranslationKey.d.ts","sourceRoot":"","sources":["../../src/tools/createTranslationKey.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAQ9C,eAAO,MAAM,oBAAoB,EAAE,IA6ClC,CAAC"}
@@ -1,55 +0,0 @@
1
- /**
2
- * createTranslationKey MCP Tool
3
- *
4
- * Creates a new translation key with source text in the default language.
5
- */
6
- import { z } from "zod";
7
- import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
8
- const inputSchema = projectSchema.extend({
9
- key: z.string().min(1),
10
- sourceValue: z.string().min(1),
11
- namespace: z.string().optional(),
12
- });
13
- export const createTranslationKey = {
14
- definition: {
15
- name: "createTranslationKey",
16
- description: "Create a SINGLE translation key with source text. IMPORTANT: If you need to create 2 or more keys, use bulkCreateKeys instead.",
17
- inputSchema: {
18
- type: "object",
19
- properties: {
20
- ...projectInputProperty,
21
- key: {
22
- type: "string",
23
- description: "Translation key WITHOUT namespace prefix when namespace is provided.",
24
- },
25
- sourceValue: {
26
- type: "string",
27
- description: "Source text in default language (usually English)",
28
- },
29
- namespace: {
30
- type: "string",
31
- description: "Namespace for the key. Defaults to 'default'.",
32
- },
33
- },
34
- required: ["project", "key", "sourceValue"],
35
- },
36
- },
37
- execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
38
- const result = await client.mcp.createKey.mutate({
39
- orgSlug: workspaceId,
40
- projectSlug,
41
- key: input.key,
42
- namespace: input.namespace || "default",
43
- sourceText: input.sourceValue,
44
- });
45
- return success({
46
- success: true,
47
- keyId: result.keyId,
48
- key: input.key,
49
- namespace: input.namespace || "default",
50
- sourceText: input.sourceValue,
51
- project: input.project,
52
- });
53
- }),
54
- };
55
- //# sourceMappingURL=createTranslationKey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createTranslationKey.js","sourceRoot":"","sources":["../../src/tools/createTranslationKey.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACxC,UAAU,EAAE;QACV,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,gIAAgI;QAClI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sEAAsE;iBACpF;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mDAAmD;iBACjE;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC;SAC5C;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;YAC/C,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;YACvC,UAAU,EAAE,KAAK,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;YACb,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;YACvC,UAAU,EAAE,KAAK,CAAC,WAAW;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * getProjectInfo MCP Tool
3
- *
4
- * Gets project information including available namespaces, languages, and stats.
5
- */
6
- import type { Tool } from "../types/index.js";
7
- export declare const getProjectInfo: Tool;
8
- //# sourceMappingURL=getProjectInfo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getProjectInfo.d.ts","sourceRoot":"","sources":["../../src/tools/getProjectInfo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C,eAAO,MAAM,cAAc,EAAE,IAsB5B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getProjectInfo.js","sourceRoot":"","sources":["../../src/tools/getProjectInfo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,UAAU,EAAE;QACV,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,wKAAwK;QAC1K,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;aACxB;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC;YACnD,OAAO,EAAE,WAAW;YACpB,WAAW;SACZ,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;CACL,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * updateTranslation MCP Tool
3
- *
4
- * Updates or creates a translation for a specific language.
5
- */
6
- import type { Tool } from "../types/index.js";
7
- export declare const updateTranslation: Tool;
8
- //# sourceMappingURL=updateTranslation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateTranslation.d.ts","sourceRoot":"","sources":["../../src/tools/updateTranslation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAS9C,eAAO,MAAM,iBAAiB,EAAE,IAkD/B,CAAC"}
@@ -1,61 +0,0 @@
1
- /**
2
- * updateTranslation MCP Tool
3
- *
4
- * Updates or creates a translation for a specific language.
5
- */
6
- import { z } from "zod";
7
- import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
8
- const inputSchema = projectSchema.extend({
9
- key: z.string().min(1),
10
- languageCode: z.string().min(2).max(10),
11
- value: z.string(),
12
- namespace: z.string().optional(),
13
- });
14
- export const updateTranslation = {
15
- definition: {
16
- name: "updateTranslation",
17
- description: "Update or create a SINGLE translation for a specific language. IMPORTANT: If you need to update 2 or more translations, use bulkUpdateTranslations instead.",
18
- inputSchema: {
19
- type: "object",
20
- properties: {
21
- ...projectInputProperty,
22
- key: {
23
- type: "string",
24
- description: "Translation key WITHOUT namespace prefix when namespace is provided.",
25
- },
26
- languageCode: {
27
- type: "string",
28
- description: "Language code (e.g., 'en', 'tr', 'de', 'fr')",
29
- },
30
- value: {
31
- type: "string",
32
- description: "Translation text",
33
- },
34
- namespace: {
35
- type: "string",
36
- description: "Namespace for the key. Defaults to 'default'.",
37
- },
38
- },
39
- required: ["project", "key", "languageCode", "value"],
40
- },
41
- },
42
- execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
43
- await client.mcp.updateTranslation.mutate({
44
- orgSlug: workspaceId,
45
- projectSlug,
46
- key: input.key,
47
- namespace: input.namespace || "default",
48
- languageCode: input.languageCode,
49
- value: input.value,
50
- });
51
- return success({
52
- success: true,
53
- key: input.key,
54
- namespace: input.namespace || "default",
55
- languageCode: input.languageCode,
56
- value: input.value,
57
- project: input.project,
58
- });
59
- }),
60
- };
61
- //# sourceMappingURL=updateTranslation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateTranslation.js","sourceRoot":"","sources":["../../src/tools/updateTranslation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,UAAU,EAAE;QACV,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,6JAA6J;QAC/J,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sEAAsE;iBACpF;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;iBAChC;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC;SACtD;KACF;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACxC,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;YACvC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;YACb,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;YACvC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC"}