feat: replace n8n_create_data_table with n8n_manage_datatable (10 actions)

Replaces the single-purpose n8n_create_data_table tool with a comprehensive
n8n_manage_datatable tool covering all 10 n8n data table API endpoints:

Table operations: createTable, listTables, getTable, updateTable, deleteTable
Row operations: getRows, insertRows, updateRows, upsertRows, deleteRows

- Filter system with and/or logic and 8 condition operators
- Dry-run support for updateRows, upsertRows, deleteRows
- Pagination, sorting, and full-text search for row listing
- 9 new N8nApiClient methods for all data table endpoints
- Shared error handler and consolidated Zod schemas
- Comprehensive tool documentation with examples per action
- 36 handler tests + 18 API client tests

BREAKING: n8n_create_data_table removed. Use n8n_manage_datatable with
action="createTable" instead.

Based on work by @djakielski in PR #646.
Co-Authored-By: Dominik Jakielski <dominik.jakielski@urlaubsguru.de>

Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
czlonkowski
2026-03-21 18:50:29 +01:00
parent 4a9e3c7ec0
commit 4e2da6c652
16 changed files with 1572 additions and 374 deletions

View File

@@ -476,4 +476,60 @@ export interface DataTable {
projectId?: string;
createdAt?: string;
updatedAt?: string;
}
export interface DataTableRow {
id?: number;
createdAt?: string;
updatedAt?: string;
[columnName: string]: unknown;
}
export interface DataTableFilterCondition {
columnName: string;
condition: 'eq' | 'neq' | 'like' | 'ilike' | 'gt' | 'gte' | 'lt' | 'lte';
value?: any;
}
export interface DataTableFilter {
type?: 'and' | 'or';
filters: DataTableFilterCondition[];
}
export interface DataTableListParams {
limit?: number;
cursor?: string;
}
export interface DataTableRowListParams {
limit?: number;
cursor?: string;
filter?: string;
sortBy?: string;
search?: string;
}
export interface DataTableInsertRowsParams {
data: Record<string, unknown>[];
returnType?: 'count' | 'id' | 'all';
}
export interface DataTableUpdateRowsParams {
filter: DataTableFilter;
data: Record<string, unknown>;
returnData?: boolean;
dryRun?: boolean;
}
export interface DataTableUpsertRowParams {
filter: DataTableFilter;
data: Record<string, unknown>;
returnData?: boolean;
dryRun?: boolean;
}
export interface DataTableDeleteRowsParams {
filter: string;
returnData?: boolean;
dryRun?: boolean;
}