@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 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Wallet Management tools for MCP server
3
+ *
4
+ * Tools for creating and managing wallets and their policies.
5
+ */
6
+ import type { ToolDefinition, ToolHandler } from './types.js';
7
+ export declare const walletManagementToolDefinitions: ToolDefinition[];
8
+ export declare const walletManagementToolHandlers: Record<string, ToolHandler>;
9
+ //# sourceMappingURL=wallet-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-management.d.ts","sourceRoot":"","sources":["../../src/tools/wallet-management.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAoE1E,eAAO,MAAM,+BAA+B,EAAE,cAAc,EAiD3D,CAAC;AAeF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAiHpE,CAAC"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Wallet Management tools for MCP server
3
+ *
4
+ * Tools for creating and managing wallets and their policies.
5
+ */
6
+ import { z } from 'zod';
7
+ import { getConfig } from '../config.js';
8
+ import { apiRequest } from '../api.js';
9
+ // Schemas
10
+ const CreateWalletSchema = z.object({
11
+ name: z.string().describe('Wallet name'),
12
+ chain: z.enum(['base', 'polygon', 'ethereum', 'arbitrum', 'optimism']).optional().describe('Blockchain network'),
13
+ policy: z.object({
14
+ max_per_tx: z.string().optional().describe('Maximum amount per transaction'),
15
+ max_daily: z.string().optional().describe('Maximum daily spending'),
16
+ allowed_vendors: z.array(z.string()).optional().describe('Allowed vendor list'),
17
+ blocked_categories: z.array(z.string()).optional().describe('Blocked categories'),
18
+ }).optional().describe('Spending policy'),
19
+ });
20
+ const UpdatePolicySchema = z.object({
21
+ wallet_id: z.string().describe('Wallet ID to update'),
22
+ policy: z.object({
23
+ max_per_tx: z.string().optional(),
24
+ max_daily: z.string().optional(),
25
+ max_monthly: z.string().optional(),
26
+ allowed_vendors: z.array(z.string()).optional(),
27
+ blocked_vendors: z.array(z.string()).optional(),
28
+ blocked_categories: z.array(z.string()).optional(),
29
+ require_approval_above: z.string().optional(),
30
+ }).describe('New policy settings'),
31
+ });
32
+ const ListWalletsSchema = z.object({
33
+ agent_id: z.string().optional().describe('Filter by agent ID'),
34
+ chain: z.string().optional().describe('Filter by blockchain'),
35
+ status: z.enum(['active', 'inactive']).optional().describe('Filter by status'),
36
+ limit: z.number().optional().describe('Maximum wallets to return'),
37
+ });
38
+ const UpdateLimitsSchema = z.object({
39
+ wallet_id: z.string().describe('Wallet ID to update'),
40
+ limit_per_tx: z.number().optional().describe('Maximum per transaction'),
41
+ limit_total: z.number().optional().describe('Maximum total/daily limit'),
42
+ });
43
+ const ArchiveWalletSchema = z.object({
44
+ wallet_id: z.string().describe('Wallet ID to archive'),
45
+ reason: z.string().optional().describe('Reason for archiving'),
46
+ });
47
+ // SECURITY: Only read-only and wallet creation tools are exposed to AI agents.
48
+ // Policy/limit modification and archival tools have been REMOVED to prevent
49
+ // prompt-injected agents from escalating their own privileges.
50
+ // These operations must be performed via the admin API or dashboard.
51
+ export const walletManagementToolDefinitions = [
52
+ {
53
+ name: 'sardis_create_wallet',
54
+ description: 'Create a new MPC wallet for an agent with optional spending policy.',
55
+ inputSchema: {
56
+ type: 'object',
57
+ properties: {
58
+ name: { type: 'string', description: 'Wallet name' },
59
+ chain: {
60
+ type: 'string',
61
+ enum: ['base', 'polygon', 'ethereum', 'arbitrum', 'optimism'],
62
+ description: 'Blockchain network (default: base)',
63
+ },
64
+ policy: {
65
+ type: 'object',
66
+ description: 'Spending policy settings',
67
+ properties: {
68
+ max_per_tx: { type: 'string', description: 'Maximum per transaction (e.g., "100.00")' },
69
+ max_daily: { type: 'string', description: 'Maximum daily spending' },
70
+ allowed_vendors: {
71
+ type: 'array',
72
+ items: { type: 'string' },
73
+ description: 'List of allowed vendors',
74
+ },
75
+ blocked_categories: {
76
+ type: 'array',
77
+ items: { type: 'string' },
78
+ description: 'Blocked spending categories',
79
+ },
80
+ },
81
+ },
82
+ },
83
+ required: ['name'],
84
+ },
85
+ },
86
+ {
87
+ name: 'sardis_list_wallets',
88
+ description: 'List all wallets, optionally filtered by agent or status.',
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: {
92
+ agent_id: { type: 'string', description: 'Filter by agent ID' },
93
+ chain: { type: 'string', description: 'Filter by blockchain' },
94
+ status: { type: 'string', enum: ['active', 'inactive'], description: 'Filter by status' },
95
+ limit: { type: 'number', description: 'Maximum wallets to return' },
96
+ },
97
+ required: [],
98
+ },
99
+ },
100
+ ];
101
+ // SECURITY: Blocked tool handler — returns an error directing users to the admin API.
102
+ const blockedToolHandler = async (_args) => ({
103
+ content: [{
104
+ type: 'text',
105
+ text: JSON.stringify({
106
+ error: 'This operation has been disabled for AI agents for security reasons. '
107
+ + 'Policy and limit changes must be made via the admin dashboard or admin API.',
108
+ }),
109
+ }],
110
+ isError: true,
111
+ });
112
+ // Tool handlers
113
+ export const walletManagementToolHandlers = {
114
+ // SECURITY: Block mutation tools — agents must not modify their own policies/limits
115
+ sardis_update_wallet_policy: blockedToolHandler,
116
+ sardis_update_wallet_limits: blockedToolHandler,
117
+ sardis_archive_wallet: blockedToolHandler,
118
+ sardis_create_wallet: async (args) => {
119
+ const parsed = CreateWalletSchema.safeParse(args);
120
+ if (!parsed.success) {
121
+ return {
122
+ content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
123
+ isError: true,
124
+ };
125
+ }
126
+ const config = getConfig();
127
+ if (!config.apiKey || config.mode === 'simulated') {
128
+ const walletId = `wallet_${Date.now().toString(36)}`;
129
+ const address = '0x' + Array(40).fill(0).map(() => Math.floor(Math.random() * 16).toString(16)).join('');
130
+ return {
131
+ content: [{
132
+ type: 'text',
133
+ text: JSON.stringify({
134
+ wallet_id: walletId,
135
+ id: walletId,
136
+ name: parsed.data.name,
137
+ address,
138
+ chain: parsed.data.chain || 'base',
139
+ status: 'active',
140
+ is_active: true,
141
+ balance: '0.00',
142
+ policy: parsed.data.policy || { max_per_tx: '100.00', max_daily: '500.00' },
143
+ created_at: new Date().toISOString(),
144
+ message: `Wallet "${parsed.data.name}" created successfully`,
145
+ }, null, 2),
146
+ }],
147
+ };
148
+ }
149
+ try {
150
+ const result = await apiRequest('POST', '/api/v2/wallets', parsed.data);
151
+ return {
152
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
153
+ };
154
+ }
155
+ catch (error) {
156
+ return {
157
+ content: [{
158
+ type: 'text',
159
+ text: `Failed to create wallet: ${error instanceof Error ? error.message : 'Unknown error'}`,
160
+ }],
161
+ isError: true,
162
+ };
163
+ }
164
+ },
165
+ // sardis_update_wallet_policy: REMOVED — blocked handler is defined above.
166
+ // The full implementation was previously here but it OVERRODE the blocked handler
167
+ // because in JS object literals the last duplicate key wins. This was a security bug:
168
+ // agents could still modify their own policies despite the intended block.
169
+ sardis_list_wallets: async (args) => {
170
+ const parsed = ListWalletsSchema.safeParse(args);
171
+ const config = getConfig();
172
+ if (!config.apiKey || config.mode === 'simulated') {
173
+ const wallets = [{
174
+ id: 'wallet_simulated',
175
+ name: 'Default Wallet',
176
+ address: '0x' + '0'.repeat(40),
177
+ chain: 'base',
178
+ is_active: true,
179
+ balance: '1000.00',
180
+ policy: { max_per_tx: '100.00', max_daily: '500.00' },
181
+ created_at: new Date().toISOString(),
182
+ }];
183
+ return {
184
+ content: [{
185
+ type: 'text',
186
+ text: JSON.stringify(wallets, null, 2),
187
+ }],
188
+ };
189
+ }
190
+ try {
191
+ const params = new URLSearchParams();
192
+ if (parsed.success) {
193
+ if (parsed.data.agent_id)
194
+ params.append('agent_id', parsed.data.agent_id);
195
+ if (parsed.data.chain)
196
+ params.append('chain', parsed.data.chain);
197
+ if (parsed.data.status)
198
+ params.append('status', parsed.data.status);
199
+ if (parsed.data.limit)
200
+ params.append('limit', parsed.data.limit.toString());
201
+ }
202
+ const url = `/api/v2/wallets${params.toString() ? `?${params}` : ''}`;
203
+ const result = await apiRequest('GET', url);
204
+ return {
205
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
206
+ };
207
+ }
208
+ catch (error) {
209
+ return {
210
+ content: [{
211
+ type: 'text',
212
+ text: `Failed to list wallets: ${error instanceof Error ? error.message : 'Unknown error'}`,
213
+ }],
214
+ isError: true,
215
+ };
216
+ }
217
+ },
218
+ // sardis_update_wallet_limits: REMOVED — blocked handler is defined above.
219
+ // sardis_archive_wallet: REMOVED — blocked handler is defined above.
220
+ // See security comment above sardis_update_wallet_policy for rationale.
221
+ };
222
+ //# sourceMappingURL=wallet-management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-management.js","sourceRoot":"","sources":["../../src/tools/wallet-management.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Wallet tools for MCP server
3
+ */
4
+ import type { ToolDefinition, ToolHandler, WalletInfo, WalletBalance } from './types.js';
5
+ /**
6
+ * Get wallet info from API or return simulated data
7
+ */
8
+ export declare function getWalletInfo(): Promise<WalletInfo>;
9
+ /**
10
+ * Get wallet balance from API or return simulated data
11
+ */
12
+ export declare function getWalletBalance(token?: string, chain?: string): Promise<WalletBalance>;
13
+ export declare const walletToolDefinitions: ToolDefinition[];
14
+ export declare const walletToolHandlers: Record<string, ToolHandler>;
15
+ //# sourceMappingURL=wallets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/tools/wallets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EAEX,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAczD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,GAAE,MAAe,EACtB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAkBxB;AAGD,eAAO,MAAM,qBAAqB,EAAE,cAAc,EA6BjD,CAAC;AAGF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAuC1D,CAAC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Wallet tools for MCP server
3
+ */
4
+ import { getConfig } from '../config.js';
5
+ import { apiRequest } from '../api.js';
6
+ import { BalanceCheckSchema } from './types.js';
7
+ /**
8
+ * Get wallet info from API or return simulated data
9
+ */
10
+ export async function getWalletInfo() {
11
+ const config = getConfig();
12
+ if (!config.apiKey || !config.walletId) {
13
+ return {
14
+ id: config.walletId || 'wallet_simulated',
15
+ limit_per_tx: '100.00',
16
+ limit_total: '500.00',
17
+ is_active: true,
18
+ currency: 'USDC',
19
+ };
20
+ }
21
+ return apiRequest('GET', `/api/v2/wallets/${config.walletId}`);
22
+ }
23
+ /**
24
+ * Get wallet balance from API or return simulated data
25
+ */
26
+ export async function getWalletBalance(token = 'USDC', chain) {
27
+ const config = getConfig();
28
+ const effectiveChain = chain || config.chain;
29
+ if (!config.apiKey || !config.walletId) {
30
+ return {
31
+ wallet_id: config.walletId || 'wallet_simulated',
32
+ balance: '1000.00',
33
+ token,
34
+ chain: effectiveChain,
35
+ address: '0x' + '0'.repeat(40),
36
+ };
37
+ }
38
+ return apiRequest('GET', `/api/v2/wallets/${config.walletId}/balance?chain=${effectiveChain}&token=${token}`);
39
+ }
40
+ // Tool definitions
41
+ export const walletToolDefinitions = [
42
+ {
43
+ name: 'sardis_get_balance',
44
+ description: 'Get the current wallet balance. Use before making payments to ensure sufficient funds.',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ token: {
49
+ type: 'string',
50
+ enum: ['USDC', 'USDT', 'PYUSD', 'EURC'],
51
+ description: 'Token to check balance for. Defaults to USDC.',
52
+ },
53
+ chain: {
54
+ type: 'string',
55
+ description: 'Chain to check balance on (e.g., "base_sepolia", "polygon").',
56
+ },
57
+ },
58
+ required: [],
59
+ },
60
+ },
61
+ {
62
+ name: 'sardis_get_wallet',
63
+ description: 'Get wallet information including spending limits and policy settings.',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {},
67
+ required: [],
68
+ },
69
+ },
70
+ ];
71
+ // Tool handlers
72
+ export const walletToolHandlers = {
73
+ sardis_get_balance: async (args) => {
74
+ const parsed = BalanceCheckSchema.safeParse(args);
75
+ const config = getConfig();
76
+ const token = parsed.success ? parsed.data.token || 'USDC' : 'USDC';
77
+ const chain = parsed.success ? parsed.data.chain || config.chain : config.chain;
78
+ try {
79
+ const balance = await getWalletBalance(token, chain);
80
+ return {
81
+ content: [{ type: 'text', text: JSON.stringify(balance, null, 2) }],
82
+ };
83
+ }
84
+ catch (error) {
85
+ return {
86
+ content: [{
87
+ type: 'text',
88
+ text: `Failed to get balance: ${error instanceof Error ? error.message : 'Unknown error'}`,
89
+ }],
90
+ isError: true,
91
+ };
92
+ }
93
+ },
94
+ sardis_get_wallet: async () => {
95
+ try {
96
+ const wallet = await getWalletInfo();
97
+ return {
98
+ content: [{ type: 'text', text: JSON.stringify(wallet, null, 2) }],
99
+ };
100
+ }
101
+ catch (error) {
102
+ return {
103
+ content: [{
104
+ type: 'text',
105
+ text: `Failed to get wallet info: ${error instanceof Error ? error.message : 'Unknown error'}`,
106
+ }],
107
+ isError: true,
108
+ };
109
+ }
110
+ },
111
+ };
112
+ //# sourceMappingURL=wallets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../src/tools/wallets.ts"],"names":[],"mappings":"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"}