@scriptmasterlabs/mcp-x402 2.0.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/.env.example +35 -0
- package/.github/workflows/ci.yml +59 -0
- package/.github/workflows/keepalive.yml +31 -0
- package/.well-known/agentcard.json +34 -0
- package/CONTRIBUTING.md +76 -0
- package/Dockerfile +19 -0
- package/LICENSE +21 -0
- package/README.md +304 -0
- package/agents.json +67 -0
- package/dist/lib/chains/base.d.ts +10 -0
- package/dist/lib/chains/base.d.ts.map +1 -0
- package/dist/lib/chains/base.js +73 -0
- package/dist/lib/chains/base.js.map +1 -0
- package/dist/lib/chains/solana.d.ts +10 -0
- package/dist/lib/chains/solana.d.ts.map +1 -0
- package/dist/lib/chains/solana.js +49 -0
- package/dist/lib/chains/solana.js.map +1 -0
- package/dist/lib/chains/xrpl.d.ts +10 -0
- package/dist/lib/chains/xrpl.d.ts.map +1 -0
- package/dist/lib/chains/xrpl.js +55 -0
- package/dist/lib/chains/xrpl.js.map +1 -0
- package/dist/lib/credit/bureau.d.ts +10 -0
- package/dist/lib/credit/bureau.d.ts.map +1 -0
- package/dist/lib/credit/bureau.js +58 -0
- package/dist/lib/credit/bureau.js.map +1 -0
- package/dist/lib/sml-api/agentcard.d.ts +17 -0
- package/dist/lib/sml-api/agentcard.d.ts.map +1 -0
- package/dist/lib/sml-api/agentcard.js +30 -0
- package/dist/lib/sml-api/agentcard.js.map +1 -0
- package/dist/lib/sml-api/backtest.d.ts +22 -0
- package/dist/lib/sml-api/backtest.d.ts.map +1 -0
- package/dist/lib/sml-api/backtest.js +28 -0
- package/dist/lib/sml-api/backtest.js.map +1 -0
- package/dist/lib/sml-api/brokers.d.ts +40 -0
- package/dist/lib/sml-api/brokers.d.ts.map +1 -0
- package/dist/lib/sml-api/brokers.js +128 -0
- package/dist/lib/sml-api/brokers.js.map +1 -0
- package/dist/lib/sml-api/copytrader.d.ts +11 -0
- package/dist/lib/sml-api/copytrader.d.ts.map +1 -0
- package/dist/lib/sml-api/copytrader.js +30 -0
- package/dist/lib/sml-api/copytrader.js.map +1 -0
- package/dist/lib/sml-api/crawl.d.ts +20 -0
- package/dist/lib/sml-api/crawl.d.ts.map +1 -0
- package/dist/lib/sml-api/crawl.js +32 -0
- package/dist/lib/sml-api/crawl.js.map +1 -0
- package/dist/lib/sml-api/echo.d.ts +10 -0
- package/dist/lib/sml-api/echo.d.ts.map +1 -0
- package/dist/lib/sml-api/echo.js +23 -0
- package/dist/lib/sml-api/echo.js.map +1 -0
- package/dist/lib/sml-api/forge.d.ts +11 -0
- package/dist/lib/sml-api/forge.d.ts.map +1 -0
- package/dist/lib/sml-api/forge.js +29 -0
- package/dist/lib/sml-api/forge.js.map +1 -0
- package/dist/lib/sml-api/ftd.d.ts +18 -0
- package/dist/lib/sml-api/ftd.d.ts.map +1 -0
- package/dist/lib/sml-api/ftd.js +43 -0
- package/dist/lib/sml-api/ftd.js.map +1 -0
- package/dist/lib/sml-api/ghost.d.ts +13 -0
- package/dist/lib/sml-api/ghost.d.ts.map +1 -0
- package/dist/lib/sml-api/ghost.js +29 -0
- package/dist/lib/sml-api/ghost.js.map +1 -0
- package/dist/lib/sml-api/launchpad.d.ts +20 -0
- package/dist/lib/sml-api/launchpad.d.ts.map +1 -0
- package/dist/lib/sml-api/launchpad.js +31 -0
- package/dist/lib/sml-api/launchpad.js.map +1 -0
- package/dist/lib/sml-api/leviathan.d.ts +22 -0
- package/dist/lib/sml-api/leviathan.d.ts.map +1 -0
- package/dist/lib/sml-api/leviathan.js +33 -0
- package/dist/lib/sml-api/leviathan.js.map +1 -0
- package/dist/lib/sml-api/nexus.d.ts +18 -0
- package/dist/lib/sml-api/nexus.d.ts.map +1 -0
- package/dist/lib/sml-api/nexus.js +40 -0
- package/dist/lib/sml-api/nexus.js.map +1 -0
- package/dist/lib/sml-api/proof402.d.ts +6 -0
- package/dist/lib/sml-api/proof402.d.ts.map +1 -0
- package/dist/lib/sml-api/proof402.js +30 -0
- package/dist/lib/sml-api/proof402.js.map +1 -0
- package/dist/lib/sml-api/rails.d.ts +12 -0
- package/dist/lib/sml-api/rails.d.ts.map +1 -0
- package/dist/lib/sml-api/rails.js +29 -0
- package/dist/lib/sml-api/rails.js.map +1 -0
- package/dist/lib/sml-api/shadow.d.ts +15 -0
- package/dist/lib/sml-api/shadow.d.ts.map +1 -0
- package/dist/lib/sml-api/shadow.js +27 -0
- package/dist/lib/sml-api/shadow.js.map +1 -0
- package/dist/lib/sml-api/squeezeos.d.ts +21 -0
- package/dist/lib/sml-api/squeezeos.d.ts.map +1 -0
- package/dist/lib/sml-api/squeezeos.js +97 -0
- package/dist/lib/sml-api/squeezeos.js.map +1 -0
- package/dist/lib/sml-api/xdeo.d.ts +13 -0
- package/dist/lib/sml-api/xdeo.d.ts.map +1 -0
- package/dist/lib/sml-api/xdeo.js +34 -0
- package/dist/lib/sml-api/xdeo.js.map +1 -0
- package/dist/lib/sml-api/xmit.d.ts +13 -0
- package/dist/lib/sml-api/xmit.d.ts.map +1 -0
- package/dist/lib/sml-api/xmit.js +34 -0
- package/dist/lib/sml-api/xmit.js.map +1 -0
- package/dist/server/health.d.ts +16 -0
- package/dist/server/health.d.ts.map +1 -0
- package/dist/server/health.js +39 -0
- package/dist/server/health.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +193 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/payments/ap2.d.ts +17 -0
- package/dist/server/payments/ap2.d.ts.map +1 -0
- package/dist/server/payments/ap2.js +75 -0
- package/dist/server/payments/ap2.js.map +1 -0
- package/dist/server/payments/receipt.d.ts +28 -0
- package/dist/server/payments/receipt.d.ts.map +1 -0
- package/dist/server/payments/receipt.js +60 -0
- package/dist/server/payments/receipt.js.map +1 -0
- package/dist/server/payments/router.d.ts +23 -0
- package/dist/server/payments/router.d.ts.map +1 -0
- package/dist/server/payments/router.js +69 -0
- package/dist/server/payments/router.js.map +1 -0
- package/dist/server/payments/wallet.d.ts +18 -0
- package/dist/server/payments/wallet.d.ts.map +1 -0
- package/dist/server/payments/wallet.js +107 -0
- package/dist/server/payments/wallet.js.map +1 -0
- package/dist/server/payments/x402.d.ts +29 -0
- package/dist/server/payments/x402.d.ts.map +1 -0
- package/dist/server/payments/x402.js +122 -0
- package/dist/server/payments/x402.js.map +1 -0
- package/dist/server/registry/catalog.d.ts +12 -0
- package/dist/server/registry/catalog.d.ts.map +1 -0
- package/dist/server/registry/catalog.js +55 -0
- package/dist/server/registry/catalog.js.map +1 -0
- package/dist/server/registry/discovery.d.ts +16 -0
- package/dist/server/registry/discovery.d.ts.map +1 -0
- package/dist/server/registry/discovery.js +33 -0
- package/dist/server/registry/discovery.js.map +1 -0
- package/dist/server/registry/pricing.d.ts +10 -0
- package/dist/server/registry/pricing.d.ts.map +1 -0
- package/dist/server/registry/pricing.js +66 -0
- package/dist/server/registry/pricing.js.map +1 -0
- package/dist/server/security/acl.d.ts +28 -0
- package/dist/server/security/acl.d.ts.map +1 -0
- package/dist/server/security/acl.js +36 -0
- package/dist/server/security/acl.js.map +1 -0
- package/dist/server/security/audit.d.ts +15 -0
- package/dist/server/security/audit.d.ts.map +1 -0
- package/dist/server/security/audit.js +77 -0
- package/dist/server/security/audit.js.map +1 -0
- package/dist/server/security/rate-limit.d.ts +12 -0
- package/dist/server/security/rate-limit.d.ts.map +1 -0
- package/dist/server/security/rate-limit.js +72 -0
- package/dist/server/security/rate-limit.js.map +1 -0
- package/dist/server/security/sandbox.d.ts +7 -0
- package/dist/server/security/sandbox.d.ts.map +1 -0
- package/dist/server/security/sandbox.js +42 -0
- package/dist/server/security/sandbox.js.map +1 -0
- package/dist/server/tools/agentcard.d.ts +3 -0
- package/dist/server/tools/agentcard.d.ts.map +1 -0
- package/dist/server/tools/agentcard.js +118 -0
- package/dist/server/tools/agentcard.js.map +1 -0
- package/dist/server/tools/backtest.d.ts +3 -0
- package/dist/server/tools/backtest.d.ts.map +1 -0
- package/dist/server/tools/backtest.js +112 -0
- package/dist/server/tools/backtest.js.map +1 -0
- package/dist/server/tools/brokers.d.ts +3 -0
- package/dist/server/tools/brokers.d.ts.map +1 -0
- package/dist/server/tools/brokers.js +223 -0
- package/dist/server/tools/brokers.js.map +1 -0
- package/dist/server/tools/copytrader.d.ts +3 -0
- package/dist/server/tools/copytrader.d.ts.map +1 -0
- package/dist/server/tools/copytrader.js +90 -0
- package/dist/server/tools/copytrader.js.map +1 -0
- package/dist/server/tools/crawl.d.ts +3 -0
- package/dist/server/tools/crawl.d.ts.map +1 -0
- package/dist/server/tools/crawl.js +60 -0
- package/dist/server/tools/crawl.js.map +1 -0
- package/dist/server/tools/discovery.d.ts +3 -0
- package/dist/server/tools/discovery.d.ts.map +1 -0
- package/dist/server/tools/discovery.js +188 -0
- package/dist/server/tools/discovery.js.map +1 -0
- package/dist/server/tools/echo.d.ts +3 -0
- package/dist/server/tools/echo.d.ts.map +1 -0
- package/dist/server/tools/echo.js +48 -0
- package/dist/server/tools/echo.js.map +1 -0
- package/dist/server/tools/forge.d.ts +3 -0
- package/dist/server/tools/forge.d.ts.map +1 -0
- package/dist/server/tools/forge.js +77 -0
- package/dist/server/tools/forge.js.map +1 -0
- package/dist/server/tools/ftd.d.ts +3 -0
- package/dist/server/tools/ftd.d.ts.map +1 -0
- package/dist/server/tools/ftd.js +70 -0
- package/dist/server/tools/ftd.js.map +1 -0
- package/dist/server/tools/ghost.d.ts +3 -0
- package/dist/server/tools/ghost.d.ts.map +1 -0
- package/dist/server/tools/ghost.js +83 -0
- package/dist/server/tools/ghost.js.map +1 -0
- package/dist/server/tools/index.d.ts +3 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +44 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/server/tools/launchpad.d.ts +3 -0
- package/dist/server/tools/launchpad.d.ts.map +1 -0
- package/dist/server/tools/launchpad.js +151 -0
- package/dist/server/tools/launchpad.js.map +1 -0
- package/dist/server/tools/leviathan.d.ts +3 -0
- package/dist/server/tools/leviathan.d.ts.map +1 -0
- package/dist/server/tools/leviathan.js +73 -0
- package/dist/server/tools/leviathan.js.map +1 -0
- package/dist/server/tools/nexus.d.ts +3 -0
- package/dist/server/tools/nexus.d.ts.map +1 -0
- package/dist/server/tools/nexus.js +65 -0
- package/dist/server/tools/nexus.js.map +1 -0
- package/dist/server/tools/proof402.d.ts +3 -0
- package/dist/server/tools/proof402.d.ts.map +1 -0
- package/dist/server/tools/proof402.js +74 -0
- package/dist/server/tools/proof402.js.map +1 -0
- package/dist/server/tools/rails.d.ts +3 -0
- package/dist/server/tools/rails.d.ts.map +1 -0
- package/dist/server/tools/rails.js +82 -0
- package/dist/server/tools/rails.js.map +1 -0
- package/dist/server/tools/shadow.d.ts +3 -0
- package/dist/server/tools/shadow.d.ts.map +1 -0
- package/dist/server/tools/shadow.js +114 -0
- package/dist/server/tools/shadow.js.map +1 -0
- package/dist/server/tools/squeezeos.d.ts +3 -0
- package/dist/server/tools/squeezeos.d.ts.map +1 -0
- package/dist/server/tools/squeezeos.js +231 -0
- package/dist/server/tools/squeezeos.js.map +1 -0
- package/dist/server/tools/xdeo.d.ts +3 -0
- package/dist/server/tools/xdeo.d.ts.map +1 -0
- package/dist/server/tools/xdeo.js +58 -0
- package/dist/server/tools/xdeo.js.map +1 -0
- package/dist/server/tools/xmit.d.ts +3 -0
- package/dist/server/tools/xmit.d.ts.map +1 -0
- package/dist/server/tools/xmit.js +59 -0
- package/dist/server/tools/xmit.js.map +1 -0
- package/docker-compose.yml +50 -0
- package/llms.txt +70 -0
- package/package.json +77 -0
- package/render.yaml +39 -0
- package/sdk/mcp-x402-sdk/package.json +18 -0
- package/sdk/mcp-x402-sdk/src/index.ts +118 -0
- package/sdk/mcp-x402-sdk/tsconfig.json +14 -0
- package/server.json +60 -0
- package/services/backtest_service.py +176 -0
- package/src/lib/chains/base.ts +77 -0
- package/src/lib/chains/solana.ts +59 -0
- package/src/lib/chains/xrpl.ts +63 -0
- package/src/lib/credit/bureau.ts +65 -0
- package/src/lib/sml-api/agentcard.ts +40 -0
- package/src/lib/sml-api/backtest.ts +47 -0
- package/src/lib/sml-api/brokers.ts +160 -0
- package/src/lib/sml-api/copytrader.ts +33 -0
- package/src/lib/sml-api/crawl.ts +44 -0
- package/src/lib/sml-api/echo.ts +28 -0
- package/src/lib/sml-api/forge.ts +33 -0
- package/src/lib/sml-api/ftd.ts +53 -0
- package/src/lib/sml-api/ghost.ts +35 -0
- package/src/lib/sml-api/launchpad.ts +43 -0
- package/src/lib/sml-api/leviathan.ts +49 -0
- package/src/lib/sml-api/nexus.ts +50 -0
- package/src/lib/sml-api/proof402.ts +27 -0
- package/src/lib/sml-api/rails.ts +34 -0
- package/src/lib/sml-api/shadow.ts +35 -0
- package/src/lib/sml-api/squeezeos.ts +95 -0
- package/src/lib/sml-api/xdeo.ts +40 -0
- package/src/lib/sml-api/xmit.ts +40 -0
- package/src/server/health.ts +52 -0
- package/src/server/index.ts +206 -0
- package/src/server/payments/ap2.ts +99 -0
- package/src/server/payments/receipt.ts +85 -0
- package/src/server/payments/router.ts +110 -0
- package/src/server/payments/wallet.ts +123 -0
- package/src/server/payments/x402.ts +162 -0
- package/src/server/registry/catalog.ts +61 -0
- package/src/server/registry/discovery.ts +39 -0
- package/src/server/registry/pricing.ts +76 -0
- package/src/server/security/acl.ts +42 -0
- package/src/server/security/audit.ts +94 -0
- package/src/server/security/rate-limit.ts +84 -0
- package/src/server/security/sandbox.ts +40 -0
- package/src/server/tools/agentcard.ts +134 -0
- package/src/server/tools/backtest.ts +119 -0
- package/src/server/tools/brokers.ts +250 -0
- package/src/server/tools/copytrader.ts +104 -0
- package/src/server/tools/crawl.ts +70 -0
- package/src/server/tools/discovery.ts +202 -0
- package/src/server/tools/echo.ts +58 -0
- package/src/server/tools/forge.ts +87 -0
- package/src/server/tools/ftd.ts +88 -0
- package/src/server/tools/ghost.ts +93 -0
- package/src/server/tools/index.ts +42 -0
- package/src/server/tools/launchpad.ts +173 -0
- package/src/server/tools/leviathan.ts +81 -0
- package/src/server/tools/nexus.ts +76 -0
- package/src/server/tools/proof402.ts +87 -0
- package/src/server/tools/rails.ts +92 -0
- package/src/server/tools/shadow.ts +128 -0
- package/src/server/tools/squeezeos.ts +312 -0
- package/src/server/tools/xdeo.ts +67 -0
- package/src/server/tools/xmit.ts +68 -0
- package/tests/integration/e2e.test.ts +51 -0
- package/tests/unit/payments.test.ts +49 -0
- package/tests/unit/security.test.ts +92 -0
- package/tests/unit/tools.test.ts +42 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerXmit = registerXmit;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const x402_js_1 = require("../payments/x402.js");
|
|
6
|
+
const rate_limit_js_1 = require("../security/rate-limit.js");
|
|
7
|
+
const sandbox_js_1 = require("../security/sandbox.js");
|
|
8
|
+
const audit_js_1 = require("../security/audit.js");
|
|
9
|
+
const xmit_js_1 = require("../../lib/sml-api/xmit.js");
|
|
10
|
+
const pricing_js_1 = require("../registry/pricing.js");
|
|
11
|
+
const InputSchema = zod_1.z.object({
|
|
12
|
+
filing_url: zod_1.z.string().url(),
|
|
13
|
+
parse_target: zod_1.z.enum(['executive_pay', 'holdings', 'ownership_changes', 'all']),
|
|
14
|
+
format: zod_1.z.enum(['json', 'markdown']).default('json'),
|
|
15
|
+
wallet_address: zod_1.z.string().optional(),
|
|
16
|
+
});
|
|
17
|
+
function registerXmit(server) {
|
|
18
|
+
server.tool('xmit_edgar_decode', {
|
|
19
|
+
filing_url: zod_1.z.string().describe('SEC EDGAR filing URL (DEF 14A, 13F, or 13D).'),
|
|
20
|
+
parse_target: zod_1.z.enum(['executive_pay', 'holdings', 'ownership_changes', 'all']).describe('What to extract.'),
|
|
21
|
+
format: zod_1.z.enum(['json', 'markdown']).describe('Output format. Default: json.'),
|
|
22
|
+
wallet_address: zod_1.z.string().describe('Agent wallet for payment.'),
|
|
23
|
+
}, async (rawArgs) => {
|
|
24
|
+
const args = sandbox_js_1.Sandbox.validate(InputSchema, rawArgs);
|
|
25
|
+
const audit = audit_js_1.AuditLogger.getInstance();
|
|
26
|
+
// Validate URL is https SEC EDGAR URL
|
|
27
|
+
const url = sandbox_js_1.Sandbox.validateUrl(args.filing_url);
|
|
28
|
+
if (!url.hostname.endsWith('sec.gov') && !url.hostname.endsWith('edgar.sec.gov')) {
|
|
29
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'invalid_url', message: 'Only SEC EDGAR URLs are accepted.' }) }], isError: true };
|
|
30
|
+
}
|
|
31
|
+
if (!rate_limit_js_1.RateLimiter.getInstance().checkTool('xmit_edgar_decode')) {
|
|
32
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'rate_limit_exceeded' }) }], isError: true };
|
|
33
|
+
}
|
|
34
|
+
await pricing_js_1.PriceRegistry.getInstance().seedDefaults();
|
|
35
|
+
const price = await pricing_js_1.PriceRegistry.getInstance().getPrice('xmit_edgar_decode');
|
|
36
|
+
if (!price) {
|
|
37
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'price_unavailable' }) }], isError: true };
|
|
38
|
+
}
|
|
39
|
+
let payment;
|
|
40
|
+
try {
|
|
41
|
+
payment = await (0, x402_js_1.executeX402Payment)({ price, currency: 'USDC', toolName: 'xmit_edgar_decode', walletAddress: args.wallet_address });
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: 'payment_failed', message: String(err) }) }], isError: true };
|
|
45
|
+
}
|
|
46
|
+
const client = xmit_js_1.XmitClient.getInstance();
|
|
47
|
+
const data = await client.decode({
|
|
48
|
+
filingUrl: args.filing_url,
|
|
49
|
+
parseTarget: args.parse_target,
|
|
50
|
+
format: args.format ?? 'json',
|
|
51
|
+
});
|
|
52
|
+
// Raw text NEVER returned (N3) — only structured parsed output
|
|
53
|
+
audit.info('xmit_success', { receiptId: payment.receiptId });
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: 'text', text: JSON.stringify({ data, _meta: { receipt_id: payment.receiptId, tx_hash: payment.txHash, chain: payment.chain, amount_paid: `${payment.amountPaid} ${payment.currency}` } }) }],
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=xmit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmit.js","sourceRoot":"","sources":["../../../src/server/tools/xmit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
version: '3.9'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
mcp-x402:
|
|
5
|
+
build:
|
|
6
|
+
context: .
|
|
7
|
+
dockerfile: Dockerfile
|
|
8
|
+
image: mcp-x402:latest
|
|
9
|
+
container_name: mcp-x402
|
|
10
|
+
restart: always # Auto-restart on crash, reboot, or OOM
|
|
11
|
+
environment:
|
|
12
|
+
NODE_ENV: production
|
|
13
|
+
MCP_TRANSPORT: sse
|
|
14
|
+
MCP_SSE_PORT: "3402"
|
|
15
|
+
DAILY_SPEND_CAP_USD: "50"
|
|
16
|
+
AUTO_APPROVE_THRESHOLD_USD: "1"
|
|
17
|
+
PRICE_CACHE_TTL_MS: "60000"
|
|
18
|
+
PROOF402_URL: https://four02proof.onrender.com
|
|
19
|
+
TESTNET: "false"
|
|
20
|
+
# Secrets — supply via .env file or secrets manager; NEVER hardcode
|
|
21
|
+
# SML_API_BASE:
|
|
22
|
+
# BASE_RPC_URL:
|
|
23
|
+
# XRPL_RPC_URL:
|
|
24
|
+
# SOLANA_RPC_URL:
|
|
25
|
+
ports:
|
|
26
|
+
- "3402:3402"
|
|
27
|
+
volumes:
|
|
28
|
+
- ./certs:/app/certs:ro # mTLS certs (read-only)
|
|
29
|
+
- audit_logs:/app/audit_logs # Persistent audit log volume
|
|
30
|
+
healthcheck:
|
|
31
|
+
test: ["CMD", "wget", "-qO-", "http://localhost:3402/health"]
|
|
32
|
+
interval: 30s
|
|
33
|
+
timeout: 10s
|
|
34
|
+
retries: 3
|
|
35
|
+
start_period: 20s
|
|
36
|
+
logging:
|
|
37
|
+
driver: json-file
|
|
38
|
+
options:
|
|
39
|
+
max-size: "50m"
|
|
40
|
+
max-file: "7"
|
|
41
|
+
deploy:
|
|
42
|
+
resources:
|
|
43
|
+
limits:
|
|
44
|
+
memory: 512m
|
|
45
|
+
reservations:
|
|
46
|
+
memory: 128m
|
|
47
|
+
|
|
48
|
+
volumes:
|
|
49
|
+
audit_logs:
|
|
50
|
+
driver: local
|
package/llms.txt
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# mcp-x402 — ScriptMasterLabs Autonomous Payment MCP Server
|
|
2
|
+
|
|
3
|
+
> The first MCP server that pays for itself.
|
|
4
|
+
|
|
5
|
+
## What this is
|
|
6
|
+
|
|
7
|
+
mcp-x402 connects AI agents (Claude, Cursor, etc.) to ScriptMasterLabs financial intelligence products via the x402 payment protocol. No API keys. No human billing. Agents pay with stablecoins on Base, XRPL, or Solana — autonomously.
|
|
8
|
+
|
|
9
|
+
## Install (30 seconds)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx @scriptmasterlabs/mcp-x402 init
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Add to your Claude Code config:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcpServers": {
|
|
20
|
+
"sml": {
|
|
21
|
+
"command": "npx",
|
|
22
|
+
"args": ["@scriptmasterlabs/mcp-x402"]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Tools
|
|
29
|
+
|
|
30
|
+
- leviathan_signal — Institutional squeeze signals. $0.05 USDC. AP2 mandate required.
|
|
31
|
+
- xmit_edgar_decode — Parse DEF 14A/13F/13D filings. $0.02 USDC.
|
|
32
|
+
- xdeo_earnings_estimate — Decentralized earnings oracle. $0.02 USDC.
|
|
33
|
+
- ftd_threshold_scan — SEC Reg SHO FTD data. Alerts free; full data $0.05 USDC.
|
|
34
|
+
- nexus_agent_hire — Agent marketplace. Query free; hire 5% commission.
|
|
35
|
+
- crawl_paid_fetch — Pay-per-fetch scraping. $0.005 USDC.
|
|
36
|
+
|
|
37
|
+
## Payment Architecture
|
|
38
|
+
|
|
39
|
+
1. Agent discovers pricing from agents.json or llms.txt
|
|
40
|
+
2. AP2 mandate checked — Credit Bureau score ≥ 300 for auto-approve
|
|
41
|
+
3. x402 stablecoin transfer on cheapest/fastest chain
|
|
42
|
+
4. 402Proof receipt returned in every response
|
|
43
|
+
5. Credit Bureau score updated
|
|
44
|
+
|
|
45
|
+
## Chains Supported
|
|
46
|
+
|
|
47
|
+
- Base (USDC) — preferred for speed (<3s)
|
|
48
|
+
- XRPL (RLUSD) — preferred for XRPL ecosystem
|
|
49
|
+
- Solana (USDC) — fallback
|
|
50
|
+
|
|
51
|
+
## Spend Controls
|
|
52
|
+
|
|
53
|
+
- Auto-approve: sessions under $1.00
|
|
54
|
+
- Daily cap: $50.00 per wallet
|
|
55
|
+
- Price cache: 60 seconds max
|
|
56
|
+
|
|
57
|
+
## Security
|
|
58
|
+
|
|
59
|
+
- Private keys: OS keychain ONLY (never env/files)
|
|
60
|
+
- mTLS on all SML APIs
|
|
61
|
+
- Append-only SHA-256 chained audit log
|
|
62
|
+
- Rate limit: 100 req/min per tool, 1000 req/day per wallet
|
|
63
|
+
- Zod validation on 100% of inputs
|
|
64
|
+
|
|
65
|
+
## Links
|
|
66
|
+
|
|
67
|
+
- GitHub: https://github.com/timwal78/sml_portfolio/tree/main/mcp-x402
|
|
68
|
+
- ScriptMasterLabs: https://scriptmasterlabs.com
|
|
69
|
+
- 402Proof: https://four02proof.onrender.com
|
|
70
|
+
- SqueezeOS API: https://squeezeos-api.onrender.com
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@scriptmasterlabs/mcp-x402",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "The first MCP server that pays for itself. AI agents pay for ScriptMasterLabs data autonomously via x402.",
|
|
5
|
+
"main": "dist/server/index.js",
|
|
6
|
+
"types": "dist/server/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mcp-x402": "dist/server/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsx watch src/server/index.ts",
|
|
13
|
+
"start": "node dist/server/index.js",
|
|
14
|
+
"start:sse": "MCP_TRANSPORT=sse node dist/server/index.js",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:unit": "vitest run tests/unit",
|
|
17
|
+
"test:integration": "vitest run tests/integration",
|
|
18
|
+
"test:coverage": "vitest run --coverage",
|
|
19
|
+
"lint": "eslint src --ext .ts",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"prepublishOnly": "npm run build && npm run typecheck"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"mcp",
|
|
25
|
+
"model-context-protocol",
|
|
26
|
+
"x402",
|
|
27
|
+
"ai-agents",
|
|
28
|
+
"autonomous-payments",
|
|
29
|
+
"scriptmasterlabs",
|
|
30
|
+
"xrpl",
|
|
31
|
+
"base",
|
|
32
|
+
"solana",
|
|
33
|
+
"stablecoins",
|
|
34
|
+
"rlusd",
|
|
35
|
+
"usdc"
|
|
36
|
+
],
|
|
37
|
+
"author": "ScriptMasterLabs <timothy.walton45@gmail.com>",
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/timwal78/sml_portfolio.git"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
45
|
+
"zod": "^3.23.8",
|
|
46
|
+
"viem": "^2.21.0",
|
|
47
|
+
"xrpl": "^4.1.0",
|
|
48
|
+
"@solana/web3.js": "^1.95.5",
|
|
49
|
+
"@solana/spl-token": "^0.4.9",
|
|
50
|
+
"keytar": "^7.9.0",
|
|
51
|
+
"node-forge": "^1.3.1",
|
|
52
|
+
"express": "^4.21.0",
|
|
53
|
+
"cors": "^2.8.5",
|
|
54
|
+
"bip39": "^3.1.0",
|
|
55
|
+
"hdkey": "^2.1.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/node": "^22.0.0",
|
|
59
|
+
"@types/express": "^5.0.0",
|
|
60
|
+
"@types/cors": "^2.8.17",
|
|
61
|
+
"@types/node-forge": "^1.3.11",
|
|
62
|
+
"@types/hdkey": "^2.0.5",
|
|
63
|
+
"typescript": "^5.6.0",
|
|
64
|
+
"tsx": "^4.19.0",
|
|
65
|
+
"vitest": "^2.1.0",
|
|
66
|
+
"@vitest/coverage-v8": "^2.1.0",
|
|
67
|
+
"eslint": "^9.11.0",
|
|
68
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
69
|
+
"@typescript-eslint/parser": "^8.0.0"
|
|
70
|
+
},
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": ">=20.0.0"
|
|
73
|
+
},
|
|
74
|
+
"workspaces": [
|
|
75
|
+
"sdk/mcp-x402-sdk"
|
|
76
|
+
]
|
|
77
|
+
}
|
package/render.yaml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
services:
|
|
2
|
+
- type: web
|
|
3
|
+
name: mcp-x402
|
|
4
|
+
runtime: docker
|
|
5
|
+
dockerfilePath: ./mcp-x402/Dockerfile
|
|
6
|
+
dockerContext: ./mcp-x402
|
|
7
|
+
plan: starter
|
|
8
|
+
region: oregon
|
|
9
|
+
healthCheckPath: /health
|
|
10
|
+
envVars:
|
|
11
|
+
- key: NODE_ENV
|
|
12
|
+
value: production
|
|
13
|
+
- key: MCP_TRANSPORT
|
|
14
|
+
value: sse
|
|
15
|
+
- key: MCP_SSE_PORT
|
|
16
|
+
value: 3402
|
|
17
|
+
- key: SML_API_BASE
|
|
18
|
+
sync: false
|
|
19
|
+
- key: WALLET_SEED
|
|
20
|
+
sync: false
|
|
21
|
+
- key: BASE_RPC_URL
|
|
22
|
+
sync: false
|
|
23
|
+
- key: XRPL_RPC_URL
|
|
24
|
+
sync: false
|
|
25
|
+
- key: SOLANA_RPC_URL
|
|
26
|
+
sync: false
|
|
27
|
+
- key: DAILY_SPEND_CAP_USD
|
|
28
|
+
value: "50"
|
|
29
|
+
- key: AUTO_APPROVE_THRESHOLD_USD
|
|
30
|
+
value: "1"
|
|
31
|
+
- key: PRICE_CACHE_TTL_MS
|
|
32
|
+
value: "60000"
|
|
33
|
+
- key: PROOF402_URL
|
|
34
|
+
value: https://four02proof.onrender.com
|
|
35
|
+
- key: TESTNET
|
|
36
|
+
value: "false"
|
|
37
|
+
autoDeploy: true
|
|
38
|
+
# Render restarts the service automatically on crash
|
|
39
|
+
# healthCheckPath triggers restart if /health returns non-2xx
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@scriptmasterlabs/mcp-x402-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "5-line drop-in x402 payment wrapper for any MCP server author.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"prepublishOnly": "npm run build"
|
|
10
|
+
},
|
|
11
|
+
"keywords": ["mcp", "x402", "autonomous-payments", "ai-agents"],
|
|
12
|
+
"author": "ScriptMasterLabs",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"peerDependencies": {
|
|
15
|
+
"@modelcontextprotocol/sdk": ">=1.0.0",
|
|
16
|
+
"zod": ">=3.0.0"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export type SupportedCurrency = 'USDC' | 'RLUSD';
|
|
4
|
+
export type SupportedChain = 'base' | 'xrpl' | 'solana';
|
|
5
|
+
|
|
6
|
+
export interface X402PaymentConfig<TInput extends z.ZodTypeAny> {
|
|
7
|
+
price: string;
|
|
8
|
+
currency?: SupportedCurrency;
|
|
9
|
+
chain?: SupportedChain;
|
|
10
|
+
inputSchema: TInput;
|
|
11
|
+
handler: (input: z.infer<TInput>, receipt: PaymentReceipt) => Promise<ToolResult>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface PaymentReceipt {
|
|
15
|
+
receipt_id: string;
|
|
16
|
+
tx_hash: string;
|
|
17
|
+
chain: string;
|
|
18
|
+
amount_paid: string;
|
|
19
|
+
currency: string;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ToolResult {
|
|
24
|
+
content: Array<{ type: 'text'; text: string }>;
|
|
25
|
+
isError?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const PROOF402_URL = process.env['PROOF402_URL'] ?? 'https://four02proof.onrender.com';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* x402Payment — 5-line drop-in for any MCP server author.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* server.tool('my_tool', schema, x402Payment({
|
|
35
|
+
* price: '0.01',
|
|
36
|
+
* currency: 'USDC',
|
|
37
|
+
* inputSchema: MyInputSchema,
|
|
38
|
+
* handler: async (input, receipt) => {
|
|
39
|
+
* return { content: [{ type: 'text', text: JSON.stringify({ result: 'data', receipt }) }] };
|
|
40
|
+
* },
|
|
41
|
+
* }));
|
|
42
|
+
*/
|
|
43
|
+
export function x402Payment<TInput extends z.ZodTypeAny>(
|
|
44
|
+
config: X402PaymentConfig<TInput>,
|
|
45
|
+
): (rawArgs: unknown) => Promise<ToolResult> {
|
|
46
|
+
return async (rawArgs: unknown): Promise<ToolResult> => {
|
|
47
|
+
const parsed = config.inputSchema.safeParse(rawArgs);
|
|
48
|
+
if (!parsed.success) {
|
|
49
|
+
return {
|
|
50
|
+
content: [{ type: 'text', text: JSON.stringify({ error: 'validation_error', issues: parsed.error.issues }) }],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const args = parsed.data as z.infer<TInput>;
|
|
56
|
+
const walletAddress = (args as Record<string, unknown>)['wallet_address'] as string | undefined;
|
|
57
|
+
|
|
58
|
+
let receipt: PaymentReceipt;
|
|
59
|
+
try {
|
|
60
|
+
receipt = await processPayment({
|
|
61
|
+
price: config.price,
|
|
62
|
+
currency: config.currency ?? 'USDC',
|
|
63
|
+
chain: config.chain,
|
|
64
|
+
walletAddress,
|
|
65
|
+
});
|
|
66
|
+
} catch (err) {
|
|
67
|
+
return {
|
|
68
|
+
content: [{ type: 'text', text: JSON.stringify({ error: 'payment_failed', message: String(err) }) }],
|
|
69
|
+
isError: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return config.handler(args, receipt);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function processPayment(params: {
|
|
78
|
+
price: string;
|
|
79
|
+
currency: SupportedCurrency;
|
|
80
|
+
chain?: SupportedChain;
|
|
81
|
+
walletAddress?: string;
|
|
82
|
+
}): Promise<PaymentReceipt> {
|
|
83
|
+
// Delegates to the 402Proof payment endpoint
|
|
84
|
+
const res = await fetch(`${PROOF402_URL}/v1/pay`, {
|
|
85
|
+
method: 'POST',
|
|
86
|
+
headers: { 'Content-Type': 'application/json' },
|
|
87
|
+
body: JSON.stringify({
|
|
88
|
+
amount: params.price,
|
|
89
|
+
currency: params.currency,
|
|
90
|
+
chain: params.chain ?? 'base',
|
|
91
|
+
wallet: params.walletAddress,
|
|
92
|
+
}),
|
|
93
|
+
signal: AbortSignal.timeout(15_000),
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
if (!res.ok) {
|
|
97
|
+
throw new Error(`Payment failed: HTTP ${res.status}`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const body = (await res.json()) as {
|
|
101
|
+
receipt_id: string;
|
|
102
|
+
tx_hash: string;
|
|
103
|
+
chain: string;
|
|
104
|
+
amount: string;
|
|
105
|
+
currency: string;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
receipt_id: body.receipt_id,
|
|
110
|
+
tx_hash: body.tx_hash,
|
|
111
|
+
chain: body.chain,
|
|
112
|
+
amount_paid: body.amount,
|
|
113
|
+
currency: body.currency,
|
|
114
|
+
timestamp: Date.now(),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export { x402Payment as default };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"declaration": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["src/**/*"]
|
|
14
|
+
}
|
package/server.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://registry.modelcontextprotocol.io/schemas/server.json",
|
|
3
|
+
"name": "@scriptmasterlabs/mcp-x402",
|
|
4
|
+
"display_name": "mcp-x402 — ScriptMasterLabs Unified Payrail",
|
|
5
|
+
"description": "The Amazon for all things payrail. 43 MCP tools spanning institutional trading intelligence (squeeze signals, options flow, AI council verdicts, SEC FTD data), SEC EDGAR parsing, decentralized earnings oracles, private XRPL/Base routing, agent identity cards, memecoin launchpad, XRPL copy-trading, dark-pool intelligence, BYOK LLM proxy, and agent commerce — all autonomously gated by x402 micropayments on Base USDC, XRPL RLUSD, and Solana USDC. No API keys. No subscriptions. Pay only for what you call.",
|
|
6
|
+
"version": "2.0.0",
|
|
7
|
+
"homepage": "https://scriptmasterlabs.com",
|
|
8
|
+
"repository": "https://github.com/timwal78/sml_portfolio/tree/main/mcp-x402",
|
|
9
|
+
"documentation": "https://github.com/timwal78/sml_portfolio/blob/main/mcp-x402/README.md",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"author": {
|
|
12
|
+
"name": "ScriptMasterLabs",
|
|
13
|
+
"email": "timothy.walton45@gmail.com",
|
|
14
|
+
"url": "https://scriptmasterlabs.com"
|
|
15
|
+
},
|
|
16
|
+
"categories": ["finance", "payments", "trading", "web3", "ai-agents"],
|
|
17
|
+
"tags": ["x402", "xrpl", "rlusd", "usdc", "base", "solana", "micropayments", "trading-intelligence", "sec-data", "mcp", "autonomous-agents"],
|
|
18
|
+
"installation": {
|
|
19
|
+
"npm": "@scriptmasterlabs/mcp-x402",
|
|
20
|
+
"npx": "npx @scriptmasterlabs/mcp-x402",
|
|
21
|
+
"docker": "ghcr.io/timwal78/mcp-x402:latest"
|
|
22
|
+
},
|
|
23
|
+
"transports": [
|
|
24
|
+
{
|
|
25
|
+
"type": "stdio",
|
|
26
|
+
"command": "npx",
|
|
27
|
+
"args": ["-y", "@scriptmasterlabs/mcp-x402"]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "sse",
|
|
31
|
+
"url": "https://mcp-x402.scriptmasterlabs.com/mcp"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"type": "streamable-http",
|
|
35
|
+
"url": "https://mcp-x402.scriptmasterlabs.com/mcp"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"tools_count": 43,
|
|
39
|
+
"resources_count": 0,
|
|
40
|
+
"prompts_count": 0,
|
|
41
|
+
"payment": {
|
|
42
|
+
"protocol": "x402",
|
|
43
|
+
"chains": ["base", "xrpl", "solana"],
|
|
44
|
+
"currencies": ["USDC", "RLUSD"],
|
|
45
|
+
"mandate": "AP2",
|
|
46
|
+
"credit_bureau": "https://four02proof.onrender.com/v1/score",
|
|
47
|
+
"free_tools": 21,
|
|
48
|
+
"paid_tools": 22,
|
|
49
|
+
"price_range": "$0.005 - $0.10 USDC"
|
|
50
|
+
},
|
|
51
|
+
"environments": {
|
|
52
|
+
"production": {
|
|
53
|
+
"endpoint": "https://mcp-x402.scriptmasterlabs.com/mcp",
|
|
54
|
+
"health": "https://mcp-x402.scriptmasterlabs.com/health"
|
|
55
|
+
},
|
|
56
|
+
"testnet": {
|
|
57
|
+
"note": "Set TESTNET=true to use Base Sepolia + XRPL Testnet"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|