@seatable/mcp-seatable 0.9.5

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 (193) hide show
  1. package/.env.example +11 -0
  2. package/LICENSE +21 -0
  3. package/README.md +302 -0
  4. package/bin/seatable-mcp.cjs +20 -0
  5. package/dist/auth/tokenValidator.d.ts +10 -0
  6. package/dist/auth/tokenValidator.d.ts.map +1 -0
  7. package/dist/auth/tokenValidator.js +55 -0
  8. package/dist/auth/tokenValidator.js.map +1 -0
  9. package/dist/config/env.d.ts +67 -0
  10. package/dist/config/env.d.ts.map +1 -0
  11. package/dist/config/env.js +105 -0
  12. package/dist/config/env.js.map +1 -0
  13. package/dist/errors.d.ts +8 -0
  14. package/dist/errors.d.ts.map +1 -0
  15. package/dist/errors.js +28 -0
  16. package/dist/errors.js.map +1 -0
  17. package/dist/http/httpServer.d.ts +7 -0
  18. package/dist/http/httpServer.d.ts.map +1 -0
  19. package/dist/http/httpServer.js +211 -0
  20. package/dist/http/httpServer.js.map +1 -0
  21. package/dist/http/sseServer.d.ts +11 -0
  22. package/dist/http/sseServer.d.ts.map +1 -0
  23. package/dist/http/sseServer.js +154 -0
  24. package/dist/http/sseServer.js.map +1 -0
  25. package/dist/index.d.ts +13 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +86 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/logger.d.ts +5 -0
  30. package/dist/logger.d.ts.map +1 -0
  31. package/dist/logger.js +34 -0
  32. package/dist/logger.js.map +1 -0
  33. package/dist/mcp/server.d.ts +52 -0
  34. package/dist/mcp/server.d.ts.map +1 -0
  35. package/dist/mcp/server.js +222 -0
  36. package/dist/mcp/server.js.map +1 -0
  37. package/dist/mcp/tools/addRow.d.ts +3 -0
  38. package/dist/mcp/tools/addRow.d.ts.map +1 -0
  39. package/dist/mcp/tools/addRow.js +23 -0
  40. package/dist/mcp/tools/addRow.js.map +1 -0
  41. package/dist/mcp/tools/addSelectOption.d.ts +3 -0
  42. package/dist/mcp/tools/addSelectOption.d.ts.map +1 -0
  43. package/dist/mcp/tools/addSelectOption.js +27 -0
  44. package/dist/mcp/tools/addSelectOption.js.map +1 -0
  45. package/dist/mcp/tools/appendRows.d.ts +3 -0
  46. package/dist/mcp/tools/appendRows.d.ts.map +1 -0
  47. package/dist/mcp/tools/appendRows.js +27 -0
  48. package/dist/mcp/tools/appendRows.js.map +1 -0
  49. package/dist/mcp/tools/attachFileToRow.d.ts +3 -0
  50. package/dist/mcp/tools/attachFileToRow.d.ts.map +1 -0
  51. package/dist/mcp/tools/attachFileToRow.js +42 -0
  52. package/dist/mcp/tools/attachFileToRow.js.map +1 -0
  53. package/dist/mcp/tools/bulkSetSelectOptions.d.ts +3 -0
  54. package/dist/mcp/tools/bulkSetSelectOptions.d.ts.map +1 -0
  55. package/dist/mcp/tools/bulkSetSelectOptions.js +49 -0
  56. package/dist/mcp/tools/bulkSetSelectOptions.js.map +1 -0
  57. package/dist/mcp/tools/deleteRow.d.ts +3 -0
  58. package/dist/mcp/tools/deleteRow.d.ts.map +1 -0
  59. package/dist/mcp/tools/deleteRow.js +22 -0
  60. package/dist/mcp/tools/deleteRow.js.map +1 -0
  61. package/dist/mcp/tools/echoArgs.d.ts +3 -0
  62. package/dist/mcp/tools/echoArgs.d.ts.map +1 -0
  63. package/dist/mcp/tools/echoArgs.js +14 -0
  64. package/dist/mcp/tools/echoArgs.js.map +1 -0
  65. package/dist/mcp/tools/findRows.d.ts +9 -0
  66. package/dist/mcp/tools/findRows.d.ts.map +1 -0
  67. package/dist/mcp/tools/findRows.js +255 -0
  68. package/dist/mcp/tools/findRows.js.map +1 -0
  69. package/dist/mcp/tools/getRow.d.ts +3 -0
  70. package/dist/mcp/tools/getRow.d.ts.map +1 -0
  71. package/dist/mcp/tools/getRow.js +18 -0
  72. package/dist/mcp/tools/getRow.js.map +1 -0
  73. package/dist/mcp/tools/getSchema.d.ts +3 -0
  74. package/dist/mcp/tools/getSchema.d.ts.map +1 -0
  75. package/dist/mcp/tools/getSchema.js +16 -0
  76. package/dist/mcp/tools/getSchema.js.map +1 -0
  77. package/dist/mcp/tools/linkRows.d.ts +3 -0
  78. package/dist/mcp/tools/linkRows.d.ts.map +1 -0
  79. package/dist/mcp/tools/linkRows.js +23 -0
  80. package/dist/mcp/tools/linkRows.js.map +1 -0
  81. package/dist/mcp/tools/listBases.d.ts +3 -0
  82. package/dist/mcp/tools/listBases.d.ts.map +1 -0
  83. package/dist/mcp/tools/listBases.js +16 -0
  84. package/dist/mcp/tools/listBases.js.map +1 -0
  85. package/dist/mcp/tools/listCollaborators.d.ts +3 -0
  86. package/dist/mcp/tools/listCollaborators.d.ts.map +1 -0
  87. package/dist/mcp/tools/listCollaborators.js +16 -0
  88. package/dist/mcp/tools/listCollaborators.js.map +1 -0
  89. package/dist/mcp/tools/listRows.d.ts +3 -0
  90. package/dist/mcp/tools/listRows.d.ts.map +1 -0
  91. package/dist/mcp/tools/listRows.js +20 -0
  92. package/dist/mcp/tools/listRows.js.map +1 -0
  93. package/dist/mcp/tools/listTables.d.ts +3 -0
  94. package/dist/mcp/tools/listTables.d.ts.map +1 -0
  95. package/dist/mcp/tools/listTables.js +19 -0
  96. package/dist/mcp/tools/listTables.js.map +1 -0
  97. package/dist/mcp/tools/manageColumns.d.ts +3 -0
  98. package/dist/mcp/tools/manageColumns.d.ts.map +1 -0
  99. package/dist/mcp/tools/manageColumns.js +44 -0
  100. package/dist/mcp/tools/manageColumns.js.map +1 -0
  101. package/dist/mcp/tools/manageTables.d.ts +3 -0
  102. package/dist/mcp/tools/manageTables.d.ts.map +1 -0
  103. package/dist/mcp/tools/manageTables.js +36 -0
  104. package/dist/mcp/tools/manageTables.js.map +1 -0
  105. package/dist/mcp/tools/pingSeatable.d.ts +3 -0
  106. package/dist/mcp/tools/pingSeatable.d.ts.map +1 -0
  107. package/dist/mcp/tools/pingSeatable.js +37 -0
  108. package/dist/mcp/tools/pingSeatable.js.map +1 -0
  109. package/dist/mcp/tools/querySql.d.ts +3 -0
  110. package/dist/mcp/tools/querySql.d.ts.map +1 -0
  111. package/dist/mcp/tools/querySql.js +28 -0
  112. package/dist/mcp/tools/querySql.js.map +1 -0
  113. package/dist/mcp/tools/searchRows.d.ts +3 -0
  114. package/dist/mcp/tools/searchRows.d.ts.map +1 -0
  115. package/dist/mcp/tools/searchRows.js +18 -0
  116. package/dist/mcp/tools/searchRows.js.map +1 -0
  117. package/dist/mcp/tools/types.d.ts +90 -0
  118. package/dist/mcp/tools/types.d.ts.map +1 -0
  119. package/dist/mcp/tools/types.js +2 -0
  120. package/dist/mcp/tools/types.js.map +1 -0
  121. package/dist/mcp/tools/unlinkRows.d.ts +3 -0
  122. package/dist/mcp/tools/unlinkRows.d.ts.map +1 -0
  123. package/dist/mcp/tools/unlinkRows.js +23 -0
  124. package/dist/mcp/tools/unlinkRows.js.map +1 -0
  125. package/dist/mcp/tools/updateRow.d.ts +3 -0
  126. package/dist/mcp/tools/updateRow.d.ts.map +1 -0
  127. package/dist/mcp/tools/updateRow.js +32 -0
  128. package/dist/mcp/tools/updateRow.js.map +1 -0
  129. package/dist/mcp/tools/uploadFile.d.ts +3 -0
  130. package/dist/mcp/tools/uploadFile.d.ts.map +1 -0
  131. package/dist/mcp/tools/uploadFile.js +29 -0
  132. package/dist/mcp/tools/uploadFile.js.map +1 -0
  133. package/dist/mcp/tools/upsertRows.d.ts +3 -0
  134. package/dist/mcp/tools/upsertRows.d.ts.map +1 -0
  135. package/dist/mcp/tools/upsertRows.js +55 -0
  136. package/dist/mcp/tools/upsertRows.js.map +1 -0
  137. package/dist/ratelimit/connectionCounter.d.ts +11 -0
  138. package/dist/ratelimit/connectionCounter.d.ts.map +1 -0
  139. package/dist/ratelimit/connectionCounter.js +27 -0
  140. package/dist/ratelimit/connectionCounter.js.map +1 -0
  141. package/dist/ratelimit/index.d.ts +27 -0
  142. package/dist/ratelimit/index.d.ts.map +1 -0
  143. package/dist/ratelimit/index.js +50 -0
  144. package/dist/ratelimit/index.js.map +1 -0
  145. package/dist/ratelimit/rateLimiter.d.ts +18 -0
  146. package/dist/ratelimit/rateLimiter.d.ts.map +1 -0
  147. package/dist/ratelimit/rateLimiter.js +54 -0
  148. package/dist/ratelimit/rateLimiter.js.map +1 -0
  149. package/dist/schema/generic.d.ts +126 -0
  150. package/dist/schema/generic.d.ts.map +1 -0
  151. package/dist/schema/generic.js +45 -0
  152. package/dist/schema/generic.js.map +1 -0
  153. package/dist/schema/jsonSchemaToZod.d.ts +3 -0
  154. package/dist/schema/jsonSchemaToZod.d.ts.map +1 -0
  155. package/dist/schema/jsonSchemaToZod.js +53 -0
  156. package/dist/schema/jsonSchemaToZod.js.map +1 -0
  157. package/dist/schema/map.d.ts +3 -0
  158. package/dist/schema/map.d.ts.map +1 -0
  159. package/dist/schema/map.js +92 -0
  160. package/dist/schema/map.js.map +1 -0
  161. package/dist/schema/validate.d.ts +15 -0
  162. package/dist/schema/validate.d.ts.map +1 -0
  163. package/dist/schema/validate.js +170 -0
  164. package/dist/schema/validate.js.map +1 -0
  165. package/dist/seatable/client.d.ts +106 -0
  166. package/dist/seatable/client.d.ts.map +1 -0
  167. package/dist/seatable/client.js +378 -0
  168. package/dist/seatable/client.js.map +1 -0
  169. package/dist/seatable/clientRegistry.d.ts +11 -0
  170. package/dist/seatable/clientRegistry.d.ts.map +1 -0
  171. package/dist/seatable/clientRegistry.js +33 -0
  172. package/dist/seatable/clientRegistry.js.map +1 -0
  173. package/dist/seatable/contextualClient.d.ts +92 -0
  174. package/dist/seatable/contextualClient.d.ts.map +1 -0
  175. package/dist/seatable/contextualClient.js +42 -0
  176. package/dist/seatable/contextualClient.js.map +1 -0
  177. package/dist/seatable/mockClient.d.ts +68 -0
  178. package/dist/seatable/mockClient.d.ts.map +1 -0
  179. package/dist/seatable/mockClient.js +115 -0
  180. package/dist/seatable/mockClient.js.map +1 -0
  181. package/dist/seatable/tokenManager.d.ts +28 -0
  182. package/dist/seatable/tokenManager.d.ts.map +1 -0
  183. package/dist/seatable/tokenManager.js +92 -0
  184. package/dist/seatable/tokenManager.js.map +1 -0
  185. package/dist/seatable/types.d.ts +22 -0
  186. package/dist/seatable/types.d.ts.map +1 -0
  187. package/dist/seatable/types.js +3 -0
  188. package/dist/seatable/types.js.map +1 -0
  189. package/dist/seatable/utils.d.ts +7 -0
  190. package/dist/seatable/utils.d.ts.map +1 -0
  191. package/dist/seatable/utils.js +25 -0
  192. package/dist/seatable/utils.js.map +1 -0
  193. package/package.json +94 -0
