@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
package/dist/api.js ADDED
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Sardis API Client for MCP Server
3
+ *
4
+ * Handles all API communication with the Sardis backend.
5
+ */
6
+ import { getConfig } from './config.js';
7
+ /**
8
+ * Make an API request to Sardis
9
+ */
10
+ export async function apiRequest(method, path, body) {
11
+ const config = getConfig();
12
+ const url = `${config.apiUrl}${path.startsWith('/') ? path : '/' + path}`;
13
+ const paymentIdentity = process.env.SARDIS_PAYMENT_IDENTITY;
14
+ const response = await fetch(url, {
15
+ method,
16
+ headers: {
17
+ 'X-API-Key': config.apiKey,
18
+ 'Content-Type': 'application/json',
19
+ 'User-Agent': 'sardis-mcp-server/0.1.0',
20
+ ...(paymentIdentity ? { 'X-Sardis-Payment-Identity': paymentIdentity } : {}),
21
+ },
22
+ body: body ? JSON.stringify(body) : undefined,
23
+ });
24
+ if (!response.ok) {
25
+ const errorBody = await response.text();
26
+ throw new Error(`API error ${response.status}: ${errorBody}`);
27
+ }
28
+ return response.json();
29
+ }
30
+ /**
31
+ * Generate unique mandate ID
32
+ *
33
+ * SECURITY: Uses crypto.randomUUID() for cryptographically secure IDs.
34
+ * Math.random() is not suitable for security-relevant identifiers.
35
+ */
36
+ export function generateMandateId() {
37
+ const id = (typeof crypto !== 'undefined' && crypto.randomUUID)
38
+ ? crypto.randomUUID().replace(/-/g, '').substring(0, 16)
39
+ : Array.from((typeof crypto !== 'undefined' && crypto.getRandomValues)
40
+ ? crypto.getRandomValues(new Uint8Array(8))
41
+ : new Uint8Array(8).map(() => Math.floor(Math.random() * 256))).map((b) => b.toString(16).padStart(2, '0')).join('');
42
+ return `mnd_${id}`;
43
+ }
44
+ /**
45
+ * Create SHA-256 hash for audit
46
+ *
47
+ * SECURITY: The fallback now uses Node.js crypto module instead of a
48
+ * predictable timestamp string. Audit hashes must provide collision
49
+ * resistance for financial integrity.
50
+ */
51
+ export async function createAuditHash(data) {
52
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
53
+ const encoder = new TextEncoder();
54
+ const dataBuffer = encoder.encode(data);
55
+ const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
56
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
57
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
58
+ }
59
+ // Fallback: use Node.js crypto (always available in Node environments)
60
+ try {
61
+ const { createHash } = await import('node:crypto');
62
+ return createHash('sha256').update(data).digest('hex');
63
+ }
64
+ catch {
65
+ // SECURITY: Refuse to produce a fake hash — fail-closed.
66
+ throw new Error('No cryptographic hash function available. '
67
+ + 'Audit integrity cannot be guaranteed without SHA-256.');
68
+ }
69
+ }
70
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Sardis MCP Server CLI
4
+ *
5
+ * Usage:
6
+ * npx @sardis/mcp-server start
7
+ * npx @sardis/mcp-server init
8
+ * npx @sardis/mcp-server --version
9
+ * npx @sardis/mcp-server --help
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
package/dist/cli.js ADDED
@@ -0,0 +1,274 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Sardis MCP Server CLI
4
+ *
5
+ * Usage:
6
+ * npx @sardis/mcp-server start
7
+ * npx @sardis/mcp-server init
8
+ * npx @sardis/mcp-server --version
9
+ * npx @sardis/mcp-server --help
10
+ */
11
+ import fs from 'node:fs/promises';
12
+ import path from 'node:path';
13
+ import { runServer } from './index.js';
14
+ const args = process.argv.slice(2);
15
+ function printHelp() {
16
+ console.log(`
17
+ Sardis MCP Server v0.1.0
18
+ The Payment OS for the Agent Economy
19
+
20
+ USAGE:
21
+ npx @sardis/mcp-server start Start the MCP server (stdio transport)
22
+ npx @sardis/mcp-server init Bootstrap local MCP config (.env.sardis)
23
+ npx @sardis/mcp-server --help Show this help message
24
+ npx @sardis/mcp-server --version Show version
25
+
26
+ DESCRIPTION:
27
+ Sardis MCP Server enables AI agents to execute secure payments
28
+ using Model Context Protocol. It exposes 36 tools across 8 categories:
29
+
30
+ Wallet (5): sardis_get_wallet, sardis_get_balance, sardis_create_wallet,
31
+ sardis_update_wallet_policy, sardis_list_wallets
32
+
33
+ Payment (3): sardis_pay, sardis_get_transaction, sardis_list_transactions
34
+
35
+ Policy (3): sardis_check_policy, sardis_validate_limits, sardis_check_compliance
36
+
37
+ Hold (6): sardis_create_hold, sardis_capture_hold, sardis_void_hold,
38
+ sardis_get_hold, sardis_list_holds, sardis_extend_hold
39
+
40
+ Agent (4): sardis_create_agent, sardis_get_agent, sardis_list_agents,
41
+ sardis_update_agent
42
+
43
+ Card (6): sardis_issue_card, sardis_get_card, sardis_list_cards,
44
+ sardis_freeze_card, sardis_unfreeze_card, sardis_cancel_card
45
+
46
+ Fiat (4): sardis_fund_wallet, sardis_withdraw_to_bank,
47
+ sardis_get_funding_status, sardis_get_withdrawal_status
48
+
49
+ Approval (2): sardis_request_approval, sardis_get_approval_status
50
+
51
+ Analytics (3): sardis_get_spending_summary, sardis_get_spending_by_vendor,
52
+ sardis_get_spending_by_category
53
+
54
+ CONFIGURATION (Claude Desktop):
55
+ Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
56
+
57
+ {
58
+ "mcpServers": {
59
+ "sardis": {
60
+ "command": "npx",
61
+ "args": ["@sardis/mcp-server", "start"]
62
+ }
63
+ }
64
+ }
65
+
66
+ ENVIRONMENT VARIABLES:
67
+ SARDIS_API_KEY Your Sardis API key (optional for simulated mode)
68
+ SARDIS_WALLET_ID Default wallet ID
69
+ SARDIS_AGENT_ID Agent ID for this connection
70
+ SARDIS_PAYMENT_IDENTITY Signed one-click identity for MCP bootstrap
71
+ SARDIS_MODE 'live' or 'simulated' (default: simulated)
72
+
73
+ LEARN MORE:
74
+ Documentation: https://docs.sardis.network
75
+ GitHub: https://github.com/sardis-network/sardis
76
+ `);
77
+ }
78
+ function printVersion() {
79
+ console.log('Sardis MCP Server v0.1.0');
80
+ }
81
+ function readArgValue(argv, name) {
82
+ const eqPrefix = `--${name}=`;
83
+ const eqMatch = argv.find((a) => a.startsWith(eqPrefix));
84
+ if (eqMatch) {
85
+ return eqMatch.slice(eqPrefix.length);
86
+ }
87
+ const idx = argv.indexOf(`--${name}`);
88
+ if (idx >= 0 && idx + 1 < argv.length) {
89
+ return argv[idx + 1];
90
+ }
91
+ return undefined;
92
+ }
93
+ function hasFlag(argv, name) {
94
+ return argv.includes(`--${name}`) || argv.some((a) => a.startsWith(`--${name}=`));
95
+ }
96
+ function parseInitOptions(argv) {
97
+ const mode = (readArgValue(argv, 'mode') || process.env.SARDIS_MODE || 'simulated');
98
+ const output = readArgValue(argv, 'output') || '.env.sardis';
99
+ const issueCard = hasFlag(argv, 'issue-card');
100
+ return {
101
+ mode,
102
+ apiUrl: (readArgValue(argv, 'api-url') || process.env.SARDIS_API_URL || 'https://api.sardis.network').replace(/\/$/, ''),
103
+ apiKey: readArgValue(argv, 'api-key') || process.env.SARDIS_API_KEY || '',
104
+ paymentIdentity: readArgValue(argv, 'payment-identity') || process.env.SARDIS_PAYMENT_IDENTITY || '',
105
+ agentId: readArgValue(argv, 'agent-id') || process.env.SARDIS_AGENT_ID || '',
106
+ agentName: readArgValue(argv, 'agent-name') || `Sardis MCP Agent ${new Date().toISOString().slice(0, 10)}`,
107
+ walletId: readArgValue(argv, 'wallet-id') || process.env.SARDIS_WALLET_ID || '',
108
+ chain: readArgValue(argv, 'chain') || process.env.SARDIS_CHAIN || 'base_sepolia',
109
+ output,
110
+ issueCard,
111
+ };
112
+ }
113
+ async function apiRequestWithKey(apiUrl, apiKey, method, route, body) {
114
+ const response = await fetch(`${apiUrl}${route}`, {
115
+ method,
116
+ headers: {
117
+ 'X-API-Key': apiKey,
118
+ 'Content-Type': 'application/json',
119
+ 'User-Agent': 'sardis-mcp-server/0.1.0',
120
+ },
121
+ body: body ? JSON.stringify(body) : undefined,
122
+ });
123
+ if (!response.ok) {
124
+ const errorBody = await response.text();
125
+ throw new Error(`${method} ${route} failed (${response.status}): ${errorBody}`);
126
+ }
127
+ return response.json();
128
+ }
129
+ async function upsertEnvFile(filePath, updates) {
130
+ let existing = '';
131
+ try {
132
+ existing = await fs.readFile(filePath, 'utf8');
133
+ }
134
+ catch {
135
+ existing = '';
136
+ }
137
+ const lineMap = new Map();
138
+ for (const line of existing.split('\n')) {
139
+ const trimmed = line.trim();
140
+ if (!trimmed || trimmed.startsWith('#') || !trimmed.includes('=')) {
141
+ continue;
142
+ }
143
+ const idx = trimmed.indexOf('=');
144
+ const key = trimmed.slice(0, idx).trim();
145
+ const value = trimmed.slice(idx + 1).trim();
146
+ lineMap.set(key, value);
147
+ }
148
+ for (const [key, value] of Object.entries(updates)) {
149
+ lineMap.set(key, value);
150
+ }
151
+ const output = [
152
+ '# Sardis MCP bootstrap configuration',
153
+ '# Generated by: npx @sardis/mcp-server init',
154
+ '',
155
+ ];
156
+ for (const key of Array.from(lineMap.keys()).sort()) {
157
+ output.push(`${key}=${lineMap.get(key) || ''}`);
158
+ }
159
+ output.push('');
160
+ await fs.writeFile(filePath, output.join('\n'), 'utf8');
161
+ }
162
+ function randomId(prefix) {
163
+ return `${prefix}_${Math.random().toString(36).slice(2, 10)}${Date.now().toString(36).slice(-4)}`;
164
+ }
165
+ async function runInit(argv) {
166
+ const options = parseInitOptions(argv);
167
+ const outputFile = path.resolve(process.cwd(), options.output);
168
+ let agentId = options.agentId;
169
+ let walletId = options.walletId;
170
+ let chain = options.chain;
171
+ let cardId = null;
172
+ const warnings = [];
173
+ if (options.mode === 'live' && options.apiKey) {
174
+ try {
175
+ if (options.paymentIdentity) {
176
+ const identity = await apiRequestWithKey(options.apiUrl, options.apiKey, 'GET', `/api/v2/agents/payment-identities/${encodeURIComponent(options.paymentIdentity)}`);
177
+ agentId = agentId || identity.agent_id || '';
178
+ walletId = walletId || identity.wallet_id || '';
179
+ if (identity.chain && !readArgValue(argv, 'chain') && !process.env.SARDIS_CHAIN) {
180
+ chain = identity.chain;
181
+ }
182
+ }
183
+ if (!agentId) {
184
+ const createdAgent = await apiRequestWithKey(options.apiUrl, options.apiKey, 'POST', '/api/v2/agents', {
185
+ name: options.agentName,
186
+ create_wallet: false,
187
+ });
188
+ agentId = createdAgent.agent_id || createdAgent.id || '';
189
+ }
190
+ if (!walletId && agentId) {
191
+ const createdWallet = await apiRequestWithKey(options.apiUrl, options.apiKey, 'POST', '/api/v2/wallets', {
192
+ agent_id: agentId,
193
+ mpc_provider: 'turnkey',
194
+ currency: 'USDC',
195
+ });
196
+ walletId = createdWallet.wallet_id || createdWallet.id || '';
197
+ }
198
+ if (options.issueCard && walletId) {
199
+ const createdCard = await apiRequestWithKey(options.apiUrl, options.apiKey, 'POST', '/api/v2/cards', {
200
+ wallet_id: walletId,
201
+ });
202
+ cardId = createdCard.card_id || createdCard.id || null;
203
+ }
204
+ }
205
+ catch (error) {
206
+ warnings.push(error instanceof Error ? error.message : 'Live provisioning failed');
207
+ }
208
+ }
209
+ if (!agentId) {
210
+ agentId = options.mode === 'live' ? randomId('agent') : 'agent_simulated';
211
+ }
212
+ if (!walletId) {
213
+ walletId = options.mode === 'live' ? randomId('wallet') : 'wallet_simulated';
214
+ }
215
+ await upsertEnvFile(outputFile, {
216
+ SARDIS_API_KEY: options.apiKey,
217
+ SARDIS_API_URL: options.apiUrl,
218
+ SARDIS_AGENT_ID: agentId,
219
+ SARDIS_WALLET_ID: walletId,
220
+ SARDIS_CHAIN: chain,
221
+ SARDIS_MODE: options.mode,
222
+ SARDIS_PAYMENT_IDENTITY: options.paymentIdentity,
223
+ });
224
+ console.log('Sardis MCP initialization complete.');
225
+ console.log(`Config file: ${outputFile}`);
226
+ console.log(`Mode: ${options.mode}`);
227
+ console.log(`Agent ID: ${agentId}`);
228
+ console.log(`Wallet ID: ${walletId}`);
229
+ console.log(`Chain: ${chain}`);
230
+ if (cardId) {
231
+ console.log(`Card ID: ${cardId}`);
232
+ }
233
+ if (!options.apiKey) {
234
+ console.log('Note: SARDIS_API_KEY is empty. Set it before live API usage.');
235
+ }
236
+ if (warnings.length > 0) {
237
+ console.log('');
238
+ console.log('Warnings:');
239
+ for (const warning of warnings) {
240
+ console.log(`- ${warning}`);
241
+ }
242
+ }
243
+ }
244
+ async function main() {
245
+ if (args.includes('--help') || args.includes('-h')) {
246
+ printHelp();
247
+ process.exit(0);
248
+ }
249
+ if (args.includes('--version') || args.includes('-v')) {
250
+ printVersion();
251
+ process.exit(0);
252
+ }
253
+ if (args[0] === 'init') {
254
+ await runInit(args.slice(1));
255
+ process.exit(0);
256
+ }
257
+ if (args[0] === 'start' || args.length === 0) {
258
+ console.error('Sardis MCP Server v0.1.0 starting...');
259
+ console.error('Mode: ' + (process.env.SARDIS_MODE || 'simulated'));
260
+ console.error('Tools: 36 tools across 8 categories');
261
+ console.error('Ready. Waiting for MCP client connection...');
262
+ await runServer();
263
+ }
264
+ else {
265
+ console.error(`Unknown command: ${args[0]}`);
266
+ console.error('Run "npx @sardis/mcp-server --help" for usage.');
267
+ process.exit(1);
268
+ }
269
+ }
270
+ main().catch((error) => {
271
+ console.error('Fatal error:', error);
272
+ process.exit(1);
273
+ });
274
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * MCP Server Configuration
3
+ *
4
+ * Loads configuration from environment variables with sensible defaults.
5
+ * Supports both live and simulated modes for development.
6
+ */
7
+ export interface MCPConfig {
8
+ apiKey: string;
9
+ apiUrl: string;
10
+ walletId: string;
11
+ agentId: string;
12
+ chain: string;
13
+ mode: 'live' | 'simulated';
14
+ policyBlockedVendors: string[];
15
+ policyAllowedVendors: string[];
16
+ fetchAgentPolicy: boolean;
17
+ requireExplicitApproval: boolean;
18
+ }
19
+ /**
20
+ * Load configuration from environment variables
21
+ */
22
+ export declare function loadConfig(): MCPConfig;
23
+ /**
24
+ * Get the global configuration instance
25
+ */
26
+ export declare function getConfig(): MCPConfig;
27
+ /**
28
+ * Reset configuration (for testing)
29
+ */
30
+ export declare function resetConfig(): void;
31
+ /**
32
+ * Get blocked vendors list
33
+ */
34
+ export declare function getBlockedVendors(): string[];
35
+ /**
36
+ * Get allowed vendors list
37
+ */
38
+ export declare function getAllowedVendors(): string[];
39
+ /**
40
+ * Check if vendor is blocked
41
+ */
42
+ export declare function isVendorBlocked(vendor: string): boolean;
43
+ /**
44
+ * Check if vendor is explicitly allowed
45
+ */
46
+ export declare function isVendorAllowed(vendor: string): boolean;
47
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,SAAS;IAExB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAGf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAGhB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAG3B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAqCtC;AAKD;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAKrC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGvD"}
package/dist/config.js ADDED
@@ -0,0 +1,82 @@
1
+ /**
2
+ * MCP Server Configuration
3
+ *
4
+ * Loads configuration from environment variables with sensible defaults.
5
+ * Supports both live and simulated modes for development.
6
+ */
7
+ /**
8
+ * Load configuration from environment variables
9
+ */
10
+ export function loadConfig() {
11
+ // Parse comma-separated vendor lists from environment
12
+ const parseVendorList = (envVar, defaults) => {
13
+ if (!envVar)
14
+ return defaults;
15
+ return envVar.split(',').map((v) => v.trim().toLowerCase()).filter(Boolean);
16
+ };
17
+ // Default blocked vendors (can be overridden)
18
+ const defaultBlockedVendors = ['amazon', 'ebay', 'aliexpress', 'wish'];
19
+ // Default allowed SaaS vendors (can be overridden)
20
+ const defaultAllowedVendors = [
21
+ 'openai', 'anthropic', 'aws', 'gcp', 'azure', 'vercel',
22
+ 'supabase', 'stripe', 'github', 'netlify', 'cloudflare',
23
+ 'mongodb', 'redis', 'postgresql', 'datadog', 'sentry',
24
+ ];
25
+ return {
26
+ apiKey: process.env.SARDIS_API_KEY || '',
27
+ apiUrl: (process.env.SARDIS_API_URL || 'https://api.sardis.network').replace(/\/$/, ''),
28
+ walletId: process.env.SARDIS_WALLET_ID || '',
29
+ agentId: process.env.SARDIS_AGENT_ID || '',
30
+ chain: process.env.SARDIS_CHAIN || 'base_sepolia',
31
+ mode: (process.env.SARDIS_MODE || 'simulated'),
32
+ // Policy configuration from environment
33
+ policyBlockedVendors: parseVendorList(process.env.SARDIS_POLICY_BLOCKED_VENDORS, defaultBlockedVendors),
34
+ policyAllowedVendors: parseVendorList(process.env.SARDIS_POLICY_ALLOWED_VENDORS, defaultAllowedVendors),
35
+ fetchAgentPolicy: process.env.SARDIS_FETCH_AGENT_POLICY === 'true',
36
+ requireExplicitApproval: process.env.SARDIS_REQUIRE_EXPLICIT_APPROVAL === 'true',
37
+ };
38
+ }
39
+ // Global config instance
40
+ let _config = null;
41
+ /**
42
+ * Get the global configuration instance
43
+ */
44
+ export function getConfig() {
45
+ if (!_config) {
46
+ _config = loadConfig();
47
+ }
48
+ return _config;
49
+ }
50
+ /**
51
+ * Reset configuration (for testing)
52
+ */
53
+ export function resetConfig() {
54
+ _config = null;
55
+ }
56
+ /**
57
+ * Get blocked vendors list
58
+ */
59
+ export function getBlockedVendors() {
60
+ return getConfig().policyBlockedVendors;
61
+ }
62
+ /**
63
+ * Get allowed vendors list
64
+ */
65
+ export function getAllowedVendors() {
66
+ return getConfig().policyAllowedVendors;
67
+ }
68
+ /**
69
+ * Check if vendor is blocked
70
+ */
71
+ export function isVendorBlocked(vendor) {
72
+ const normalized = vendor.toLowerCase().trim();
73
+ return getBlockedVendors().some((b) => normalized.includes(b));
74
+ }
75
+ /**
76
+ * Check if vendor is explicitly allowed
77
+ */
78
+ export function isVendorAllowed(vendor) {
79
+ const normalized = vendor.toLowerCase().trim();
80
+ return getAllowedVendors().some((a) => normalized.includes(a));
81
+ }
82
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Sardis MCP Server
3
+ *
4
+ * Model Context Protocol server that exposes Sardis payment capabilities
5
+ * to AI agents running in Claude Desktop, Cursor, and other MCP-compatible clients.
6
+ *
7
+ * Tools:
8
+ * - Wallet: sardis_get_wallet, sardis_get_balance
9
+ * - Payments: sardis_pay, sardis_get_transaction, sardis_list_transactions
10
+ * - Policy: sardis_check_policy, sardis_validate_limits, sardis_check_compliance
11
+ * - Holds: sardis_create_hold, sardis_capture_hold, sardis_void_hold, sardis_get_hold, sardis_list_holds, sardis_extend_hold
12
+ * - Agents: sardis_create_agent, sardis_get_agent, sardis_list_agents, sardis_update_agent
13
+ *
14
+ * Environment Variables:
15
+ * - SARDIS_API_KEY: API key for Sardis API (required)
16
+ * - SARDIS_API_URL: API base URL (default: https://api.sardis.network)
17
+ * - SARDIS_WALLET_ID: Default wallet ID
18
+ * - SARDIS_AGENT_ID: Agent ID for attribution
19
+ * - SARDIS_CHAIN: Default chain (default: base_sepolia)
20
+ * - SARDIS_MODE: 'live' or 'simulated' (default: simulated)
21
+ * - SARDIS_POLICY_BLOCKED_VENDORS: Comma-separated blocked vendors
22
+ * - SARDIS_POLICY_ALLOWED_VENDORS: Comma-separated allowed vendors
23
+ * - SARDIS_REQUIRE_EXPLICIT_APPROVAL: Require explicit vendor approval (default: false)
24
+ */
25
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
26
+ export declare function createServer(): Promise<Server<{
27
+ method: string;
28
+ params?: {
29
+ [x: string]: unknown;
30
+ _meta?: {
31
+ [x: string]: unknown;
32
+ progressToken?: string | number | undefined;
33
+ "io.modelcontextprotocol/related-task"?: {
34
+ taskId: string;
35
+ } | undefined;
36
+ } | undefined;
37
+ } | undefined;
38
+ }, {
39
+ method: string;
40
+ params?: {
41
+ [x: string]: unknown;
42
+ _meta?: {
43
+ [x: string]: unknown;
44
+ progressToken?: string | number | undefined;
45
+ "io.modelcontextprotocol/related-task"?: {
46
+ taskId: string;
47
+ } | undefined;
48
+ } | undefined;
49
+ } | undefined;
50
+ }, {
51
+ [x: string]: unknown;
52
+ _meta?: {
53
+ [x: string]: unknown;
54
+ progressToken?: string | number | undefined;
55
+ "io.modelcontextprotocol/related-task"?: {
56
+ taskId: string;
57
+ } | undefined;
58
+ } | undefined;
59
+ }>>;
60
+ export declare function runServer(): Promise<void>;
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAiBnE,wBAAsB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuOjC;AAED,wBAAsB,SAAS,kBAc9B"}