mcp-quickbase 2.0.1

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 (135) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/LICENSE +21 -0
  3. package/README.md +301 -0
  4. package/dist/client/quickbase.d.ts +28 -0
  5. package/dist/client/quickbase.js +235 -0
  6. package/dist/client/quickbase.js.map +1 -0
  7. package/dist/mcp/index.d.ts +4 -0
  8. package/dist/mcp/index.js +21 -0
  9. package/dist/mcp/index.js.map +1 -0
  10. package/dist/mcp/server.d.ts +19 -0
  11. package/dist/mcp/server.js +102 -0
  12. package/dist/mcp/server.js.map +1 -0
  13. package/dist/mcp-stdio-server.d.ts +2 -0
  14. package/dist/mcp-stdio-server.js +168 -0
  15. package/dist/mcp-stdio-server.js.map +1 -0
  16. package/dist/server.d.ts +2 -0
  17. package/dist/server.js +318 -0
  18. package/dist/server.js.map +1 -0
  19. package/dist/tools/apps/create_app.d.ts +87 -0
  20. package/dist/tools/apps/create_app.js +87 -0
  21. package/dist/tools/apps/create_app.js.map +1 -0
  22. package/dist/tools/apps/index.d.ts +9 -0
  23. package/dist/tools/apps/index.js +40 -0
  24. package/dist/tools/apps/index.js.map +1 -0
  25. package/dist/tools/apps/list_tables.d.ts +108 -0
  26. package/dist/tools/apps/list_tables.js +100 -0
  27. package/dist/tools/apps/list_tables.js.map +1 -0
  28. package/dist/tools/apps/update_app.d.ts +91 -0
  29. package/dist/tools/apps/update_app.js +99 -0
  30. package/dist/tools/apps/update_app.js.map +1 -0
  31. package/dist/tools/base.d.ts +47 -0
  32. package/dist/tools/base.js +63 -0
  33. package/dist/tools/base.js.map +1 -0
  34. package/dist/tools/configure_cache.d.ts +81 -0
  35. package/dist/tools/configure_cache.js +77 -0
  36. package/dist/tools/configure_cache.js.map +1 -0
  37. package/dist/tools/fields/create_field.d.ts +121 -0
  38. package/dist/tools/fields/create_field.js +102 -0
  39. package/dist/tools/fields/create_field.js.map +1 -0
  40. package/dist/tools/fields/index.d.ts +8 -0
  41. package/dist/tools/fields/index.js +37 -0
  42. package/dist/tools/fields/index.js.map +1 -0
  43. package/dist/tools/fields/update_field.d.ts +112 -0
  44. package/dist/tools/fields/update_field.js +114 -0
  45. package/dist/tools/fields/update_field.js.map +1 -0
  46. package/dist/tools/files/download_file.d.ts +111 -0
  47. package/dist/tools/files/download_file.js +173 -0
  48. package/dist/tools/files/download_file.js.map +1 -0
  49. package/dist/tools/files/index.d.ts +8 -0
  50. package/dist/tools/files/index.js +37 -0
  51. package/dist/tools/files/index.js.map +1 -0
  52. package/dist/tools/files/upload_file.d.ts +107 -0
  53. package/dist/tools/files/upload_file.js +211 -0
  54. package/dist/tools/files/upload_file.js.map +1 -0
  55. package/dist/tools/index.d.ts +18 -0
  56. package/dist/tools/index.js +65 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/records/bulk_create_records.d.ts +75 -0
  59. package/dist/tools/records/bulk_create_records.js +104 -0
  60. package/dist/tools/records/bulk_create_records.js.map +1 -0
  61. package/dist/tools/records/bulk_update_records.d.ts +77 -0
  62. package/dist/tools/records/bulk_update_records.js +102 -0
  63. package/dist/tools/records/bulk_update_records.js.map +1 -0
  64. package/dist/tools/records/create_record.d.ts +68 -0
  65. package/dist/tools/records/create_record.js +123 -0
  66. package/dist/tools/records/create_record.js.map +1 -0
  67. package/dist/tools/records/index.d.ts +11 -0
  68. package/dist/tools/records/index.js +46 -0
  69. package/dist/tools/records/index.js.map +1 -0
  70. package/dist/tools/records/query_records.d.ts +164 -0
  71. package/dist/tools/records/query_records.js +261 -0
  72. package/dist/tools/records/query_records.js.map +1 -0
  73. package/dist/tools/records/update_record.d.ts +81 -0
  74. package/dist/tools/records/update_record.js +99 -0
  75. package/dist/tools/records/update_record.js.map +1 -0
  76. package/dist/tools/registry.d.ts +41 -0
  77. package/dist/tools/registry.js +66 -0
  78. package/dist/tools/registry.js.map +1 -0
  79. package/dist/tools/reports/index.d.ts +6 -0
  80. package/dist/tools/reports/index.js +31 -0
  81. package/dist/tools/reports/index.js.map +1 -0
  82. package/dist/tools/reports/run_report.d.ts +70 -0
  83. package/dist/tools/reports/run_report.js +72 -0
  84. package/dist/tools/reports/run_report.js.map +1 -0
  85. package/dist/tools/tables/create_table.d.ts +142 -0
  86. package/dist/tools/tables/create_table.js +119 -0
  87. package/dist/tools/tables/create_table.js.map +1 -0
  88. package/dist/tools/tables/get_table_fields.d.ts +108 -0
  89. package/dist/tools/tables/get_table_fields.js +96 -0
  90. package/dist/tools/tables/get_table_fields.js.map +1 -0
  91. package/dist/tools/tables/index.d.ts +9 -0
  92. package/dist/tools/tables/index.js +40 -0
  93. package/dist/tools/tables/index.js.map +1 -0
  94. package/dist/tools/tables/update_table.d.ts +91 -0
  95. package/dist/tools/tables/update_table.js +99 -0
  96. package/dist/tools/tables/update_table.js.map +1 -0
  97. package/dist/tools/test_connection.d.ts +51 -0
  98. package/dist/tools/test_connection.js +101 -0
  99. package/dist/tools/test_connection.js.map +1 -0
  100. package/dist/types/api.d.ts +70 -0
  101. package/dist/types/api.js +6 -0
  102. package/dist/types/api.js.map +1 -0
  103. package/dist/types/config.d.ts +49 -0
  104. package/dist/types/config.js +3 -0
  105. package/dist/types/config.js.map +1 -0
  106. package/dist/types/mcp.d.ts +55 -0
  107. package/dist/types/mcp.js +3 -0
  108. package/dist/types/mcp.js.map +1 -0
  109. package/dist/utils/cache.d.ts +87 -0
  110. package/dist/utils/cache.js +211 -0
  111. package/dist/utils/cache.js.map +1 -0
  112. package/dist/utils/file.d.ts +40 -0
  113. package/dist/utils/file.js +167 -0
  114. package/dist/utils/file.js.map +1 -0
  115. package/dist/utils/logger.d.ts +37 -0
  116. package/dist/utils/logger.js +144 -0
  117. package/dist/utils/logger.js.map +1 -0
  118. package/dist/utils/retry.d.ts +39 -0
  119. package/dist/utils/retry.js +88 -0
  120. package/dist/utils/retry.js.map +1 -0
  121. package/dist/utils/validation.d.ts +32 -0
  122. package/dist/utils/validation.js +227 -0
  123. package/dist/utils/validation.js.map +1 -0
  124. package/docs/README.md +41 -0
  125. package/docs/architecture.md +94 -0
  126. package/docs/claude-prompts.md +218 -0
  127. package/docs/deployment.md +244 -0
  128. package/docs/developer-guide.md +537 -0
  129. package/docs/final-qa-report.md +243 -0
  130. package/docs/performance-benchmarks.md +306 -0
  131. package/docs/quick-reference.md +109 -0
  132. package/docs/quickstart.md +183 -0
  133. package/docs/security-review.md +263 -0
  134. package/docs/tools.md +269 -0
  135. package/package.json +68 -0
