@addai/tables-mcp 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +127 -0
  2. package/dist/api-client.d.ts +12 -0
  3. package/dist/api-client.d.ts.map +1 -0
  4. package/dist/api-client.js +53 -0
  5. package/dist/api-client.js.map +1 -0
  6. package/dist/helpers/column-settings.d.ts +25 -0
  7. package/dist/helpers/column-settings.d.ts.map +1 -0
  8. package/dist/helpers/column-settings.js +96 -0
  9. package/dist/helpers/column-settings.js.map +1 -0
  10. package/dist/helpers/column-types.d.ts +8 -0
  11. package/dist/helpers/column-types.d.ts.map +1 -0
  12. package/dist/helpers/column-types.js +83 -0
  13. package/dist/helpers/column-types.js.map +1 -0
  14. package/dist/helpers/errors.d.ts +16 -0
  15. package/dist/helpers/errors.d.ts.map +1 -0
  16. package/dist/helpers/errors.js +19 -0
  17. package/dist/helpers/errors.js.map +1 -0
  18. package/dist/helpers/mapped-columns.d.ts +21 -0
  19. package/dist/helpers/mapped-columns.d.ts.map +1 -0
  20. package/dist/helpers/mapped-columns.js +119 -0
  21. package/dist/helpers/mapped-columns.js.map +1 -0
  22. package/dist/helpers/validate-options.d.ts +34 -0
  23. package/dist/helpers/validate-options.d.ts.map +1 -0
  24. package/dist/helpers/validate-options.js +120 -0
  25. package/dist/helpers/validate-options.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +34 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/logo.d.ts +2 -0
  31. package/dist/logo.d.ts.map +1 -0
  32. package/dist/logo.js +64 -0
  33. package/dist/logo.js.map +1 -0
  34. package/dist/preview.d.ts +3 -0
  35. package/dist/preview.d.ts.map +1 -0
  36. package/dist/preview.js +4 -0
  37. package/dist/preview.js.map +1 -0
  38. package/dist/server.d.ts +3 -0
  39. package/dist/server.d.ts.map +1 -0
  40. package/dist/server.js +136 -0
  41. package/dist/server.js.map +1 -0
  42. package/dist/setup.d.ts +2 -0
  43. package/dist/setup.d.ts.map +1 -0
  44. package/dist/setup.js +128 -0
  45. package/dist/setup.js.map +1 -0
  46. package/dist/tools/comments.d.ts +4 -0
  47. package/dist/tools/comments.d.ts.map +1 -0
  48. package/dist/tools/comments.js +63 -0
  49. package/dist/tools/comments.js.map +1 -0
  50. package/dist/tools/dashboards.d.ts +4 -0
  51. package/dist/tools/dashboards.d.ts.map +1 -0
  52. package/dist/tools/dashboards.js +560 -0
  53. package/dist/tools/dashboards.js.map +1 -0
  54. package/dist/tools/discovery.d.ts +4 -0
  55. package/dist/tools/discovery.d.ts.map +1 -0
  56. package/dist/tools/discovery.js +115 -0
  57. package/dist/tools/discovery.js.map +1 -0
  58. package/dist/tools/files.d.ts +4 -0
  59. package/dist/tools/files.d.ts.map +1 -0
  60. package/dist/tools/files.js +115 -0
  61. package/dist/tools/files.js.map +1 -0
  62. package/dist/tools/folders.d.ts +4 -0
  63. package/dist/tools/folders.d.ts.map +1 -0
  64. package/dist/tools/folders.js +164 -0
  65. package/dist/tools/folders.js.map +1 -0
  66. package/dist/tools/history.d.ts +4 -0
  67. package/dist/tools/history.d.ts.map +1 -0
  68. package/dist/tools/history.js +50 -0
  69. package/dist/tools/history.js.map +1 -0
  70. package/dist/tools/rows.d.ts +4 -0
  71. package/dist/tools/rows.d.ts.map +1 -0
  72. package/dist/tools/rows.js +244 -0
  73. package/dist/tools/rows.js.map +1 -0
  74. package/dist/tools/search.d.ts +4 -0
  75. package/dist/tools/search.d.ts.map +1 -0
  76. package/dist/tools/search.js +89 -0
  77. package/dist/tools/search.js.map +1 -0
  78. package/dist/tools/structure.d.ts +4 -0
  79. package/dist/tools/structure.d.ts.map +1 -0
  80. package/dist/tools/structure.js +172 -0
  81. package/dist/tools/structure.js.map +1 -0
  82. package/dist/tools/views.d.ts +4 -0
  83. package/dist/tools/views.d.ts.map +1 -0
  84. package/dist/tools/views.js +169 -0
  85. package/dist/tools/views.js.map +1 -0
  86. package/dist/types.d.ts +76 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +3 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +38 -0
