@rashidazarang/airtable-mcp 3.2.5 → 3.2.8

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 (59) hide show
  1. package/README.md +198 -360
  2. package/dist/typescript/airtable-mcp-server.js +2 -2
  3. package/dist/typescript/airtable-mcp-server.js.map +1 -1
  4. package/dist/typescript/app/airtable-client.js +24 -22
  5. package/dist/typescript/app/airtable-client.js.map +1 -1
  6. package/dist/typescript/app/config.js +11 -1
  7. package/dist/typescript/app/config.js.map +1 -1
  8. package/dist/typescript/app/logger.js +2 -2
  9. package/dist/typescript/app/logger.js.map +1 -1
  10. package/dist/typescript/app/sanitize.js +95 -0
  11. package/dist/typescript/app/sanitize.js.map +1 -0
  12. package/dist/typescript/app/tools/create.js +3 -2
  13. package/dist/typescript/app/tools/create.js.map +1 -1
  14. package/dist/typescript/app/tools/describe.js +65 -21
  15. package/dist/typescript/app/tools/describe.js.map +1 -1
  16. package/dist/typescript/app/tools/handleError.js +161 -10
  17. package/dist/typescript/app/tools/handleError.js.map +1 -1
  18. package/dist/typescript/app/tools/listBases.js +3 -8
  19. package/dist/typescript/app/tools/listBases.js.map +1 -1
  20. package/dist/typescript/app/tools/listExceptions.js +2 -4
  21. package/dist/typescript/app/tools/listExceptions.js.map +1 -1
  22. package/dist/typescript/app/tools/listGovernance.js +2 -4
  23. package/dist/typescript/app/tools/listGovernance.js.map +1 -1
  24. package/dist/typescript/app/tools/query.js +11 -4
  25. package/dist/typescript/app/tools/query.js.map +1 -1
  26. package/dist/typescript/app/tools/response.js +21 -0
  27. package/dist/typescript/app/tools/response.js.map +1 -0
  28. package/dist/typescript/app/tools/update.js +3 -2
  29. package/dist/typescript/app/tools/update.js.map +1 -1
  30. package/dist/typescript/app/tools/upsert.js +3 -2
  31. package/dist/typescript/app/tools/upsert.js.map +1 -1
  32. package/dist/typescript/app/tools/webhooks.js +4 -3
  33. package/dist/typescript/app/tools/webhooks.js.map +1 -1
  34. package/dist/typescript/app/types.js +18 -9
  35. package/dist/typescript/app/types.js.map +1 -1
  36. package/dist/typescript/app/validateApiKey.js +75 -0
  37. package/dist/typescript/app/validateApiKey.js.map +1 -0
  38. package/dist/typescript/errors.js.map +1 -1
  39. package/package.json +4 -5
  40. package/types/typescript/app/airtable-client.d.ts +2 -1
  41. package/types/typescript/app/config.d.ts +1 -0
  42. package/types/typescript/app/sanitize.d.ts +50 -0
  43. package/types/typescript/app/tools/create.d.ts +1 -1
  44. package/types/typescript/app/tools/describe.d.ts +1 -1
  45. package/types/typescript/app/tools/index.d.ts +1 -1
  46. package/types/typescript/app/tools/listBases.d.ts +3 -23
  47. package/types/typescript/app/tools/listExceptions.d.ts +1 -1
  48. package/types/typescript/app/tools/listGovernance.d.ts +1 -1
  49. package/types/typescript/app/tools/query.d.ts +1 -1
  50. package/types/typescript/app/tools/response.d.ts +20 -0
  51. package/types/typescript/app/tools/update.d.ts +1 -1
  52. package/types/typescript/app/tools/upsert.d.ts +1 -1
  53. package/types/typescript/app/tools/webhooks.d.ts +1 -1
  54. package/types/typescript/app/types.d.ts +149 -661
  55. package/types/typescript/app/validateApiKey.d.ts +25 -0
  56. package/types/typescript/errors.d.ts +2 -0
  57. package/dist/typescript/apps-sdk/mappers.js +0 -70
  58. package/dist/typescript/apps-sdk/mappers.js.map +0 -1
  59. package/types/typescript/apps-sdk/mappers.d.ts +0 -53
@@ -2,22 +2,171 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleToolError = handleToolError;
4
4
  const errors_1 = require("../../errors");
