@better-i18n/mcp 0.2.0 → 0.4.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.
@@ -2,7 +2,7 @@
2
2
  * createKeys MCP Tool
3
3
  *
4
4
  * Creates one or more translation keys with source text and optional translations.
5
- * Compact schema: k=[{n, ns, v, t}] — direct pass-through to API.
5
+ * Readable input schema mapped to compact API payload (k=[{n, ns, v, t}]).
6
6
  */
7
7
  import type { Tool } from "../types/index.js";
8
8
  export declare const createKeys: Tool;
@@ -2,52 +2,52 @@
2
2
  * createKeys MCP Tool
3
3
  *
4
4
  * Creates one or more translation keys with source text and optional translations.
5
- * Compact schema: k=[{n, ns, v, t}] — direct pass-through to API.
5
+ * Readable input schema mapped to compact API payload (k=[{n, ns, v, t}]).
6
6
  */
7
7
  import { z } from "zod";
8
8
  import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
9
9
  const inputSchema = projectSchema.extend({
10
- k: z.array(z.object({
11
- n: z.string(),
12
- ns: z.string().optional(),
13
- v: z.string().optional(),
14
- t: z.record(z.string(), z.string()).optional(),
10
+ keys: z.array(z.object({
11
+ name: z.string(),
12
+ namespace: z.string().optional(),
13
+ sourceText: z.string().optional(),
14
+ translations: z.record(z.string(), z.string()).optional(),
15
15
  })),
16
16
  });
17
17
  export const createKeys = {
18
18
  definition: {
19
19
  name: "createKeys",
20
- description: "Create translation keys. k=[{n: key name, ns: namespace, v: source text, t: {langCode: text} target translations}]. Don't include source language in t, it goes in v.",
20
+ description: "Create translation keys with source text and optional translations. Don't include the source language in translations use sourceText instead.",
21
21
  inputSchema: {
22
22
  type: "object",
23
23
  properties: {
24
24
  ...projectInputProperty,
25
- k: {
25
+ keys: {
26
26
  type: "array",
27
27
  items: {
28
28
  type: "object",
29
29
  properties: {
30
- n: { type: "string" },
31
- ns: { type: "string" },
32
- v: { type: "string" },
33
- t: { type: "object" },
30
+ name: { type: "string", description: "Key name (e.g., 'submit_button', 'nav.home')" },
31
+ namespace: { type: "string", description: "Namespace (default: 'default')" },
32
+ sourceText: { type: "string", description: "Source language text" },
33
+ translations: { type: "object", description: "Target translations as {langCode: text}" },
34
34
  },
35
- required: ["n"],
35
+ required: ["name"],
36
36
  },
37
37
  },
38
38
  },
39
- required: ["project", "k"],
39
+ required: ["project", "keys"],
40
40
  },
41
41
  },
42
42
  execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
43
43
  const result = await client.mcp.createKeys.mutate({
44
44
  orgSlug: workspaceId,
45
45
  projectSlug,
46
- k: input.k.map((item) => ({
47
- n: item.n,
48
- ns: item.ns || "default",
49
- v: item.v,
50
- t: item.t,
46
+ k: input.keys.map((item) => ({
47
+ n: item.name,
48
+ ns: item.namespace || "default",
49
+ v: item.sourceText,
50
+ t: item.translations,
51
51
  })),
52
52
  });
53
53
  return success({
@@ -1 +1 @@
1
- {"version":3,"file":"createKeys.js","sourceRoot":"","sources":["../../src/tools/createKeys.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,CAAC,EAAE,CAAC,CAAC,KAAK,CACR,CAAC,CAAC,MAAM,CAAC;QACP,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACxB,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC/C,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,uKAAuK;QACzK,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,CAAC,EAAE;oBACD,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACrB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACtB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACtB;wBACD,QAAQ,EAAE,CAAC,GAAG,CAAC;qBAChB;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;SAC3B;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,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACxB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,SAAS;gBACxB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;aACV,CAAC,CAAC;SACJ,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"}
1
+ {"version":3,"file":"createKeys.js","sourceRoot":"","sources":["../../src/tools/createKeys.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,IAAI,EAAE,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,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,iJAAiJ;QACnJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;4BACrF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;4BAC5E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;4BACnE,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;yBACzF;wBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;qBACnB;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,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAChD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC3B,CAAC,EAAE,IAAI,CAAC,IAAI;gBACZ,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;gBAC/B,CAAC,EAAE,IAAI,CAAC,UAAU;gBAClB,CAAC,EAAE,IAAI,CAAC,YAAY;aACrB,CAAC,CAAC;SACJ,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"}
@@ -2,6 +2,13 @@
2
2
  * listKeys MCP Tool
3
3
  *
4
4
  * Lists ALL translation keys with source text and translations.
5
+ * Supports full-text search in source and target languages.
6
+ *
7
+ * EXAMPLES:
8
+ * - Find "login" in source: { search: "login" }
9
+ * - Find "Giriş" in Turkish: { search: "Giriş", languages: ["tr"] }
10
+ * - Get Turkish translations: { languages: ["tr"] }
11
+ * - Get specific keys: { keys: ["auth.login.title", "auth.login.button"] }
5
12
  */
6
13
  import type { Tool } from "../types/index.js";
7
14
  export declare const listKeys: Tool;
@@ -1 +1 @@
1
- {"version":3,"file":"listKeys.d.ts","sourceRoot":"","sources":["../../src/tools/listKeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAO9C,eAAO,MAAM,QAAQ,EAAE,IA6BtB,CAAC"}
1
+ {"version":3,"file":"listKeys.d.ts","sourceRoot":"","sources":["../../src/tools/listKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAU9C,eAAO,MAAM,QAAQ,EAAE,IAyEtB,CAAC"}
@@ -2,25 +2,70 @@
2
2
  * listKeys MCP Tool
3
3
  *
4
4
  * Lists ALL translation keys with source text and translations.
5
+ * Supports full-text search in source and target languages.
6
+ *
7
+ * EXAMPLES:
8
+ * - Find "login" in source: { search: "login" }
9
+ * - Find "Giriş" in Turkish: { search: "Giriş", languages: ["tr"] }
10
+ * - Get Turkish translations: { languages: ["tr"] }
11
+ * - Get specific keys: { keys: ["auth.login.title", "auth.login.button"] }
5
12
  */
6
13
  import { z } from "zod";
7
14
  import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
8
15
  const inputSchema = projectSchema.extend({
9
16
  search: z.string().optional(),
17
+ languages: z.array(z.string()).optional(),
10
18
  namespaces: z.array(z.string()).optional(),
19
+ keys: z.array(z.string()).optional(),
20
+ status: z.enum(["missing", "draft", "approved", "all"]).optional(),
11
21
  });
12
22
  export const listKeys = {
13
23
  definition: {
14
24
  name: "listKeys",
15
- description: "Get all translation keys with their id, source text, and translations. Returns ALL keys in a single response. Use 'namespaces' to filter by namespace or 'search' to find keys by name.",
25
+ description: `Get all translation keys with their id, source text, and translations.
26
+
27
+ SEARCH + FILTER:
28
+ - search: Text to search for (in source text or specified languages)
29
+ - languages: Languages to search in AND return translations for
30
+
31
+ FILTER OPTIONS:
32
+ - namespaces: Filter by namespace(s)
33
+ - keys: Fetch specific keys by exact name
34
+ - status: Filter by translation status ("missing", "draft", "approved", "all")
35
+
36
+ EXAMPLES:
37
+ - Find "login" in source: { search: "login" }
38
+ - Find "Giriş" in Turkish: { search: "Giriş", languages: ["tr"] }
39
+ - Get all Turkish translations: { languages: ["tr"] }
40
+ - Get missing Turkish translations: { languages: ["tr"], status: "missing" }
41
+ - Get specific keys: { keys: ["auth.login.title", "auth.login.button"] }`,
16
42
  inputSchema: {
17
43
  type: "object",
18
44
  properties: {
19
45
  ...projectInputProperty,
20
- search: { type: "string" },
46
+ search: {
47
+ type: "string",
48
+ description: "Text to search for in source text or translations (case-insensitive). If languages is specified, searches in those languages; otherwise searches source text.",
49
+ },
50
+ languages: {
51
+ type: "array",
52
+ items: { type: "string" },
53
+ description: "Language codes to search in and return (e.g., ['tr', 'de']). If omitted with search, searches source text. If omitted without search, returns all languages.",
54
+ },
21
55
  namespaces: {
22
56
  type: "array",
23
57
  items: { type: "string" },
58
+ description: "Filter by namespace(s)",
59
+ },
60
+ keys: {
61
+ type: "array",
62
+ items: { type: "string" },
63
+ description: "Fetch specific keys by exact name",
64
+ },
65
+ status: {
66
+ type: "string",
67
+ enum: ["missing", "draft", "approved", "all"],
68
+ description: "Filter by translation status (default: all). Requires languages to be specified for filtering.",
24
69
  },
25
70
  },
26
71
  required: ["project"],
@@ -31,7 +76,10 @@ export const listKeys = {
31
76
  orgSlug: workspaceId,
32
77
  projectSlug,
33
78
  search: input.search,
79
+ languages: input.languages,
34
80
  namespaces: input.namespaces,
81
+ keys: input.keys,
82
+ status: input.status,
35
83
  });
36
84
  return success(result);
37
85
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"listKeys.js","sourceRoot":"","sources":["../../src/tools/listKeys.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,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,yLAAyL;QAC3L,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC1B;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,kBAAkB,CAAC,KAAK,CAAC;YACvD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;CACL,CAAC"}
1
+ {"version":3,"file":"listKeys.js","sourceRoot":"","sources":["../../src/tools/listKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;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,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE;;;;;;;;;;;;;;;;yEAgBwD;QACrE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,+JAA+J;iBAClK;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EACT,8JAA8J;iBACjK;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,wBAAwB;iBACtC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,mCAAmC;iBACjD;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC;oBAC7C,WAAW,EACT,gGAAgG;iBACnG;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;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,kBAAkB,CAAC,KAAK,CAAC;YACvD,OAAO,EAAE,WAAW;YACpB,WAAW;YACX,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CACF;CACJ,CAAC"}
@@ -2,8 +2,8 @@
2
2
  * updateKeys MCP Tool
3
3
  *
4
4
  * Updates source text and/or target translations for one or more keys.
5
- * Compact schema: t=[{k, ns, l, t, s, st}] — direct pass-through to API.
6
- * Each entry = one language update for one key. s=true for source text.
5
+ * Readable input schema mapped to compact API payload (t=[{k, ns, l, t, s, st}]).
6
+ * Each entry = one language update for one key. isSource=true for source text.
7
7
  */
8
8
  import type { Tool } from "../types/index.js";
9
9
  export declare const updateKeys: Tool;
@@ -2,59 +2,59 @@
2
2
  * updateKeys MCP Tool
3
3
  *
4
4
  * Updates source text and/or target translations for one or more keys.
5
- * Compact schema: t=[{k, ns, l, t, s, st}] — direct pass-through to API.
6
- * Each entry = one language update for one key. s=true for source text.
5
+ * Readable input schema mapped to compact API payload (t=[{k, ns, l, t, s, st}]).
6
+ * Each entry = one language update for one key. isSource=true for source text.
7
7
  */
8
8
  import { z } from "zod";
9
9
  import { executeTool, projectInputProperty, projectSchema, success, } from "../base-tool.js";
10
10
  const inputSchema = projectSchema.extend({
11
- t: z.array(z.object({
12
- k: z.string(),
13
- ns: z.string().optional(),
14
- l: z.string(),
15
- t: z.string(),
16
- s: z.boolean().optional(),
17
- st: z.string().optional(),
11
+ translations: z.array(z.object({
12
+ key: z.string(),
13
+ namespace: z.string().optional(),
14
+ language: z.string(),
15
+ text: z.string(),
16
+ isSource: z.boolean().optional(),
17
+ status: z.string().optional(),
18
18
  })),
19
19
  });
20
20
  export const updateKeys = {
21
21
  definition: {
22
22
  name: "updateKeys",
23
- description: "Update translations. Each entry in t updates ONE language for ONE key. t=[{k: key name, ns: namespace, l: language code, t: new text, s: true for source text update, st: status}].",
23
+ description: "Update translations. Each entry updates ONE language for ONE key. Set isSource=true to update the source text.",
24
24
  inputSchema: {
25
25
  type: "object",
26
26
  properties: {
27
27
  ...projectInputProperty,
28
- t: {
28
+ translations: {
29
29
  type: "array",
30
30
  items: {
31
31
  type: "object",
32
32
  properties: {
33
- k: { type: "string" },
34
- ns: { type: "string" },
35
- l: { type: "string" },
36
- t: { type: "string" },
37
- s: { type: "boolean" },
38
- st: { type: "string" },
33
+ key: { type: "string", description: "Key name (e.g., 'submit_button')" },
34
+ namespace: { type: "string", description: "Namespace (default: 'default')" },
35
+ language: { type: "string", description: "Language code (e.g., 'en', 'tr', 'de')" },
36
+ text: { type: "string", description: "Translation text" },
37
+ isSource: { type: "boolean", description: "true if updating source language text" },
38
+ status: { type: "string", description: "Translation status (e.g., 'approved')" },
39
39
  },
40
- required: ["k", "l", "t"],
40
+ required: ["key", "language", "text"],
41
41
  },
42
42
  },
43
43
  },
44
- required: ["project", "t"],
44
+ required: ["project", "translations"],
45
45
  },
46
46
  },
47
47
  execute: (client, args) => executeTool(args, inputSchema, async (input, { workspaceId, projectSlug }) => {
48
48
  const result = await client.mcp.updateKeys.mutate({
49
49
  orgSlug: workspaceId,
50
50
  projectSlug,
51
- t: input.t.map((item) => ({
52
- k: item.k,
53
- ns: item.ns || "default",
54
- l: item.l,
55
- t: item.t,
56
- s: item.s,
57
- st: item.st,
51
+ t: input.translations.map((item) => ({
52
+ k: item.key,
53
+ ns: item.namespace || "default",
54
+ l: item.language,
55
+ t: item.text,
56
+ s: item.isSource,
57
+ st: item.status,
58
58
  })),
59
59
  });
60
60
  return success({
@@ -1 +1 @@
1
- {"version":3,"file":"updateKeys.js","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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,CAAC,EAAE,CAAC,CAAC,KAAK,CACR,CAAC,CAAC,MAAM,CAAC;QACP,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QACb,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QACzB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC1B,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,qLAAqL;QACvL,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,CAAC,EAAE;oBACD,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACrB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACtB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACrB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACrB,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;4BACtB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACvB;wBACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;qBAC1B;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;SAC3B;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,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACxB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,SAAS;gBACxB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ,CAAC,CAAC;SACJ,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,CACF;CACJ,CAAC"}
1
+ {"version":3,"file":"updateKeys.js","sourceRoot":"","sources":["../../src/tools/updateKeys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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,KAAK,CACnB,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,gHAAgH;QAClH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,oBAAoB;gBACvB,YAAY,EAAE;oBACZ,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;4BACxE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;4BAC5E,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;4BACnF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;4BACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;4BACnF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;yBACjF;wBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC;qBACtC;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;SACtC;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,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC,EAAE,IAAI,CAAC,GAAG;gBACX,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;gBAC/B,CAAC,EAAE,IAAI,CAAC,QAAQ;gBAChB,CAAC,EAAE,IAAI,CAAC,IAAI;gBACZ,CAAC,EAAE,IAAI,CAAC,QAAQ;gBAChB,EAAE,EAAE,IAAI,CAAC,MAAM;aAChB,CAAC,CAAC;SACJ,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,CACF;CACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-i18n/mcp",
3
- "version": "0.2.0",
3
+ "version": "0.4.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",