@prompteryx/mcp-server 1.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 (66) hide show
  1. package/README.md +271 -0
  2. package/dist/auth/api-key-auth.d.ts +51 -0
  3. package/dist/auth/api-key-auth.d.ts.map +1 -0
  4. package/dist/auth/api-key-auth.js +50 -0
  5. package/dist/auth/api-key-auth.js.map +1 -0
  6. package/dist/auth/usage-enforcer.d.ts +40 -0
  7. package/dist/auth/usage-enforcer.d.ts.map +1 -0
  8. package/dist/auth/usage-enforcer.js +134 -0
  9. package/dist/auth/usage-enforcer.js.map +1 -0
  10. package/dist/execution/cloud-executor.d.ts +16 -0
  11. package/dist/execution/cloud-executor.d.ts.map +1 -0
  12. package/dist/execution/cloud-executor.js +225 -0
  13. package/dist/execution/cloud-executor.js.map +1 -0
  14. package/dist/execution/integration-executor.d.ts +18 -0
  15. package/dist/execution/integration-executor.d.ts.map +1 -0
  16. package/dist/execution/integration-executor.js +101 -0
  17. package/dist/execution/integration-executor.js.map +1 -0
  18. package/dist/index.d.ts +19 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +54 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/resources/workflow-resources.d.ts +16 -0
  23. package/dist/resources/workflow-resources.d.ts.map +1 -0
  24. package/dist/resources/workflow-resources.js +79 -0
  25. package/dist/resources/workflow-resources.js.map +1 -0
  26. package/dist/server.d.ts +28 -0
  27. package/dist/server.d.ts.map +1 -0
  28. package/dist/server.js +104 -0
  29. package/dist/server.js.map +1 -0
  30. package/dist/tools/ai-browser-tools.d.ts +21 -0
  31. package/dist/tools/ai-browser-tools.d.ts.map +1 -0
  32. package/dist/tools/ai-browser-tools.js +88 -0
  33. package/dist/tools/ai-browser-tools.js.map +1 -0
  34. package/dist/tools/browser-session-manager.d.ts +75 -0
  35. package/dist/tools/browser-session-manager.d.ts.map +1 -0
  36. package/dist/tools/browser-session-manager.js +206 -0
  37. package/dist/tools/browser-session-manager.js.map +1 -0
  38. package/dist/tools/browser-tools.d.ts +20 -0
  39. package/dist/tools/browser-tools.d.ts.map +1 -0
  40. package/dist/tools/browser-tools.js +270 -0
  41. package/dist/tools/browser-tools.js.map +1 -0
  42. package/dist/tools/data-tools.d.ts +9 -0
  43. package/dist/tools/data-tools.d.ts.map +1 -0
  44. package/dist/tools/data-tools.js +110 -0
  45. package/dist/tools/data-tools.js.map +1 -0
  46. package/dist/tools/integration-tools.d.ts +29 -0
  47. package/dist/tools/integration-tools.d.ts.map +1 -0
  48. package/dist/tools/integration-tools.js +214 -0
  49. package/dist/tools/integration-tools.js.map +1 -0
  50. package/dist/tools/workflow-builder-tools.d.ts +20 -0
  51. package/dist/tools/workflow-builder-tools.d.ts.map +1 -0
  52. package/dist/tools/workflow-builder-tools.js +95 -0
  53. package/dist/tools/workflow-builder-tools.js.map +1 -0
  54. package/dist/tools/workflow-tools.d.ts +16 -0
  55. package/dist/tools/workflow-tools.d.ts.map +1 -0
  56. package/dist/tools/workflow-tools.js +128 -0
  57. package/dist/tools/workflow-tools.js.map +1 -0
  58. package/dist/utils/node-config-loader.d.ts +54 -0
  59. package/dist/utils/node-config-loader.d.ts.map +1 -0
  60. package/dist/utils/node-config-loader.js +105 -0
  61. package/dist/utils/node-config-loader.js.map +1 -0
  62. package/dist/utils/output-formatter.d.ts +37 -0
  63. package/dist/utils/output-formatter.d.ts.map +1 -0
  64. package/dist/utils/output-formatter.js +62 -0
  65. package/dist/utils/output-formatter.js.map +1 -0
  66. package/package.json +51 -0
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Browser Automation Tools
3
+ *
4
+ * 20+ MCP tools that wrap Playwright browser actions.
5
+ * Each tool maps to node types in lib/node-executor.ts.
6
+ */
7
+ import { z } from 'zod';
8
+ import { enforceUsageLimits, recordUsage, formatUsageRemaining } from '../auth/usage-enforcer.js';
9
+ import { executeBrowserAction } from '../execution/cloud-executor.js';
10
+ import { formatError } from '../utils/output-formatter.js';
11
+ function withUsageCheck(ctx, category, fn) {
12
+ return async () => {
13
+ const check = enforceUsageLimits(ctx.getAuth(), category, ctx.executionMode);
14
+ if (!check.allowed) {
15
+ return formatError(check.reason, undefined, { usageRemaining: formatUsageRemaining(ctx.getAuth()) });
16
+ }
17
+ return fn();
18
+ };
19
+ }
20
+ async function ensurePage(ctx) {
21
+ if (ctx.executionMode === 'cloud') {
22
+ const session = await ctx.sessionManager.getOrCreateCloudPage(ctx.cloudConfig());
23
+ return session.page;
24
+ }
25
+ const session = await ctx.sessionManager.getOrCreateLocalPage({
26
+ electronUrl: 'http://localhost:61337',
27
+ chromeProfile: process.env.PROMPTERYX_CHROME_PROFILE,
28
+ });
29
+ return session.page;
30
+ }
31
+ export function registerBrowserTools(server, ctx) {
32
+ // browser_navigate
33
+ server.tool('browser_navigate', 'Navigate to a URL. Returns page title and final URL after any redirects.', { url: z.string().describe('The URL to navigate to'), waitUntil: z.enum(['load', 'domcontentloaded', 'networkidle']).optional().describe('When to consider navigation complete') }, async (params) => {
34
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
35
+ if (!check.allowed)
36
+ return formatError(check.reason);
37
+ const page = await ensurePage(ctx);
38
+ const result = await executeBrowserAction(page, 'navigate', params);
39
+ // Include debug URL on first navigation
40
+ if (ctx.sessionManager.activeSession?.debugUrl) {
41
+ const debugUrl = ctx.sessionManager.activeSession.debugUrl;
42
+ if (result.content[0]?.type === 'text' && result.content[0].text) {
43
+ const data = JSON.parse(result.content[0].text);
44
+ data.debugUrl = debugUrl;
45
+ result.content[0].text = JSON.stringify(data, null, 2);
46
+ }
47
+ }
48
+ return result;
49
+ });
50
+ // browser_click
51
+ server.tool('browser_click', 'Click an element on the page using a CSS selector.', {
52
+ selector: z.string().describe('CSS selector of the element to click'),
53
+ button: z.enum(['left', 'right', 'middle']).optional().describe('Mouse button'),
54
+ clickCount: z.number().optional().describe('Number of clicks (2 for double-click)'),
55
+ }, async (params) => {
56
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
57
+ if (!check.allowed)
58
+ return formatError(check.reason);
59
+ const page = await ensurePage(ctx);
60
+ return executeBrowserAction(page, 'click', params);
61
+ });
62
+ // browser_fill
63
+ server.tool('browser_fill', 'Clear and fill an input field with text. Clears existing content first.', {
64
+ selector: z.string().describe('CSS selector of the input field'),
65
+ value: z.string().describe('Text to fill into the field'),
66
+ }, async (params) => {
67
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
68
+ if (!check.allowed)
69
+ return formatError(check.reason);
70
+ const page = await ensurePage(ctx);
71
+ return executeBrowserAction(page, 'fill', params);
72
+ });
73
+ // browser_type
74
+ server.tool('browser_type', 'Type text character by character (simulates real typing). Unlike fill, does not clear existing content.', {
75
+ selector: z.string().describe('CSS selector of the element'),
76
+ text: z.string().describe('Text to type'),
77
+ delay: z.number().optional().describe('Delay between keystrokes in ms (default: 50)'),
78
+ }, async (params) => {
79
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
80
+ if (!check.allowed)
81
+ return formatError(check.reason);
82
+ const page = await ensurePage(ctx);
83
+ return executeBrowserAction(page, 'type', params);
84
+ });
85
+ // browser_press_key
86
+ server.tool('browser_press_key', 'Press a keyboard key (Enter, Tab, Escape, ArrowDown, etc.).', {
87
+ key: z.string().describe('Key to press (e.g. "Enter", "Tab", "Escape", "ArrowDown", "Control+a")'),
88
+ selector: z.string().optional().describe('Optional: focus this element first'),
89
+ }, async (params) => {
90
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
91
+ if (!check.allowed)
92
+ return formatError(check.reason);
93
+ const page = await ensurePage(ctx);
94
+ return executeBrowserAction(page, 'press_key', params);
95
+ });
96
+ // browser_select
97
+ server.tool('browser_select', 'Select an option from a dropdown/select element.', {
98
+ selector: z.string().describe('CSS selector of the select element'),
99
+ value: z.union([z.string(), z.array(z.string())]).describe('Value(s) to select'),
100
+ }, async (params) => {
101
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
102
+ if (!check.allowed)
103
+ return formatError(check.reason);
104
+ const page = await ensurePage(ctx);
105
+ return executeBrowserAction(page, 'select', params);
106
+ });
107
+ // browser_check
108
+ server.tool('browser_check', 'Check or uncheck a checkbox.', {
109
+ selector: z.string().describe('CSS selector of the checkbox'),
110
+ uncheck: z.boolean().optional().describe('Set to true to uncheck instead of check'),
111
+ }, async (params) => {
112
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
113
+ if (!check.allowed)
114
+ return formatError(check.reason);
115
+ const page = await ensurePage(ctx);
116
+ return executeBrowserAction(page, 'check', params);
117
+ });
118
+ // browser_hover
119
+ server.tool('browser_hover', 'Hover over an element to reveal tooltips, menus, or other hover effects.', { selector: z.string().describe('CSS selector of the element to hover over') }, async (params) => {
120
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
121
+ if (!check.allowed)
122
+ return formatError(check.reason);
123
+ const page = await ensurePage(ctx);
124
+ return executeBrowserAction(page, 'hover', params);
125
+ });
126
+ // browser_scroll
127
+ server.tool('browser_scroll', 'Scroll the page or scroll to a specific element.', {
128
+ selector: z.string().optional().describe('CSS selector to scroll into view'),
129
+ deltaX: z.number().optional().describe('Horizontal scroll pixels (for mouse wheel)'),
130
+ deltaY: z.number().optional().describe('Vertical scroll pixels (default: 300, negative scrolls up)'),
131
+ }, async (params) => {
132
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
133
+ if (!check.allowed)
134
+ return formatError(check.reason);
135
+ const page = await ensurePage(ctx);
136
+ return executeBrowserAction(page, 'scroll', params);
137
+ });
138
+ // browser_extract_text
139
+ server.tool('browser_extract_text', 'Extract the visible text content of an element.', { selector: z.string().describe('CSS selector of the element') }, async (params) => {
140
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
141
+ if (!check.allowed)
142
+ return formatError(check.reason);
143
+ const page = await ensurePage(ctx);
144
+ return executeBrowserAction(page, 'extract_text', params);
145
+ });
146
+ // browser_extract_attribute
147
+ server.tool('browser_extract_attribute', 'Get an HTML attribute value from an element (e.g. href, src, value, data-*).', {
148
+ selector: z.string().describe('CSS selector of the element'),
149
+ attribute: z.string().describe('Attribute name (e.g. "href", "src", "value", "data-id")'),
150
+ }, async (params) => {
151
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
152
+ if (!check.allowed)
153
+ return formatError(check.reason);
154
+ const page = await ensurePage(ctx);
155
+ return executeBrowserAction(page, 'extract_attribute', params);
156
+ });
157
+ // browser_screenshot
158
+ server.tool('browser_screenshot', 'Take a screenshot of the current page or a specific element. Returns the image directly.', {
159
+ selector: z.string().optional().describe('CSS selector to screenshot (default: full page viewport)'),
160
+ fullPage: z.boolean().optional().describe('Capture the full scrollable page'),
161
+ }, async (params) => {
162
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
163
+ if (!check.allowed)
164
+ return formatError(check.reason);
165
+ const page = await ensurePage(ctx);
166
+ return executeBrowserAction(page, 'screenshot', params);
167
+ });
168
+ // browser_evaluate
169
+ server.tool('browser_evaluate', 'Execute JavaScript code in the browser page context. Returns the result.', { script: z.string().describe('JavaScript code to execute in the page') }, async (params) => {
170
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
171
+ if (!check.allowed)
172
+ return formatError(check.reason);
173
+ const page = await ensurePage(ctx);
174
+ return executeBrowserAction(page, 'evaluate', params);
175
+ });
176
+ // browser_wait
177
+ server.tool('browser_wait', 'Wait for a selector to appear, a timeout, or navigation to complete.', {
178
+ selector: z.string().optional().describe('CSS selector to wait for'),
179
+ state: z.enum(['visible', 'hidden', 'attached', 'detached']).optional().describe('Desired state of the selector (default: visible)'),
180
+ milliseconds: z.number().optional().describe('Fixed wait time in milliseconds'),
181
+ navigation: z.boolean().optional().describe('Wait for page navigation/load'),
182
+ loadState: z.enum(['load', 'domcontentloaded', 'networkidle']).optional().describe('Load state to wait for'),
183
+ }, async (params) => {
184
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
185
+ if (!check.allowed)
186
+ return formatError(check.reason);
187
+ const page = await ensurePage(ctx);
188
+ return executeBrowserAction(page, 'wait', params);
189
+ });
190
+ // browser_get_page_info
191
+ server.tool('browser_get_page_info', 'Get current page URL and title.', {}, async () => {
192
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
193
+ if (!check.allowed)
194
+ return formatError(check.reason);
195
+ const page = await ensurePage(ctx);
196
+ return executeBrowserAction(page, 'get_page_info', {});
197
+ });
198
+ // browser_drag_drop
199
+ server.tool('browser_drag_drop', 'Drag an element and drop it onto another element.', {
200
+ source: z.string().describe('CSS selector of the element to drag'),
201
+ target: z.string().describe('CSS selector of the drop target'),
202
+ }, async (params) => {
203
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
204
+ if (!check.allowed)
205
+ return formatError(check.reason);
206
+ const page = await ensurePage(ctx);
207
+ return executeBrowserAction(page, 'drag_drop', params);
208
+ });
209
+ // browser_set_files
210
+ server.tool('browser_set_files', 'Upload file(s) to a file input element.', {
211
+ selector: z.string().describe('CSS selector of the file input'),
212
+ files: z.array(z.string()).describe('Array of file paths to upload'),
213
+ }, async (params) => {
214
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
215
+ if (!check.allowed)
216
+ return formatError(check.reason);
217
+ const page = await ensurePage(ctx);
218
+ return executeBrowserAction(page, 'set_files', params);
219
+ });
220
+ // browser_get_cookies
221
+ server.tool('browser_get_cookies', 'Get all cookies for the current page.', {}, async () => {
222
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
223
+ if (!check.allowed)
224
+ return formatError(check.reason);
225
+ const page = await ensurePage(ctx);
226
+ return executeBrowserAction(page, 'get_cookies', {});
227
+ });
228
+ // browser_set_cookies
229
+ server.tool('browser_set_cookies', 'Set cookies on the browser context.', {
230
+ cookies: z.array(z.object({
231
+ name: z.string(),
232
+ value: z.string(),
233
+ domain: z.string().optional(),
234
+ path: z.string().optional(),
235
+ httpOnly: z.boolean().optional(),
236
+ secure: z.boolean().optional(),
237
+ })).describe('Array of cookie objects to set'),
238
+ }, async (params) => {
239
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
240
+ if (!check.allowed)
241
+ return formatError(check.reason);
242
+ const page = await ensurePage(ctx);
243
+ return executeBrowserAction(page, 'set_cookies', params);
244
+ });
245
+ // browser_pdf
246
+ server.tool('browser_pdf', 'Generate a PDF of the current page.', {
247
+ format: z.enum(['A4', 'Letter', 'Legal', 'Tabloid']).optional().describe('Page format (default: A4)'),
248
+ printBackground: z.boolean().optional().describe('Include background graphics (default: true)'),
249
+ }, async (params) => {
250
+ const check = enforceUsageLimits(ctx.getAuth(), 'browser', ctx.executionMode);
251
+ if (!check.allowed)
252
+ return formatError(check.reason);
253
+ const page = await ensurePage(ctx);
254
+ return executeBrowserAction(page, 'pdf', params);
255
+ });
256
+ // browser_close
257
+ server.tool('browser_close', 'Close the browser session and release resources. Reports cloud minutes used.', {}, async () => {
258
+ const { minutesUsed } = await ctx.sessionManager.close();
259
+ if (minutesUsed > 0 && ctx.executionMode === 'cloud') {
260
+ await recordUsage(ctx.apiKey, ctx.apiUrl, { cloudBrowserMinutes: minutesUsed });
261
+ }
262
+ return {
263
+ content: [{
264
+ type: 'text',
265
+ text: JSON.stringify({ success: true, sessionClosed: true, cloudMinutesUsed: minutesUsed }),
266
+ }],
267
+ };
268
+ });
269
+ }
270
+ //# sourceMappingURL=browser-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-tools.js","sourceRoot":"","sources":["../../src/tools/browser-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Data Transformation Tools
3
+ *
4
+ * Lightweight data manipulation tools that run locally
5
+ * with zero cost and zero API calls.
6
+ */
7
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ export declare function registerDataTools(server: McpServer): void;
9
+ //# sourceMappingURL=data-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-tools.d.ts","sourceRoot":"","sources":["../../src/tools/data-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QAmIlD"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Data Transformation Tools
3
+ *
4
+ * Lightweight data manipulation tools that run locally
5
+ * with zero cost and zero API calls.
6
+ */
7
+ import { z } from 'zod';
8
+ import { formatSuccess, formatError } from '../utils/output-formatter.js';
9
+ export function registerDataTools(server) {
10
+ server.tool('transform_json', 'Parse, query, or transform JSON data. Supports JSONPath-like access.', {
11
+ data: z.any().describe('JSON data to transform'),
12
+ path: z.string().optional().describe('Dot-notation path to extract (e.g. "results.0.name")'),
13
+ operation: z.enum(['parse', 'stringify', 'keys', 'values', 'flatten', 'pick']).optional().describe('Transformation to apply'),
14
+ fields: z.array(z.string()).optional().describe('Fields to pick (for "pick" operation)'),
15
+ }, async ({ data, path, operation, fields }) => {
16
+ try {
17
+ let parsed = typeof data === 'string' ? JSON.parse(data) : data;
18
+ if (path) {
19
+ const parts = path.split('.');
20
+ for (const p of parts) {
21
+ if (parsed == null)
22
+ break;
23
+ parsed = parsed[p];
24
+ }
25
+ }
26
+ switch (operation) {
27
+ case 'stringify':
28
+ return formatSuccess({ result: JSON.stringify(parsed, null, 2) });
29
+ case 'keys':
30
+ return formatSuccess({ result: Object.keys(parsed ?? {}) });
31
+ case 'values':
32
+ return formatSuccess({ result: Object.values(parsed ?? {}) });
33
+ case 'flatten':
34
+ if (Array.isArray(parsed)) {
35
+ return formatSuccess({ result: parsed.flat(Infinity) });
36
+ }
37
+ return formatSuccess({ result: parsed });
38
+ case 'pick':
39
+ if (fields && typeof parsed === 'object') {
40
+ const picked = {};
41
+ for (const f of fields)
42
+ picked[f] = parsed[f];
43
+ return formatSuccess({ result: picked });
44
+ }
45
+ return formatSuccess({ result: parsed });
46
+ default:
47
+ return formatSuccess({ result: parsed });
48
+ }
49
+ }
50
+ catch (err) {
51
+ return formatError(`JSON transform failed: ${err.message}`);
52
+ }
53
+ });
54
+ server.tool('generate_uuid', 'Generate a random UUID v4.', {}, async () => {
55
+ const uuid = crypto.randomUUID();
56
+ return formatSuccess({ uuid });
57
+ });
58
+ server.tool('base64_encode', 'Encode text to Base64.', { text: z.string().describe('Text to encode') }, async ({ text }) => {
59
+ return formatSuccess({ result: Buffer.from(text).toString('base64') });
60
+ });
61
+ server.tool('base64_decode', 'Decode Base64 to text.', { data: z.string().describe('Base64 string to decode') }, async ({ data }) => {
62
+ try {
63
+ return formatSuccess({ result: Buffer.from(data, 'base64').toString('utf-8') });
64
+ }
65
+ catch (err) {
66
+ return formatError(`Decode failed: ${err.message}`);
67
+ }
68
+ });
69
+ server.tool('format_date', 'Format a date string or timestamp.', {
70
+ date: z.union([z.string(), z.number()]).optional().describe('Date string, timestamp, or omit for now'),
71
+ format: z.string().optional().describe('Output format (default: ISO 8601)'),
72
+ timezone: z.string().optional().describe('IANA timezone (e.g. "America/New_York")'),
73
+ }, async ({ date, timezone }) => {
74
+ try {
75
+ const d = date ? new Date(date) : new Date();
76
+ if (isNaN(d.getTime()))
77
+ return formatError('Invalid date');
78
+ const options = {
79
+ year: 'numeric', month: '2-digit', day: '2-digit',
80
+ hour: '2-digit', minute: '2-digit', second: '2-digit',
81
+ ...(timezone ? { timeZone: timezone } : {}),
82
+ };
83
+ return formatSuccess({
84
+ iso: d.toISOString(),
85
+ formatted: d.toLocaleString('en-GB', options),
86
+ timestamp: d.getTime(),
87
+ });
88
+ }
89
+ catch (err) {
90
+ return formatError(`Date formatting failed: ${err.message}`);
91
+ }
92
+ });
93
+ server.tool('math_operation', 'Perform a math operation.', {
94
+ expression: z.string().describe('Math expression to evaluate (e.g. "2 + 3 * 4")'),
95
+ }, async ({ expression }) => {
96
+ try {
97
+ // Simple safe eval using Function constructor (no access to globals)
98
+ const sanitized = expression.replace(/[^0-9+\-*/.()%\s]/g, '');
99
+ if (sanitized !== expression) {
100
+ return formatError('Expression contains invalid characters. Only numbers and +, -, *, /, %, (, ) are allowed.');
101
+ }
102
+ const result = new Function(`return (${sanitized})`)();
103
+ return formatSuccess({ expression, result });
104
+ }
105
+ catch (err) {
106
+ return formatError(`Math error: ${err.message}`);
107
+ }
108
+ });
109
+ }
110
+ //# sourceMappingURL=data-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-tools.js","sourceRoot":"","sources":["../../src/tools/data-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Integration Tools (Dynamic Registry)
3
+ *
4
+ * Auto-generates MCP tools from NODE_CONFIGS integration entries.
5
+ * When new integration nodes are added to the platform, they
6
+ * automatically appear as MCP tools—no MCP code changes needed.
7
+ *
8
+ * Only registers tools for services where the user has valid credentials.
9
+ */
10
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ import type { AuthContext } from '../auth/api-key-auth.js';
12
+ interface IntegrationToolsContext {
13
+ getAuth: () => AuthContext;
14
+ apiKey: string;
15
+ apiUrl: string;
16
+ }
17
+ /**
18
+ * Registers integration tools dynamically.
19
+ *
20
+ * This is called once during server setup. It registers tools based on:
21
+ * 1. Available integration configs from the platform
22
+ * 2. User's connected OAuth credentials
23
+ *
24
+ * For the MCP protocol, tools are registered statically at connection
25
+ * init, so we scope to all service types the user has credentials for.
26
+ */
27
+ export declare function registerIntegrationTools(server: McpServer, ctx: IntegrationToolsContext): Promise<number>;
28
+ export {};
29
+ //# sourceMappingURL=integration-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-tools.d.ts","sourceRoot":"","sources":["../../src/tools/integration-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,yBAAyB,CAAC;AAW9E,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,WAAW,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAiDD;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA8DjB"}