@azeth/mcp-server 0.2.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/LICENSE +21 -0
- package/README.md +141 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/account.d.ts +4 -0
- package/dist/tools/account.d.ts.map +1 -0
- package/dist/tools/account.js +640 -0
- package/dist/tools/account.js.map +1 -0
- package/dist/tools/agreements.d.ts +4 -0
- package/dist/tools/agreements.d.ts.map +1 -0
- package/dist/tools/agreements.js +865 -0
- package/dist/tools/agreements.js.map +1 -0
- package/dist/tools/guardian-approval.d.ts +4 -0
- package/dist/tools/guardian-approval.d.ts.map +1 -0
- package/dist/tools/guardian-approval.js +319 -0
- package/dist/tools/guardian-approval.js.map +1 -0
- package/dist/tools/guardian.d.ts +4 -0
- package/dist/tools/guardian.d.ts.map +1 -0
- package/dist/tools/guardian.js +267 -0
- package/dist/tools/guardian.js.map +1 -0
- package/dist/tools/messaging.d.ts +4 -0
- package/dist/tools/messaging.d.ts.map +1 -0
- package/dist/tools/messaging.js +353 -0
- package/dist/tools/messaging.js.map +1 -0
- package/dist/tools/payments.d.ts +14 -0
- package/dist/tools/payments.d.ts.map +1 -0
- package/dist/tools/payments.js +723 -0
- package/dist/tools/payments.js.map +1 -0
- package/dist/tools/registry.d.ts +4 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +608 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/reputation.d.ts +4 -0
- package/dist/tools/reputation.d.ts.map +1 -0
- package/dist/tools/reputation.js +433 -0
- package/dist/tools/reputation.js.map +1 -0
- package/dist/tools/transfer.d.ts +4 -0
- package/dist/tools/transfer.d.ts.map +1 -0
- package/dist/tools/transfer.js +181 -0
- package/dist/tools/transfer.js.map +1 -0
- package/dist/utils/client.d.ts +25 -0
- package/dist/utils/client.d.ts.map +1 -0
- package/dist/utils/client.js +100 -0
- package/dist/utils/client.js.map +1 -0
- package/dist/utils/error-selectors.d.ts +23 -0
- package/dist/utils/error-selectors.d.ts.map +1 -0
- package/dist/utils/error-selectors.js +159 -0
- package/dist/utils/error-selectors.js.map +1 -0
- package/dist/utils/rate-limit.d.ts +17 -0
- package/dist/utils/rate-limit.d.ts.map +1 -0
- package/dist/utils/rate-limit.js +75 -0
- package/dist/utils/rate-limit.js.map +1 -0
- package/dist/utils/resolve.d.ts +38 -0
- package/dist/utils/resolve.d.ts.map +1 -0
- package/dist/utils/resolve.js +308 -0
- package/dist/utils/resolve.js.map +1 -0
- package/dist/utils/response.d.ts +42 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +257 -0
- package/dist/utils/response.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { AzethError, formatTokenAmount } from '@azeth/common';
|
|
2
|
+
import { decodeErrorSelector } from './error-selectors.js';
|
|
3
|
+
/** Format a successful tool result for MCP */
|
|
4
|
+
export function success(data, meta) {
|
|
5
|
+
const result = {
|
|
6
|
+
success: true,
|
|
7
|
+
data,
|
|
8
|
+
meta: {
|
|
9
|
+
...meta,
|
|
10
|
+
timestamp: new Date().toISOString(),
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
content: [{ type: 'text', text: JSON.stringify(result, bigintReplacer, 2) }],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Format an error tool result for MCP */
|
|
18
|
+
export function error(code, message, suggestion) {
|
|
19
|
+
const result = {
|
|
20
|
+
success: false,
|
|
21
|
+
error: { code, message, suggestion },
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
25
|
+
isError: true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Strip URLs, hex data, IP addresses, credentials, file paths, bearer tokens, and internal IDs from error messages */
|
|
29
|
+
function sanitizeErrorMessage(message) {
|
|
30
|
+
return message
|
|
31
|
+
.replace(/https?:\/\/[^\s)]+/g, '[redacted-url]')
|
|
32
|
+
.replace(/0x[0-9a-fA-F]{64,}/g, '[redacted-hex]')
|
|
33
|
+
// Standalone hex strings 32+ chars (e.g., XMTP InboxIDs without 0x prefix)
|
|
34
|
+
.replace(/\b[0-9a-fA-F]{32,}\b/g, '[redacted-id]')
|
|
35
|
+
.replace(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?\b/g, '[redacted-ip]')
|
|
36
|
+
// Catch bare hostnames from DNS errors (e.g., "ENOTFOUND api.example.invalid")
|
|
37
|
+
.replace(/\b(?:ENOTFOUND|ECONNREFUSED|ETIMEDOUT|ECONNRESET|EHOSTUNREACH)\s+\S+/g, '[network-error]')
|
|
38
|
+
.replace(/(?:api[_-]?key|token|secret|password|auth)\s*[:=]\s*\S+/gi, '[redacted-credential]')
|
|
39
|
+
// M-8: Additional sanitization patterns
|
|
40
|
+
.replace(/\/(?:Users|home|root|var|tmp|etc)\/[^\s"')]+/g, '[redacted-path]')
|
|
41
|
+
.replace(/[Bb]earer\s+[A-Za-z0-9\-._~+/]+=*/g, '[redacted-bearer]')
|
|
42
|
+
.replace(/-----BEGIN[A-Z ]*PRIVATE KEY-----[\s\S]*?-----END[A-Z ]*PRIVATE KEY-----/g, '[redacted-private-key]');
|
|
43
|
+
}
|
|
44
|
+
/** Convert an unknown error into a structured MCP error response */
|
|
45
|
+
export function handleError(err) {
|
|
46
|
+
if (err instanceof AzethError) {
|
|
47
|
+
// Defensive: if the AzethError message contains a known contract error selector
|
|
48
|
+
// (e.g., from a bundler wrapping the revert data as text), upgrade the response
|
|
49
|
+
// with the decoded human-readable message.
|
|
50
|
+
const decoded = decodeErrorSelector(err.message);
|
|
51
|
+
if (decoded) {
|
|
52
|
+
return error(err.code, decoded, getSuggestion(err.code, err.details));
|
|
53
|
+
}
|
|
54
|
+
return error(err.code, sanitizeErrorMessage(err.message), getSuggestion(err.code, err.details));
|
|
55
|
+
}
|
|
56
|
+
if (err instanceof Error) {
|
|
57
|
+
// Attempt to decode contract revert selectors from the error message
|
|
58
|
+
const decoded = decodeErrorSelector(err.message);
|
|
59
|
+
if (decoded) {
|
|
60
|
+
return error('CONTRACT_ERROR', decoded, getSuggestion('CONTRACT_ERROR'));
|
|
61
|
+
}
|
|
62
|
+
return error('UNKNOWN_ERROR', sanitizeErrorMessage(err.message));
|
|
63
|
+
}
|
|
64
|
+
// M-8: Sanitize the String(err) fallback to prevent leaking sensitive data from non-Error objects
|
|
65
|
+
const stringified = String(err);
|
|
66
|
+
const decoded = decodeErrorSelector(stringified);
|
|
67
|
+
if (decoded) {
|
|
68
|
+
return error('CONTRACT_ERROR', decoded, getSuggestion('CONTRACT_ERROR'));
|
|
69
|
+
}
|
|
70
|
+
return error('UNKNOWN_ERROR', sanitizeErrorMessage(stringified));
|
|
71
|
+
}
|
|
72
|
+
/** Provide helpful suggestions for known error codes */
|
|
73
|
+
function getSuggestion(code, details) {
|
|
74
|
+
switch (code) {
|
|
75
|
+
case 'BUDGET_EXCEEDED':
|
|
76
|
+
return 'Reduce the transaction amount or increase your daily spending limit via the guardian.';
|
|
77
|
+
case 'GUARDIAN_REJECTED': {
|
|
78
|
+
const reason = details?.reason;
|
|
79
|
+
switch (reason) {
|
|
80
|
+
case 'EXCEEDS_TX_LIMIT':
|
|
81
|
+
return `Single transaction exceeds per-tx USD limit${details?.maxTxAmountUSD ? ` (${String(details.maxTxAmountUSD)})` : ''}. Split into smaller amounts.`;
|
|
82
|
+
case 'EXCEEDS_DAILY_LIMIT':
|
|
83
|
+
return `Would push daily spend past limit${details?.dailySpendLimitUSD ? ` (${String(details.dailySpendLimitUSD)})` : ''}${details?.dailySpentUSD ? `. Already spent: ${String(details.dailySpentUSD)}` : ''}. Wait until tomorrow or increase limit via guardian.`;
|
|
84
|
+
case 'TARGET_NOT_WHITELISTED':
|
|
85
|
+
return 'Target is not in the whitelist. Add via setTokenWhitelist or setProtocolWhitelist.';
|
|
86
|
+
case 'ORACLE_STALE':
|
|
87
|
+
return 'Chainlink price oracle is stale — this is common on testnet (Base Sepolia). Options: (1) use ETH transfers instead of USDC, (2) add a guardian co-signature, or (3) switch to Base mainnet where oracles update regularly.';
|
|
88
|
+
default:
|
|
89
|
+
return 'Blocked by guardian guardrails. Check error details for the specific reason.';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
case 'INSUFFICIENT_BALANCE':
|
|
93
|
+
return details?.balance !== undefined
|
|
94
|
+
? `Current balance: ${String(details.balance)}. Fund your account before retrying.`
|
|
95
|
+
: 'Fund your account before retrying.';
|
|
96
|
+
case 'SESSION_EXPIRED':
|
|
97
|
+
return 'Create a new session key or re-authenticate.';
|
|
98
|
+
case 'PAYMENT_FAILED': {
|
|
99
|
+
const operation = details?.operation;
|
|
100
|
+
switch (operation) {
|
|
101
|
+
case 'agreement_execution':
|
|
102
|
+
return 'Agreement execution failed. Check payer balance and agreement status with azeth_get_agreement.';
|
|
103
|
+
case 'agreement_creation':
|
|
104
|
+
return 'Failed to create agreement. Verify payee address and ensure the PaymentAgreementModule is installed.';
|
|
105
|
+
case 'agreement_cancel':
|
|
106
|
+
return 'Only the payer (creator) can cancel an agreement.';
|
|
107
|
+
case 'smart_account_x402':
|
|
108
|
+
return 'Smart account x402 payment failed. Common causes: (1) Chainlink oracle stale on testnet — try Base mainnet or ETH transfers, (2) USDC not in token whitelist — use azeth_whitelist_token, (3) insufficient smart account USDC — use azeth_deposit, (4) daily spend limit reached — check with azeth_get_guardrails.';
|
|
109
|
+
default:
|
|
110
|
+
return 'Ensure you have sufficient USDC balance for x402 payments.';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
case 'AGREEMENT_NOT_FOUND':
|
|
114
|
+
return 'Check the agreement ID with azeth_list_agreements. The agreement may have been created under a different account.';
|
|
115
|
+
case 'SERVICE_NOT_FOUND':
|
|
116
|
+
return 'Check the service name or try broader discovery parameters.';
|
|
117
|
+
case 'REGISTRY_ERROR':
|
|
118
|
+
return 'The trust registry may be temporarily unavailable. Retry shortly.';
|
|
119
|
+
case 'CONTRACT_ERROR': {
|
|
120
|
+
const aaCode = details?.aaErrorCode;
|
|
121
|
+
if (aaCode) {
|
|
122
|
+
const aaHints = {
|
|
123
|
+
AA21: 'AA21 — account does not exist or is not deployed. Use azeth_create_account first.',
|
|
124
|
+
AA23: 'AA23 — gas estimation failed (possible overflow or contract revert). Check transaction parameters.',
|
|
125
|
+
AA24: 'AA24 — signature validation failed. Check that the signer matches the account owner.',
|
|
126
|
+
AA25: 'AA25 — invalid nonce. The account nonce may be out of sync — retry the operation.',
|
|
127
|
+
AA26: 'AA26 — verificationGasLimit too low. The operation requires more gas than estimated. Retry the operation.',
|
|
128
|
+
};
|
|
129
|
+
return aaHints[aaCode] ?? `ERC-4337 error ${aaCode}. Check bundler logs for details.`;
|
|
130
|
+
}
|
|
131
|
+
return 'On-chain contract execution failed. Check the error details for the specific revert reason.';
|
|
132
|
+
}
|
|
133
|
+
case 'ACCOUNT_NOT_FOUND':
|
|
134
|
+
return 'No account with that name or address was found. Use azeth_accounts to list your accounts, or azeth_discover_services to find registered participants.';
|
|
135
|
+
case 'NETWORK_ERROR': {
|
|
136
|
+
const cause = details?.cause;
|
|
137
|
+
if (cause === 'xmtp') {
|
|
138
|
+
const origErr = details?.originalError;
|
|
139
|
+
if (origErr && /installat/i.test(origErr)) {
|
|
140
|
+
return 'XMTP installation limit reached. Revoke old installations or use a different identity.';
|
|
141
|
+
}
|
|
142
|
+
return 'XMTP messaging is unavailable. Verify XMTP_ENV and XMTP_ENCRYPTION_KEY are set correctly.';
|
|
143
|
+
}
|
|
144
|
+
if (cause === 'dns')
|
|
145
|
+
return 'DNS resolution failed. Check your network connection and verify the hostname is correct.';
|
|
146
|
+
if (cause === 'server')
|
|
147
|
+
return 'Azeth server is unreachable. Check AZETH_SERVER_URL or retry later.';
|
|
148
|
+
if (cause === 'bundler')
|
|
149
|
+
return 'ERC-4337 bundler is unreachable. Check PIMLICO_API_KEY or AZETH_BUNDLER_URL settings.';
|
|
150
|
+
return 'A network request failed. Check your connection and retry.';
|
|
151
|
+
}
|
|
152
|
+
case 'INVALID_INPUT': {
|
|
153
|
+
const matches = details?.matches;
|
|
154
|
+
if (matches && matches.length > 1) {
|
|
155
|
+
const examples = matches.slice(0, 3).map(m => `#token:${m.tokenId}`).join(', ');
|
|
156
|
+
return `Multiple matches found. Use a unique identifier: ${examples}, or provide the full address.`;
|
|
157
|
+
}
|
|
158
|
+
return 'Verify all input parameters match the expected format.';
|
|
159
|
+
}
|
|
160
|
+
case 'UNAUTHORIZED':
|
|
161
|
+
return 'Ensure your private key is correct and you have the required permissions.';
|
|
162
|
+
case 'ACCOUNT_EXISTS':
|
|
163
|
+
return 'An account already exists. Use azeth_accounts to list existing accounts.';
|
|
164
|
+
case 'INSUFFICIENT_PAYMENT':
|
|
165
|
+
return 'You must pay the target agent at least $1 USD (via azeth_transfer) before rating them. Use azeth_get_net_paid to check your payment history.';
|
|
166
|
+
case 'RECIPIENT_UNREACHABLE':
|
|
167
|
+
return 'The recipient is not reachable on the XMTP network. Use azeth_check_reachability to verify before sending.';
|
|
168
|
+
case 'SERVER_UNAVAILABLE':
|
|
169
|
+
return 'The Azeth server is unreachable. On-chain operations still work. Check AZETH_SERVER_URL or retry later.';
|
|
170
|
+
default:
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Format a bigint 18-decimal USD amount with adaptive precision.
|
|
175
|
+
* Shows 2 decimals for normal amounts; falls back to 6 decimals for micro-amounts
|
|
176
|
+
* that would otherwise round to "$0". */
|
|
177
|
+
export function formatUSD(amount) {
|
|
178
|
+
if (amount === 0n)
|
|
179
|
+
return '$0';
|
|
180
|
+
const coarse = formatTokenAmount(amount, 18, 2);
|
|
181
|
+
if (coarse !== '0')
|
|
182
|
+
return '$' + coarse;
|
|
183
|
+
// Micro-amount: show 6 decimals for transparency
|
|
184
|
+
const fine = formatTokenAmount(amount, 18, 6);
|
|
185
|
+
return fine === '0' ? '<$0.000001' : '$' + fine;
|
|
186
|
+
}
|
|
187
|
+
/** Generate a guardian-related error response with actionable remediation guidance.
|
|
188
|
+
* Used when a UserOp fails with AA24 or pre-flight detects GUARDIAN_REQUIRED. */
|
|
189
|
+
export function guardianRequiredError(reason, details) {
|
|
190
|
+
const hasGuardianKey = !!process.env['AZETH_GUARDIAN_KEY'];
|
|
191
|
+
const hasAutoSign = process.env['AZETH_GUARDIAN_AUTO_SIGN']?.toLowerCase() === 'true';
|
|
192
|
+
const lines = [
|
|
193
|
+
`Guardian co-signature required: ${reason}`,
|
|
194
|
+
'',
|
|
195
|
+
];
|
|
196
|
+
if (details.amount && details.limit) {
|
|
197
|
+
lines.push(`Attempted: ${details.amount}`);
|
|
198
|
+
lines.push(`Standard limit: ${details.limit}`);
|
|
199
|
+
lines.push('');
|
|
200
|
+
}
|
|
201
|
+
if (hasGuardianKey && hasAutoSign) {
|
|
202
|
+
// Auto-sign is ON but operation still failed — indicates key mismatch
|
|
203
|
+
lines.push('AZETH_GUARDIAN_KEY is set with AZETH_GUARDIAN_AUTO_SIGN=true, but the operation still failed.');
|
|
204
|
+
lines.push('The guardian address derived from AZETH_GUARDIAN_KEY may not match the guardian in your account guardrails.');
|
|
205
|
+
lines.push('');
|
|
206
|
+
lines.push('To fix:');
|
|
207
|
+
lines.push('1. Run azeth_get_guardrails to see the guardian address for your account');
|
|
208
|
+
lines.push('2. Verify AZETH_GUARDIAN_KEY derives to that same address');
|
|
209
|
+
lines.push('3. If mismatched, update AZETH_GUARDIAN_KEY or change your account guardian via proposeGuardrailChange (24h timelock)');
|
|
210
|
+
}
|
|
211
|
+
else if (hasGuardianKey && !hasAutoSign) {
|
|
212
|
+
// Key is available but auto-sign is off — explain how to enable or use XMTP
|
|
213
|
+
lines.push('AZETH_GUARDIAN_KEY is set but AZETH_GUARDIAN_AUTO_SIGN is not enabled.');
|
|
214
|
+
lines.push('The guardian must explicitly approve this operation.');
|
|
215
|
+
lines.push('');
|
|
216
|
+
lines.push('Options:');
|
|
217
|
+
lines.push('1. Enable auto-signing: set AZETH_GUARDIAN_AUTO_SIGN=true in your environment');
|
|
218
|
+
lines.push(' (All operations exceeding standard limits will be auto-approved)');
|
|
219
|
+
lines.push('');
|
|
220
|
+
lines.push('2. Use XMTP interactive approval: the guardian reviews and approves via azeth_guardian_approve');
|
|
221
|
+
lines.push(' (Requires XMTP to be configured on both agent and guardian sides)');
|
|
222
|
+
lines.push('');
|
|
223
|
+
lines.push('3. Split into smaller transactions within your standard limits');
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// No guardian key at all
|
|
227
|
+
lines.push('How to resolve:');
|
|
228
|
+
lines.push('');
|
|
229
|
+
lines.push('Option 1 (recommended): Set AZETH_GUARDIAN_KEY + AZETH_GUARDIAN_AUTO_SIGN=true');
|
|
230
|
+
lines.push(' - AZETH_GUARDIAN_KEY: the guardian\'s private key (for auto co-signing)');
|
|
231
|
+
lines.push(' - AZETH_GUARDIAN_AUTO_SIGN=true: enables automatic approval');
|
|
232
|
+
lines.push(' - The key must correspond to the guardian address in your account guardrails');
|
|
233
|
+
lines.push(' - Check your guardian address with: azeth_get_guardrails');
|
|
234
|
+
lines.push('');
|
|
235
|
+
lines.push('Option 2: Set AZETH_GUARDIAN_KEY only (interactive mode)');
|
|
236
|
+
lines.push(' - Guardian reviews each operation via XMTP (azeth_guardian_approve)');
|
|
237
|
+
lines.push(' - Requires XMTP configuration on both sides');
|
|
238
|
+
lines.push('');
|
|
239
|
+
lines.push('Option 3: Lower your spending limits or split into smaller transactions');
|
|
240
|
+
if (details.guardianAddress) {
|
|
241
|
+
lines.push('');
|
|
242
|
+
lines.push(`Guardian address: ${details.guardianAddress}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
247
|
+
isError: true,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/** JSON replacer that converts bigint values to strings */
|
|
251
|
+
function bigintReplacer(_key, value) {
|
|
252
|
+
if (typeof value === 'bigint') {
|
|
253
|
+
return value.toString();
|
|
254
|
+
}
|
|
255
|
+
return value;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@azeth/mcp-server",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "MCP server for the Azeth trust infrastructure — smart accounts, payments, reputation, and discovery tools for AI agents",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/azeth-protocol/mcp-server.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://azeth.ai",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"azeth",
|
|
14
|
+
"mcp",
|
|
15
|
+
"model-context-protocol",
|
|
16
|
+
"ai-agents",
|
|
17
|
+
"machine-economy",
|
|
18
|
+
"smart-accounts",
|
|
19
|
+
"x402",
|
|
20
|
+
"payments"
|
|
21
|
+
],
|
|
22
|
+
"main": "dist/index.js",
|
|
23
|
+
"types": "dist/index.d.ts",
|
|
24
|
+
"bin": {
|
|
25
|
+
"azeth-mcp": "./dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist/",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
31
|
+
],
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@azeth/common": "^0.2.0",
|
|
34
|
+
"@azeth/sdk": ">=0.1.0",
|
|
35
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
36
|
+
"dotenv": "^16.4.0",
|
|
37
|
+
"viem": "^2.21.0",
|
|
38
|
+
"zod": "^3.25.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^22.0.0",
|
|
42
|
+
"typescript": "^5.7.0",
|
|
43
|
+
"vitest": "^2.1.0",
|
|
44
|
+
"tsx": "^4.19.0",
|
|
45
|
+
"@changesets/cli": "^2.27.0"
|
|
46
|
+
},
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"access": "public"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=20.0.0"
|
|
52
|
+
},
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsc --project tsconfig.json",
|
|
55
|
+
"dev": "tsx watch src/index.ts",
|
|
56
|
+
"start": "node dist/index.js",
|
|
57
|
+
"test": "vitest run",
|
|
58
|
+
"typecheck": "tsc --noEmit",
|
|
59
|
+
"clean": "rm -rf dist",
|
|
60
|
+
"release": "pnpm build && changeset publish"
|
|
61
|
+
}
|
|
62
|
+
}
|