@sardis/mcp-server 0.1.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 (70) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/CLAUDE_DESKTOP_CONFIG.md +180 -0
  3. package/LICENSE +21 -0
  4. package/README.md +375 -0
  5. package/dist/api.d.ts +25 -0
  6. package/dist/api.d.ts.map +1 -0
  7. package/dist/api.js +70 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/cli.d.ts +12 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +274 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/config.d.ts +47 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +82 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/index.d.ts +61 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +255 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/tools/agents.d.ts +7 -0
  22. package/dist/tools/agents.d.ts.map +1 -0
  23. package/dist/tools/agents.js +219 -0
  24. package/dist/tools/agents.js.map +1 -0
  25. package/dist/tools/approvals.d.ts +9 -0
  26. package/dist/tools/approvals.d.ts.map +1 -0
  27. package/dist/tools/approvals.js +308 -0
  28. package/dist/tools/approvals.js.map +1 -0
  29. package/dist/tools/cards.d.ts +9 -0
  30. package/dist/tools/cards.d.ts.map +1 -0
  31. package/dist/tools/cards.js +415 -0
  32. package/dist/tools/cards.js.map +1 -0
  33. package/dist/tools/fiat.d.ts +9 -0
  34. package/dist/tools/fiat.d.ts.map +1 -0
  35. package/dist/tools/fiat.js +394 -0
  36. package/dist/tools/fiat.js.map +1 -0
  37. package/dist/tools/holds.d.ts +7 -0
  38. package/dist/tools/holds.d.ts.map +1 -0
  39. package/dist/tools/holds.js +403 -0
  40. package/dist/tools/holds.js.map +1 -0
  41. package/dist/tools/index.d.ts +70 -0
  42. package/dist/tools/index.d.ts.map +1 -0
  43. package/dist/tools/index.js +152 -0
  44. package/dist/tools/index.js.map +1 -0
  45. package/dist/tools/payments.d.ts +47 -0
  46. package/dist/tools/payments.d.ts.map +1 -0
  47. package/dist/tools/payments.js +447 -0
  48. package/dist/tools/payments.js.map +1 -0
  49. package/dist/tools/policy.d.ts +41 -0
  50. package/dist/tools/policy.d.ts.map +1 -0
  51. package/dist/tools/policy.js +450 -0
  52. package/dist/tools/policy.js.map +1 -0
  53. package/dist/tools/spending.d.ts +9 -0
  54. package/dist/tools/spending.d.ts.map +1 -0
  55. package/dist/tools/spending.js +324 -0
  56. package/dist/tools/spending.js.map +1 -0
  57. package/dist/tools/types.d.ts +247 -0
  58. package/dist/tools/types.d.ts.map +1 -0
  59. package/dist/tools/types.js +71 -0
  60. package/dist/tools/types.js.map +1 -0
  61. package/dist/tools/wallet-management.d.ts +9 -0
  62. package/dist/tools/wallet-management.d.ts.map +1 -0
  63. package/dist/tools/wallet-management.js +222 -0
  64. package/dist/tools/wallet-management.js.map +1 -0
  65. package/dist/tools/wallets.d.ts +15 -0
  66. package/dist/tools/wallets.d.ts.map +1 -0
  67. package/dist/tools/wallets.js +112 -0
  68. package/dist/tools/wallets.js.map +1 -0
  69. package/mcp.json +283 -0
  70. package/package.json +145 -0
