@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.
- package/CHANGELOG.md +69 -0
- package/CLAUDE_DESKTOP_CONFIG.md +180 -0
- package/LICENSE +21 -0
- package/README.md +375 -0
- package/dist/api.d.ts +25 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +70 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +274 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +82 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +255 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/agents.d.ts +7 -0
- package/dist/tools/agents.d.ts.map +1 -0
- package/dist/tools/agents.js +219 -0
- package/dist/tools/agents.js.map +1 -0
- package/dist/tools/approvals.d.ts +9 -0
- package/dist/tools/approvals.d.ts.map +1 -0
- package/dist/tools/approvals.js +308 -0
- package/dist/tools/approvals.js.map +1 -0
- package/dist/tools/cards.d.ts +9 -0
- package/dist/tools/cards.d.ts.map +1 -0
- package/dist/tools/cards.js +415 -0
- package/dist/tools/cards.js.map +1 -0
- package/dist/tools/fiat.d.ts +9 -0
- package/dist/tools/fiat.d.ts.map +1 -0
- package/dist/tools/fiat.js +394 -0
- package/dist/tools/fiat.js.map +1 -0
- package/dist/tools/holds.d.ts +7 -0
- package/dist/tools/holds.d.ts.map +1 -0
- package/dist/tools/holds.js +403 -0
- package/dist/tools/holds.js.map +1 -0
- package/dist/tools/index.d.ts +70 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +152 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/payments.d.ts +47 -0
- package/dist/tools/payments.d.ts.map +1 -0
- package/dist/tools/payments.js +447 -0
- package/dist/tools/payments.js.map +1 -0
- package/dist/tools/policy.d.ts +41 -0
- package/dist/tools/policy.d.ts.map +1 -0
- package/dist/tools/policy.js +450 -0
- package/dist/tools/policy.js.map +1 -0
- package/dist/tools/spending.d.ts +9 -0
- package/dist/tools/spending.d.ts.map +1 -0
- package/dist/tools/spending.js +324 -0
- package/dist/tools/spending.js.map +1 -0
- package/dist/tools/types.d.ts +247 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +71 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/wallet-management.d.ts +9 -0
- package/dist/tools/wallet-management.d.ts.map +1 -0
- package/dist/tools/wallet-management.js +222 -0
- package/dist/tools/wallet-management.js.map +1 -0
- package/dist/tools/wallets.d.ts +15 -0
- package/dist/tools/wallets.d.ts.map +1 -0
- package/dist/tools/wallets.js +112 -0
- package/dist/tools/wallets.js.map +1 -0
- package/mcp.json +283 -0
- package/package.json +145 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sardis MCP Server - Policy Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools for validating payments against spending policies.
|
|
5
|
+
*/
|
|
6
|
+
import { PolicyCheckSchema, ComplianceCheckSchema } from './types.js';
|
|
7
|
+
import { apiRequest } from '../api.js';
|
|
8
|
+
import { getConfig, getBlockedVendors, getAllowedVendors } from '../config.js';
|
|
9
|
+
import { getWalletInfo } from './wallets.js';
|
|
10
|
+
function derivePolicyReasonCode(result) {
|
|
11
|
+
if (result.allowed)
|
|
12
|
+
return 'SARDIS.POLICY.ALLOW';
|
|
13
|
+
const checks = result.checks || [];
|
|
14
|
+
if (checks.some((c) => c.name === 'per_transaction_limit' && !c.passed)) {
|
|
15
|
+
return 'SARDIS.POLICY.LIMIT_EXCEEDED';
|
|
16
|
+
}
|
|
17
|
+
if (checks.some((c) => c.name === 'vendor_allowlist' && !c.passed)) {
|
|
18
|
+
return 'SARDIS.POLICY.VENDOR_BLOCKED';
|
|
19
|
+
}
|
|
20
|
+
if (checks.some((c) => c.name === 'category_check' && !c.passed)) {
|
|
21
|
+
return 'SARDIS.POLICY.CATEGORY_BLOCKED';
|
|
22
|
+
}
|
|
23
|
+
return 'SARDIS.POLICY.DENY';
|
|
24
|
+
}
|
|
25
|
+
function buildPolicyDecision(result) {
|
|
26
|
+
const config = getConfig();
|
|
27
|
+
return {
|
|
28
|
+
decision_id: `dec_pol_${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`,
|
|
29
|
+
outcome: result.allowed ? 'APPROVED' : 'BLOCKED',
|
|
30
|
+
reason_code: derivePolicyReasonCode(result),
|
|
31
|
+
reason: result.reason || (result.allowed ? 'Allowed by policy' : 'Blocked by policy'),
|
|
32
|
+
context: {
|
|
33
|
+
agent_id: config.agentId || null,
|
|
34
|
+
wallet_id: config.walletId || null,
|
|
35
|
+
chain: config.chain,
|
|
36
|
+
mode: config.mode,
|
|
37
|
+
payment_identity_id: process.env.SARDIS_PAYMENT_IDENTITY || null,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check policy via API or local validation
|
|
43
|
+
*/
|
|
44
|
+
export async function checkPolicy(vendor, amount, category) {
|
|
45
|
+
const config = getConfig();
|
|
46
|
+
const checks = [];
|
|
47
|
+
let allPassed = true;
|
|
48
|
+
try {
|
|
49
|
+
// Get wallet limits
|
|
50
|
+
const wallet = await getWalletInfo();
|
|
51
|
+
const limitPerTx = parseFloat(wallet.limit_per_tx);
|
|
52
|
+
// Per-transaction limit check
|
|
53
|
+
if (amount <= limitPerTx) {
|
|
54
|
+
checks.push({ name: 'per_transaction_limit', passed: true });
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
checks.push({
|
|
58
|
+
name: 'per_transaction_limit',
|
|
59
|
+
passed: false,
|
|
60
|
+
reason: `Amount $${amount} exceeds limit of $${limitPerTx}`,
|
|
61
|
+
});
|
|
62
|
+
allPassed = false;
|
|
63
|
+
}
|
|
64
|
+
// Wallet active check
|
|
65
|
+
if (wallet.is_active) {
|
|
66
|
+
checks.push({ name: 'wallet_active', passed: true });
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
checks.push({
|
|
70
|
+
name: 'wallet_active',
|
|
71
|
+
passed: false,
|
|
72
|
+
reason: 'Wallet is not active',
|
|
73
|
+
});
|
|
74
|
+
allPassed = false;
|
|
75
|
+
}
|
|
76
|
+
// Vendor validation using configurable lists
|
|
77
|
+
const normalizedVendor = vendor.toLowerCase().trim();
|
|
78
|
+
const blockedVendors = getBlockedVendors();
|
|
79
|
+
const allowedVendors = getAllowedVendors();
|
|
80
|
+
// SECURITY: Use exact match instead of substring to prevent bypass.
|
|
81
|
+
// Substring matching allows "aws-evil.com" to match "aws" on the allowlist,
|
|
82
|
+
// or "not-gambling-site" to match "gambling" on the blocklist.
|
|
83
|
+
const isBlocked = blockedVendors.some((b) => normalizedVendor === b.toLowerCase());
|
|
84
|
+
const isAllowed = allowedVendors.some((v) => normalizedVendor === v.toLowerCase());
|
|
85
|
+
if (isBlocked) {
|
|
86
|
+
checks.push({
|
|
87
|
+
name: 'vendor_allowlist',
|
|
88
|
+
passed: false,
|
|
89
|
+
reason: `Vendor "${vendor}" is blocked by policy`,
|
|
90
|
+
});
|
|
91
|
+
allPassed = false;
|
|
92
|
+
}
|
|
93
|
+
else if (isAllowed) {
|
|
94
|
+
checks.push({ name: 'vendor_allowlist', passed: true });
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Unknown vendor - could require approval based on config
|
|
98
|
+
if (config.requireExplicitApproval) {
|
|
99
|
+
checks.push({
|
|
100
|
+
name: 'vendor_allowlist',
|
|
101
|
+
passed: false,
|
|
102
|
+
reason: `Vendor "${vendor}" requires explicit approval`,
|
|
103
|
+
});
|
|
104
|
+
allPassed = false;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
checks.push({
|
|
108
|
+
name: 'vendor_allowlist',
|
|
109
|
+
passed: true,
|
|
110
|
+
reason: 'Vendor not blocked, implicit approval',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Category check if provided
|
|
115
|
+
if (category) {
|
|
116
|
+
const blockedCategories = (process.env.SARDIS_POLICY_BLOCKED_CATEGORIES || 'gambling,adult')
|
|
117
|
+
.split(',')
|
|
118
|
+
.map((c) => c.trim().toLowerCase());
|
|
119
|
+
if (blockedCategories.includes(category.toLowerCase())) {
|
|
120
|
+
checks.push({
|
|
121
|
+
name: 'category_check',
|
|
122
|
+
passed: false,
|
|
123
|
+
reason: `Category "${category}" is not allowed`,
|
|
124
|
+
});
|
|
125
|
+
allPassed = false;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
checks.push({ name: 'category_check', passed: true });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
allowed: allPassed,
|
|
133
|
+
reason: allPassed
|
|
134
|
+
? 'Payment allowed by policy'
|
|
135
|
+
: checks
|
|
136
|
+
.filter((c) => !c.passed)
|
|
137
|
+
.map((c) => c.reason)
|
|
138
|
+
.join('; '),
|
|
139
|
+
risk_score: allPassed ? 0.1 : 0.8,
|
|
140
|
+
checks,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
return {
|
|
145
|
+
allowed: false,
|
|
146
|
+
reason: `Policy check failed: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
147
|
+
risk_score: 1.0,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Validate payment limits only (without vendor checks)
|
|
153
|
+
*/
|
|
154
|
+
export async function validateLimits(amount) {
|
|
155
|
+
const checks = [];
|
|
156
|
+
let allPassed = true;
|
|
157
|
+
try {
|
|
158
|
+
const wallet = await getWalletInfo();
|
|
159
|
+
const limitPerTx = parseFloat(wallet.limit_per_tx);
|
|
160
|
+
const limitTotal = parseFloat(wallet.limit_total);
|
|
161
|
+
// Per-transaction limit
|
|
162
|
+
if (amount <= limitPerTx) {
|
|
163
|
+
checks.push({ name: 'per_transaction_limit', passed: true });
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
checks.push({
|
|
167
|
+
name: 'per_transaction_limit',
|
|
168
|
+
passed: false,
|
|
169
|
+
reason: `Amount $${amount} exceeds per-transaction limit of $${limitPerTx}`,
|
|
170
|
+
});
|
|
171
|
+
allPassed = false;
|
|
172
|
+
}
|
|
173
|
+
// Total limit (if we could track cumulative - for now just note it)
|
|
174
|
+
checks.push({
|
|
175
|
+
name: 'total_limit_check',
|
|
176
|
+
passed: true,
|
|
177
|
+
reason: `Daily limit: $${limitTotal}`,
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
allowed: allPassed,
|
|
181
|
+
reason: allPassed
|
|
182
|
+
? 'Within spending limits'
|
|
183
|
+
: checks
|
|
184
|
+
.filter((c) => !c.passed)
|
|
185
|
+
.map((c) => c.reason)
|
|
186
|
+
.join('; '),
|
|
187
|
+
risk_score: allPassed ? 0.1 : 0.7,
|
|
188
|
+
checks,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
return {
|
|
193
|
+
allowed: false,
|
|
194
|
+
reason: `Limit validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
195
|
+
risk_score: 1.0,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Check compliance status
|
|
201
|
+
*/
|
|
202
|
+
export async function checkCompliance(address, amount) {
|
|
203
|
+
const config = getConfig();
|
|
204
|
+
if (!config.apiKey || config.mode === 'simulated') {
|
|
205
|
+
// Simulated compliance check
|
|
206
|
+
return {
|
|
207
|
+
status: 'pass',
|
|
208
|
+
checks: [
|
|
209
|
+
{ type: 'sanctions', passed: true },
|
|
210
|
+
{ type: 'kyc', passed: true },
|
|
211
|
+
{ type: 'aml', passed: true },
|
|
212
|
+
],
|
|
213
|
+
risk_level: 'low',
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
return await apiRequest('POST', '/api/v2/compliance/check', {
|
|
218
|
+
address,
|
|
219
|
+
amount,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Fail-closed on compliance errors
|
|
224
|
+
return {
|
|
225
|
+
status: 'fail',
|
|
226
|
+
checks: [{ type: 'error', passed: false, details: 'Compliance service unavailable' }],
|
|
227
|
+
risk_level: 'high',
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Tool definitions
|
|
232
|
+
export const policyToolDefinitions = [
|
|
233
|
+
{
|
|
234
|
+
name: 'sardis_check_policy',
|
|
235
|
+
description: 'Check if a payment would be allowed by the current spending policy without executing it. Use this to validate payments before execution.',
|
|
236
|
+
inputSchema: {
|
|
237
|
+
type: 'object',
|
|
238
|
+
properties: {
|
|
239
|
+
vendor: {
|
|
240
|
+
type: 'string',
|
|
241
|
+
description: 'The merchant to check',
|
|
242
|
+
},
|
|
243
|
+
amount: {
|
|
244
|
+
type: 'number',
|
|
245
|
+
description: 'Payment amount to validate',
|
|
246
|
+
},
|
|
247
|
+
category: {
|
|
248
|
+
type: 'string',
|
|
249
|
+
description: 'Optional merchant category for additional validation',
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
required: ['vendor', 'amount'],
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: 'sardis_validate_limits',
|
|
257
|
+
description: 'Check if a payment amount is within wallet spending limits without checking vendor restrictions.',
|
|
258
|
+
inputSchema: {
|
|
259
|
+
type: 'object',
|
|
260
|
+
properties: {
|
|
261
|
+
amount: {
|
|
262
|
+
type: 'number',
|
|
263
|
+
description: 'Payment amount to validate against limits',
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
required: ['amount'],
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: 'sardis_check_compliance',
|
|
271
|
+
description: 'Run compliance checks on an address including sanctions, KYC, and AML screening.',
|
|
272
|
+
inputSchema: {
|
|
273
|
+
type: 'object',
|
|
274
|
+
properties: {
|
|
275
|
+
address: {
|
|
276
|
+
type: 'string',
|
|
277
|
+
description: 'The wallet address to check (0x...)',
|
|
278
|
+
},
|
|
279
|
+
amount: {
|
|
280
|
+
type: 'number',
|
|
281
|
+
description: 'Transaction amount for risk assessment',
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
required: ['address', 'amount'],
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
name: 'sardis_get_policies',
|
|
289
|
+
description: 'Get all active spending policies for the wallet.',
|
|
290
|
+
inputSchema: {
|
|
291
|
+
type: 'object',
|
|
292
|
+
properties: {
|
|
293
|
+
wallet_id: {
|
|
294
|
+
type: 'string',
|
|
295
|
+
description: 'Wallet ID (optional, defaults to configured wallet)',
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
required: [],
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
// SECURITY: sardis_get_rules has been removed from agent-facing tools.
|
|
302
|
+
// Exposing the full policy ruleset (vendor allowlists, blocklists, limits,
|
|
303
|
+
// approval thresholds) to AI agents enables prompt-injected agents to
|
|
304
|
+
// craft requests that precisely bypass policy boundaries.
|
|
305
|
+
// Policy rules are accessible only via the admin API.
|
|
306
|
+
];
|
|
307
|
+
// Tool handlers
|
|
308
|
+
export const policyToolHandlers = {
|
|
309
|
+
sardis_check_policy: async (args) => {
|
|
310
|
+
const parsed = PolicyCheckSchema.safeParse(args);
|
|
311
|
+
if (!parsed.success) {
|
|
312
|
+
return {
|
|
313
|
+
content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
|
|
314
|
+
isError: true,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
const { vendor, amount, category } = parsed.data;
|
|
318
|
+
const result = await checkPolicy(vendor, amount, category);
|
|
319
|
+
const decision = buildPolicyDecision(result);
|
|
320
|
+
return {
|
|
321
|
+
content: [
|
|
322
|
+
{
|
|
323
|
+
type: 'text',
|
|
324
|
+
text: JSON.stringify({
|
|
325
|
+
vendor,
|
|
326
|
+
amount,
|
|
327
|
+
category: category || 'unspecified',
|
|
328
|
+
allowed: result.allowed,
|
|
329
|
+
reason: result.reason,
|
|
330
|
+
reason_code: decision.reason_code,
|
|
331
|
+
risk_score: result.risk_score,
|
|
332
|
+
checks: result.checks,
|
|
333
|
+
decision,
|
|
334
|
+
}, null, 2),
|
|
335
|
+
},
|
|
336
|
+
],
|
|
337
|
+
};
|
|
338
|
+
},
|
|
339
|
+
sardis_validate_limits: async (args) => {
|
|
340
|
+
const parsed = PolicyCheckSchema.pick({ amount: true }).safeParse(args);
|
|
341
|
+
if (!parsed.success) {
|
|
342
|
+
return {
|
|
343
|
+
content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
|
|
344
|
+
isError: true,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
const result = await validateLimits(parsed.data.amount);
|
|
348
|
+
return {
|
|
349
|
+
content: [
|
|
350
|
+
{
|
|
351
|
+
type: 'text',
|
|
352
|
+
text: JSON.stringify({
|
|
353
|
+
amount: parsed.data.amount,
|
|
354
|
+
within_limits: result.allowed,
|
|
355
|
+
reason: result.reason,
|
|
356
|
+
checks: result.checks,
|
|
357
|
+
}, null, 2),
|
|
358
|
+
},
|
|
359
|
+
],
|
|
360
|
+
};
|
|
361
|
+
},
|
|
362
|
+
sardis_check_compliance: async (args) => {
|
|
363
|
+
const parsed = ComplianceCheckSchema.safeParse(args);
|
|
364
|
+
if (!parsed.success) {
|
|
365
|
+
return {
|
|
366
|
+
content: [{ type: 'text', text: `Invalid request: ${parsed.error.message}` }],
|
|
367
|
+
isError: true,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
const result = await checkCompliance(parsed.data.address, parsed.data.amount);
|
|
371
|
+
return {
|
|
372
|
+
content: [
|
|
373
|
+
{
|
|
374
|
+
type: 'text',
|
|
375
|
+
text: JSON.stringify({
|
|
376
|
+
address: parsed.data.address,
|
|
377
|
+
amount: parsed.data.amount,
|
|
378
|
+
status: result.status,
|
|
379
|
+
risk_level: result.risk_level,
|
|
380
|
+
checks: result.checks,
|
|
381
|
+
}, null, 2),
|
|
382
|
+
},
|
|
383
|
+
],
|
|
384
|
+
};
|
|
385
|
+
},
|
|
386
|
+
sardis_get_policies: async (args) => {
|
|
387
|
+
const config = getConfig();
|
|
388
|
+
const walletId = typeof args === 'object' && args !== null && 'wallet_id' in args
|
|
389
|
+
? args.wallet_id || config.walletId
|
|
390
|
+
: config.walletId;
|
|
391
|
+
if (!config.apiKey || config.mode === 'simulated') {
|
|
392
|
+
return {
|
|
393
|
+
content: [{
|
|
394
|
+
type: 'text',
|
|
395
|
+
text: JSON.stringify({
|
|
396
|
+
wallet_id: walletId,
|
|
397
|
+
policies: [{
|
|
398
|
+
id: 'policy_default',
|
|
399
|
+
name: 'Default Spending Policy',
|
|
400
|
+
max_per_tx: '100.00',
|
|
401
|
+
max_daily: '500.00',
|
|
402
|
+
max_monthly: '5000.00',
|
|
403
|
+
is_active: true,
|
|
404
|
+
created_at: new Date().toISOString(),
|
|
405
|
+
}],
|
|
406
|
+
}, null, 2),
|
|
407
|
+
}],
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
try {
|
|
411
|
+
const wallet = await getWalletInfo();
|
|
412
|
+
return {
|
|
413
|
+
content: [{
|
|
414
|
+
type: 'text',
|
|
415
|
+
text: JSON.stringify({
|
|
416
|
+
wallet_id: wallet.id,
|
|
417
|
+
policies: [{
|
|
418
|
+
id: 'policy_active',
|
|
419
|
+
name: 'Active Policy',
|
|
420
|
+
max_per_tx: wallet.limit_per_tx,
|
|
421
|
+
max_daily: wallet.limit_total,
|
|
422
|
+
is_active: wallet.is_active,
|
|
423
|
+
}],
|
|
424
|
+
}, null, 2),
|
|
425
|
+
}],
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
return {
|
|
430
|
+
content: [{
|
|
431
|
+
type: 'text',
|
|
432
|
+
text: `Failed to get policies: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
433
|
+
}],
|
|
434
|
+
isError: true,
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
// SECURITY: sardis_get_rules handler removed — see tool definition comment above.
|
|
439
|
+
sardis_get_rules: async (_args) => ({
|
|
440
|
+
content: [{
|
|
441
|
+
type: 'text',
|
|
442
|
+
text: JSON.stringify({
|
|
443
|
+
error: 'Policy rule details are not available to AI agents for security reasons. '
|
|
444
|
+
+ 'Use sardis_check_policy to verify if a specific payment would be allowed.',
|
|
445
|
+
}),
|
|
446
|
+
}],
|
|
447
|
+
isError: true,
|
|
448
|
+
}),
|
|
449
|
+
};
|
|
450
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/tools/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spending Reports tools for MCP server
|
|
3
|
+
*
|
|
4
|
+
* Tools for getting spending analytics and reports.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolDefinition, ToolHandler } from './types.js';
|
|
7
|
+
export declare const spendingToolDefinitions: ToolDefinition[];
|
|
8
|
+
export declare const spendingToolHandlers: Record<string, ToolHandler>;
|
|
9
|
+
//# sourceMappingURL=spending.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spending.d.ts","sourceRoot":"","sources":["../../src/tools/spending.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAuD1E,eAAO,MAAM,uBAAuB,EAAE,cAAc,EAoFnD,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAoO5D,CAAC"}
|