@@ -0,0 +1,47 @@
1
+ import { McpTool } from '../types/mcp';
2
+ import { ApiResponse } from '../types/api';
3
+ import { QuickbaseClient } from '../client/quickbase';
4
+ /**
5
+ * Base class for MCP tools
6
+ */
7
+ export declare abstract class BaseTool<TParams, TResult> implements McpTool<TParams, TResult> {
8
+ /**
9
+ * Tool name
10
+ */
11
+ abstract name: string;
12
+ /**
13
+ * Tool description
14
+ */
15
+ abstract description: string;
16
+ /**
17
+ * Parameter schema for the tool
18
+ */
19
+ abstract paramSchema: Record<string, unknown>;
20
+ /**
21
+ * QuickBase client instance
22
+ */
23
+ protected client: QuickbaseClient;
24
+ /**
25
+ * Constructor
26
+ * @param client QuickBase client instance
27
+ */
28
+ constructor(client: QuickbaseClient);
29
+ /**
30
+ * Validate parameters against schema using Zod
31
+ * @param params Parameters to validate
32
+ * @returns Validated parameters
33
+ */
34
+ protected validateParams(params: unknown): TParams;
35
+ /**
36
+ * Execute the tool
37
+ * @param params Tool parameters
38
+ * @returns Tool result
39
+ */
40
+ execute(params: TParams): Promise<ApiResponse<TResult>>;
41
+ /**
42
+ * Implement the tool's functionality
43
+ * @param params Tool parameters
44
+ * @returns Tool result
45
+ */
46
+ protected abstract run(params: TParams): Promise<TResult>;
47
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseTool = void 0;
4
+ const logger_1 = require("../utils/logger");
5
+ const validation_1 = require("../utils/validation");
6
+ const logger = (0, logger_1.createLogger)('BaseTool');
7
+ /**
8
+ * Base class for MCP tools
9
+ */
10
+ class BaseTool {
11
+ /**
12
+ * Constructor
13
+ * @param client QuickBase client instance
14
+ */
15
+ constructor(client) {
16
+ this.client = client;
17
+ }
18
+ /**
19
+ * Validate parameters against schema using Zod
20
+ * @param params Parameters to validate
21
+ * @returns Validated parameters
22
+ */
23
+ validateParams(params) {
24
+ return (0, validation_1.validateParams)(params, this.paramSchema, this.name);
25
+ }
26
+ /**
27
+ * Execute the tool
28
+ * @param params Tool parameters
29
+ * @returns Tool result
30
+ */
31
+ async execute(params) {
32
+ try {
33
+ logger.debug(`Executing tool: ${this.name}`, { params });
34
+ // Validate parameters
35
+ const validatedParams = this.validateParams(params);
36
+ // Execute the tool implementation
37
+ const result = await this.run(validatedParams);
38
+ logger.debug(`Tool ${this.name} executed successfully`, { result });
39
+ return {
40
+ success: true,
41
+ data: result
42
+ };
43
+ }
44
+ catch (error) {
45
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
46
+ const errorType = error instanceof Error ? error.name : 'UnknownError';
47
+ logger.error(`Error executing tool ${this.name}`, {
48
+ error: errorMessage,
49
+ type: errorType,
50
+ stack: error instanceof Error ? error.stack : undefined
51
+ });
52
+ return {
53
+ success: false,
54
+ error: {
55
+ message: errorMessage,
56
+ type: errorType
57
+ }
58
+ };
59
+ }
60
+ }
61
+ }
62
+ exports.BaseTool = BaseTool;
63
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":";;;AAGA,4CAA+C;AAC/C,oDAAqD;AAErD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAC;AAExC;;GAEG;AACH,MAAsB,QAAQ;IAqB5B;;;OAGG;IACH,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACO,cAAc,CAAC,MAAe;QACtC,OAAO,IAAA,2BAAc,EAAU,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,MAAe;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEzD,sBAAsB;YACtB,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAEpD,kCAAkC;YAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAE/C,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,wBAAwB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEpE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC9E,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;YAEvE,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,EAAE;gBAChD,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,SAAS;iBAChB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CAQF;AArFD,4BAqFC"}
@@ -0,0 +1,81 @@
1
+ import { BaseTool } from './base';
2
+ import { QuickbaseClient } from '../client/quickbase';
3
+ import { CacheService } from '../utils/cache';
4
+ /**
5
+ * Configure cache parameters
6
+ */
7
+ export interface ConfigureCacheParams {
8
+ /**
9
+ * Whether to enable caching
10
+ */
11
+ enabled?: boolean;
12
+ /**
13
+ * Whether to clear the cache
14
+ */
15
+ clear?: boolean;
16
+ /**
17
+ * TTL for cache entries in seconds
18
+ */
19
+ ttl?: number;
20
+ }
21
+ /**
22
+ * Configure cache result
23
+ */
24
+ export interface ConfigureCacheResult {
25
+ /**
26
+ * Whether caching is enabled
27
+ */
28
+ cacheEnabled: boolean;
29
+ /**
30
+ * Whether the cache was cleared
31
+ */
32
+ cacheCleared: boolean;
33
+ /**
34
+ * Current TTL setting (in seconds)
35
+ */
36
+ cacheTtl?: number;
37
+ }
38
+ /**
39
+ * Tool for configuring the caching behavior of the Quickbase connector
40
+ */
41
+ export declare class ConfigureCacheTool extends BaseTool<ConfigureCacheParams, ConfigureCacheResult> {
42
+ name: string;
43
+ description: string;
44
+ /**
45
+ * Parameter schema for configure_cache
46
+ */
47
+ paramSchema: {
48
+ type: string;
49
+ properties: {
50
+ enabled: {
51
+ type: string;
52
+ description: string;
53
+ };
54
+ clear: {
55
+ type: string;
56
+ description: string;
57
+ };
58
+ ttl: {
59
+ type: string;
60
+ description: string;
61
+ };
62
+ };
63
+ required: never[];
64
+ };
65
+ /**
66
+ * Cache service instance
67
+ */
68
+ private cacheService;
69
+ /**
70
+ * Constructor
71
+ * @param client Quickbase client
72
+ * @param cacheService Cache service
73
+ */
74
+ constructor(client: QuickbaseClient, cacheService: CacheService);
75
+ /**
76
+ * Run the configure_cache tool
77
+ * @param params Tool parameters
78
+ * @returns Configuration result
79
+ */
80
+ protected run(params: ConfigureCacheParams): Promise<ConfigureCacheResult>;
81
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigureCacheTool = void 0;
4
+ const base_1 = require("./base");
5
+ const logger_1 = require("../utils/logger");
6
+ const logger = (0, logger_1.createLogger)('ConfigureCacheTool');
7
+ /**
8
+ * Tool for configuring the caching behavior of the Quickbase connector
9
+ */
10
+ class ConfigureCacheTool extends base_1.BaseTool {
11
+ /**
12
+ * Constructor
13
+ * @param client Quickbase client
14
+ * @param cacheService Cache service
15
+ */
16
+ constructor(client, cacheService) {
17
+ super(client);
18
+ this.name = 'configure_cache';
19
+ this.description = 'Configures caching behavior for Quickbase operations';
20
+ /**
21
+ * Parameter schema for configure_cache
22
+ */
23
+ this.paramSchema = {
24
+ type: 'object',
25
+ properties: {
26
+ enabled: {
27
+ type: 'boolean',
28
+ description: 'Whether to enable caching (default: true)'
29
+ },
30
+ clear: {
31
+ type: 'boolean',
32
+ description: 'Whether to clear all existing caches (default: false)'
33
+ },
34
+ ttl: {
35
+ type: 'number',
36
+ description: 'Cache time-to-live in seconds'
37
+ }
38
+ },
39
+ required: []
40
+ };
41
+ this.cacheService = cacheService;
42
+ }
43
+ /**
44
+ * Run the configure_cache tool
45
+ * @param params Tool parameters
46
+ * @returns Configuration result
47
+ */
48
+ async run(params) {
49
+ logger.info('Configuring cache', params);
50
+ const result = {
51
+ cacheEnabled: this.cacheService.isEnabled(),
52
+ cacheCleared: false
53
+ };
54
+ // Clear cache if requested
55
+ if (params.clear) {
56
+ this.cacheService.clear();
57
+ result.cacheCleared = true;
58
+ logger.info('Cache cleared');
59
+ }
60
+ // Enable/disable cache if specified
61
+ if (params.enabled !== undefined) {
62
+ this.cacheService.setEnabled(params.enabled);
63
+ result.cacheEnabled = params.enabled;
64
+ logger.info(`Cache ${params.enabled ? 'enabled' : 'disabled'}`);
65
+ }
66
+ // Set TTL if specified
67
+ if (params.ttl !== undefined && params.ttl > 0) {
68
+ // Here we would set TTL
69
+ // This requires extending the CacheService to support changing TTL
70
+ logger.info(`Cache TTL set to ${params.ttl} seconds`);
71
+ result.cacheTtl = params.ttl;
72
+ }
73
+ return result;
74
+ }
75
+ }
76
+ exports.ConfigureCacheTool = ConfigureCacheTool;
77
+ //# sourceMappingURL=configure_cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure_cache.js","sourceRoot":"","sources":["../../src/tools/configure_cache.ts"],"names":[],"mappings":";;;AAAA,iCAAkC;AAGlC,4CAA+C;AAE/C,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,oBAAoB,CAAC,CAAC;AA0ClD;;GAEG;AACH,MAAa,kBAAmB,SAAQ,eAAoD;IA+B1F;;;;OAIG;IACH,YAAY,MAAuB,EAAE,YAA0B;QAC7D,KAAK,CAAC,MAAM,CAAC,CAAC;QApCT,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,sDAAsD,CAAC;QAE5E;;WAEG;QACI,gBAAW,GAAG;YACnB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,2CAA2C;iBACzD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,uDAAuD;iBACrE;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;aACF;YACD,QAAQ,EAAE,EAAE;SACb,CAAC;QAcA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,GAAG,CAAC,MAA4B;QAC9C,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAyB;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC3C,YAAY,EAAE,KAAK;SACpB,CAAC;QAEF,2BAA2B;QAC3B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAED,oCAAoC;QACpC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,uBAAuB;QACvB,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAC/C,wBAAwB;YACxB,mEAAmE;YACnE,MAAM,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;QAC/B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA9ED,gDA8EC"}
@@ -0,0 +1,121 @@
1
+ import { BaseTool } from '../base';
2
+ import { QuickbaseClient } from '../../client/quickbase';
3
+ /**
4
+ * Field property definitions for various field types
5
+ */
6
+ export interface FieldProperties {
7
+ maxLength?: number;
8
+ defaultValue?: string | number;
9
+ precision?: number;
10
+ format?: string;
11
+ choices?: {
12
+ label: string;
13
+ value: string;
14
+ }[];
15
+ targetTableId?: string;
16
+ targetFieldId?: string;
17
+ appearsByDefault?: boolean;
18
+ findEnabled?: boolean;
19
+ [key: string]: any;
20
+ }
21
+ /**
22
+ * Parameters for create_field tool
23
+ */
24
+ export interface CreateFieldParams {
25
+ /**
26
+ * ID of the table to create the field in
27
+ */
28
+ table_id: string;
29
+ /**
30
+ * Name of the field
31
+ */
32
+ field_name: string;
33
+ /**
34
+ * Type of the field (e.g., text, numeric, date, etc.)
35
+ */
36
+ field_type: string;
37
+ /**
38
+ * Description of the field
39
+ */
40
+ description?: string;
41
+ /**
42
+ * Additional options and properties for the field
43
+ */
44
+ options?: FieldProperties;
45
+ }
46
+ /**
47
+ * Response from creating a field
48
+ */
49
+ export interface CreateFieldResult {
50
+ /**
51
+ * The ID of the created field
52
+ */
53
+ fieldId: string;
54
+ /**
55
+ * The label/name of the created field
56
+ */
57
+ label: string;
58
+ /**
59
+ * The type of the created field
60
+ */
61
+ fieldType: string;
62
+ /**
63
+ * The description of the created field
64
+ */
65
+ description?: string;
66
+ /**
67
+ * The ID of the table the field was created in
68
+ */
69
+ tableId: string;
70
+ /**
71
+ * Additional details about the created field
72
+ */
73
+ [key: string]: any;
74
+ }
75
+ /**
76
+ * Tool for creating a new field in a Quickbase table
77
+ */
78
+ export declare class CreateFieldTool extends BaseTool<CreateFieldParams, CreateFieldResult> {
79
+ name: string;
80
+ description: string;
81
+ /**
82
+ * Parameter schema for create_field
83
+ */
84
+ paramSchema: {
85
+ type: string;
86
+ properties: {
87
+ table_id: {
88
+ type: string;
89
+ description: string;
90
+ };
91
+ field_name: {
92
+ type: string;
93
+ description: string;
94
+ };
95
+ field_type: {
96
+ type: string;
97
+ description: string;
98
+ };
99
+ description: {
100
+ type: string;
101
+ description: string;
102
+ };
103
+ options: {
104
+ type: string;
105
+ description: string;
106
+ };
107
+ };
108
+ required: string[];
109
+ };
110
+ /**
111
+ * Constructor
112
+ * @param client Quickbase client
113
+ */
114
+ constructor(client: QuickbaseClient);
115
+ /**
116
+ * Run the create_field tool
117
+ * @param params Tool parameters
118
+ * @returns Created field details
119
+ */
120
+ protected run(params: CreateFieldParams): Promise<CreateFieldResult>;
121
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateFieldTool = void 0;
4
+ const base_1 = require("../base");
5
+ const logger_1 = require("../../utils/logger");
6
+ const logger = (0, logger_1.createLogger)('CreateFieldTool');
7
+ /**
8
+ * Tool for creating a new field in a Quickbase table
9
+ */
10
+ class CreateFieldTool extends base_1.BaseTool {
11
+ /**
12
+ * Constructor
13
+ * @param client Quickbase client
14
+ */
15
+ constructor(client) {
16
+ super(client);
17
+ this.name = 'create_field';
18
+ this.description = 'Creates a new field in a Quickbase table';
19
+ /**
20
+ * Parameter schema for create_field
21
+ */
22
+ this.paramSchema = {
23
+ type: 'object',
24
+ properties: {
25
+ table_id: {
26
+ type: 'string',
27
+ description: 'The ID of the table'
28
+ },
29
+ field_name: {
30
+ type: 'string',
31
+ description: 'Name of the field'
32
+ },
33
+ field_type: {
34
+ type: 'string',
35
+ description: 'Type of the field (e.g., text, number, date)'
36
+ },
37
+ description: {
38
+ type: 'string',
39
+ description: 'Description of the field'
40
+ },
41
+ options: {
42
+ type: 'object',
43
+ description: 'Additional field options'
44
+ }
45
+ },
46
+ required: ['table_id', 'field_name', 'field_type']
47
+ };
48
+ }
49
+ /**
50
+ * Run the create_field tool
51
+ * @param params Tool parameters
52
+ * @returns Created field details
53
+ */
54
+ async run(params) {
55
+ const { table_id, field_name, field_type, description, options } = params;
56
+ logger.info('Creating new field in Quickbase table', {
57
+ tableId: table_id,
58
+ fieldName: field_name,
59
+ fieldType: field_type
60
+ });
61
+ // Prepare request body
62
+ const body = {
63
+ label: field_name,
64
+ fieldType: field_type,
65
+ description: description || ''
66
+ };
67
+ // Add properties if provided
68
+ if (options) {
69
+ body.properties = { ...options };
70
+ }
71
+ // Create the field
72
+ const response = await this.client.request({
73
+ method: 'POST',
74
+ path: `/fields?tableId=${table_id}`,
75
+ body
76
+ });
77
+ if (!response.success || !response.data) {
78
+ logger.error('Failed to create field', {
79
+ error: response.error,
80
+ tableId: table_id,
81
+ fieldName: field_name
82
+ });
83
+ throw new Error(response.error?.message || 'Failed to create field');
84
+ }
85
+ const field = response.data;
86
+ logger.info('Successfully created field', {
87
+ fieldId: field.id,
88
+ tableId: table_id,
89
+ fieldName: field.label
90
+ });
91
+ return {
92
+ fieldId: field.id,
93
+ label: field.label,
94
+ fieldType: field.fieldType,
95
+ description: field.description,
96
+ tableId: table_id,
97
+ ...field
98
+ };
99
+ }
100
+ }
101
+ exports.CreateFieldTool = CreateFieldTool;
102
+ //# sourceMappingURL=create_field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_field.js","sourceRoot":"","sources":["../../../src/tools/fields/create_field.ts"],"names":[],"mappings":";;;AAAA,kCAAmC;AAEnC,+CAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAC;AAqG/C;;GAEG;AACH,MAAa,eAAgB,SAAQ,eAA8C;IAkCjF;;;OAGG;IACH,YAAY,MAAuB;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QAtCT,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GAAG,0CAA0C,CAAC;QAEhE;;WAEG;QACI,gBAAW,GAAG;YACnB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;iBACnC;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mBAAmB;iBACjC;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0BAA0B;iBACxC;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0BAA0B;iBACxC;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;SACnD,CAAC;IAQF,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,GAAG,CAAC,MAAyB;QAC3C,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAE1E,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE;YACnD,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,UAAU;SACtB,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,IAAI,GAAwB;YAChC,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,UAAU;YACrB,WAAW,EAAE,WAAW,IAAI,EAAE;SAC/B,CAAC;QAEF,6BAA6B;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QACnC,CAAC;QAED,mBAAmB;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mBAAmB,QAAQ,EAAE;YACnC,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;gBACrC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,UAAU;aACtB,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAA2B,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACxC,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,KAAK,CAAC,KAAK;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,QAAQ;YACjB,GAAG,KAAK;SACT,CAAC;IACJ,CAAC;CACF;AArGD,0CAqGC"}
@@ -0,0 +1,8 @@
1
+ import { QuickbaseClient } from '../../client/quickbase';
2
+ /**
3
+ * Register all field management tools with the registry
4
+ * @param client Quickbase client
5
+ */
6
+ export declare function registerFieldTools(client: QuickbaseClient): void;
7
+ export * from './create_field';
8
+ export * from './update_field';
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.registerFieldTools = registerFieldTools;
18
+ const registry_1 = require("../registry");
19
+ const create_field_1 = require("./create_field");
20
+ const update_field_1 = require("./update_field");
21
+ const logger_1 = require("../../utils/logger");
22
+ const logger = (0, logger_1.createLogger)('FieldTools');
23
+ /**
24
+ * Register all field management tools with the registry
25
+ * @param client Quickbase client
26
+ */
27
+ function registerFieldTools(client) {
28
+ logger.info('Registering field management tools');
29
+ // Register individual tools
30
+ registry_1.toolRegistry.registerTool(new create_field_1.CreateFieldTool(client));
31
+ registry_1.toolRegistry.registerTool(new update_field_1.UpdateFieldTool(client));
32
+ logger.info('Field management tools registered');
33
+ }
34
+ // Export all tools
35
+ __exportStar(require("./create_field"), exports);
36
+ __exportStar(require("./update_field"), exports);
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/fields/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAYA,gDAQC;AAnBD,0CAA2C;AAC3C,iDAAiD;AACjD,iDAAiD;AACjD,+CAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,YAAY,CAAC,CAAC;AAE1C;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,MAAuB;IACxD,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAElD,4BAA4B;IAC5B,uBAAY,CAAC,YAAY,CAAC,IAAI,8BAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,uBAAY,CAAC,YAAY,CAAC,IAAI,8BAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;AACnD,CAAC;AAED,mBAAmB;AACnB,iDAA+B;AAC/B,iDAA+B"}
@@ -0,0 +1,112 @@
1
+ import { BaseTool } from '../base';
2
+ import { QuickbaseClient } from '../../client/quickbase';
3
+ import { FieldProperties } from './create_field';
4
+ /**
5
+ * Parameters for update_field tool
6
+ */
7
+ export interface UpdateFieldParams {
8
+ /**
9
+ * The ID of the table containing the field
10
+ */
11
+ table_id: string;
12
+ /**
13
+ * The ID of the field to update
14
+ */
15
+ field_id: string;
16
+ /**
17
+ * New name for the field
18
+ */
19
+ name?: string;
20
+ /**
21
+ * New description for the field
22
+ */
23
+ description?: string;
24
+ /**
25
+ * New field type (only allowed for certain field type conversions)
26
+ */
27
+ field_type?: string;
28
+ /**
29
+ * Additional options and properties to update
30
+ */
31
+ options?: FieldProperties;
32
+ }
33
+ /**
34
+ * Response from updating a field
35
+ */
36
+ export interface UpdateFieldResult {
37
+ /**
38
+ * The ID of the updated field
39
+ */
40
+ fieldId: string;
41
+ /**
42
+ * The updated label/name of the field
43
+ */
44
+ label?: string;
45
+ /**
46
+ * The updated type of the field
47
+ */
48
+ fieldType?: string;
49
+ /**
50
+ * The updated description of the field
51
+ */
52
+ description?: string;
53
+ /**
54
+ * The ID of the table containing the field
55
+ */
56
+ tableId: string;
57
+ /**
58
+ * Additional details about the updated field
59
+ */
60
+ [key: string]: any;
61
+ }
62
+ /**
63
+ * Tool for updating an existing field in a Quickbase table
64
+ */
65
+ export declare class UpdateFieldTool extends BaseTool<UpdateFieldParams, UpdateFieldResult> {
66
+ name: string;
67
+ description: string;
68
+ /**
69
+ * Parameter schema for update_field
70
+ */
71
+ paramSchema: {
72
+ type: string;
73
+ properties: {
74
+ table_id: {
75
+ type: string;
76
+ description: string;
77
+ };
78
+ field_id: {
79
+ type: string;
80
+ description: string;
81
+ };
82
+ name: {
83
+ type: string;
84
+ description: string;
85
+ };
86
+ field_type: {
87
+ type: string;
88
+ description: string;
89
+ };
90
+ description: {
91
+ type: string;
92
+ description: string;
93
+ };
94
+ options: {
95
+ type: string;
96
+ description: string;
97
+ };
98
+ };
99
+ required: string[];
100
+ };
101
+ /**
102
+ * Constructor
103
+ * @param client Quickbase client
104
+ */
105
+ constructor(client: QuickbaseClient);
106
+ /**
107
+ * Run the update_field tool
108
+ * @param params Tool parameters
109
+ * @returns Updated field details
110
+ */
111
+ protected run(params: UpdateFieldParams): Promise<UpdateFieldResult>;
112
+ }