@@ -0,0 +1,403 @@
1
+ /**
2
+ * Hold (pre-authorization) tools for MCP server
3
+ */
4
+ import { getConfig } from '../config.js';
5
+ import { apiRequest } from '../api.js';
6
+ import { CreateHoldSchema, CaptureHoldSchema, VoidHoldSchema, GetHoldSchema, ListHoldsSchema, } from './types.js';
7
+ // Tool definitions
8
+ export const holdToolDefinitions = [
9
+ {
10
+ name: 'sardis_create_hold',
11
+ description: 'Create a pre-authorization hold on funds. The funds are reserved but not transferred until captured.',
12
+ inputSchema: {
13
+ type: 'object',
14
+ properties: {
15
+ wallet_id: { type: 'string', description: 'Wallet ID to create hold on' },
16
+ amount: { type: ['string', 'number'], description: 'Amount to hold (e.g., "100.00" or 100)' },
17
+ token: {
18
+ type: 'string',
19
+ enum: ['USDC', 'USDT', 'PYUSD', 'EURC'],
20
+ description: 'Token type. Defaults to USDC.',
21
+ },
22
+ merchant_id: { type: 'string', description: 'Optional merchant identifier' },
23
+ purpose: { type: 'string', description: 'Purpose of the hold' },
24
+ expires_in: { type: 'number', description: 'Hold duration in seconds (alias for duration_hours * 3600)' },
25
+ duration_hours: { type: 'number', description: 'Hold duration in hours. Defaults to 168 (7 days).' },
26
+ },
27
+ required: ['amount'],
28
+ },
29
+ },
30
+ {
31
+ name: 'sardis_capture_hold',
32
+ description: 'Capture a hold to complete the payment. Can capture partial or full amount.',
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ hold_id: { type: 'string', description: 'Hold ID to capture' },
37
+ amount: { type: 'string', description: 'Amount to capture. Defaults to full hold amount.' },
38
+ },
39
+ required: ['hold_id'],
40
+ },
41
+ },
42
+ {
43
+ name: 'sardis_void_hold',
44
+ description: 'Void a hold to release the reserved funds without completing payment.',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ hold_id: { type: 'string', description: 'Hold ID to void' },
49
+ },
50
+ required: ['hold_id'],
51
+ },
52
+ },
53
+ {
54
+ name: 'sardis_release_hold',
55
+ description: 'Release a hold (alias for sardis_void_hold). Releases the reserved funds without completing payment.',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ hold_id: { type: 'string', description: 'Hold ID to release' },
60
+ },
61
+ required: ['hold_id'],
62
+ },
63
+ },
64
+ {
65
+ name: 'sardis_get_hold',
66
+ description: 'Get details of a specific hold.',
67
+ inputSchema: {
68
+ type: 'object',
69
+ properties: {
70
+ hold_id: { type: 'string', description: 'Hold ID to retrieve' },
71
+ },
72
+ required: ['hold_id'],
73
+ },
74
+ },
75
+ {
76
+ name: 'sardis_list_holds',
77
+ description: 'List all holds for a wallet, optionally filtered by status.',
78
+ inputSchema: {
79
+ type: 'object',
80
+ properties: {
81
+ wallet_id: { type: 'string', description: 'Wallet ID to list holds for' },
82
+ status: {
83
+ type: 'string',
84
+ enum: ['active', 'captured', 'voided', 'expired'],
85
+ description: 'Filter by status',
86
+ },
87
+ },
88
+ required: ['wallet_id'],
89
+ },
90
+ },
91
+ {
92
+ name: 'sardis_extend_hold',
93
+ description: 'Extend the expiration time of an active hold.',
94
+ inputSchema: {
95
+ type: 'object',
96
+ properties: {
97
+ hold_id: { type: 'string', description: 'Hold ID to extend' },
98
+ additional_hours: { type: 'number', description: 'Hours to add to expiration' },
99
+ },
100
+ required: ['hold_id', 'additional_hours'],
101
+ },
102
+ },
103
+ ];
104
+ // Tool handlers
105
+ export const holdToolHandlers = {
106
+ sardis_create_hold: async (args) => {
107
+ const parsed = CreateHoldSchema.safeParse(args);
108
+ if (!parsed.success) {
109
+ return {
110
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
111
+ isError: true,
112
+ };
113
+ }
114
+ const config = getConfig();
115
+ const walletId = parsed.data.wallet_id || config.walletId || 'wallet_default';
116
+ const amount = typeof parsed.data.amount === 'number' ? parsed.data.amount.toString() : parsed.data.amount;
117
+ if (!config.apiKey || config.mode === 'simulated') {
118
+ // Simulated response
119
+ const holdId = `hold_${Date.now().toString(36)}`;
120
+ const durationHours = parsed.data.expires_in
121
+ ? parsed.data.expires_in / 3600
122
+ : (parsed.data.duration_hours || 168);
123
+ const expiresAt = new Date(Date.now() + durationHours * 3600000).toISOString();
124
+ return {
125
+ content: [{
126
+ type: 'text',
127
+ text: JSON.stringify({
128
+ hold_id: holdId,
129
+ wallet_id: walletId,
130
+ status: 'active',
131
+ amount: typeof parsed.data.amount === 'number' ? parsed.data.amount : parseFloat(parsed.data.amount),
132
+ token: parsed.data.token || 'USDC',
133
+ purpose: parsed.data.purpose,
134
+ expires_at: expiresAt,
135
+ message: `Hold created for ${amount} ${parsed.data.token || 'USDC'}`,
136
+ }, null, 2),
137
+ }],
138
+ };
139
+ }
140
+ try {
141
+ const result = await apiRequest('POST', '/api/v2/holds', parsed.data);
142
+ return {
143
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
144
+ };
145
+ }
146
+ catch (error) {
147
+ return {
148
+ content: [{
149
+ type: 'text',
150
+ text: `Failed to create hold: ${error instanceof Error ? error.message : 'Unknown error'}`,
151
+ }],
152
+ isError: true,
153
+ };
154
+ }
155
+ },
156
+ sardis_capture_hold: async (args) => {
157
+ const parsed = CaptureHoldSchema.safeParse(args);
158
+ if (!parsed.success) {
159
+ return {
160
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
161
+ isError: true,
162
+ };
163
+ }
164
+ const config = getConfig();
165
+ if (!config.apiKey || config.mode === 'simulated') {
166
+ return {
167
+ content: [{
168
+ type: 'text',
169
+ text: JSON.stringify({
170
+ hold_id: parsed.data.hold_id,
171
+ status: 'captured',
172
+ captured_amount: parsed.data.amount || '100.00',
173
+ captured_at: new Date().toISOString(),
174
+ message: 'Hold captured successfully',
175
+ }, null, 2),
176
+ }],
177
+ };
178
+ }
179
+ try {
180
+ const result = await apiRequest('POST', `/api/v2/holds/${parsed.data.hold_id}/capture`, parsed.data.amount ? { amount: parsed.data.amount } : {});
181
+ return {
182
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
183
+ };
184
+ }
185
+ catch (error) {
186
+ return {
187
+ content: [{
188
+ type: 'text',
189
+ text: `Failed to capture hold: ${error instanceof Error ? error.message : 'Unknown error'}`,
190
+ }],
191
+ isError: true,
192
+ };
193
+ }
194
+ },
195
+ sardis_void_hold: async (args) => {
196
+ const parsed = VoidHoldSchema.safeParse(args);
197
+ if (!parsed.success) {
198
+ return {
199
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
200
+ isError: true,
201
+ };
202
+ }
203
+ const config = getConfig();
204
+ if (!config.apiKey || config.mode === 'simulated') {
205
+ return {
206
+ content: [{
207
+ type: 'text',
208
+ text: JSON.stringify({
209
+ hold_id: parsed.data.hold_id,
210
+ status: 'voided',
211
+ voided_at: new Date().toISOString(),
212
+ message: 'Hold voided successfully',
213
+ }, null, 2),
214
+ }],
215
+ };
216
+ }
217
+ try {
218
+ const result = await apiRequest('POST', `/api/v2/holds/${parsed.data.hold_id}/void`, {});
219
+ return {
220
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
221
+ };
222
+ }
223
+ catch (error) {
224
+ return {
225
+ content: [{
226
+ type: 'text',
227
+ text: `Failed to void hold: ${error instanceof Error ? error.message : 'Unknown error'}`,
228
+ }],
229
+ isError: true,
230
+ };
231
+ }
232
+ },
233
+ sardis_release_hold: async (args) => {
234
+ // Alias for sardis_void_hold
235
+ const parsed = VoidHoldSchema.safeParse(args);
236
+ if (!parsed.success) {
237
+ return {
238
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
239
+ isError: true,
240
+ };
241
+ }
242
+ const config = getConfig();
243
+ if (!config.apiKey || config.mode === 'simulated') {
244
+ return {
245
+ content: [{
246
+ type: 'text',
247
+ text: JSON.stringify({
248
+ hold_id: parsed.data.hold_id,
249
+ status: 'released',
250
+ released_at: new Date().toISOString(),
251
+ message: 'Hold released successfully',
252
+ }, null, 2),
253
+ }],
254
+ };
255
+ }
256
+ try {
257
+ const result = await apiRequest('POST', `/api/v2/holds/${parsed.data.hold_id}/void`, {});
258
+ return {
259
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
260
+ };
261
+ }
262
+ catch (error) {
263
+ return {
264
+ content: [{
265
+ type: 'text',
266
+ text: `Failed to release hold: ${error instanceof Error ? error.message : 'Unknown error'}`,
267
+ }],
268
+ isError: true,
269
+ };
270
+ }
271
+ },
272
+ sardis_get_hold: async (args) => {
273
+ const parsed = GetHoldSchema.safeParse(args);
274
+ if (!parsed.success) {
275
+ return {
276
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
277
+ isError: true,
278
+ };
279
+ }
280
+ const config = getConfig();
281
+ if (!config.apiKey || config.mode === 'simulated') {
282
+ return {
283
+ content: [{
284
+ type: 'text',
285
+ text: JSON.stringify({
286
+ id: parsed.data.hold_id,
287
+ wallet_id: 'wallet_simulated',
288
+ amount: '100.00',
289
+ token: 'USDC',
290
+ status: 'active',
291
+ expires_at: new Date(Date.now() + 7 * 24 * 3600000).toISOString(),
292
+ created_at: new Date().toISOString(),
293
+ }, null, 2),
294
+ }],
295
+ };
296
+ }
297
+ try {
298
+ const result = await apiRequest('GET', `/api/v2/holds/${parsed.data.hold_id}`);
299
+ return {
300
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
301
+ };
302
+ }
303
+ catch (error) {
304
+ return {
305
+ content: [{
306
+ type: 'text',
307
+ text: `Failed to get hold: ${error instanceof Error ? error.message : 'Unknown error'}`,
308
+ }],
309
+ isError: true,
310
+ };
311
+ }
312
+ },
313
+ sardis_list_holds: async (args) => {
314
+ const parsed = ListHoldsSchema.safeParse(args);
315
+ if (!parsed.success) {
316
+ return {
317
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
318
+ isError: true,
319
+ };
320
+ }
321
+ const config = getConfig();
322
+ const walletId = (parsed.success && parsed.data.wallet_id) || config.walletId || 'wallet_default';
323
+ const statusFilter = parsed.success && parsed.data.status;
324
+ if (!config.apiKey || config.mode === 'simulated') {
325
+ const holds = [{
326
+ hold_id: 'hold_simulated',
327
+ id: 'hold_simulated',
328
+ wallet_id: walletId,
329
+ amount: '100.00',
330
+ token: 'USDC',
331
+ status: statusFilter || 'active',
332
+ expires_at: new Date(Date.now() + 7 * 24 * 3600000).toISOString(),
333
+ }];
334
+ return {
335
+ content: [{
336
+ type: 'text',
337
+ text: JSON.stringify(holds, null, 2),
338
+ }],
339
+ };
340
+ }
341
+ try {
342
+ let url = `/api/v2/holds/wallet/${parsed.data.wallet_id}`;
343
+ if (parsed.data.status) {
344
+ url += `?status=${parsed.data.status}`;
345
+ }
346
+ const result = await apiRequest('GET', url);
347
+ return {
348
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
349
+ };
350
+ }
351
+ catch (error) {
352
+ return {
353
+ content: [{
354
+ type: 'text',
355
+ text: `Failed to list holds: ${error instanceof Error ? error.message : 'Unknown error'}`,
356
+ }],
357
+ isError: true,
358
+ };
359
+ }
360
+ },
361
+ sardis_extend_hold: async (args) => {
362
+ const schema = GetHoldSchema.extend({
363
+ additional_hours: CreateHoldSchema.shape.duration_hours,
364
+ });
365
+ const parsed = schema.safeParse(args);
366
+ if (!parsed.success) {
367
+ return {
368
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
369
+ isError: true,
370
+ };
371
+ }
372
+ const config = getConfig();
373
+ if (!config.apiKey || config.mode === 'simulated') {
374
+ return {
375
+ content: [{
376
+ type: 'text',
377
+ text: JSON.stringify({
378
+ hold_id: parsed.data.hold_id,
379
+ status: 'active',
380
+ expires_at: new Date(Date.now() + (168 + (parsed.data.additional_hours || 0)) * 3600000).toISOString(),
381
+ message: `Hold extended by ${parsed.data.additional_hours} hours`,
382
+ }, null, 2),
383
+ }],
384
+ };
385
+ }
386
+ try {
387
+ const result = await apiRequest('POST', `/api/v2/holds/${parsed.data.hold_id}/extend`, { additional_hours: parsed.data.additional_hours });
388
+ return {
389
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
390
+ };
391
+ }
392
+ catch (error) {
393
+ return {
394
+ content: [{
395
+ type: 'text',
396
+ text: `Failed to extend hold: ${error instanceof Error ? error.message : 'Unknown error'}`,
397
+ }],
398
+ isError: true,
399
+ };
400
+ }
401
+ },
402
+ };
403
+ //# sourceMappingURL=holds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holds.js","sourceRoot":"","sources":["../../src/tools/holds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Sardis MCP Server - Tool Registry
3
+ *
4
+ * Aggregates all tool definitions and handlers from domain-specific modules.
5
+ * Total: 36+ tools across 9 categories.
6
+ */
7
+ import type { ToolDefinition, ToolHandler } from './types.js';
8
+ export * from './types.js';
9
+ export { getWalletInfo, getWalletBalance } from './wallets.js';
10
+ export { checkPolicy } from './policy.js';
11
+ export { executePayment } from './payments.js';
12
+ /**
13
+ * All tool definitions aggregated from modules
14
+ */
15
+ export declare const allToolDefinitions: ToolDefinition[];
16
+ /**
17
+ * All tool handlers aggregated from modules
18
+ */
19
+ export declare const allToolHandlers: Record<string, ToolHandler>;
20
+ /**
21
+ * Get tool handler by name
22
+ */
23
+ export declare function getToolHandler(name: string): ToolHandler | undefined;
24
+ /**
25
+ * Check if a tool exists
26
+ */
27
+ export declare function hasToolHandler(name: string): boolean;
28
+ /**
29
+ * Get list of all tool names
30
+ */
31
+ export declare function getAllToolNames(): string[];
32
+ /**
33
+ * Tool categories for organization
34
+ */
35
+ export declare const toolCategories: {
36
+ readonly wallet: readonly ["sardis_get_wallet", "sardis_get_balance", "sardis_create_wallet", "sardis_update_wallet_policy", "sardis_list_wallets"];
37
+ readonly payment: readonly ["sardis_pay", "sardis_get_transaction", "sardis_list_transactions"];
38
+ readonly policy: readonly ["sardis_check_policy", "sardis_validate_limits", "sardis_check_compliance"];
39
+ readonly hold: readonly ["sardis_create_hold", "sardis_capture_hold", "sardis_void_hold", "sardis_get_hold", "sardis_list_holds", "sardis_extend_hold"];
40
+ readonly agent: readonly ["sardis_create_agent", "sardis_get_agent", "sardis_list_agents", "sardis_update_agent"];
41
+ readonly card: readonly ["sardis_issue_card", "sardis_get_card", "sardis_list_cards", "sardis_freeze_card", "sardis_unfreeze_card", "sardis_cancel_card"];
42
+ readonly fiat: readonly ["sardis_fund_wallet", "sardis_withdraw_to_bank", "sardis_get_funding_status", "sardis_get_withdrawal_status"];
43
+ readonly approval: readonly ["sardis_request_approval", "sardis_get_approval_status"];
44
+ readonly spending: readonly ["sardis_get_spending_summary", "sardis_get_spending_by_vendor", "sardis_get_spending_by_category"];
45
+ };
46
+ /**
47
+ * Get tools by category
48
+ */
49
+ export declare function getToolsByCategory(category: keyof typeof toolCategories): ToolDefinition[];
50
+ /**
51
+ * Get total tool count
52
+ */
53
+ export declare function getToolCount(): number;
54
+ /**
55
+ * Get tool summary for documentation
56
+ */
57
+ export declare function getToolSummary(): {
58
+ category: string;
59
+ count: number;
60
+ tools: string[];
61
+ }[];
62
+ /**
63
+ * Get all tool definitions (alias for allToolDefinitions)
64
+ */
65
+ export declare function getAllTools(): ToolDefinition[];
66
+ /**
67
+ * Get all tool handlers (alias for allToolHandlers)
68
+ */
69
+ export declare function getAllToolHandlers(): Record<string, ToolHandler>;
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAe9D,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAW9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAWvD,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;CAyCjB,CAAC;AAEX;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,OAAO,cAAc,GAAG,cAAc,EAAE,CAG1F;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAMvF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAEhE"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Sardis MCP Server - Tool Registry
3
+ *
4
+ * Aggregates all tool definitions and handlers from domain-specific modules.
5
+ * Total: 36+ tools across 9 categories.
6
+ */
7
+ // Import tool definitions and handlers from each module
8
+ import { walletToolDefinitions, walletToolHandlers } from './wallets.js';
9
+ import { holdToolDefinitions, holdToolHandlers } from './holds.js';
10
+ import { agentToolDefinitions, agentToolHandlers } from './agents.js';
11
+ import { paymentToolDefinitions, paymentToolHandlers } from './payments.js';
12
+ import { policyToolDefinitions, policyToolHandlers } from './policy.js';
13
+ import { cardToolDefinitions, cardToolHandlers } from './cards.js';
14
+ import { fiatToolDefinitions, fiatToolHandlers } from './fiat.js';
15
+ import { approvalToolDefinitions, approvalToolHandlers } from './approvals.js';
16
+ import { spendingToolDefinitions, spendingToolHandlers } from './spending.js';
17
+ import { walletManagementToolDefinitions, walletManagementToolHandlers } from './wallet-management.js';
18
+ // Re-export types
19
+ export * from './types.js';
20
+ // Re-export domain functions for direct use
21
+ export { getWalletInfo, getWalletBalance } from './wallets.js';
22
+ export { checkPolicy } from './policy.js';
23
+ export { executePayment } from './payments.js';
24
+ /**
25
+ * All tool definitions aggregated from modules
26
+ */
27
+ export const allToolDefinitions = [
28
+ ...walletToolDefinitions,
29
+ ...holdToolDefinitions,
30
+ ...agentToolDefinitions,
31
+ ...paymentToolDefinitions,
32
+ ...policyToolDefinitions,
33
+ ...cardToolDefinitions,
34
+ ...fiatToolDefinitions,
35
+ ...approvalToolDefinitions,
36
+ ...spendingToolDefinitions,
37
+ ...walletManagementToolDefinitions,
38
+ ];
39
+ /**
40
+ * All tool handlers aggregated from modules
41
+ */
42
+ export const allToolHandlers = {
43
+ ...walletToolHandlers,
44
+ ...holdToolHandlers,
45
+ ...agentToolHandlers,
46
+ ...paymentToolHandlers,
47
+ ...policyToolHandlers,
48
+ ...cardToolHandlers,
49
+ ...fiatToolHandlers,
50
+ ...approvalToolHandlers,
51
+ ...spendingToolHandlers,
52
+ ...walletManagementToolHandlers,
53
+ };
54
+ /**
55
+ * Get tool handler by name
56
+ */
57
+ export function getToolHandler(name) {
58
+ return allToolHandlers[name];
59
+ }
60
+ /**
61
+ * Check if a tool exists
62
+ */
63
+ export function hasToolHandler(name) {
64
+ return name in allToolHandlers;
65
+ }
66
+ /**
67
+ * Get list of all tool names
68
+ */
69
+ export function getAllToolNames() {
70
+ return Object.keys(allToolHandlers);
71
+ }
72
+ /**
73
+ * Tool categories for organization
74
+ */
75
+ export const toolCategories = {
76
+ wallet: ['sardis_get_wallet', 'sardis_get_balance', 'sardis_create_wallet', 'sardis_update_wallet_policy', 'sardis_list_wallets'],
77
+ payment: ['sardis_pay', 'sardis_get_transaction', 'sardis_list_transactions'],
78
+ policy: ['sardis_check_policy', 'sardis_validate_limits', 'sardis_check_compliance'],
79
+ hold: [
80
+ 'sardis_create_hold',
81
+ 'sardis_capture_hold',
82
+ 'sardis_void_hold',
83
+ 'sardis_get_hold',
84
+ 'sardis_list_holds',
85
+ 'sardis_extend_hold',
86
+ ],
87
+ agent: [
88
+ 'sardis_create_agent',
89
+ 'sardis_get_agent',
90
+ 'sardis_list_agents',
91
+ 'sardis_update_agent',
92
+ ],
93
+ card: [
94
+ 'sardis_issue_card',
95
+ 'sardis_get_card',
96
+ 'sardis_list_cards',
97
+ 'sardis_freeze_card',
98
+ 'sardis_unfreeze_card',
99
+ 'sardis_cancel_card',
100
+ ],
101
+ fiat: [
102
+ 'sardis_fund_wallet',
103
+ 'sardis_withdraw_to_bank',
104
+ 'sardis_get_funding_status',
105
+ 'sardis_get_withdrawal_status',
106
+ ],
107
+ approval: [
108
+ 'sardis_request_approval',
109
+ 'sardis_get_approval_status',
110
+ ],
111
+ spending: [
112
+ 'sardis_get_spending_summary',
113
+ 'sardis_get_spending_by_vendor',
114
+ 'sardis_get_spending_by_category',
115
+ ],
116
+ };
117
+ /**
118
+ * Get tools by category
119
+ */
120
+ export function getToolsByCategory(category) {
121
+ const toolNames = toolCategories[category];
122
+ return allToolDefinitions.filter((t) => toolNames.includes(t.name));
123
+ }
124
+ /**
125
+ * Get total tool count
126
+ */
127
+ export function getToolCount() {
128
+ return allToolDefinitions.length;
129
+ }
130
+ /**
131
+ * Get tool summary for documentation
132
+ */
133
+ export function getToolSummary() {
134
+ return Object.entries(toolCategories).map(([category, tools]) => ({
135
+ category,
136
+ count: tools.length,
137
+ tools: [...tools],
138
+ }));
139
+ }
140
+ /**
141
+ * Get all tool definitions (alias for allToolDefinitions)
142
+ */
143
+ export function getAllTools() {
144
+ return allToolDefinitions;
145
+ }
146
+ /**
147
+ * Get all tool handlers (alias for allToolHandlers)
148
+ */
149
+ export function getAllToolHandlers() {
150
+ return allToolHandlers;
151
+ }
152
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}