5
- function toUserMessage(error) {
5
+ function formatTokenWarnings(warnings) {
6
+ if (warnings.length === 0)
7
+ return '';
8
+ return '\n\nToken format issues detected:\n' + warnings.map((w) => `• ${w}`).join('\n');
9
+ }
10
+ function buildAuthErrorMessage(error, tokenWarnings) {
11
+ const errorType = error.context?.upstreamErrorType;
12
+ const baseId = error.context?.baseId;
13
+ const endpoint = error.context?.endpoint ?? '';
14
+ const isMetaApi = endpoint.includes('/meta/');
15
+ const isBaseSpecific = baseId && endpoint.includes(`/bases/${baseId}`);
16
+ const warningsText = formatTokenWarnings(tokenWarnings);
17
+ // Handle specific Airtable error types
18
+ if (errorType === 'AUTHENTICATION_REQUIRED') {
19
+ return `Authentication failed: Token is invalid or expired.
20
+
21
+ Troubleshooting:
22
+ 1. Verify your token at https://airtable.com/create/tokens
23
+ 2. Check that the token hasn't been revoked
24
+ 3. Ensure you copied the entire token (typically ~82 characters)${warningsText}`;
25
+ }
26
+ if (errorType === 'INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND') {
27
+ if (baseId) {
28
+ return `Authentication failed for base "${baseId}".
29
+
30
+ Your token is valid but cannot access this specific base.
31
+
32
+ Troubleshooting:
33
+ 1. Run list_bases to see which bases your token can access
34
+ 2. If this base is not listed, regenerate your token with access to it
35
+ 3. Verify your token has the required scopes:
36
+ • schema.bases:read (for describe/list operations)
37
+ • data.records:read (for query operations)
38
+ • data.records:write (for create/update operations)${warningsText}`;
39
+ }
40
+ return `Authentication failed: Token lacks required permissions.
41
+
42
+ Troubleshooting:
43
+ 1. Verify your token has the "schema.bases:read" scope
44
+ 2. Check token permissions at https://airtable.com/create/tokens
45
+ 3. Regenerate token if scopes are missing${warningsText}`;
46
+ }
47
+ // Fallback for unrecognized error types
48
+ if (isMetaApi && isBaseSpecific) {
49
+ return `Authentication failed for base "${baseId}".
50
+
51
+ This could mean:
52
+ 1. Your token lacks the "schema.bases:read" scope
53
+ 2. Your token does not have access to this specific base
54
+
55
+ Run list_bases to see which bases your token can access.${warningsText}`;
56
+ }
57
+ if (isMetaApi) {
58
+ return `Authentication failed for Meta API.
59
+
60
+ Troubleshooting:
61
+ 1. Ensure your token has the "schema.bases:read" scope
62
+ 2. Verify token at https://airtable.com/create/tokens${warningsText}`;
63
+ }
64
+ return `Authentication failed.
65
+
66
+ Troubleshooting:
67
+ 1. Verify token scopes match the operation you're attempting
68
+ 2. Check base/table access permissions
69
+ 3. Review token at https://airtable.com/create/tokens${warningsText}`;
70
+ }
71
+ function buildValidationErrorMessage(error) {
72
+ const errorType = error.context?.upstreamErrorType;
73
+ const errorMessage = error.context?.upstreamErrorMessage;
74
+ if (errorType === 'UNKNOWN_FIELD_NAME') {
75
+ return `Airtable rejected the request: Unknown field name.
76
+
77
+ ${errorMessage ? `Details: ${errorMessage}\n\n` : ''}Troubleshooting:
78
+ 1. Use describe tool to see valid field names for this table
79
+ 2. Field names are case-sensitive
80
+ 3. Check for typos in field names`;
81
+ }
82
+ if (errorType === 'INVALID_FIELD_TYPE') {
83
+ return `Airtable rejected the request: Invalid field value type.
84
+
85
+ ${errorMessage ? `Details: ${errorMessage}\n\n` : ''}Troubleshooting:
86
+ 1. Use describe tool to see field types
87
+ 2. Ensure values match expected types (text, number, date, etc.)
88
+ 3. Check Airtable field configuration`;
89
+ }
90
+ if (errorMessage) {
91
+ return `Airtable validation error: ${errorMessage}
92
+
93
+ Troubleshooting:
94
+ 1. Check field names and values match table schema
95
+ 2. Use describe tool to verify field types
96
+ 3. Ensure required fields are provided`;
97
+ }
98
+ return `Airtable rejected the request.
99
+
100
+ Troubleshooting:
101
+ 1. Check field names exist in the table
102
+ 2. Verify values match expected field types
103
+ 3. Use describe tool to inspect table schema`;
104
+ }
105
+ function buildNotFoundErrorMessage(error) {
106
+ const baseId = error.context?.baseId;
107
+ const errorMessage = error.context?.upstreamErrorMessage;
108
+ if (baseId) {
109
+ return `Resource not found in base "${baseId}".
110
+
111
+ ${errorMessage ? `Details: ${errorMessage}\n\n` : ''}Troubleshooting:
112
+ 1. Verify the base ID is correct
113
+ 2. Check table/record IDs exist
114
+ 3. Use list_bases and describe tools to confirm identifiers`;
115
+ }
116
+ return `Requested Airtable resource was not found.
117
+
118
+ Troubleshooting:
119
+ 1. Confirm base, table, and record identifiers are correct
120
+ 2. Use list_bases to see available bases
121
+ 3. Use describe to see tables in a base`;
122
+ }
123
+ function buildRateLimitMessage(error) {
124
+ const retryAfter = error.retryAfterMs;
125
+ const retrySeconds = retryAfter ? Math.ceil(retryAfter / 1000) : undefined;
126
+ if (retrySeconds) {
127
+ return `Airtable rate limit exceeded. Retry after ${retrySeconds} seconds.
128
+
129
+ The API allows 5 requests per second per base. Consider:
130
+ 1. Reducing request frequency
131
+ 2. Batching multiple record operations
132
+ 3. Using pagination for large result sets`;
133
+ }
134
+ return `Airtable rate limit exceeded.
135
+
136
+ The API allows 5 requests per second per base. Retry after a brief delay.`;
137
+ }
138
+ function toUserMessage(error, ctx) {
139
+ const tokenWarnings = ctx.config.auth.tokenFormatWarnings || [];
6
140
  switch (error.code) {
7
141
  case 'RateLimited':
8
- return 'Airtable rate limit exceeded. Please retry after backoff.';
142
+ return buildRateLimitMessage(error);
9
143
  case 'ValidationError':
10
- return 'Airtable rejected the request. Check field names and values.';
144
+ return buildValidationErrorMessage(error);
11
145
  case 'AuthError':
12
- return 'Authentication failed. Verify the Airtable token scopes and base access.';
146
+ return buildAuthErrorMessage(error, tokenWarnings);
13
147
  case 'ConflictError':
14
- return 'The record changed since it was fetched. Refresh data and review the diff.';
148
+ return `Record conflict detected.
149
+
150
+ The record was modified since it was fetched.
151
+
152
+ Troubleshooting:
153
+ 1. Fetch the latest version of the record
154
+ 2. Review the changes (diff)
155
+ 3. Retry the update with fresh data`;
15
156
  case 'NotFound':
16
- return 'Requested Airtable resource was not found. Confirm the base and table identifiers.';
157
+ return buildNotFoundErrorMessage(error);
17
158
  case 'GovernanceError':
18
- return 'Operation blocked by governance allow-lists.';
159
+ return `Operation blocked by governance policy.
160
+
161
+ This operation is not allowed by the configured governance rules.
162
+ Check AIRTABLE_ALLOWED_BASES and AIRTABLE_ALLOWED_TABLES settings.`;
19
163
  default:
20
- return 'Unexpected Airtable error. Please retry or check the exceptions queue.';
164
+ return `Unexpected Airtable error.
165
+
166
+ Please retry the operation. If the problem persists, check:
167
+ 1. Airtable service status
168
+ 2. Server logs for details
169
+ 3. Request ID: ${error.context?.upstreamRequestId || 'N/A'}`;
21
170
  }
22
171
  }
23
172
  function handleToolError(toolName, error, ctx) {
@@ -25,7 +174,9 @@ function handleToolError(toolName, error, ctx) {
25
174
  ctx.logger.error(`${toolName} failed`, {
26
175
  code: error.code,
27
176
  status: error.status,
28
- retryAfterMs: error.retryAfterMs
177
+ retryAfterMs: error.retryAfterMs,
178
+ upstreamErrorType: error.context?.upstreamErrorType,
179
+ upstreamRequestId: error.context?.upstreamRequestId
29
180
  });
30
181
  ctx.exceptions.record(error, `${toolName} failed`, error.message);
31
182
  return {
@@ -33,7 +184,7 @@ function handleToolError(toolName, error, ctx) {
33
184
  content: [
34
185
  {
35
186
  type: 'text',
36
- text: toUserMessage(error)
187
+ text: toUserMessage(error, ctx)
37
188
  }
38
189
  ]
39
190
  };
@@ -1 +1 @@
1
- {"version":3,"file":"handleError.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/handleError.ts"],"names":[],"mappings":";;AAsBA,0CAgCC;AAtDD,yCAAkD;AAGlD,SAAS,aAAa,CAAC,KAAyB;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,2DAA2D,CAAC;QACrE,KAAK,iBAAiB;YACpB,OAAO,8DAA8D,CAAC;QACxE,KAAK,WAAW;YACd,OAAO,0EAA0E,CAAC;QACpF,KAAK,eAAe;YAClB,OAAO,4EAA4E,CAAC;QACtF,KAAK,UAAU;YACb,OAAO,oFAAoF,CAAC;QAC9F,KAAK,iBAAiB;YACpB,OAAO,8CAA8C,CAAC;QACxD;YACE,OAAO,wEAAwE,CAAC;IACpF,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,QAAgB,EAAE,KAAc,EAAE,GAAe;IAC/E,IAAI,KAAK,YAAY,2BAAkB,EAAE,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,SAAS,EAAE;YACrC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,QAAQ,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC;iBAC3B;aACF;SACF,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,4BAA4B,EAAE;QACxD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC9D,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,kDAAkD;aACzD;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"handleError.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/handleError.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerListBasesTool = registerListBasesTool;
4
4
  const zod_1 = require("zod");
5
5
  const handleError_1 = require("./handleError");
6
+ const response_1 = require("./response");
6
7
  // Schema for list_bases output
7
8
  const listBasesOutputSchema = zod_1.z.object({
8
9
  bases: zod_1.z.array(zod_1.z.object({
@@ -25,10 +26,7 @@ function registerListBasesTool(server, ctx) {
25
26
  const structuredContent = {
26
27
  bases: []
27
28
  };
28
- return {
29
- structuredContent,
30
- content: []
31
- };
29
+ return (0, response_1.createToolResponse)(structuredContent);
32
30
  }
33
31
  const normalizedBases = bases.map((base) => ({
34
32
  id: String(base.id ?? ''),
@@ -39,10 +37,7 @@ function registerListBasesTool(server, ctx) {
39
37
  bases: normalizedBases
40
38
  };
41
39
  ctx.logger.info('Successfully listed bases', { count: bases.length });
42
- return {
43
- structuredContent,
44
- content: []
45
- };
40
+ return (0, response_1.createToolResponse)(structuredContent);
46
41
  }
47
42
  catch (error) {
48
43
  return (0, handleError_1.handleToolError)('list_bases', error, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"listBases.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/listBases.ts"],"names":[],"mappings":";;AAkBA,sDA8CC;AA9DD,6BAAwB;AACxB,+CAAgD;AAEhD,+BAA+B;AAC/B,MAAM,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,OAAC,CAAC,KAAK,CACZ,OAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;QAChB,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC,CACH;CACF,CAAC,CAAC;AAIH,SAAgB,qBAAqB,CAAC,MAAiB,EAAE,GAAe;IACtE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EAAE,iFAAiF;QAC9F,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,qBAAqB,CAAC,KAAK;KAC1C,EACD,KAAK,EAAE,KAAc,EAAE,MAAe,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAErD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAE7B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,iBAAiB,GAAoB;oBACzC,KAAK,EAAE,EAAE;iBACV,CAAC;gBACF,OAAO;oBACL,iBAAiB;oBACjB,OAAO,EAAE,EAAW;iBACrB,CAAC;YACJ,CAAC;YAED,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBAChD,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;aACjF,CAAC,CAAC,CAAC;YAEJ,MAAM,iBAAiB,GAAoB;gBACzC,KAAK,EAAE,eAAe;aACvB,CAAC;YAEF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO;gBACL,iBAAiB;gBACjB,OAAO,EAAE,EAAW;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,6BAAe,EAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"listBases.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/listBases.ts"],"names":[],"mappings":";;AAmBA,sDAwCC;AAzDD,6BAAwB;AACxB,+CAAgD;AAChD,yCAAgD;AAEhD,+BAA+B;AAC/B,MAAM,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,OAAC,CAAC,KAAK,CACZ,OAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;QAChB,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC,CACH;CACF,CAAC,CAAC;AAIH,SAAgB,qBAAqB,CAAC,MAAiB,EAAE,GAAe;IACtE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EAAE,iFAAiF;QAC9F,WAAW,EAAE,EAAS;QACtB,YAAY,EAAE,qBAAqB,CAAC,KAAY;KACjD,EACD,KAAK,EAAE,KAAc,EAAE,MAAe,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAErD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAE7B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,iBAAiB,GAAoB;oBACzC,KAAK,EAAE,EAAE;iBACV,CAAC;gBACF,OAAO,IAAA,6BAAkB,EAAC,iBAAiB,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBAChD,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;aACjF,CAAC,CAAC,CAAC;YAEJ,MAAM,iBAAiB,GAAoB;gBACzC,KAAK,EAAE,eAAe;aACvB,CAAC;YAEF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO,IAAA,6BAAkB,EAAC,iBAAiB,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,6BAAe,EAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerExceptionsTool = registerExceptionsTool;
4
4
  const types_1 = require("../types");
5
+ const response_1 = require("./response");
5
6
  function registerExceptionsTool(server, ctx) {
6
7
  server.registerTool('list_exceptions', {
7
8
  description: 'List recent exceptions and remediation proposals.',
@@ -9,10 +10,7 @@ function registerExceptionsTool(server, ctx) {
9
10
  outputSchema: types_1.listExceptionsOutputSchema.shape
10
11
  }, async (args) => {
11
12
  const snapshot = ctx.exceptions.list(args);
12
- return {
13
- structuredContent: snapshot,
14
- content: []
15
- };
13
+ return (0, response_1.createToolResponse)(snapshot);
16
14
  });
17
15
  }
18
16
  //# sourceMappingURL=listExceptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listExceptions.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/listExceptions.ts"],"names":[],"mappings":";;AAQA,wDAgBC;AAvBD,oCAIkB;AAGlB,SAAgB,sBAAsB,CAAC,MAAiB,EAAE,GAAe;IACvE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE,iCAAyB,CAAC,KAAK;QAC5C,YAAY,EAAE,kCAA0B,CAAC,KAAK;KAC/C,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO;YACL,iBAAiB,EAAE,QAAQ;YAC3B,OAAO,EAAE,EAAW;SACrB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"listExceptions.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/listExceptions.ts"],"names":[],"mappings":";;AASA,wDAaC;AArBD,oCAIkB;AAElB,yCAAgD;AAEhD,SAAgB,sBAAsB,CAAC,MAAiB,EAAE,GAAe;IACvE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE,iCAAyB,CAAC,KAAY;QACnD,YAAY,EAAE,kCAA0B,CAAC,KAAY;KACtD,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAA,6BAAkB,EAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -2,16 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerGovernanceTool = registerGovernanceTool;
4
4
  const types_1 = require("../types");
5
+ const response_1 = require("./response");
5
6
  function registerGovernanceTool(server, ctx) {
6
7
  server.registerTool('list_governance', {
7
8
  description: 'Return governance allow-lists and PII masking policies.',
8
9
  outputSchema: types_1.governanceOutputSchema.shape
9
10
  }, async () => {
10
11
  const snapshot = ctx.governance.getSnapshot();
11
- return {
12
- structuredContent: snapshot,
13
- content: []
14
- };
12
+ return (0, response_1.createToolResponse)(snapshot);
15
13
  });
16
14
  }
17
15
  //# sourceMappingURL=listGovernance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listGovernance.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/listGovernance.ts"],"names":[],"mappings":";;AAIA,wDAeC;AAlBD,oCAAkD;AAGlD,SAAgB,sBAAsB,CAAC,MAAiB,EAAE,GAAe;IACvE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,yDAAyD;QACtE,YAAY,EAAE,8BAAsB,CAAC,KAAK;KAC3C,EACD,KAAK,IAAI,EAAE;QACT,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9C,OAAO;YACL,iBAAiB,EAAE,QAAQ;YAC3B,OAAO,EAAE,EAAW;SACrB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"listGovernance.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/listGovernance.ts"],"names":[],"mappings":";;AAKA,wDAYC;AAhBD,oCAAkD;AAElD,yCAAgD;AAEhD,SAAgB,sBAAsB,CAAC,MAAiB,EAAE,GAAe;IACvE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,yDAAyD;QACtE,YAAY,EAAE,8BAAsB,CAAC,KAAY;KAClD,EACD,KAAK,IAAI,EAAE;QACT,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC9C,OAAO,IAAA,6BAAkB,EAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -4,6 +4,8 @@ exports.registerQueryTool = registerQueryTool;
4
4
  const node_crypto_1 = require("node:crypto");
5
5
  const types_1 = require("../types");
6
6
  const handleError_1 = require("./handleError");
7
+ const response_1 = require("./response");
8
+ const sanitize_1 = require("../sanitize");
7
9
  function maskValue(value) {
8
10
  if (value === null || value === undefined) {
9
11
  return value;
@@ -65,6 +67,14 @@ function registerQueryTool(server, ctx) {
65
67
  queryParams.fields = input.fields;
66
68
  }
67
69
  if (input.filterByFormula) {
70
+ // Validate formula for suspicious patterns (log warning but don't block)
71
+ const formulaValidation = (0, sanitize_1.validateFormula)(input.filterByFormula);
72
+ if (!formulaValidation.isValid) {
73
+ logger.warn('Potentially unsafe formula pattern detected', {
74
+ warning: formulaValidation.warning,
75
+ formula: input.filterByFormula.substring(0, 100) // Truncate for logging
76
+ });
77
+ }
68
78
  queryParams.filterByFormula = input.filterByFormula;
69
79
  }
70
80
  if (input.view) {
@@ -113,10 +123,7 @@ function registerQueryTool(server, ctx) {
113
123
  returned: sanitizedRecords.length,
114
124
  hasMore: structuredContent.summary?.hasMore
115
125
  });
116
- return {
117
- structuredContent,
118
- content: []
119
- };
126
+ return (0, response_1.createToolResponse)(structuredContent);
120
127
  }
121
128
  catch (error) {
122
129
  return (0, handleError_1.handleToolError)('query', error, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Utility for creating consistent MCP tool responses.
4
+ *
5
+ * The MCP protocol requires the `content` array to contain displayable data.
6
+ * While `structuredContent` is the newer typed output format, most clients
7
+ * read from `content` for backwards compatibility.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createToolResponse = createToolResponse;
11
+ /**
12
+ * Creates a tool response with both structuredContent (for typed clients)
13
+ * and content array (for backwards compatibility with MCP clients).
14
+ */
15
+ function createToolResponse(data) {
16
+ return {
17
+ structuredContent: data,
18
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }]
19
+ };
20
+ }
21
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/response.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAYH,gDAKC;AATD;;;GAGG;AACH,SAAgB,kBAAkB,CAAI,IAAO;IAC3C,OAAO;QACL,iBAAiB,EAAE,IAAI;QACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerUpdateTool = registerUpdateTool;
4
4
  const types_1 = require("../types");
5
5
  const handleError_1 = require("./handleError");
6
+ const response_1 = require("./response");
6
7
  function chunk(arr, size) {
7
8
  const out = [];
8
9
  for (let i = 0; i < arr.length; i += size)
@@ -28,7 +29,7 @@ function registerUpdateTool(server, ctx) {
28
29
  records: args.records.map((r) => ({ id: r.id, fields: r.fields })),
29
30
  conflicts: []
30
31
  };
31
- return { structuredContent, content: [] };
32
+ return (0, response_1.createToolResponse)(structuredContent);
32
33
  }
33
34
  const chunks = chunk(args.records, 10);
34
35
  const aggregated = [];
@@ -46,7 +47,7 @@ function registerUpdateTool(server, ctx) {
46
47
  conflicts: []
47
48
  };
48
49
  logger.info('Update completed', { updated: aggregated.length });
49
- return { structuredContent, content: [] };
50
+ return (0, response_1.createToolResponse)(structuredContent);
50
51
  }
51
52
  catch (error) {
52
53
  return (0, handleError_1.handleToolError)('update', error, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/update.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerUpsertTool = registerUpsertTool;
4
4
  const types_1 = require("../types");
5
5
  const handleError_1 = require("./handleError");
6
+ const response_1 = require("./response");
6
7
  function chunk(arr, size) {
7
8
  const out = [];
8
9
  for (let i = 0; i < arr.length; i += size)
@@ -33,7 +34,7 @@ function registerUpsertTool(server, ctx) {
33
34
  // When using strict PRD output, we can omit conflicts and include matchedBy
34
35
  structuredContent.matchedBy = matchedBy;
35
36
  delete structuredContent.conflicts;
36
- return { structuredContent, content: [] };
37
+ return (0, response_1.createToolResponse)(structuredContent);
37
38
  }
38
39
  const chunks = chunk(args.records, 10);
39
40
  const aggregated = [];
@@ -55,7 +56,7 @@ function registerUpsertTool(server, ctx) {
55
56
  dryRun: false
56
57
  };
57
58
  logger.info('Upsert completed', { processed: aggregated.length, matchedBy });
58
- return { structuredContent, content: [] };
59
+ return (0, response_1.createToolResponse)(structuredContent);
59
60
  }
60
61
  catch (error) {
61
62
  return (0, handleError_1.handleToolError)('upsert', error, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"upsert.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/upsert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upsert.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/upsert.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerWebhookTools = registerWebhookTools;
4
4
  const handleError_1 = require("./handleError");
5
+ const response_1 = require("./response");
5
6
  function registerWebhookTools(server, ctx) {
6
7
  server.registerTool('list_webhooks', { description: 'List Airtable webhooks for the default base.' }, async (_args) => {
7
8
  try {
@@ -9,7 +10,7 @@ function registerWebhookTools(server, ctx) {
9
10
  if (!baseId)
10
11
  throw new Error('No base configured');
11
12
  const body = await ctx.airtable.queryRecords(baseId, 'meta/webhooks');
12
- return { structuredContent: { webhooks: body }, content: [] };
13
+ return (0, response_1.createToolResponse)({ webhooks: body });
13
14
  }
14
15
  catch (error) {
15
16
  return (0, handleError_1.handleToolError)('list_webhooks', error, ctx);
@@ -22,7 +23,7 @@ function registerWebhookTools(server, ctx) {
22
23
  throw new Error('No base configured');
23
24
  const payload = { notificationUrl: String(args.notificationUrl || '') };
24
25
  const result = await ctx.airtable.createRecords(baseId, 'meta/webhooks', payload);
25
- return { structuredContent: { webhook: result }, content: [] };
26
+ return (0, response_1.createToolResponse)({ webhook: result });
26
27
  }
27
28
  catch (error) {
28
29
  return (0, handleError_1.handleToolError)('create_webhook', error, ctx);
@@ -34,7 +35,7 @@ function registerWebhookTools(server, ctx) {
34
35
  if (!baseId)
35
36
  throw new Error('No base configured');
36
37
  const result = await ctx.airtable.updateRecords(baseId, `meta/webhooks/${String(args.webhookId)}/refresh`, {});
37
- return { structuredContent: { webhook: result }, content: [] };
38
+ return (0, response_1.createToolResponse)({ webhook: result });
38
39
  }
39
40
  catch (error) {
40
41
  return (0, handleError_1.handleToolError)('refresh_webhook', error, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/webhooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../../src/typescript/app/tools/webhooks.ts"],"names":[],"mappings":";;AAKA,oDA8CC;AAjDD,+CAAgD;AAChD,yCAAgD;AAEhD,SAAgB,oBAAoB,CAAC,MAAiB,EAAE,GAAe;IACrE,MAAM,CAAC,YAAY,CACjB,eAAe,EACf,EAAE,WAAW,EAAE,8CAA8C,EAAE,EAC/D,KAAK,EAAE,KAA8B,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACtE,OAAO,IAAA,6BAAkB,EAAC,EAAE,QAAQ,EAAE,IAA+B,EAAE,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,6BAAe,EAAC,eAAe,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB,EAAE,WAAW,EAAE,kCAAkC,EAAE,EACnD,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3G,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,OAAc,CAAC,CAAC;YACzF,OAAO,IAAA,6BAAkB,EAAC,EAAE,OAAO,EAAE,MAAiC,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,6BAAe,EAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB,EAAE,WAAW,EAAE,6BAA6B,EAAE,EAC9C,KAAK,EAAE,IAA6B,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3G,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAS,CAAC,CAAC;YACtH,OAAO,IAAA,6BAAkB,EAAC,EAAE,OAAO,EAAE,MAAiC,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,6BAAe,EAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.governanceOutputSchema = exports.listExceptionsOutputSchema = exports.exceptionItemSchema = exports.listExceptionsInputSchema = exports.upsertOutputSchema = exports.upsertInputSchema = exports.updateInputSchema = exports.updateOutputSchema = exports.createOutputSchema = exports.createInputSchema = exports.queryOutputSchema = exports.queryInputShape = exports.queryInputSchema = exports.describeOutputSchema = exports.describeInputShape = exports.describeInputSchema = void 0;
3
+ exports.governanceOutputSchema = exports.listExceptionsOutputSchema = exports.exceptionItemSchema = exports.listExceptionsInputSchema = exports.upsertOutputSchema = exports.upsertInputSchema = exports.updateInputSchema = exports.updateOutputSchema = exports.createOutputSchema = exports.createInputSchema = exports.queryOutputSchema = exports.queryInputShape = exports.queryInputSchema = exports.describeOutputSchema = exports.describeInputShape = exports.describeInputSchema = exports.detailLevelSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  /**
6
6
  * Shared Zod schemas and TypeScript types for Airtable Brain tools.
7
7
  * Keep these aligned with the JSON Schemas under docs/prd/schemas.
8
8
  */
9
+ /**
10
+ * Detail level for schema operations to optimize LLM context usage.
11
+ * - tableIdentifiersOnly: Only table IDs and names
12
+ * - identifiersOnly: Table, field, and view IDs and names
13
+ * - full: Complete details including field types, options, descriptions
14
+ */
15
+ exports.detailLevelSchema = zod_1.z.enum(['tableIdentifiersOnly', 'identifiersOnly', 'full']);
9
16
  const describeInputBase = zod_1.z
10
17
  .object({
11
18
  scope: zod_1.z.enum(['base', 'table']),
@@ -14,6 +21,8 @@ const describeInputBase = zod_1.z
14
21
  .string()
15
22
  .min(1, 'table is required when scope=table')
16
23
  .optional(),
24
+ detailLevel: exports.detailLevelSchema.optional().default('full'),
25
+ // Deprecated: use detailLevel instead
17
26
  includeFields: zod_1.z.boolean().optional().default(true),
18
27
  includeViews: zod_1.z.boolean().optional().default(false)
19
28
  })
@@ -33,7 +42,7 @@ const describeFieldSchema = zod_1.z
33
42
  id: zod_1.z.string(),
34
43
  name: zod_1.z.string(),
35
44
  type: zod_1.z.string(),
36
- options: zod_1.z.record(zod_1.z.unknown()).optional()
45
+ options: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional()
37
46
  })
38
47
  .passthrough();
39
48
  const describeTableSchema = zod_1.z
@@ -43,7 +52,7 @@ const describeTableSchema = zod_1.z
43
52
  description: zod_1.z.string().optional(),
44
53
  primaryFieldId: zod_1.z.string().optional(),
45
54
  fields: zod_1.z.array(describeFieldSchema).optional(),
46
- views: zod_1.z.array(zod_1.z.record(zod_1.z.unknown())).optional()
55
+ views: zod_1.z.array(zod_1.z.record(zod_1.z.string(), zod_1.z.unknown())).optional()
47
56
  })
48
57
  .passthrough();
49
58
  exports.describeOutputSchema = zod_1.z
@@ -55,7 +64,7 @@ exports.describeOutputSchema = zod_1.z
55
64
  })
56
65
  .passthrough(),
57
66
  tables: zod_1.z.array(describeTableSchema).optional(),
58
- views: zod_1.z.array(zod_1.z.record(zod_1.z.unknown())).optional()
67
+ views: zod_1.z.array(zod_1.z.record(zod_1.z.string(), zod_1.z.unknown())).optional()
59
68
  })
60
69
  .strict();
61
70
  const sortDirectionSchema = zod_1.z.enum(['asc', 'desc']);
@@ -95,7 +104,7 @@ const recordSchema = zod_1.z
95
104
  .object({
96
105
  id: zod_1.z.string(),
97
106
  createdTime: zod_1.z.string().optional(),
98
- fields: zod_1.z.record(zod_1.z.unknown())
107
+ fields: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown())
99
108
  })
100
109
  .strict();
101
110
  exports.queryOutputSchema = zod_1.z
@@ -118,7 +127,7 @@ exports.createInputSchema = zod_1.z
118
127
  records: zod_1.z
119
128
  .array(zod_1.z
120
129
  .object({
121
- fields: zod_1.z.record(zod_1.z.unknown())
130
+ fields: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown())
122
131
  })
123
132
  .strict())
124
133
  .min(1),
@@ -175,7 +184,7 @@ exports.updateInputSchema = zod_1.z
175
184
  .array(zod_1.z
176
185
  .object({
177
186
  id: zod_1.z.string(),
178
- fields: zod_1.z.record(zod_1.z.unknown())
187
+ fields: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown())
179
188
  })
180
189
  .strict())
181
190
  .min(1),
@@ -196,7 +205,7 @@ exports.upsertInputSchema = zod_1.z
196
205
  records: zod_1.z
197
206
  .array(zod_1.z
198
207
  .object({
199
- fields: zod_1.z.record(zod_1.z.unknown())
208
+ fields: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown())
200
209
  })
201
210
  .strict())
202
211
  .min(1),
@@ -238,7 +247,7 @@ exports.exceptionItemSchema = zod_1.z
238
247
  category: zod_1.z.enum(['rate_limit', 'validation', 'auth', 'conflict', 'schema_drift', 'other']),
239
248
  summary: zod_1.z.string(),
240
249
  details: zod_1.z.string().optional(),
241
- proposedFix: zod_1.z.record(zod_1.z.unknown()).optional()
250
+ proposedFix: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional()
242
251
  })
243
252
  .strict();
244
253
  exports.listExceptionsOutputSchema = zod_1.z