@@ -0,0 +1,255 @@
1
+ import { z } from 'zod';
2
+ // Zod schema for the DSL (kept for reference/tests but not enforced at the boundary)
3
+ const FieldRef = z.object({ field: z.string() });
4
+ const Eq = z.object({ eq: FieldRef.extend({ value: z.any() }) });
5
+ const Ne = z.object({ ne: FieldRef.extend({ value: z.any() }) });
6
+ const In = z.object({ in: FieldRef.extend({ values: z.array(z.any()) }) });
7
+ const CmpValue = z.any();
8
+ const Gt = z.object({ gt: FieldRef.extend({ value: CmpValue }) });
9
+ const Gte = z.object({ gte: FieldRef.extend({ value: CmpValue }) });
10
+ const Lt = z.object({ lt: FieldRef.extend({ value: CmpValue }) });
11
+ const Lte = z.object({ lte: FieldRef.extend({ value: CmpValue }) });
12
+ const Contains = z.object({ contains: FieldRef.extend({ value: z.string(), case_sensitive: z.boolean().optional() }) });
13
+ const StartsWith = z.object({ starts_with: FieldRef.extend({ value: z.string(), case_sensitive: z.boolean().optional() }) });
14
+ const EndsWith = z.object({ ends_with: FieldRef.extend({ value: z.string(), case_sensitive: z.boolean().optional() }) });
15
+ const IsNull = z.object({ is_null: FieldRef });
16
+ export const Where = z.lazy(() => z.union([
17
+ Eq,
18
+ Ne,
19
+ In,
20
+ Gt,
21
+ Gte,
22
+ Lt,
23
+ Lte,
24
+ Contains,
25
+ StartsWith,
26
+ EndsWith,
27
+ IsNull,
28
+ z.object({ and: z.array(Where).min(1) }),
29
+ z.object({ or: z.array(Where).min(1) }),
30
+ z.object({ not: Where }),
31
+ ]));
32
+ // Use a loose schema for boundary parsing
33
+ const InputSchema = z.object({
34
+ table: z.string().describe('Target table name'),
35
+ where: z.unknown().describe('Filter predicate (e.g. {"eq":{"field":"Name","value":"foo"}} or shorthand {"Name":"foo"})'),
36
+ page: z.number().int().min(1).optional().default(1).describe('Page number (1-based)'),
37
+ page_size: z.number().int().min(1).max(1000).optional().default(100).describe('Rows per page (max 1000)'),
38
+ order_by: z.string().optional().describe('Column name to sort by'),
39
+ direction: z.enum(['asc', 'desc']).optional().default('asc').describe('Sort direction'),
40
+ });
41
+ function toStringSafe(v) {
42
+ return v == null ? '' : String(v);
43
+ }
44
+ function compare(a, b) {
45
+ if (a === b)
46
+ return 0;
47
+ if (a == null)
48
+ return -1;
49
+ if (b == null)
50
+ return 1;
51
+ if (typeof a === 'number' && typeof b === 'number')
52
+ return a - b;
53
+ const as = toStringSafe(a);
54
+ const bs = toStringSafe(b);
55
+ if (as < bs)
56
+ return -1;
57
+ if (as > bs)
58
+ return 1;
59
+ return 0;
60
+ }
61
+ function get(row, path) {
62
+ // Simple top-level field lookup; can extend to dotted paths later
63
+ return row[path];
64
+ }
65
+ export function evalWhere(row, where) {
66
+ if (where == null)
67
+ return true;
68
+ if (where.and)
69
+ return where.and.every((w) => evalWhere(row, w));
70
+ if (where.or)
71
+ return where.or.some((w) => evalWhere(row, w));
72
+ if (where.not)
73
+ return !evalWhere(row, where.not);
74
+ if (where.eq) {
75
+ const { field, value } = where.eq;
76
+ return get(row, field) === value;
77
+ }
78
+ if (where.ne) {
79
+ const { field, value } = where.ne;
80
+ return get(row, field) !== value;
81
+ }
82
+ if (where.in) {
83
+ const { field, values } = where.in;
84
+ const v = get(row, field);
85
+ return values.some((x) => x === v);
86
+ }
87
+ if (where.gt) {
88
+ const { field, value } = where.gt;
89
+ return compare(get(row, field), value) > 0;
90
+ }
91
+ if (where.gte) {
92
+ const { field, value } = where.gte;
93
+ return compare(get(row, field), value) >= 0;
94
+ }
95
+ if (where.lt) {
96
+ const { field, value } = where.lt;
97
+ return compare(get(row, field), value) < 0;
98
+ }
99
+ if (where.lte) {
100
+ const { field, value } = where.lte;
101
+ return compare(get(row, field), value) <= 0;
102
+ }
103
+ if (where.contains) {
104
+ const { field, value, case_sensitive } = where.contains;
105
+ const sv = toStringSafe(get(row, field));
106
+ const needle = String(value);
107
+ return case_sensitive ? sv.includes(needle) : sv.toLowerCase().includes(needle.toLowerCase());
108
+ }
109
+ if (where.starts_with) {
110
+ const { field, value, case_sensitive } = where.starts_with;
111
+ const sv = toStringSafe(get(row, field));
112
+ const needle = String(value);
113
+ return case_sensitive ? sv.startsWith(needle) : sv.toLowerCase().startsWith(needle.toLowerCase());
114
+ }
115
+ if (where.ends_with) {
116
+ const { field, value, case_sensitive } = where.ends_with;
117
+ const sv = toStringSafe(get(row, field));
118
+ const needle = String(value);
119
+ return case_sensitive ? sv.endsWith(needle) : sv.toLowerCase().endsWith(needle.toLowerCase());
120
+ }
121
+ if (where.is_null) {
122
+ const { field } = where.is_null;
123
+ const v = get(row, field);
124
+ return v == null;
125
+ }
126
+ return false;
127
+ }
128
+ // Map common operator aliases to canonical DSL operators
129
+ const OP_ALIASES = {
130
+ '=': 'eq', '==': 'eq', '===': 'eq', 'equals': 'eq',
131
+ '!=': 'ne', '!==': 'ne', '<>': 'ne', 'not_equal': 'ne',
132
+ '>': 'gt', '>=': 'gte', '<': 'lt', '<=': 'lte',
133
+ 'like': 'contains', '$eq': 'eq', '$ne': 'ne', '$gt': 'gt',
134
+ '$gte': 'gte', '$lt': 'lt', '$lte': 'lte', '$in': 'in',
135
+ '$contains': 'contains',
136
+ };
137
+ // Detect { column/field, op/operator, value } pattern from weaker models
138
+ function normalizeFilterObject(where) {
139
+ const col = where.column ?? where.field ?? where.col;
140
+ const op = where.op ?? where.operator ?? where.operation;
141
+ if (typeof col !== 'string' || op == null)
142
+ return null;
143
+ const canonicalOp = OP_ALIASES[String(op).toLowerCase()] ?? String(op).toLowerCase();
144
+ const val = where.value ?? where.values;
145
+ if (canonicalOp === 'in')
146
+ return { in: { field: col, values: Array.isArray(val) ? val : [val] } };
147
+ if (canonicalOp === 'is_null')
148
+ return { is_null: { field: col } };
149
+ return { [canonicalOp]: { field: col, value: val } };
150
+ }
151
+ // Detect MongoDB-style { ColumnName: { $op: value } }
152
+ function normalizeMongoStyle(where) {
153
+ const entries = Object.entries(where);
154
+ if (entries.length === 0)
155
+ return null;
156
+ // Every value must be an object with exactly one $-prefixed key
157
+ if (!entries.every(([, v]) => v && typeof v === 'object' && !Array.isArray(v) && Object.keys(v).length === 1 && Object.keys(v)[0].startsWith('$')))
158
+ return null;
159
+ const clauses = entries.map(([field, cond]) => {
160
+ const [mongoOp, val] = Object.entries(cond)[0];
161
+ const canonicalOp = OP_ALIASES[mongoOp.toLowerCase()] ?? mongoOp.slice(1).toLowerCase();
162
+ if (canonicalOp === 'in')
163
+ return { in: { field, values: Array.isArray(val) ? val : [val] } };
164
+ if (canonicalOp === 'is_null')
165
+ return { is_null: { field } };
166
+ return { [canonicalOp]: { field, value: val } };
167
+ });
168
+ return clauses.length === 1 ? clauses[0] : { and: clauses };
169
+ }
170
+ // Normalize shorthand forms:
171
+ // 1) { column, op, value } or { field, operator, value } -> canonical DSL
172
+ // 2) { Name: { $eq: "foo" } } (MongoDB-style) -> canonical DSL
173
+ // 3) { Name: "foo", Status: "bar" } -> { and: [ { eq: { field:'Name', value:'foo'} }, ... ] }
174
+ // 4) { or: [ ... ] } etc. -> recursively normalized
175
+ export function normalizeWhere(where) {
176
+ if (!where || typeof where !== 'object')
177
+ return where;
178
+ // Array of conditions → AND
179
+ if (Array.isArray(where)) {
180
+ const clauses = where.map((w) => normalizeWhere(w));
181
+ return clauses.length === 1 ? clauses[0] : { and: clauses };
182
+ }
183
+ // { column/field, op, value } pattern
184
+ const filterObj = normalizeFilterObject(where);
185
+ if (filterObj)
186
+ return filterObj;
187
+ // Canonical DSL operators
188
+ const operatorKeys = ['eq', 'ne', 'in', 'gt', 'gte', 'lt', 'lte', 'contains', 'starts_with', 'ends_with', 'is_null', 'and', 'or', 'not'];
189
+ if (operatorKeys.some(k => k in where)) {
190
+ if (Array.isArray(where.and))
191
+ where.and = where.and.map((w) => normalizeWhere(w));
192
+ if (Array.isArray(where.or))
193
+ where.or = where.or.map((w) => normalizeWhere(w));
194
+ if (where.not)
195
+ where.not = normalizeWhere(where.not);
196
+ return where;
197
+ }
198
+ // MongoDB-style { Name: { $eq: value } }
199
+ const mongoNorm = normalizeMongoStyle(where);
200
+ if (mongoNorm)
201
+ return mongoNorm;
202
+ // Plain object => conjunction of eq clauses
203
+ const entries = Object.entries(where);
204
+ const clauses = entries.map(([field, value]) => ({ eq: { field, value } }));
205
+ if (clauses.length === 1)
206
+ return clauses[0];
207
+ return { and: clauses };
208
+ }
209
+ export const registerFindRows = (server, { client, getInputSchema }) => {
210
+ server.registerTool('find_rows', {
211
+ title: 'Find Rows',
212
+ description: 'Find rows using a predicate DSL. Filtering is performed client-side. ' +
213
+ 'where format: {"eq":{"field":"Name","value":"foo"}} or shorthand {"Name":"foo"}. ' +
214
+ 'Operators: eq, ne, in, gt, gte, lt, lte, contains, starts_with, ends_with, is_null. ' +
215
+ 'Combine with {"and":[...]} or {"or":[...]}. Negate with {"not":{...}}.',
216
+ inputSchema: getInputSchema(InputSchema),
217
+ annotations: { readOnlyHint: true },
218
+ }, async (args) => {
219
+ const parsed = InputSchema.parse(args);
220
+ const normalizedWhere = normalizeWhere(parsed.where);
221
+ const pageSizeFetch = 1000;
222
+ const maxPages = 50; // safety cap (50k rows scanned)
223
+ let page = 1;
224
+ const all = [];
225
+ while (page <= maxPages) {
226
+ const res = await client.listRows({ table: parsed.table, page, page_size: pageSizeFetch });
227
+ all.push(...res.rows);
228
+ if (!res.rows.length || res.rows.length < pageSizeFetch)
229
+ break;
230
+ page += 1;
231
+ }
232
+ // Apply predicate locally
233
+ let matched = all.filter((r) => evalWhere(r, normalizedWhere));
234
+ // Optional ordering
235
+ if (parsed.order_by) {
236
+ const dir = parsed.direction === 'desc' ? -1 : 1;
237
+ matched = matched.sort((a, b) => dir * compare(a[parsed.order_by], b[parsed.order_by]));
238
+ }
239
+ // Paginate locally
240
+ const pageOut = parsed.page ?? 1;
241
+ const pageSizeOut = parsed.page_size ?? 100;
242
+ const start = (pageOut - 1) * pageSizeOut;
243
+ const end = start + pageSizeOut;
244
+ const slice = matched.slice(start, end);
245
+ return {
246
+ content: [
247
+ {
248
+ type: 'text',
249
+ text: JSON.stringify({ rows: slice, page: pageOut, page_size: pageSizeOut, total: matched.length }),
250
+ },
251
+ ],
252
+ };
253
+ });
254
+ };
255
+ //# sourceMappingURL=findRows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findRows.js","sourceRoot":"","sources":["../../../src/mcp/tools/findRows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,qFAAqF;AACrF,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAChD,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;AAChE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;AAChE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AAC1E,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;AACxB,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;AACjE,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;AACnE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;AACjE,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;AACnE,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;AACvH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;AAC5H,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;AACxH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAC7C,CAAC,CAAC,KAAK,CAAC;IACN,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,GAAG;IACH,EAAE;IACF,GAAG;IACH,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,MAAM;IACN,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;CACzB,CAAC,CACH,CAAA;AAGD,0CAA0C;AAC1C,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,2FAA2F,CAAC;IACxH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACrF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACzG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CACxF,CAAC,CAAA;AAEF,SAAS,YAAY,CAAC,CAAU;IAC9B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,CAAU,EAAE,CAAU;IACrC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACrB,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC,CAAA;IACxB,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,CAAA;IACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAChE,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,EAAE,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC,CAAA;IACtB,IAAI,EAAE,GAAG,EAAE;QAAE,OAAO,CAAC,CAAA;IACrB,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,GAAG,CAAC,GAAgB,EAAE,IAAY;IACzC,kEAAkE;IAClE,OAAQ,GAAW,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAgB,EAAE,KAAU;IACpD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9B,IAAI,KAAK,CAAC,GAAG;QAAE,OAAQ,KAAK,CAAC,GAAa,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/E,IAAI,KAAK,CAAC,EAAE;QAAE,OAAQ,KAAK,CAAC,EAAY,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5E,IAAI,KAAK,CAAC,GAAG;QAAE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAU,CAAC,CAAA;IAEvD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QACjC,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,KAAK,CAAA;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QACjC,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,KAAK,CAAA;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QAClC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACzB,OAAQ,MAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,CAAA;QAClC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,CAAA;QAClC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAA;QACvD,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5B,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/F,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,WAAW,CAAA;QAC1D,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5B,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IACnG,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,SAAS,CAAA;QACxD,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5B,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/F,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,CAAA;QAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,CAAC,IAAI,IAAI,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,GAA2B;IACzC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;IAClD,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI;IACtD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;IAC9C,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACzD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;IACtD,WAAW,EAAE,UAAU;CACxB,CAAA;AAED,yEAAyE;AACzE,SAAS,qBAAqB,CAAC,KAAU;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAA;IACpD,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAA;IACxD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IAEtD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IACpF,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAA;IAEvC,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAA;IACjG,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAA;IACjE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAA;AACtD,CAAC;AAED,sDAAsD;AACtD,SAAS,mBAAmB,CAAC,KAAU;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,gEAAgE;IAChE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAE/J,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAgB,EAAE,EAAE;QAC3D,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACvF,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAA;QAC5F,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,CAAA;QAC5D,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAA;IACjD,CAAC,CAAC,CAAA;IACF,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;AAC7D,CAAC;AAED,6BAA6B;AAC7B,0EAA0E;AAC1E,+DAA+D;AAC/D,8FAA8F;AAC9F,oDAAoD;AACpD,MAAM,UAAU,cAAc,CAAC,KAAU;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAErD,4BAA4B;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;IAC7D,CAAC;IAED,sCAAsC;IACtC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAC9C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAA;IAE/B,0BAA0B;IAC1B,MAAM,YAAY,GAAG,CAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAC,WAAW,EAAC,SAAS,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK,CAAC,CAAA;IAC3H,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;QACtF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;QACnF,IAAI,KAAK,CAAC,GAAG;YAAE,KAAK,CAAC,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAC5C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAA;IAE/B,4CAA4C;IAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IAC3C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IACpF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,uEAAuE;YACvE,mFAAmF;YACnF,sFAAsF;YACtF,wEAAwE;QAC1E,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC;QACxC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,IAAa,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,aAAa,GAAG,IAAI,CAAA;QAC1B,MAAM,QAAQ,GAAG,EAAE,CAAA,CAAC,gCAAgC;QACpD,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,MAAM,GAAG,GAAkB,EAAE,CAAA;QAC7B,OAAO,IAAI,IAAI,QAAQ,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAA;YAC1F,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;YACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa;gBAAE,MAAK;YAC9D,IAAI,IAAI,CAAC,CAAA;QACX,CAAC;QAED,0BAA0B;QAC9B,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAA;QAE1D,oBAAoB;QACpB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAChD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAE,CAAS,CAAC,MAAM,CAAC,QAAS,CAAC,EAAG,CAAS,CAAC,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAA;QAC7G,CAAC;QAED,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAA;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAA;QAC3C,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,WAAW,CAAA;QACzC,MAAM,GAAG,GAAG,KAAK,GAAG,WAAW,CAAA;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAEvC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;iBACpG;aACF;SACF,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerGetRow: ToolRegistrar;
3
+ //# sourceMappingURL=getRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRow.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/getRow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAO1C,eAAO,MAAM,cAAc,EAAE,aAe5B,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ const InputSchema = z.object({
3
+ table: z.string().describe('Target table name'),
4
+ row_id: z.string().describe('Row ID (the _id field)'),
5
+ });
6
+ export const registerGetRow = (server, { client, getInputSchema }) => {
7
+ server.registerTool('get_row', {
8
+ title: 'Get Row',
9
+ description: 'Get a row by ID from a table',
10
+ inputSchema: getInputSchema(InputSchema),
11
+ annotations: { readOnlyHint: true },
12
+ }, async (args) => {
13
+ const parsed = InputSchema.parse(args);
14
+ const res = await client.getRow(parsed.table, parsed.row_id);
15
+ return { content: [{ type: 'text', text: JSON.stringify(res) }] };
16
+ });
17
+ };
18
+ //# sourceMappingURL=getRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRow.js","sourceRoot":"","sources":["../../../src/mcp/tools/getRow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACxD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IAChF,MAAM,CAAC,YAAY,CACf,SAAS,EACT;QACI,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC;QACxC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACtC,EACD,KAAK,EAAE,IAAa,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAA;IACrE,CAAC,CACJ,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerGetSchema: ToolRegistrar;
3
+ //# sourceMappingURL=getSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSchema.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/getSchema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI1C,eAAO,MAAM,iBAAiB,EAAE,aAe/B,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ import { mapMetadataToGeneric } from '../../schema/map.js';
3
+ const InputSchema = z.object({});
4
+ export const registerGetSchema = (server, { client, getInputSchema }) => {
5
+ server.registerTool('get_schema', {
6
+ title: 'Get Schema',
7
+ description: 'Returns the normalized schema for the base',
8
+ inputSchema: getInputSchema(InputSchema),
9
+ annotations: { readOnlyHint: true },
10
+ }, async () => {
11
+ const metadata = await client.getMetadata();
12
+ const generic = mapMetadataToGeneric(metadata);
13
+ return { content: [{ type: 'text', text: JSON.stringify(generic) }] };
14
+ });
15
+ };
16
+ //# sourceMappingURL=getSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSchema.js","sourceRoot":"","sources":["../../../src/mcp/tools/getSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAG1D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IACnF,MAAM,CAAC,YAAY,CACf,YAAY,EACZ;QACI,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC;QACxC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACtC,EACD,KAAK,IAAI,EAAE;QACP,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAA;QAC3C,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;IACzE,CAAC,CACJ,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerLinkRows: ToolRegistrar;
3
+ //# sourceMappingURL=linkRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkRows.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/linkRows.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAQ1C,eAAO,MAAM,gBAAgB,EAAE,aAqB9B,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ const InputSchema = z.object({
3
+ table: z.string().describe('Source table name'),
4
+ link_column: z.string().describe('Name of the link column'),
5
+ pairs: z.array(z.object({ from_row_id: z.string().describe('Row ID in source table'), to_row_id: z.string().describe('Row ID in linked table') })).min(1).describe('Array of row ID pairs to link'),
6
+ });
7
+ export const registerLinkRows = (server, { client, getInputSchema }) => {
8
+ server.registerTool('link_rows', {
9
+ title: 'Link Rows',
10
+ description: 'Create links between rows via the dedicated links endpoint. This is the ONLY way to create links — link columns cannot be written via add_row or update_rows.',
11
+ inputSchema: getInputSchema(InputSchema),
12
+ annotations: { readOnlyHint: false, destructiveHint: false },
13
+ }, async (args) => {
14
+ const { table, link_column, pairs } = InputSchema.parse(args);
15
+ const result = await client.createLinks({
16
+ table,
17
+ linkColumn: link_column,
18
+ pairs: pairs.map((p) => ({ fromRowId: p.from_row_id, toRowId: p.to_row_id })),
19
+ });
20
+ return { content: [{ type: 'text', text: JSON.stringify(result) }] };
21
+ });
22
+ };
23
+ //# sourceMappingURL=linkRows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkRows.js","sourceRoot":"","sources":["../../../src/mcp/tools/linkRows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC3D,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACpM,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IACpF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,+JAA+J;QAC5K,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC;QACxC,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE;KAC7D,EACD,KAAK,EAAE,IAAa,EAAE,EAAE;QACtB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAE7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;YACtC,KAAK;YACL,UAAU,EAAE,WAAW;YACvB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;SAC9E,CAAC,CAAA;QAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAA;IACtE,CAAC,CACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerListBases: ToolRegistrar;
3
+ //# sourceMappingURL=listBases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBases.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/listBases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,eAAO,MAAM,iBAAiB,EAAE,aAkB/B,CAAA"}
@@ -0,0 +1,16 @@
1
+ export const registerListBases = (server, { baseNames }) => {
2
+ server.registerTool('list_bases', {
3
+ title: 'List Bases',
4
+ description: 'List available SeaTable bases. Use the returned names as the "base" parameter in other tools.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {},
8
+ required: [],
9
+ },
10
+ annotations: { readOnlyHint: true },
11
+ }, async () => {
12
+ const names = baseNames ?? [];
13
+ return { content: [{ type: 'text', text: JSON.stringify(names) }] };
14
+ });
15
+ };
16
+ //# sourceMappingURL=listBases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listBases.js","sourceRoot":"","sources":["../../../src/mcp/tools/listBases.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAkB,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IACtE,MAAM,CAAC,YAAY,CACf,YAAY,EACZ;QACI,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,+FAA+F;QAC5G,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACf;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACtC,EACD,KAAK,IAAI,EAAE;QACP,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE,CAAA;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;IACvE,CAAC,CACJ,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerListCollaborators: ToolRegistrar;
3
+ //# sourceMappingURL=listCollaborators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listCollaborators.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/listCollaborators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,eAAO,MAAM,yBAAyB,EAAE,aAkBvC,CAAA"}
@@ -0,0 +1,16 @@
1
+ export const registerListCollaborators = (server, { client }) => {
2
+ server.registerTool('list_collaborators', {
3
+ title: 'List Collaborators',
4
+ description: 'List users who have access to this base. Returns email (internal user ID) and display name. Use the email values when writing to collaborator columns.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {},
8
+ required: [],
9
+ },
10
+ annotations: { readOnlyHint: true },
11
+ }, async () => {
12
+ const users = await client.listCollaborators();
13
+ return { content: [{ type: 'text', text: JSON.stringify(users) }] };
14
+ });
15
+ };
16
+ //# sourceMappingURL=listCollaborators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listCollaborators.js","sourceRoot":"","sources":["../../../src/mcp/tools/listCollaborators.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3E,MAAM,CAAC,YAAY,CACf,oBAAoB,EACpB;QACI,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,wJAAwJ;QACrK,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACf;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACtC,EACD,KAAK,IAAI,EAAE;QACP,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAA;QAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;IACvE,CAAC,CACJ,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerListRows: ToolRegistrar;
3
+ //# sourceMappingURL=listRows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listRows.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/listRows.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAS1C,eAAO,MAAM,gBAAgB,EAAE,aAe9B,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ const InputSchema = z.object({
3
+ table: z.string().describe('Table name'),
4
+ page: z.number().int().min(1).default(1).describe('Page number (1-based)'),
5
+ page_size: z.number().int().min(1).max(1000).default(100).describe('Rows per page (max 1000)'),
6
+ view: z.string().optional().describe('Optional SeaTable view name'),
7
+ });
8
+ export const registerListRows = (server, { client, getInputSchema }) => {
9
+ server.registerTool('list_rows', {
10
+ title: 'List Rows',
11
+ description: 'List rows from a table with pagination (defaults: page=1, page_size=100). Use find_rows for filtering/sorting or query_sql for SQL queries.',
12
+ inputSchema: getInputSchema(InputSchema),
13
+ annotations: { readOnlyHint: true },
14
+ }, async (args) => {
15
+ const parsed = InputSchema.parse(args);
16
+ const res = await client.listRows(parsed);
17
+ return { content: [{ type: 'text', text: JSON.stringify(res) }] };
18
+ });
19
+ };
20
+ //# sourceMappingURL=listRows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listRows.js","sourceRoot":"","sources":["../../../src/mcp/tools/listRows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC9F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CACtE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IAClF,MAAM,CAAC,YAAY,CACf,WAAW,EACX;QACI,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,6IAA6I;QAC1J,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC;QACxC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACtC,EACD,KAAK,EAAE,IAAa,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAA;IACrE,CAAC,CACJ,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerListTables: ToolRegistrar;
3
+ //# sourceMappingURL=listTables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTables.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/listTables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI1C,eAAO,MAAM,kBAAkB,EAAE,aAmBhC,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ const InputSchema = z.object({});
3
+ export const registerListTables = (server, { client, getInputSchema }) => {
4
+ server.registerTool('list_tables', {
5
+ title: 'List Tables',
6
+ description: 'List tables in the SeaTable base',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {},
10
+ required: []
11
+ },
12
+ annotations: { readOnlyHint: true },
13
+ }, async (_args) => {
14
+ InputSchema.parse({});
15
+ const tables = await client.listTables();
16
+ return { content: [{ type: 'text', text: JSON.stringify(tables) }] };
17
+ });
18
+ };
19
+ //# sourceMappingURL=listTables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTables.js","sourceRoot":"","sources":["../../../src/mcp/tools/listTables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEhC,MAAM,CAAC,MAAM,kBAAkB,GAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IACpF,MAAM,CAAC,YAAY,CACf,aAAa,EACb;QACI,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACf;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACtC,EACD,KAAK,EAAE,KAAc,EAAE,EAAE;QACrB,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;QACxC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAA;IACxE,CAAC,CACJ,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerManageColumns: ToolRegistrar;
3
+ //# sourceMappingURL=manageColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manageColumns.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/manageColumns.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAc1C,eAAO,MAAM,qBAAqB,EAAE,aAoCnC,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ import { mapMetadataToGeneric } from '../../schema/map.js';
3
+ const Create = z.object({ name: z.string(), type: z.string(), options: z.record(z.any()).optional() });
4
+ const Update = z.object({ name: z.string(), new_name: z.string().optional(), type: z.string().optional(), options: z.record(z.any()).optional() });
5
+ const Delete = z.object({ name: z.string() });
6
+ const Op = z.discriminatedUnion('action', [
7
+ z.object({ action: z.literal('create'), create: Create }),
8
+ z.object({ action: z.literal('update'), update: Update }),
9
+ z.object({ action: z.literal('delete'), delete: Delete }),
10
+ ]);
11
+ const InputSchema = z.object({ table: z.string(), operations: z.array(Op).min(1) });
12
+ export const registerManageColumns = (server, { client, getInputSchema }) => {
13
+ server.registerTool('manage_columns', {
14
+ title: 'Manage Columns',
15
+ description: 'Create, update, and delete columns with normalized schema outputs.',
16
+ inputSchema: getInputSchema(InputSchema),
17
+ }, async (args) => {
18
+ const { table, operations } = InputSchema.parse(args);
19
+ const results = [];
20
+ for (const op of operations) {
21
+ if (op.action === 'create') {
22
+ const { name, type, options } = op.create;
23
+ const res = await client.createColumn(table, { column_name: name, column_type: type, ...options });
24
+ results.push({ action: 'create', result: res });
25
+ }
26
+ else if (op.action === 'update') {
27
+ const { name, new_name, type, options } = op.update;
28
+ const res = await client.updateColumn(table, name, { new_column_name: new_name, column_type: type, ...options });
29
+ results.push({ action: 'update', result: res });
30
+ }
31
+ else if (op.action === 'delete') {
32
+ const { name } = op.delete;
33
+ const res = await client.deleteColumn(table, name);
34
+ results.push({ action: 'delete', result: res });
35
+ }
36
+ }
37
+ // Return updated normalized schema for the table
38
+ const meta = await client.getMetadata();
39
+ const generic = mapMetadataToGeneric(meta);
40
+ const updatedTable = generic.tables.find(t => t.name === table);
41
+ return { content: [{ type: 'text', text: JSON.stringify({ results, schema: updatedTable }) }] };
42
+ });
43
+ };
44
+ //# sourceMappingURL=manageColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manageColumns.js","sourceRoot":"","sources":["../../../src/mcp/tools/manageColumns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolRegistrar } from './types.js';
2
+ export declare const registerManageTables: ToolRegistrar;
3
+ //# sourceMappingURL=manageTables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manageTables.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/manageTables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAa1C,eAAO,MAAM,oBAAoB,EAAE,aA0BlC,CAAA"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ const OperationSchema = z.object({
3
+ action: z.enum(['create', 'rename', 'delete']),
4
+ name: z.string(),
5
+ new_name: z.string().optional(),
6
+ columns: z.array(z.record(z.string(), z.any())).optional(),
7
+ });
8
+ const InputSchema = z.object({
9
+ operations: z.array(OperationSchema).min(1),
10
+ });
11
+ export const registerManageTables = (server, { client, getInputSchema }) => {
12
+ server.registerTool('manage_tables', {
13
+ title: 'Manage Tables',
14
+ description: 'Create, rename, and delete tables.',
15
+ inputSchema: getInputSchema(InputSchema),
16
+ }, async (args) => {
17
+ const { operations } = InputSchema.parse(args);
18
+ const results = [];
19
+ for (const op of operations) {
20
+ if (op.action === 'create') {
21
+ const res = await client.createTable(op.name, op.columns);
22
+ results.push({ action: 'create', name: op.name, result: res });
23
+ }
24
+ else if (op.action === 'rename') {
25
+ const res = await client.renameTable(op.name, op.new_name);
26
+ results.push({ action: 'rename', from: op.name, to: op.new_name, result: res });
27
+ }
28
+ else if (op.action === 'delete') {
29
+ const res = await client.deleteTable(op.name);
30
+ results.push({ action: 'delete', name: op.name, result: res });
31
+ }
32
+ }
33
+ return { content: [{ type: 'text', text: JSON.stringify({ results }) }] };
34
+ });
35
+ };
36
+ //# sourceMappingURL=manageTables.js.map