@@ -0,0 +1,169 @@
1
+ import { z } from 'zod';
2
+ import { mcpError, mcpResult } from '../helpers/errors.js';
3
+ const VIEW_TYPES = [
4
+ 'table',
5
+ 'calendar',
6
+ 'gallery',
7
+ 'kanban',
8
+ 'timeline',
9
+ 'list',
10
+ 'gantt',
11
+ 'form',
12
+ 'dashboard',
13
+ 'document',
14
+ ];
15
+ // Views are saved presentations of a table's rows — each carries a view_type
16
+ // (table/kanban/calendar/…) and a view_settings JSON blob holding that view's
17
+ // filters, sorts, grouping, hidden columns, kanban stack column, etc. A table
18
+ // always has at least one view (you cannot delete the last one).
19
+ export function registerViewTools(server, client) {
20
+ // ── list_views ──
21
+ server.tool('list_views', 'List all saved views on a table, ordered as they appear in the UI. Each view has an id, name, view_type, and view_settings (filters/sorts/grouping/etc.).', {
22
+ table_id: z.string().uuid().describe('The table whose views you want to list'),
23
+ }, async ({ table_id }) => {
24
+ const res = await client.get(`/tables/${table_id}/views`);
25
+ if (res.error)
26
+ return mcpError(res.error.message);
27
+ return mcpResult(res.data);
28
+ });
29
+ // ── get_view ──
30
+ server.tool('get_view', 'Get a single view including its full view_settings (filters, sorts, grouping, hidden columns, etc.).', {
31
+ table_id: z.string().uuid().describe('The table the view belongs to'),
32
+ view_id: z.string().uuid().describe('The view ID'),
33
+ }, async ({ table_id, view_id }) => {
34
+ const res = await client.get(`/tables/${table_id}/views/${view_id}`);
35
+ if (res.error)
36
+ return mcpError(res.error.message);
37
+ return mcpResult(res.data);
38
+ });
39
+ // ── create_view ──
40
+ server.tool('create_view', 'Create a new view on a table. Defaults to a table (grid) view. view_settings is a free-form JSON blob whose shape depends on view_type — e.g. kanban needs a groupBy column, calendar needs a date column. Inspect an existing view of the same type with get_view first to learn the expected settings shape.', {
41
+ table_id: z.string().uuid().describe('The table to create the view in'),
42
+ name: z.string().min(1).describe('View name'),
43
+ view_type: z
44
+ .enum(VIEW_TYPES)
45
+ .optional()
46
+ .describe('View type. Defaults to "table". One of: ' + VIEW_TYPES.join(', ')),
47
+ view_settings: z
48
+ .record(z.string(), z.unknown())
49
+ .optional()
50
+ .describe('View-type-specific settings (filters, sorts, grouping, etc.). Omit for defaults.'),
51
+ }, async ({ table_id, name, view_type, view_settings }) => {
52
+ const body = { name };
53
+ if (view_type)
54
+ body.view_type = view_type;
55
+ if (view_settings)
56
+ body.view_settings = view_settings;
57
+ const res = await client.post(`/tables/${table_id}/views`, body);
58
+ if (res.error)
59
+ return mcpError(res.error.message);
60
+ return mcpResult(res.data);
61
+ });
62
+ // ── update_view ──
63
+ server.tool('update_view', 'Update a view\'s name, type, settings, or public flag. Only the fields you pass change. NOTE: view_settings REPLACES the entire settings object — call get_view first and merge if you only want to change part of it.', {
64
+ table_id: z.string().uuid().describe('The table the view belongs to'),
65
+ view_id: z.string().uuid().describe('The view to update'),
66
+ name: z.string().min(1).optional().describe('New view name'),
67
+ view_type: z.enum(VIEW_TYPES).optional().describe('Change the view type'),
68
+ view_settings: z
69
+ .record(z.string(), z.unknown())
70
+ .optional()
71
+ .describe('Replacement settings object (filters/sorts/grouping/etc.) — replaces the whole blob'),
72
+ is_public: z.boolean().optional().describe('Whether the view is publicly accessible'),
73
+ }, async ({ table_id, view_id, name, view_type, view_settings, is_public }) => {
74
+ const body = {};
75
+ if (name !== undefined)
76
+ body.name = name;
77
+ if (view_type !== undefined)
78
+ body.view_type = view_type;
79
+ if (view_settings !== undefined)
80
+ body.view_settings = view_settings;
81
+ if (is_public !== undefined)
82
+ body.is_public = is_public;
83
+ if (Object.keys(body).length === 0) {
84
+ return mcpError('Nothing to update — provide name, view_type, view_settings, or is_public');
85
+ }
86
+ const res = await client.patch(`/tables/${table_id}/views/${view_id}`, body);
87
+ if (res.error)
88
+ return mcpError(res.error.message);
89
+ return mcpResult(res.data);
90
+ });
91
+ // ── delete_view ──
92
+ server.tool('delete_view', 'Delete a view from a table. A table must keep at least one view, so deleting the last remaining view fails.', {
93
+ table_id: z.string().uuid().describe('The table the view belongs to'),
94
+ view_id: z.string().uuid().describe('The view to delete'),
95
+ }, async ({ table_id, view_id }) => {
96
+ const res = await client.delete(`/tables/${table_id}/views/${view_id}`);
97
+ if (res.error)
98
+ return mcpError(res.error.message);
99
+ return mcpResult({ message: 'View deleted' });
100
+ });
101
+ // ── reorder_views ──
102
+ server.tool('reorder_views', 'Reorder a table\'s views. Pass the complete list of view ids in the desired order — the array index becomes the new display order.', {
103
+ table_id: z.string().uuid().describe('The table whose views to reorder'),
104
+ view_ids: z
105
+ .array(z.string().uuid())
106
+ .min(1)
107
+ .describe('All view ids in the desired order (first = leftmost)'),
108
+ }, async ({ table_id, view_ids }) => {
109
+ const res = await client.post(`/tables/${table_id}/views/reorder`, { view_ids });
110
+ if (res.error)
111
+ return mcpError(res.error.message);
112
+ return mcpResult({ message: 'Views reordered' });
113
+ });
114
+ // ── list_view_shares ──
115
+ server.tool('list_view_shares', 'List the public share links created for a view, including each link\'s token, permission level, active state, and expiry.', {
116
+ table_id: z.string().uuid().describe('The table the view belongs to'),
117
+ view_id: z.string().uuid().describe('The view whose shares to list'),
118
+ }, async ({ table_id, view_id }) => {
119
+ const res = await client.get(`/tables/${table_id}/views/${view_id}/shares`);
120
+ if (res.error)
121
+ return mcpError(res.error.message);
122
+ return mcpResult(res.data);
123
+ });
124
+ // ── create_view_share ──
125
+ server.tool('create_view_share', 'Create a public share link for a view. Returns a share_token that can be used to access the view without logging in. Defaults to view-only access.', {
126
+ table_id: z.string().uuid().describe('The table the view belongs to'),
127
+ view_id: z.string().uuid().describe('The view to share'),
128
+ permission_level: z
129
+ .enum(['view', 'edit'])
130
+ .optional()
131
+ .describe('"view" (read-only, default) or "edit" (allow changes via the link)'),
132
+ expires_at: z
133
+ .string()
134
+ .optional()
135
+ .describe('ISO 8601 timestamp when the link should stop working. Omit for no expiry.'),
136
+ allowed_domains: z
137
+ .array(z.string())
138
+ .optional()
139
+ .describe('Restrict access to viewers from these email domains'),
140
+ settings: z
141
+ .record(z.string(), z.unknown())
142
+ .optional()
143
+ .describe('Optional extra share settings'),
144
+ }, async ({ table_id, view_id, permission_level, expires_at, allowed_domains, settings }) => {
145
+ const body = {};
146
+ if (permission_level)
147
+ body.permission_level = permission_level;
148
+ if (expires_at)
149
+ body.expires_at = expires_at;
150
+ if (allowed_domains)
151
+ body.allowed_domains = allowed_domains;
152
+ if (settings)
153
+ body.settings = settings;
154
+ const res = await client.post(`/tables/${table_id}/views/${view_id}/shares`, body);
155
+ if (res.error)
156
+ return mcpError(res.error.message);
157
+ return mcpResult(res.data);
158
+ });
159
+ // ── deactivate_view_share ──
160
+ server.tool('deactivate_view_share', 'Deactivate (revoke) a view share link by its share id so it can no longer be used. This is a soft delete — the link stops working immediately.', {
161
+ share_id: z.string().uuid().describe('The share id to deactivate (from list_view_shares)'),
162
+ }, async ({ share_id }) => {
163
+ const res = await client.delete(`/shares/${share_id}`);
164
+ if (res.error)
165
+ return mcpError(res.error.message);
166
+ return mcpResult({ message: 'Share deactivated' });
167
+ });
168
+ }
169
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/tools/views.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ export interface ApiResponse<T = unknown> {
2
+ data?: T;
3
+ error?: {
4
+ message: string;
5
+ code?: string;
6
+ };
7
+ pagination?: {
8
+ page: number;
9
+ page_size: number;
10
+ total_count: number;
11
+ total_pages: number;
12
+ };
13
+ count?: number;
14
+ success?: boolean;
15
+ message?: string;
16
+ }
17
+ export interface Workspace {
18
+ id: string;
19
+ name: string;
20
+ slug: string;
21
+ created_date: string;
22
+ }
23
+ export interface Database {
24
+ id: string;
25
+ name: string;
26
+ description: string | null;
27
+ icon: string | null;
28
+ workspace_id: string;
29
+ created_date: string;
30
+ updated_date: string;
31
+ }
32
+ export interface Table {
33
+ id: string;
34
+ database_id: string;
35
+ name: string;
36
+ description: string | null;
37
+ icon: string | null;
38
+ created_date: string;
39
+ updated_date: string;
40
+ columns?: Column[];
41
+ }
42
+ export interface Column {
43
+ id: string;
44
+ name: string;
45
+ column_type: string;
46
+ column_settings: Record<string, unknown>;
47
+ is_required: boolean;
48
+ column_order: number;
49
+ }
50
+ export interface Row {
51
+ id: string;
52
+ data: Record<string, unknown>;
53
+ created_by: string;
54
+ created_date: string;
55
+ updated_date: string;
56
+ parent_id: string | null;
57
+ sort_order: number | null;
58
+ }
59
+ export interface SelectOption {
60
+ value: string;
61
+ color: string;
62
+ active: boolean;
63
+ }
64
+ export interface ColumnDefinition {
65
+ name: string;
66
+ type: string;
67
+ options?: string[];
68
+ required?: boolean;
69
+ settings?: Record<string, unknown>;
70
+ }
71
+ export interface RowFilter {
72
+ column_id: string;
73
+ operator: string;
74
+ value: unknown;
75
+ }
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Shared types for the AiTables MCP server
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,2CAA2C"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@addai/tables-mcp",
3
+ "version": "0.7.0",
4
+ "description": "MCP server for AiTables — lets Claude Code read and manage your AiTables databases",
5
+ "type": "module",
6
+ "bin": {
7
+ "tables-mcp": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "start": "node dist/index.js"
17
+ },
18
+ "keywords": [
19
+ "mcp",
20
+ "claude",
21
+ "aitables",
22
+ "airtable",
23
+ "database",
24
+ "model-context-protocol"
25
+ ],
26
+ "license": "MIT",
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.12.1",
29
+ "zod": "^3.24.4"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^22.15.3",
33
+ "typescript": "^5.8.3"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ }
38
+ }