@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.
Files changed (304) hide show
  1. package/.env.example +35 -0
  2. package/.github/workflows/ci.yml +59 -0
  3. package/.github/workflows/keepalive.yml +31 -0
  4. package/.well-known/agentcard.json +34 -0
  5. package/CONTRIBUTING.md +76 -0
  6. package/Dockerfile +19 -0
  7. package/LICENSE +21 -0
  8. package/README.md +304 -0
  9. package/agents.json +67 -0
  10. package/dist/lib/chains/base.d.ts +10 -0
  11. package/dist/lib/chains/base.d.ts.map +1 -0
  12. package/dist/lib/chains/base.js +73 -0
  13. package/dist/lib/chains/base.js.map +1 -0
  14. package/dist/lib/chains/solana.d.ts +10 -0
  15. package/dist/lib/chains/solana.d.ts.map +1 -0
  16. package/dist/lib/chains/solana.js +49 -0
  17. package/dist/lib/chains/solana.js.map +1 -0
  18. package/dist/lib/chains/xrpl.d.ts +10 -0
  19. package/dist/lib/chains/xrpl.d.ts.map +1 -0
  20. package/dist/lib/chains/xrpl.js +55 -0
  21. package/dist/lib/chains/xrpl.js.map +1 -0
  22. package/dist/lib/credit/bureau.d.ts +10 -0
  23. package/dist/lib/credit/bureau.d.ts.map +1 -0
  24. package/dist/lib/credit/bureau.js +58 -0
  25. package/dist/lib/credit/bureau.js.map +1 -0
  26. package/dist/lib/sml-api/agentcard.d.ts +17 -0
  27. package/dist/lib/sml-api/agentcard.d.ts.map +1 -0
  28. package/dist/lib/sml-api/agentcard.js +30 -0
  29. package/dist/lib/sml-api/agentcard.js.map +1 -0
  30. package/dist/lib/sml-api/backtest.d.ts +22 -0
  31. package/dist/lib/sml-api/backtest.d.ts.map +1 -0
  32. package/dist/lib/sml-api/backtest.js +28 -0
  33. package/dist/lib/sml-api/backtest.js.map +1 -0
  34. package/dist/lib/sml-api/brokers.d.ts +40 -0
  35. package/dist/lib/sml-api/brokers.d.ts.map +1 -0
  36. package/dist/lib/sml-api/brokers.js +128 -0
  37. package/dist/lib/sml-api/brokers.js.map +1 -0
  38. package/dist/lib/sml-api/copytrader.d.ts +11 -0
  39. package/dist/lib/sml-api/copytrader.d.ts.map +1 -0
  40. package/dist/lib/sml-api/copytrader.js +30 -0
  41. package/dist/lib/sml-api/copytrader.js.map +1 -0
  42. package/dist/lib/sml-api/crawl.d.ts +20 -0
  43. package/dist/lib/sml-api/crawl.d.ts.map +1 -0
  44. package/dist/lib/sml-api/crawl.js +32 -0
  45. package/dist/lib/sml-api/crawl.js.map +1 -0
  46. package/dist/lib/sml-api/echo.d.ts +10 -0
  47. package/dist/lib/sml-api/echo.d.ts.map +1 -0
  48. package/dist/lib/sml-api/echo.js +23 -0
  49. package/dist/lib/sml-api/echo.js.map +1 -0
  50. package/dist/lib/sml-api/forge.d.ts +11 -0
  51. package/dist/lib/sml-api/forge.d.ts.map +1 -0
  52. package/dist/lib/sml-api/forge.js +29 -0
  53. package/dist/lib/sml-api/forge.js.map +1 -0
  54. package/dist/lib/sml-api/ftd.d.ts +18 -0
  55. package/dist/lib/sml-api/ftd.d.ts.map +1 -0
  56. package/dist/lib/sml-api/ftd.js +43 -0
  57. package/dist/lib/sml-api/ftd.js.map +1 -0
  58. package/dist/lib/sml-api/ghost.d.ts +13 -0
  59. package/dist/lib/sml-api/ghost.d.ts.map +1 -0
  60. package/dist/lib/sml-api/ghost.js +29 -0
  61. package/dist/lib/sml-api/ghost.js.map +1 -0
  62. package/dist/lib/sml-api/launchpad.d.ts +20 -0
  63. package/dist/lib/sml-api/launchpad.d.ts.map +1 -0
  64. package/dist/lib/sml-api/launchpad.js +31 -0
  65. package/dist/lib/sml-api/launchpad.js.map +1 -0
  66. package/dist/lib/sml-api/leviathan.d.ts +22 -0
  67. package/dist/lib/sml-api/leviathan.d.ts.map +1 -0
  68. package/dist/lib/sml-api/leviathan.js +33 -0
  69. package/dist/lib/sml-api/leviathan.js.map +1 -0
  70. package/dist/lib/sml-api/nexus.d.ts +18 -0
  71. package/dist/lib/sml-api/nexus.d.ts.map +1 -0
  72. package/dist/lib/sml-api/nexus.js +40 -0
  73. package/dist/lib/sml-api/nexus.js.map +1 -0
  74. package/dist/lib/sml-api/proof402.d.ts +6 -0
  75. package/dist/lib/sml-api/proof402.d.ts.map +1 -0
  76. package/dist/lib/sml-api/proof402.js +30 -0
  77. package/dist/lib/sml-api/proof402.js.map +1 -0
  78. package/dist/lib/sml-api/rails.d.ts +12 -0
  79. package/dist/lib/sml-api/rails.d.ts.map +1 -0
  80. package/dist/lib/sml-api/rails.js +29 -0
  81. package/dist/lib/sml-api/rails.js.map +1 -0
  82. package/dist/lib/sml-api/shadow.d.ts +15 -0
  83. package/dist/lib/sml-api/shadow.d.ts.map +1 -0
  84. package/dist/lib/sml-api/shadow.js +27 -0
  85. package/dist/lib/sml-api/shadow.js.map +1 -0
  86. package/dist/lib/sml-api/squeezeos.d.ts +21 -0
  87. package/dist/lib/sml-api/squeezeos.d.ts.map +1 -0
  88. package/dist/lib/sml-api/squeezeos.js +97 -0
  89. package/dist/lib/sml-api/squeezeos.js.map +1 -0
  90. package/dist/lib/sml-api/xdeo.d.ts +13 -0
  91. package/dist/lib/sml-api/xdeo.d.ts.map +1 -0
  92. package/dist/lib/sml-api/xdeo.js +34 -0
  93. package/dist/lib/sml-api/xdeo.js.map +1 -0
  94. package/dist/lib/sml-api/xmit.d.ts +13 -0
  95. package/dist/lib/sml-api/xmit.d.ts.map +1 -0
  96. package/dist/lib/sml-api/xmit.js +34 -0
  97. package/dist/lib/sml-api/xmit.js.map +1 -0
  98. package/dist/server/health.d.ts +16 -0
  99. package/dist/server/health.d.ts.map +1 -0
  100. package/dist/server/health.js +39 -0
  101. package/dist/server/health.js.map +1 -0
  102. package/dist/server/index.d.ts +3 -0
  103. package/dist/server/index.d.ts.map +1 -0
  104. package/dist/server/index.js +193 -0
  105. package/dist/server/index.js.map +1 -0
  106. package/dist/server/payments/ap2.d.ts +17 -0
  107. package/dist/server/payments/ap2.d.ts.map +1 -0
  108. package/dist/server/payments/ap2.js +75 -0
  109. package/dist/server/payments/ap2.js.map +1 -0
  110. package/dist/server/payments/receipt.d.ts +28 -0
  111. package/dist/server/payments/receipt.d.ts.map +1 -0
  112. package/dist/server/payments/receipt.js +60 -0
  113. package/dist/server/payments/receipt.js.map +1 -0
  114. package/dist/server/payments/router.d.ts +23 -0
  115. package/dist/server/payments/router.d.ts.map +1 -0
  116. package/dist/server/payments/router.js +69 -0
  117. package/dist/server/payments/router.js.map +1 -0
  118. package/dist/server/payments/wallet.d.ts +18 -0
  119. package/dist/server/payments/wallet.d.ts.map +1 -0
  120. package/dist/server/payments/wallet.js +107 -0
  121. package/dist/server/payments/wallet.js.map +1 -0
  122. package/dist/server/payments/x402.d.ts +29 -0
  123. package/dist/server/payments/x402.d.ts.map +1 -0
  124. package/dist/server/payments/x402.js +122 -0
  125. package/dist/server/payments/x402.js.map +1 -0
  126. package/dist/server/registry/catalog.d.ts +12 -0
  127. package/dist/server/registry/catalog.d.ts.map +1 -0
  128. package/dist/server/registry/catalog.js +55 -0
  129. package/dist/server/registry/catalog.js.map +1 -0
  130. package/dist/server/registry/discovery.d.ts +16 -0
  131. package/dist/server/registry/discovery.d.ts.map +1 -0
  132. package/dist/server/registry/discovery.js +33 -0
  133. package/dist/server/registry/discovery.js.map +1 -0
  134. package/dist/server/registry/pricing.d.ts +10 -0
  135. package/dist/server/registry/pricing.d.ts.map +1 -0
  136. package/dist/server/registry/pricing.js +66 -0
  137. package/dist/server/registry/pricing.js.map +1 -0
  138. package/dist/server/security/acl.d.ts +28 -0
  139. package/dist/server/security/acl.d.ts.map +1 -0
  140. package/dist/server/security/acl.js +36 -0
  141. package/dist/server/security/acl.js.map +1 -0
  142. package/dist/server/security/audit.d.ts +15 -0
  143. package/dist/server/security/audit.d.ts.map +1 -0
  144. package/dist/server/security/audit.js +77 -0
  145. package/dist/server/security/audit.js.map +1 -0
  146. package/dist/server/security/rate-limit.d.ts +12 -0
  147. package/dist/server/security/rate-limit.d.ts.map +1 -0
  148. package/dist/server/security/rate-limit.js +72 -0
  149. package/dist/server/security/rate-limit.js.map +1 -0
  150. package/dist/server/security/sandbox.d.ts +7 -0
  151. package/dist/server/security/sandbox.d.ts.map +1 -0
  152. package/dist/server/security/sandbox.js +42 -0
  153. package/dist/server/security/sandbox.js.map +1 -0
  154. package/dist/server/tools/agentcard.d.ts +3 -0
  155. package/dist/server/tools/agentcard.d.ts.map +1 -0
  156. package/dist/server/tools/agentcard.js +118 -0
  157. package/dist/server/tools/agentcard.js.map +1 -0
  158. package/dist/server/tools/backtest.d.ts +3 -0
  159. package/dist/server/tools/backtest.d.ts.map +1 -0
  160. package/dist/server/tools/backtest.js +112 -0
  161. package/dist/server/tools/backtest.js.map +1 -0
  162. package/dist/server/tools/brokers.d.ts +3 -0
  163. package/dist/server/tools/brokers.d.ts.map +1 -0
  164. package/dist/server/tools/brokers.js +223 -0
  165. package/dist/server/tools/brokers.js.map +1 -0
  166. package/dist/server/tools/copytrader.d.ts +3 -0
  167. package/dist/server/tools/copytrader.d.ts.map +1 -0
  168. package/dist/server/tools/copytrader.js +90 -0
  169. package/dist/server/tools/copytrader.js.map +1 -0
  170. package/dist/server/tools/crawl.d.ts +3 -0
  171. package/dist/server/tools/crawl.d.ts.map +1 -0
  172. package/dist/server/tools/crawl.js +60 -0
  173. package/dist/server/tools/crawl.js.map +1 -0
  174. package/dist/server/tools/discovery.d.ts +3 -0
  175. package/dist/server/tools/discovery.d.ts.map +1 -0
  176. package/dist/server/tools/discovery.js +188 -0
  177. package/dist/server/tools/discovery.js.map +1 -0
  178. package/dist/server/tools/echo.d.ts +3 -0
  179. package/dist/server/tools/echo.d.ts.map +1 -0
  180. package/dist/server/tools/echo.js +48 -0
  181. package/dist/server/tools/echo.js.map +1 -0
  182. package/dist/server/tools/forge.d.ts +3 -0
  183. package/dist/server/tools/forge.d.ts.map +1 -0
  184. package/dist/server/tools/forge.js +77 -0
  185. package/dist/server/tools/forge.js.map +1 -0
  186. package/dist/server/tools/ftd.d.ts +3 -0
  187. package/dist/server/tools/ftd.d.ts.map +1 -0
  188. package/dist/server/tools/ftd.js +70 -0
  189. package/dist/server/tools/ftd.js.map +1 -0
  190. package/dist/server/tools/ghost.d.ts +3 -0
  191. package/dist/server/tools/ghost.d.ts.map +1 -0
  192. package/dist/server/tools/ghost.js +83 -0
  193. package/dist/server/tools/ghost.js.map +1 -0
  194. package/dist/server/tools/index.d.ts +3 -0
  195. package/dist/server/tools/index.d.ts.map +1 -0
  196. package/dist/server/tools/index.js +44 -0
  197. package/dist/server/tools/index.js.map +1 -0
  198. package/dist/server/tools/launchpad.d.ts +3 -0
  199. package/dist/server/tools/launchpad.d.ts.map +1 -0
  200. package/dist/server/tools/launchpad.js +151 -0
  201. package/dist/server/tools/launchpad.js.map +1 -0
  202. package/dist/server/tools/leviathan.d.ts +3 -0
  203. package/dist/server/tools/leviathan.d.ts.map +1 -0
  204. package/dist/server/tools/leviathan.js +73 -0
  205. package/dist/server/tools/leviathan.js.map +1 -0
  206. package/dist/server/tools/nexus.d.ts +3 -0
  207. package/dist/server/tools/nexus.d.ts.map +1 -0
  208. package/dist/server/tools/nexus.js +65 -0
  209. package/dist/server/tools/nexus.js.map +1 -0
  210. package/dist/server/tools/proof402.d.ts +3 -0
  211. package/dist/server/tools/proof402.d.ts.map +1 -0
  212. package/dist/server/tools/proof402.js +74 -0
  213. package/dist/server/tools/proof402.js.map +1 -0
  214. package/dist/server/tools/rails.d.ts +3 -0
  215. package/dist/server/tools/rails.d.ts.map +1 -0
  216. package/dist/server/tools/rails.js +82 -0
  217. package/dist/server/tools/rails.js.map +1 -0
  218. package/dist/server/tools/shadow.d.ts +3 -0
  219. package/dist/server/tools/shadow.d.ts.map +1 -0
  220. package/dist/server/tools/shadow.js +114 -0
  221. package/dist/server/tools/shadow.js.map +1 -0
  222. package/dist/server/tools/squeezeos.d.ts +3 -0
  223. package/dist/server/tools/squeezeos.d.ts.map +1 -0
  224. package/dist/server/tools/squeezeos.js +231 -0
  225. package/dist/server/tools/squeezeos.js.map +1 -0
  226. package/dist/server/tools/xdeo.d.ts +3 -0
  227. package/dist/server/tools/xdeo.d.ts.map +1 -0
  228. package/dist/server/tools/xdeo.js +58 -0
  229. package/dist/server/tools/xdeo.js.map +1 -0
  230. package/dist/server/tools/xmit.d.ts +3 -0
  231. package/dist/server/tools/xmit.d.ts.map +1 -0
  232. package/dist/server/tools/xmit.js +59 -0
  233. package/dist/server/tools/xmit.js.map +1 -0
  234. package/docker-compose.yml +50 -0
  235. package/llms.txt +70 -0
  236. package/package.json +77 -0
  237. package/render.yaml +39 -0
  238. package/sdk/mcp-x402-sdk/package.json +18 -0
  239. package/sdk/mcp-x402-sdk/src/index.ts +118 -0
  240. package/sdk/mcp-x402-sdk/tsconfig.json +14 -0
  241. package/server.json +60 -0
  242. package/services/backtest_service.py +176 -0
  243. package/src/lib/chains/base.ts +77 -0
  244. package/src/lib/chains/solana.ts +59 -0
  245. package/src/lib/chains/xrpl.ts +63 -0
  246. package/src/lib/credit/bureau.ts +65 -0
  247. package/src/lib/sml-api/agentcard.ts +40 -0
  248. package/src/lib/sml-api/backtest.ts +47 -0
  249. package/src/lib/sml-api/brokers.ts +160 -0
  250. package/src/lib/sml-api/copytrader.ts +33 -0
  251. package/src/lib/sml-api/crawl.ts +44 -0
  252. package/src/lib/sml-api/echo.ts +28 -0
  253. package/src/lib/sml-api/forge.ts +33 -0
  254. package/src/lib/sml-api/ftd.ts +53 -0
  255. package/src/lib/sml-api/ghost.ts +35 -0
  256. package/src/lib/sml-api/launchpad.ts +43 -0
  257. package/src/lib/sml-api/leviathan.ts +49 -0
  258. package/src/lib/sml-api/nexus.ts +50 -0
  259. package/src/lib/sml-api/proof402.ts +27 -0
  260. package/src/lib/sml-api/rails.ts +34 -0
  261. package/src/lib/sml-api/shadow.ts +35 -0
  262. package/src/lib/sml-api/squeezeos.ts +95 -0
  263. package/src/lib/sml-api/xdeo.ts +40 -0
  264. package/src/lib/sml-api/xmit.ts +40 -0
  265. package/src/server/health.ts +52 -0
  266. package/src/server/index.ts +206 -0
  267. package/src/server/payments/ap2.ts +99 -0
  268. package/src/server/payments/receipt.ts +85 -0
  269. package/src/server/payments/router.ts +110 -0
  270. package/src/server/payments/wallet.ts +123 -0
  271. package/src/server/payments/x402.ts +162 -0
  272. package/src/server/registry/catalog.ts +61 -0
  273. package/src/server/registry/discovery.ts +39 -0
  274. package/src/server/registry/pricing.ts +76 -0
  275. package/src/server/security/acl.ts +42 -0
  276. package/src/server/security/audit.ts +94 -0
  277. package/src/server/security/rate-limit.ts +84 -0
  278. package/src/server/security/sandbox.ts +40 -0
  279. package/src/server/tools/agentcard.ts +134 -0
  280. package/src/server/tools/backtest.ts +119 -0
  281. package/src/server/tools/brokers.ts +250 -0
  282. package/src/server/tools/copytrader.ts +104 -0
  283. package/src/server/tools/crawl.ts +70 -0
  284. package/src/server/tools/discovery.ts +202 -0
  285. package/src/server/tools/echo.ts +58 -0
  286. package/src/server/tools/forge.ts +87 -0
  287. package/src/server/tools/ftd.ts +88 -0
  288. package/src/server/tools/ghost.ts +93 -0
  289. package/src/server/tools/index.ts +42 -0
  290. package/src/server/tools/launchpad.ts +173 -0
  291. package/src/server/tools/leviathan.ts +81 -0
  292. package/src/server/tools/nexus.ts +76 -0
  293. package/src/server/tools/proof402.ts +87 -0
  294. package/src/server/tools/rails.ts +92 -0
  295. package/src/server/tools/shadow.ts +128 -0
  296. package/src/server/tools/squeezeos.ts +312 -0
  297. package/src/server/tools/xdeo.ts +67 -0
  298. package/src/server/tools/xmit.ts +68 -0
  299. package/tests/integration/e2e.test.ts +51 -0
  300. package/tests/unit/payments.test.ts +49 -0
  301. package/tests/unit/security.test.ts +92 -0
  302. package/tests/unit/tools.test.ts +42 -0
  303. package/tsconfig.json +21 -0
  304. 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
+ }