@scriptmasterlabs/mcp-x402 2.1.1 → 2.1.2

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 (290) hide show
  1. package/.well-known/agentcard.json +34 -0
  2. package/.well-known/ai.txt +32 -0
  3. package/CONTRIBUTING.md +76 -0
  4. package/LICENSE +21 -57
  5. package/README.md +304 -262
  6. package/agents.json +81 -0
  7. package/ai/faq.json +74 -0
  8. package/ai/summary.json +157 -0
  9. package/dist/lib/chains/base.d.ts +10 -0
  10. package/dist/lib/chains/base.d.ts.map +1 -0
  11. package/dist/lib/chains/base.js +75 -0
  12. package/dist/lib/chains/base.js.map +1 -0
  13. package/dist/lib/chains/solana.d.ts +10 -0
  14. package/dist/lib/chains/solana.d.ts.map +1 -0
  15. package/dist/lib/chains/solana.js +49 -0
  16. package/dist/lib/chains/solana.js.map +1 -0
  17. package/dist/lib/chains/xrpl.d.ts +10 -0
  18. package/dist/lib/chains/xrpl.d.ts.map +1 -0
  19. package/dist/lib/chains/xrpl.js +55 -0
  20. package/dist/lib/chains/xrpl.js.map +1 -0
  21. package/dist/lib/credit/bureau.d.ts +16 -0
  22. package/dist/lib/credit/bureau.d.ts.map +1 -0
  23. package/dist/lib/credit/bureau.js +88 -0
  24. package/dist/lib/credit/bureau.js.map +1 -0
  25. package/dist/lib/sml-api/agentcard.d.ts +17 -0
  26. package/dist/lib/sml-api/agentcard.d.ts.map +1 -0
  27. package/dist/lib/sml-api/agentcard.js +30 -0
  28. package/dist/lib/sml-api/agentcard.js.map +1 -0
  29. package/dist/lib/sml-api/backtest.d.ts +22 -0
  30. package/dist/lib/sml-api/backtest.d.ts.map +1 -0
  31. package/dist/lib/sml-api/backtest.js +28 -0
  32. package/dist/lib/sml-api/backtest.js.map +1 -0
  33. package/dist/lib/sml-api/brokers.d.ts +40 -0
  34. package/dist/lib/sml-api/brokers.d.ts.map +1 -0
  35. package/dist/lib/sml-api/brokers.js +128 -0
  36. package/dist/lib/sml-api/brokers.js.map +1 -0
  37. package/dist/lib/sml-api/copytrader.d.ts +11 -0
  38. package/dist/lib/sml-api/copytrader.d.ts.map +1 -0
  39. package/dist/lib/sml-api/copytrader.js +30 -0
  40. package/dist/lib/sml-api/copytrader.js.map +1 -0
  41. package/dist/lib/sml-api/crawl.d.ts +20 -0
  42. package/dist/lib/sml-api/crawl.d.ts.map +1 -0
  43. package/dist/lib/sml-api/crawl.js +32 -0
  44. package/dist/lib/sml-api/crawl.js.map +1 -0
  45. package/dist/lib/sml-api/echo.d.ts +10 -0
  46. package/dist/lib/sml-api/echo.d.ts.map +1 -0
  47. package/dist/lib/sml-api/echo.js +23 -0
  48. package/dist/lib/sml-api/echo.js.map +1 -0
  49. package/dist/lib/sml-api/forge.d.ts +11 -0
  50. package/dist/lib/sml-api/forge.d.ts.map +1 -0
  51. package/dist/lib/sml-api/forge.js +29 -0
  52. package/dist/lib/sml-api/forge.js.map +1 -0
  53. package/dist/lib/sml-api/ftd.d.ts +18 -0
  54. package/dist/lib/sml-api/ftd.d.ts.map +1 -0
  55. package/dist/lib/sml-api/ftd.js +43 -0
  56. package/dist/lib/sml-api/ftd.js.map +1 -0
  57. package/dist/lib/sml-api/ghost.d.ts +13 -0
  58. package/dist/lib/sml-api/ghost.d.ts.map +1 -0
  59. package/dist/lib/sml-api/ghost.js +29 -0
  60. package/dist/lib/sml-api/ghost.js.map +1 -0
  61. package/dist/lib/sml-api/launchpad.d.ts +20 -0
  62. package/dist/lib/sml-api/launchpad.d.ts.map +1 -0
  63. package/dist/lib/sml-api/launchpad.js +31 -0
  64. package/dist/lib/sml-api/launchpad.js.map +1 -0
  65. package/dist/lib/sml-api/leviathan.d.ts +22 -0
  66. package/dist/lib/sml-api/leviathan.d.ts.map +1 -0
  67. package/dist/lib/sml-api/leviathan.js +33 -0
  68. package/dist/lib/sml-api/leviathan.js.map +1 -0
  69. package/dist/lib/sml-api/nexus.d.ts +18 -0
  70. package/dist/lib/sml-api/nexus.d.ts.map +1 -0
  71. package/dist/lib/sml-api/nexus.js +40 -0
  72. package/dist/lib/sml-api/nexus.js.map +1 -0
  73. package/dist/lib/sml-api/proof402.d.ts +6 -0
  74. package/dist/lib/sml-api/proof402.d.ts.map +1 -0
  75. package/dist/lib/sml-api/proof402.js +30 -0
  76. package/dist/lib/sml-api/proof402.js.map +1 -0
  77. package/dist/lib/sml-api/rails.d.ts +12 -0
  78. package/dist/lib/sml-api/rails.d.ts.map +1 -0
  79. package/dist/lib/sml-api/rails.js +29 -0
  80. package/dist/lib/sml-api/rails.js.map +1 -0
  81. package/dist/lib/sml-api/shadow.d.ts +15 -0
  82. package/dist/lib/sml-api/shadow.d.ts.map +1 -0
  83. package/dist/lib/sml-api/shadow.js +27 -0
  84. package/dist/lib/sml-api/shadow.js.map +1 -0
  85. package/dist/lib/sml-api/squeezeos.d.ts +21 -0
  86. package/dist/lib/sml-api/squeezeos.d.ts.map +1 -0
  87. package/dist/lib/sml-api/squeezeos.js +97 -0
  88. package/dist/lib/sml-api/squeezeos.js.map +1 -0
  89. package/dist/lib/sml-api/xdeo.d.ts +13 -0
  90. package/dist/lib/sml-api/xdeo.d.ts.map +1 -0
  91. package/dist/lib/sml-api/xdeo.js +34 -0
  92. package/dist/lib/sml-api/xdeo.js.map +1 -0
  93. package/dist/lib/sml-api/xmit.d.ts +13 -0
  94. package/dist/lib/sml-api/xmit.d.ts.map +1 -0
  95. package/dist/lib/sml-api/xmit.js +34 -0
  96. package/dist/lib/sml-api/xmit.js.map +1 -0
  97. package/dist/server/apm/capabilities.d.ts +31 -0
  98. package/dist/server/apm/capabilities.d.ts.map +1 -0
  99. package/dist/server/apm/capabilities.js +157 -0
  100. package/dist/server/apm/capabilities.js.map +1 -0
  101. package/dist/server/apm/execute.d.ts +18 -0
  102. package/dist/server/apm/execute.d.ts.map +1 -0
  103. package/dist/server/apm/execute.js +37 -0
  104. package/dist/server/apm/execute.js.map +1 -0
  105. package/dist/server/apm/matcher.d.ts +17 -0
  106. package/dist/server/apm/matcher.d.ts.map +1 -0
  107. package/dist/server/apm/matcher.js +71 -0
  108. package/dist/server/apm/matcher.js.map +1 -0
  109. package/dist/server/apm/quote.d.ts +53 -0
  110. package/dist/server/apm/quote.d.ts.map +1 -0
  111. package/dist/server/apm/quote.js +82 -0
  112. package/dist/server/apm/quote.js.map +1 -0
  113. package/dist/server/apm/schema.d.ts +109 -0
  114. package/dist/server/apm/schema.d.ts.map +1 -0
  115. package/dist/server/apm/schema.js +31 -0
  116. package/dist/server/apm/schema.js.map +1 -0
  117. package/dist/server/health.d.ts +16 -0
  118. package/dist/server/health.d.ts.map +1 -0
  119. package/dist/server/health.js +39 -0
  120. package/dist/server/health.js.map +1 -0
  121. package/dist/server/index.d.ts +3 -0
  122. package/dist/server/index.d.ts.map +1 -0
  123. package/dist/server/index.js +322 -0
  124. package/dist/server/index.js.map +1 -0
  125. package/dist/server/payments/agent-payment.d.ts +71 -0
  126. package/dist/server/payments/agent-payment.d.ts.map +1 -0
  127. package/dist/server/payments/agent-payment.js +112 -0
  128. package/dist/server/payments/agent-payment.js.map +1 -0
  129. package/dist/server/payments/ap2.d.ts +17 -0
  130. package/dist/server/payments/ap2.d.ts.map +1 -0
  131. package/dist/server/payments/ap2.js +77 -0
  132. package/dist/server/payments/ap2.js.map +1 -0
  133. package/dist/server/payments/receipt.d.ts +28 -0
  134. package/dist/server/payments/receipt.d.ts.map +1 -0
  135. package/dist/server/payments/receipt.js +60 -0
  136. package/dist/server/payments/receipt.js.map +1 -0
  137. package/dist/server/payments/router.d.ts +23 -0
  138. package/dist/server/payments/router.d.ts.map +1 -0
  139. package/dist/server/payments/router.js +69 -0
  140. package/dist/server/payments/router.js.map +1 -0
  141. package/dist/server/payments/wallet.d.ts +18 -0
  142. package/dist/server/payments/wallet.d.ts.map +1 -0
  143. package/dist/server/payments/wallet.js +107 -0
  144. package/dist/server/payments/wallet.js.map +1 -0
  145. package/dist/server/payments/x402.d.ts +55 -0
  146. package/dist/server/payments/x402.d.ts.map +1 -0
  147. package/dist/server/payments/x402.js +247 -0
  148. package/dist/server/payments/x402.js.map +1 -0
  149. package/dist/server/registry/backends.d.ts +29 -0
  150. package/dist/server/registry/backends.d.ts.map +1 -0
  151. package/dist/server/registry/backends.js +61 -0
  152. package/dist/server/registry/backends.js.map +1 -0
  153. package/dist/server/registry/catalog.d.ts +12 -0
  154. package/dist/server/registry/catalog.d.ts.map +1 -0
  155. package/dist/server/registry/catalog.js +55 -0
  156. package/dist/server/registry/catalog.js.map +1 -0
  157. package/dist/server/registry/discovery.d.ts +16 -0
  158. package/dist/server/registry/discovery.d.ts.map +1 -0
  159. package/dist/server/registry/discovery.js +33 -0
  160. package/dist/server/registry/discovery.js.map +1 -0
  161. package/dist/server/registry/pricing.d.ts +10 -0
  162. package/dist/server/registry/pricing.d.ts.map +1 -0
  163. package/dist/server/registry/pricing.js +124 -0
  164. package/dist/server/registry/pricing.js.map +1 -0
  165. package/dist/server/security/acl.d.ts +28 -0
  166. package/dist/server/security/acl.d.ts.map +1 -0
  167. package/dist/server/security/acl.js +36 -0
  168. package/dist/server/security/acl.js.map +1 -0
  169. package/dist/server/security/audit.d.ts +15 -0
  170. package/dist/server/security/audit.d.ts.map +1 -0
  171. package/dist/server/security/audit.js +77 -0
  172. package/dist/server/security/audit.js.map +1 -0
  173. package/dist/server/security/rate-limit.d.ts +12 -0
  174. package/dist/server/security/rate-limit.d.ts.map +1 -0
  175. package/dist/server/security/rate-limit.js +72 -0
  176. package/dist/server/security/rate-limit.js.map +1 -0
  177. package/dist/server/security/sandbox.d.ts +7 -0
  178. package/dist/server/security/sandbox.d.ts.map +1 -0
  179. package/dist/server/security/sandbox.js +42 -0
  180. package/dist/server/security/sandbox.js.map +1 -0
  181. package/dist/server/tools/agentcard.d.ts +3 -0
  182. package/dist/server/tools/agentcard.d.ts.map +1 -0
  183. package/dist/server/tools/agentcard.js +118 -0
  184. package/dist/server/tools/agentcard.js.map +1 -0
  185. package/dist/server/tools/apm-execute.d.ts +3 -0
  186. package/dist/server/tools/apm-execute.d.ts.map +1 -0
  187. package/dist/server/tools/apm-execute.js +94 -0
  188. package/dist/server/tools/apm-execute.js.map +1 -0
  189. package/dist/server/tools/apm.d.ts +3 -0
  190. package/dist/server/tools/apm.d.ts.map +1 -0
  191. package/dist/server/tools/apm.js +135 -0
  192. package/dist/server/tools/apm.js.map +1 -0
  193. package/dist/server/tools/backtest.d.ts +3 -0
  194. package/dist/server/tools/backtest.d.ts.map +1 -0
  195. package/dist/server/tools/backtest.js +112 -0
  196. package/dist/server/tools/backtest.js.map +1 -0
  197. package/dist/server/tools/brokers.d.ts +3 -0
  198. package/dist/server/tools/brokers.d.ts.map +1 -0
  199. package/dist/server/tools/brokers.js +223 -0
  200. package/dist/server/tools/brokers.js.map +1 -0
  201. package/dist/server/tools/copytrader.d.ts +3 -0
  202. package/dist/server/tools/copytrader.d.ts.map +1 -0
  203. package/dist/server/tools/copytrader.js +90 -0
  204. package/dist/server/tools/copytrader.js.map +1 -0
  205. package/dist/server/tools/crawl.d.ts +3 -0
  206. package/dist/server/tools/crawl.d.ts.map +1 -0
  207. package/dist/server/tools/crawl.js +60 -0
  208. package/dist/server/tools/crawl.js.map +1 -0
  209. package/dist/server/tools/discovery.d.ts +3 -0
  210. package/dist/server/tools/discovery.d.ts.map +1 -0
  211. package/dist/server/tools/discovery.js +181 -0
  212. package/dist/server/tools/discovery.js.map +1 -0
  213. package/dist/server/tools/echo.d.ts +3 -0
  214. package/dist/server/tools/echo.d.ts.map +1 -0
  215. package/dist/server/tools/echo.js +48 -0
  216. package/dist/server/tools/echo.js.map +1 -0
  217. package/dist/server/tools/forge.d.ts +3 -0
  218. package/dist/server/tools/forge.d.ts.map +1 -0
  219. package/dist/server/tools/forge.js +77 -0
  220. package/dist/server/tools/forge.js.map +1 -0
  221. package/dist/server/tools/ftd.d.ts +3 -0
  222. package/dist/server/tools/ftd.d.ts.map +1 -0
  223. package/dist/server/tools/ftd.js +70 -0
  224. package/dist/server/tools/ftd.js.map +1 -0
  225. package/dist/server/tools/ghost.d.ts +3 -0
  226. package/dist/server/tools/ghost.d.ts.map +1 -0
  227. package/dist/server/tools/ghost.js +83 -0
  228. package/dist/server/tools/ghost.js.map +1 -0
  229. package/dist/server/tools/index.d.ts +3 -0
  230. package/dist/server/tools/index.d.ts.map +1 -0
  231. package/dist/server/tools/index.js +48 -0
  232. package/dist/server/tools/index.js.map +1 -0
  233. package/dist/server/tools/launchpad.d.ts +3 -0
  234. package/dist/server/tools/launchpad.d.ts.map +1 -0
  235. package/dist/server/tools/launchpad.js +151 -0
  236. package/dist/server/tools/launchpad.js.map +1 -0
  237. package/dist/server/tools/leviathan.d.ts +3 -0
  238. package/dist/server/tools/leviathan.d.ts.map +1 -0
  239. package/dist/server/tools/leviathan.js +73 -0
  240. package/dist/server/tools/leviathan.js.map +1 -0
  241. package/dist/server/tools/nexus.d.ts +3 -0
  242. package/dist/server/tools/nexus.d.ts.map +1 -0
  243. package/dist/server/tools/nexus.js +65 -0
  244. package/dist/server/tools/nexus.js.map +1 -0
  245. package/dist/server/tools/proof402.d.ts +3 -0
  246. package/dist/server/tools/proof402.d.ts.map +1 -0
  247. package/dist/server/tools/proof402.js +74 -0
  248. package/dist/server/tools/proof402.js.map +1 -0
  249. package/dist/server/tools/rails.d.ts +3 -0
  250. package/dist/server/tools/rails.d.ts.map +1 -0
  251. package/dist/server/tools/rails.js +82 -0
  252. package/dist/server/tools/rails.js.map +1 -0
  253. package/dist/server/tools/shadow.d.ts +3 -0
  254. package/dist/server/tools/shadow.d.ts.map +1 -0
  255. package/dist/server/tools/shadow.js +114 -0
  256. package/dist/server/tools/shadow.js.map +1 -0
  257. package/dist/server/tools/squeezeos.d.ts +3 -0
  258. package/dist/server/tools/squeezeos.d.ts.map +1 -0
  259. package/dist/server/tools/squeezeos.js +249 -0
  260. package/dist/server/tools/squeezeos.js.map +1 -0
  261. package/dist/server/tools/xdeo.d.ts +3 -0
  262. package/dist/server/tools/xdeo.d.ts.map +1 -0
  263. package/dist/server/tools/xdeo.js +58 -0
  264. package/dist/server/tools/xdeo.js.map +1 -0
  265. package/dist/server/tools/xmit.d.ts +3 -0
  266. package/dist/server/tools/xmit.d.ts.map +1 -0
  267. package/dist/server/tools/xmit.js +59 -0
  268. package/dist/server/tools/xmit.js.map +1 -0
  269. package/eslint.config.mjs +28 -0
  270. package/llms.txt +170 -108
  271. package/package.json +78 -65
  272. package/server.json +24 -0
  273. package/.well-known/x402.json +0 -37
  274. package/dist/index.d.ts +0 -12
  275. package/dist/index.d.ts.map +0 -1
  276. package/dist/index.js +0 -9
  277. package/dist/index.js.map +0 -1
  278. package/dist/mcp-wrapper.d.ts +0 -71
  279. package/dist/mcp-wrapper.d.ts.map +0 -1
  280. package/dist/mcp-wrapper.js +0 -104
  281. package/dist/mcp-wrapper.js.map +0 -1
  282. package/dist/x402-middleware.d.ts +0 -76
  283. package/dist/x402-middleware.d.ts.map +0 -1
  284. package/dist/x402-middleware.js +0 -113
  285. package/dist/x402-middleware.js.map +0 -1
  286. package/dist/xrpl-facilitator.d.ts +0 -77
  287. package/dist/xrpl-facilitator.d.ts.map +0 -1
  288. package/dist/xrpl-facilitator.js +0 -156
  289. package/dist/xrpl-facilitator.js.map +0 -1
  290. package/schema.jsonld +0 -97
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Agent Preference Manifest (APM) — the "ask, don't tell" schema.
3
+ *
4
+ * An agent declares what it NEEDS; SML answers with matching live tools.
5
+ * These types double as the published APM standard.
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const ChainEnum: z.ZodEnum<["base", "xrpl", "solana"]>;
9
+ export declare const ConstraintsSchema: z.ZodObject<{
10
+ /** Max USD the agent will pay per downstream tool call. */
11
+ max_price_usd: z.ZodOptional<z.ZodNumber>;
12
+ /** Payment chains the agent accepts. Empty/omitted = any. */
13
+ chains_accepted: z.ZodOptional<z.ZodArray<z.ZodEnum<["base", "xrpl", "solana"]>, "many">>;
14
+ /** Max acceptable data staleness, in seconds. */
15
+ max_freshness_sec: z.ZodOptional<z.ZodNumber>;
16
+ /** Require tools that cite authoritative sources. */
17
+ needs_attribution: z.ZodOptional<z.ZodBoolean>;
18
+ /** Agent's expected credit-score floor (informational; payment layer enforces >=300). */
19
+ min_credit_score: z.ZodOptional<z.ZodNumber>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ max_price_usd?: number | undefined;
22
+ chains_accepted?: ("base" | "xrpl" | "solana")[] | undefined;
23
+ max_freshness_sec?: number | undefined;
24
+ needs_attribution?: boolean | undefined;
25
+ min_credit_score?: number | undefined;
26
+ }, {
27
+ max_price_usd?: number | undefined;
28
+ chains_accepted?: ("base" | "xrpl" | "solana")[] | undefined;
29
+ max_freshness_sec?: number | undefined;
30
+ needs_attribution?: boolean | undefined;
31
+ min_credit_score?: number | undefined;
32
+ }>;
33
+ export declare const ManifestSchema: z.ZodObject<{
34
+ need: z.ZodString;
35
+ mode: z.ZodDefault<z.ZodEnum<["preview", "contract"]>>;
36
+ wallet_address: z.ZodOptional<z.ZodString>;
37
+ agent_id: z.ZodOptional<z.ZodString>;
38
+ constraints: z.ZodOptional<z.ZodObject<{
39
+ /** Max USD the agent will pay per downstream tool call. */
40
+ max_price_usd: z.ZodOptional<z.ZodNumber>;
41
+ /** Payment chains the agent accepts. Empty/omitted = any. */
42
+ chains_accepted: z.ZodOptional<z.ZodArray<z.ZodEnum<["base", "xrpl", "solana"]>, "many">>;
43
+ /** Max acceptable data staleness, in seconds. */
44
+ max_freshness_sec: z.ZodOptional<z.ZodNumber>;
45
+ /** Require tools that cite authoritative sources. */
46
+ needs_attribution: z.ZodOptional<z.ZodBoolean>;
47
+ /** Agent's expected credit-score floor (informational; payment layer enforces >=300). */
48
+ min_credit_score: z.ZodOptional<z.ZodNumber>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ max_price_usd?: number | undefined;
51
+ chains_accepted?: ("base" | "xrpl" | "solana")[] | undefined;
52
+ max_freshness_sec?: number | undefined;
53
+ needs_attribution?: boolean | undefined;
54
+ min_credit_score?: number | undefined;
55
+ }, {
56
+ max_price_usd?: number | undefined;
57
+ chains_accepted?: ("base" | "xrpl" | "solana")[] | undefined;
58
+ max_freshness_sec?: number | undefined;
59
+ needs_attribution?: boolean | undefined;
60
+ min_credit_score?: number | undefined;
61
+ }>>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ mode: "preview" | "contract";
64
+ need: string;
65
+ wallet_address?: string | undefined;
66
+ agent_id?: string | undefined;
67
+ constraints?: {
68
+ max_price_usd?: number | undefined;
69
+ chains_accepted?: ("base" | "xrpl" | "solana")[] | undefined;
70
+ max_freshness_sec?: number | undefined;
71
+ needs_attribution?: boolean | undefined;
72
+ min_credit_score?: number | undefined;
73
+ } | undefined;
74
+ }, {
75
+ need: string;
76
+ mode?: "preview" | "contract" | undefined;
77
+ wallet_address?: string | undefined;
78
+ agent_id?: string | undefined;
79
+ constraints?: {
80
+ max_price_usd?: number | undefined;
81
+ chains_accepted?: ("base" | "xrpl" | "solana")[] | undefined;
82
+ max_freshness_sec?: number | undefined;
83
+ needs_attribution?: boolean | undefined;
84
+ min_credit_score?: number | undefined;
85
+ } | undefined;
86
+ }>;
87
+ export type Manifest = z.infer<typeof ManifestSchema>;
88
+ export type Constraints = z.infer<typeof ConstraintsSchema>;
89
+ export interface ConstraintFit {
90
+ price: boolean;
91
+ chain: boolean;
92
+ freshness: boolean;
93
+ attribution: boolean;
94
+ }
95
+ export interface ScoredMatch {
96
+ tool: string;
97
+ product: string;
98
+ summary: string;
99
+ paid: boolean;
100
+ price_usd: string;
101
+ payment_chains: string[];
102
+ freshness_sec: number;
103
+ attribution: boolean;
104
+ live: boolean;
105
+ score: number;
106
+ fits: ConstraintFit;
107
+ meets_all_constraints: boolean;
108
+ }
109
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/server/apm/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,SAAS,uCAAqC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;IAC5B,2DAA2D;;IAE3D,6DAA6D;;IAE7D,iDAAiD;;IAEjD,qDAAqD;;IAErD,yFAAyF;;;;;;;;;;;;;;EAEzF,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;QAZzB,2DAA2D;;QAE3D,6DAA6D;;QAE7D,iDAAiD;;QAEjD,qDAAqD;;QAErD,yFAAyF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUzF,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;CAChC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Preference Manifest (APM) — the "ask, don't tell" schema.
4
+ *
5
+ * An agent declares what it NEEDS; SML answers with matching live tools.
6
+ * These types double as the published APM standard.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ManifestSchema = exports.ConstraintsSchema = exports.ChainEnum = void 0;
10
+ const zod_1 = require("zod");
11
+ exports.ChainEnum = zod_1.z.enum(['base', 'xrpl', 'solana']);
12
+ exports.ConstraintsSchema = zod_1.z.object({
13
+ /** Max USD the agent will pay per downstream tool call. */
14
+ max_price_usd: zod_1.z.number().nonnegative().optional(),
15
+ /** Payment chains the agent accepts. Empty/omitted = any. */
16
+ chains_accepted: zod_1.z.array(exports.ChainEnum).optional(),
17
+ /** Max acceptable data staleness, in seconds. */
18
+ max_freshness_sec: zod_1.z.number().int().nonnegative().optional(),
19
+ /** Require tools that cite authoritative sources. */
20
+ needs_attribution: zod_1.z.boolean().optional(),
21
+ /** Agent's expected credit-score floor (informational; payment layer enforces >=300). */
22
+ min_credit_score: zod_1.z.number().int().optional(),
23
+ });
24
+ exports.ManifestSchema = zod_1.z.object({
25
+ need: zod_1.z.string().min(2).max(500),
26
+ mode: zod_1.z.enum(['preview', 'contract']).default('preview'),
27
+ wallet_address: zod_1.z.string().optional(),
28
+ agent_id: zod_1.z.string().optional(),
29
+ constraints: exports.ConstraintsSchema.optional(),
30
+ });
31
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/server/apm/schema.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,6BAAwB;AAEX,QAAA,SAAS,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE/C,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,2DAA2D;IAC3D,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAClD,6DAA6D;IAC7D,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,iBAAS,CAAC,CAAC,QAAQ,EAAE;IAC9C,iDAAiD;IACjD,iBAAiB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC5D,qDAAqD;IACrD,iBAAiB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACzC,yFAAyF;IACzF,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACxD,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,yBAAiB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Request, Response } from 'express';
2
+ export interface HealthStatus {
3
+ status: 'ok' | 'degraded';
4
+ version: string;
5
+ transport: string;
6
+ uptime_seconds: number;
7
+ uptime_human: string;
8
+ timestamp: string;
9
+ checks: {
10
+ process: 'ok';
11
+ memory_mb: number;
12
+ memory_ok: boolean;
13
+ };
14
+ }
15
+ export declare function healthHandler(_req: Request, res: Response): void;
16
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/server/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIjD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,IAAI,GAAG,UAAU,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,OAAO,EAAE,IAAI,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAaD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAsBhE"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.healthHandler = healthHandler;
4
+ const startTime = Date.now();
5
+ function formatUptime(ms) {
6
+ const s = Math.floor(ms / 1000);
7
+ const m = Math.floor(s / 60);
8
+ const h = Math.floor(m / 60);
9
+ const d = Math.floor(h / 24);
10
+ if (d > 0)
11
+ return `${d}d ${h % 24}h ${m % 60}m`;
12
+ if (h > 0)
13
+ return `${h}h ${m % 60}m ${s % 60}s`;
14
+ if (m > 0)
15
+ return `${m}m ${s % 60}s`;
16
+ return `${s}s`;
17
+ }
18
+ function healthHandler(_req, res) {
19
+ const uptimeMs = Date.now() - startTime;
20
+ const memMb = Math.round(process.memoryUsage().rss / 1024 / 1024);
21
+ const memOk = memMb < 450; // warn if approaching 512MB container limit
22
+ const body = {
23
+ status: memOk ? 'ok' : 'degraded',
24
+ version: process.env['npm_package_version'] ?? '1.0.0',
25
+ transport: process.env['MCP_TRANSPORT'] ?? 'stdio',
26
+ uptime_seconds: Math.floor(uptimeMs / 1000),
27
+ uptime_human: formatUptime(uptimeMs),
28
+ timestamp: new Date().toISOString(),
29
+ checks: {
30
+ process: 'ok',
31
+ memory_mb: memMb,
32
+ memory_ok: memOk,
33
+ },
34
+ };
35
+ // Return 200 even if degraded — let the orchestrator decide.
36
+ // Only return 5xx if the process itself is fundamentally broken.
37
+ res.status(200).json(body);
38
+ }
39
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/server/health.ts"],"names":[],"mappings":";;AA6BA,sCAsBC;AAjDD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAgB7B,SAAS,YAAY,CAAC,EAAU;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED,SAAgB,aAAa,CAAC,IAAa,EAAE,GAAa;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,4CAA4C;IAEvE,MAAM,IAAI,GAAiB;QACzB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;QACjC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,OAAO;QACtD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO;QAClD,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3C,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC;QACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,KAAK;SACjB;KACF,CAAC;IAEF,6DAA6D;IAC7D,iEAAiE;IACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,322 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
8
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
9
+ const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
10
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
11
+ const express_1 = __importDefault(require("express"));
12
+ const crypto_1 = require("crypto");
13
+ const cors_1 = __importDefault(require("cors"));
14
+ const index_js_1 = require("./tools/index.js");
15
+ const audit_js_1 = require("./security/audit.js");
16
+ const rate_limit_js_1 = require("./security/rate-limit.js");
17
+ const health_js_1 = require("./health.js");
18
+ const VERSION = '1.0.0';
19
+ async function createServer() {
20
+ const server = new mcp_js_1.McpServer({ name: 'mcp-x402', version: VERSION }, { capabilities: { tools: {} } });
21
+ await (0, index_js_1.registerTools)(server);
22
+ return server;
23
+ }
24
+ async function runStdio() {
25
+ const server = await createServer();
26
+ const transport = new stdio_js_1.StdioServerTransport();
27
+ await server.connect(transport);
28
+ audit_js_1.AuditLogger.getInstance().info('server_start', { transport: 'stdio', version: VERSION });
29
+ const shutdown = async () => {
30
+ audit_js_1.AuditLogger.getInstance().info('server_stop', { transport: 'stdio' });
31
+ await server.close();
32
+ process.exit(0);
33
+ };
34
+ process.on('SIGINT', shutdown);
35
+ process.on('SIGTERM', shutdown);
36
+ // Keep stdio process alive — reconnect on unexpected transport close
37
+ process.stdin.on('end', () => {
38
+ audit_js_1.AuditLogger.getInstance().warn('stdio_stdin_end', {});
39
+ process.exit(0);
40
+ });
41
+ }
42
+ async function runSSE() {
43
+ const app = (0, express_1.default)();
44
+ const port = parseInt(process.env['MCP_SSE_PORT'] ?? '3402', 10);
45
+ app.use((0, cors_1.default)({ origin: process.env['CORS_ORIGIN'] ?? '*' }));
46
+ app.use(express_1.default.json({ limit: '1mb' }));
47
+ // Health endpoint — hit every 30s by Docker healthcheck + keepalive cron
48
+ app.get('/health', health_js_1.healthHandler);
49
+ // Wallet info — shows the server's derived wallet address (safe to expose, no private key)
50
+ app.get('/wallet', async (_req, res) => {
51
+ const { WalletManager } = await import('./payments/wallet.js');
52
+ const wallet = await WalletManager.getInstance().getOrCreateWallet();
53
+ res.json({ address: wallet.address, chain: wallet.chain, note: 'Fund this address with USDC on Base to enable outbound payments.' });
54
+ });
55
+ app.get('/agents.json', (_req, res) => {
56
+ res.sendFile('agents.json', { root: process.cwd() });
57
+ });
58
+ app.get('/llms.txt', (_req, res) => {
59
+ res.sendFile('llms.txt', { root: process.cwd() });
60
+ });
61
+ app.get('/.well-known/agentcard.json', (_req, res) => {
62
+ res.sendFile('.well-known/agentcard.json', { root: process.cwd() });
63
+ });
64
+ // Root handler — service discovery for agents hitting / directly
65
+ app.get('/', (_req, res) => {
66
+ res.json({
67
+ name: 'mcp-x402',
68
+ version: VERSION,
69
+ description: 'The x402 Amazon — 43+ tools, pay-per-call via XRPL. scriptmasterlabs.com',
70
+ status: 'online',
71
+ transport: 'streamable-http + sse',
72
+ endpoints: {
73
+ mcp_streamable: 'POST /mcp',
74
+ sse_connect: 'GET /sse',
75
+ sse_messages: 'POST /messages',
76
+ health: 'GET /health',
77
+ agentCard: 'GET /.well-known/agentcard.json',
78
+ llms: 'GET /llms.txt',
79
+ },
80
+ links: {
81
+ github: 'https://github.com/Timwal78/SML_Portfolio/tree/main/mcp-x402',
82
+ homepage: 'https://scriptmasterlabs.com',
83
+ },
84
+ });
85
+ });
86
+ // --- MONETIZATION FLYWHEEL (Credit Bureau & Paid Endpoints) ---
87
+ const creditScores = new Map();
88
+ const freeTierUsage = new Map();
89
+ function getScore(did) {
90
+ if (!creditScores.has(did))
91
+ creditScores.set(did, 300);
92
+ return creditScores.get(did);
93
+ }
94
+ function recordPaidCall(did) {
95
+ const score = getScore(did) + 5;
96
+ const newScore = Math.min(score, 850);
97
+ creditScores.set(did, newScore);
98
+ return newScore;
99
+ }
100
+ const COUNCIL_PRICE = "0.10";
101
+ const VIP_PRICE = "0.08";
102
+ const PLATINUM_PRICE = "0.06";
103
+ async function agentDidMiddleware(req, res, next) {
104
+ const proofHeader = req.headers["x-payment-proof"];
105
+ let agentDid = req.headers["x-agent-did"];
106
+ if (!agentDid && proofHeader) {
107
+ try {
108
+ const proof = JSON.parse(Buffer.from(proofHeader, "base64").toString("utf8"));
109
+ agentDid = `did:poi:xrpl:${proof.payer}`;
110
+ }
111
+ catch { }
112
+ }
113
+ if (!agentDid) {
114
+ agentDid = `did:anonymous:${req.ip?.replace(/[:.]/g, "-")}`;
115
+ }
116
+ req.agentDid = agentDid;
117
+ next();
118
+ }
119
+ async function freeTierRateLimit(req, res, next) {
120
+ const did = req.agentDid;
121
+ const today = new Date().toISOString().slice(0, 10);
122
+ let usage = freeTierUsage.get(did) || { count: 0, date: today };
123
+ if (usage.date !== today)
124
+ usage = { count: 0, date: today };
125
+ usage.count++;
126
+ freeTierUsage.set(did, usage);
127
+ if (usage.count > 3) {
128
+ res.status(429).json({
129
+ error: "free_tier_exhausted",
130
+ message: "Free tier limit: 3 calls/day. Upgrade via x402 payment.",
131
+ upgradeEndpoint: "/api/council",
132
+ price: COUNCIL_PRICE,
133
+ currency: "RLUSD",
134
+ network: process.env['XRPL_NETWORK'] ?? "xrpl-mainnet",
135
+ yourScore: getScore(did)
136
+ });
137
+ return;
138
+ }
139
+ next();
140
+ }
141
+ async function dynamicPriceGate(req, res, next) {
142
+ const did = req.agentDid || "did:anonymous";
143
+ const score = getScore(did);
144
+ const proofHeader = req.headers["x-payment-proof"];
145
+ if (proofHeader) {
146
+ next();
147
+ return;
148
+ }
149
+ const price = score >= 800 ? PLATINUM_PRICE : score >= 700 ? VIP_PRICE : COUNCIL_PRICE;
150
+ const receivingAddress = process.env['XRPL_RECEIVING_ADDRESS'];
151
+ if (!receivingAddress) {
152
+ res.status(503).json({ error: 'payment_not_configured', message: 'XRPL_RECEIVING_ADDRESS not set' });
153
+ return;
154
+ }
155
+ const requirements = {
156
+ destination: receivingAddress,
157
+ amount: price,
158
+ currency: "RLUSD",
159
+ network: process.env['XRPL_NETWORK'] ?? "xrpl-mainnet",
160
+ description: `SqueezeOS Premium — ${price} RLUSD (Score: ${score})`,
161
+ expiresAt: new Date(Date.now() + 60000).toISOString()
162
+ };
163
+ const encoded = Buffer.from(JSON.stringify(requirements)).toString("base64");
164
+ res.status(402).setHeader("X-Payment-Requirements", encoded).json({
165
+ error: "payment_required",
166
+ protocol: "x402",
167
+ price,
168
+ currency: "RLUSD",
169
+ agentCreditScore: score,
170
+ vipEligible: score >= 700,
171
+ requirements
172
+ });
173
+ }
174
+ app.get("/api/beastmode", agentDidMiddleware, freeTierRateLimit, (req, res) => {
175
+ const score = getScore(req.agentDid);
176
+ res.json({
177
+ tool: "beastmode", tier: "free",
178
+ result: { status: "Awaiting Data", note: "Free tier preview only. Full scan requires /api/beastmode/full (0.10 RLUSD)", agentCreditScore: score },
179
+ watermark: "ScriptMasterLabs — mcp-x402"
180
+ });
181
+ });
182
+ app.get("/api/demo/council", agentDidMiddleware, freeTierRateLimit, (req, res) => {
183
+ const score = getScore(req.agentDid);
184
+ res.json({
185
+ tool: "council_demo", tier: "free", councilMember: "RISK_SENTINEL",
186
+ response: "Awaiting Data — connect wallet and pay for full council verdict.", agentCreditScore: score,
187
+ watermark: "ScriptMasterLabs — mcp-x402"
188
+ });
189
+ });
190
+ app.get("/api/credit-score", agentDidMiddleware, (req, res) => {
191
+ const did = req.agentDid;
192
+ const score = getScore(did);
193
+ res.json({ agentDid: did, creditScore: score, scale: "300-850", benefits: { "700+": "VIP 0.08 RLUSD", "800+": "Platinum 0.06 RLUSD" } });
194
+ });
195
+ app.post("/api/council", agentDidMiddleware, dynamicPriceGate, (req, res) => {
196
+ const newScore = recordPaidCall(req.agentDid);
197
+ res.json({
198
+ tool: "council", tier: "paid", consensus: "Awaiting Data", agentCreditScore: newScore, scoreGained: "+5",
199
+ note: "Route to SqueezeOS council endpoint for live verdict"
200
+ });
201
+ });
202
+ app.post("/api/beastmode/full", agentDidMiddleware, dynamicPriceGate, (req, res) => {
203
+ const newScore = recordPaidCall(req.agentDid);
204
+ res.json({
205
+ tool: "beastmode_full", tier: "paid", scan: "Awaiting Data",
206
+ agentCreditScore: newScore, scoreGained: "+5"
207
+ });
208
+ });
209
+ // Streamable HTTP transport — used by claude.ai web connectors
210
+ const streamableTransports = new Map();
211
+ app.post('/mcp', async (req, res) => {
212
+ const sessionId = req.headers['mcp-session-id'];
213
+ let transport = sessionId ? streamableTransports.get(sessionId) : undefined;
214
+ if (!transport) {
215
+ const newSessionId = (0, crypto_1.randomUUID)();
216
+ transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: () => newSessionId });
217
+ streamableTransports.set(newSessionId, transport);
218
+ transport.onclose = () => streamableTransports.delete(newSessionId);
219
+ const server = await createServer();
220
+ await server.connect(transport);
221
+ audit_js_1.AuditLogger.getInstance().info('mcp_connect', { sessionId: newSessionId });
222
+ }
223
+ await transport.handleRequest(req, res, req.body);
224
+ });
225
+ // GET /mcp with no session returns service info instead of 404
226
+ app.get('/mcp', async (req, res) => {
227
+ const sessionId = req.headers['mcp-session-id'];
228
+ const transport = sessionId ? streamableTransports.get(sessionId) : undefined;
229
+ if (!transport) {
230
+ res.json({
231
+ name: 'mcp-x402',
232
+ version: VERSION,
233
+ protocol: 'MCP/streamable-http',
234
+ status: 'ready',
235
+ tools: '43+ tools available',
236
+ how_to_connect: 'POST /mcp with a JSON-RPC initialize request',
237
+ sse_alternative: 'GET /sse for legacy SSE transport',
238
+ health: '/health',
239
+ homepage: 'https://scriptmasterlabs.com',
240
+ });
241
+ return;
242
+ }
243
+ await transport.handleRequest(req, res);
244
+ });
245
+ app.delete('/mcp', async (req, res) => {
246
+ const sessionId = req.headers['mcp-session-id'];
247
+ const transport = sessionId ? streamableTransports.get(sessionId) : undefined;
248
+ if (!transport) {
249
+ res.status(404).json({ error: 'session_not_found' });
250
+ return;
251
+ }
252
+ await transport.handleRequest(req, res);
253
+ });
254
+ const transports = new Map();
255
+ const rateLimiter = rate_limit_js_1.RateLimiter.getInstance();
256
+ app.get('/sse', async (req, res) => {
257
+ const clientIp = req.ip ?? 'unknown';
258
+ if (!rateLimiter.checkIp(clientIp)) {
259
+ res.status(429).json({ error: 'rate_limit_exceeded', retry_after: 60 });
260
+ return;
261
+ }
262
+ const transport = new sse_js_1.SSEServerTransport('/messages', res);
263
+ const sessionId = transport.sessionId;
264
+ transports.set(sessionId, transport);
265
+ const server = await createServer();
266
+ await server.connect(transport);
267
+ audit_js_1.AuditLogger.getInstance().info('sse_connect', { sessionId, clientIp });
268
+ res.on('close', async () => {
269
+ transports.delete(sessionId);
270
+ audit_js_1.AuditLogger.getInstance().info('sse_disconnect', { sessionId });
271
+ await server.close();
272
+ });
273
+ });
274
+ app.post('/messages', async (req, res) => {
275
+ const sessionId = req.query['sessionId'];
276
+ if (!sessionId) {
277
+ res.status(400).json({ error: 'missing_session_id' });
278
+ return;
279
+ }
280
+ const transport = transports.get(sessionId);
281
+ if (!transport) {
282
+ res.status(404).json({ error: 'session_not_found' });
283
+ return;
284
+ }
285
+ await transport.handlePostMessage(req, res);
286
+ });
287
+ const httpServer = await new Promise((resolve) => {
288
+ const s = app.listen(port, () => resolve(s));
289
+ });
290
+ audit_js_1.AuditLogger.getInstance().info('server_start', { transport: 'sse', port, version: VERSION });
291
+ console.error(`[mcp-x402] listening on :${port} — health: http://localhost:${port}/health`);
292
+ const shutdown = async () => {
293
+ audit_js_1.AuditLogger.getInstance().info('server_stop', { transport: 'sse' });
294
+ for (const [id] of transports) {
295
+ audit_js_1.AuditLogger.getInstance().info('sse_force_close', { sessionId: id });
296
+ }
297
+ httpServer.close(() => process.exit(0));
298
+ setTimeout(() => process.exit(1), 10_000).unref();
299
+ };
300
+ process.on('SIGINT', shutdown);
301
+ process.on('SIGTERM', shutdown);
302
+ process.on('uncaughtException', (err) => {
303
+ audit_js_1.AuditLogger.getInstance().error('uncaught_exception', { error: String(err), stack: err.stack ?? '' });
304
+ });
305
+ process.on('unhandledRejection', (reason) => {
306
+ audit_js_1.AuditLogger.getInstance().error('unhandledRejection', { reason: String(reason) });
307
+ });
308
+ }
309
+ const transport = process.env['MCP_TRANSPORT'] ?? 'stdio';
310
+ if (transport === 'sse') {
311
+ runSSE().catch((err) => {
312
+ console.error('[mcp-x402] fatal:', err);
313
+ process.exit(1);
314
+ });
315
+ }
316
+ else {
317
+ runStdio().catch((err) => {
318
+ console.error('[mcp-x402] fatal:', err);
319
+ process.exit(1);
320
+ });
321
+ }
322
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Agent-payment enforcement gate — the REAL x402 model.
3
+ *
4
+ * Today the gateway "pays itself" (gateway wallet -> SML receiver) and serves paid
5
+ * tools regardless, so they're effectively free. This gate flips that to the correct
6
+ * flow: tool call -> 402 challenge (invoice) -> agent pays from ITS wallet -> agent
7
+ * re-calls with tx_hash -> we VERIFY via 402Proof -> serve.
8
+ *
9
+ * Safety: OFF by default (ENFORCE_AGENT_PAYMENT). When off, nothing here runs and
10
+ * existing behavior is unchanged. When on, each paid tool needs its 402Proof endpoint
11
+ * UUID (PROOF402_ENDPOINT_<TOOL>); without it the gate fails CLOSED (never serves free).
12
+ *
13
+ * NOTE: isVerified() interprets the 402Proof /v1/verify response defensively. Confirm
14
+ * the exact success contract against the live 402Proof service before going live.
15
+ */
16
+ export declare function isAgentPaymentEnforced(): boolean;
17
+ /** Resolve a tool's 402Proof endpoint UUID. Real values come from env. */
18
+ export declare function resolveEndpointId(toolName: string): string | undefined;
19
+ /** Defensive success check for the 402Proof /v1/verify response. */
20
+ export declare function isVerified(resp: unknown): boolean;
21
+ export interface PaymentProof {
22
+ txHash: string;
23
+ }
24
+ export type GateResult = {
25
+ status: 'paid';
26
+ txHash: string;
27
+ detail: unknown;
28
+ } | {
29
+ status: 'payment_required';
30
+ endpointId: string;
31
+ payTo: string;
32
+ amount: string;
33
+ invoice?: unknown;
34
+ instructions: string;
35
+ } | {
36
+ status: 'payment_invalid';
37
+ endpointId: string;
38
+ detail: unknown;
39
+ } | {
40
+ status: 'unconfigured';
41
+ toolName: string;
42
+ };
43
+ /**
44
+ * Enforce agent payment for a tool call. Returns a discriminated result; the caller
45
+ * (executeX402Payment) translates it into a served response, a 402 challenge, or a
46
+ * rejection. Never serves on anything but {status:'paid'}.
47
+ */
48
+ export declare function enforceAgentPayment(params: {
49
+ toolName: string;
50
+ price: string;
51
+ paymentProof?: PaymentProof;
52
+ }): Promise<GateResult>;
53
+ /** Thrown by executeX402Payment when the agent must pay before the tool runs. */
54
+ export declare class PaymentRequiredError extends Error {
55
+ readonly gate: Extract<GateResult, {
56
+ status: 'payment_required';
57
+ }>;
58
+ constructor(gate: Extract<GateResult, {
59
+ status: 'payment_required';
60
+ }>);
61
+ }
62
+ /** Thrown when the agent's payment proof fails 402Proof verification. */
63
+ export declare class PaymentUnverifiedError extends Error {
64
+ readonly gate: Extract<GateResult, {
65
+ status: 'payment_invalid';
66
+ }>;
67
+ constructor(gate: Extract<GateResult, {
68
+ status: 'payment_invalid';
69
+ }>);
70
+ }
71
+ //# sourceMappingURL=agent-payment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-payment.d.ts","sourceRoot":"","sources":["../../../src/server/payments/agent-payment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAItE;AAOD,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAOjD;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC1H;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAClE;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCtB;AAED,iFAAiF;AACjF,qBAAa,oBAAqB,SAAQ,KAAK;aACjB,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,MAAM,EAAE,kBAAkB,CAAA;KAAE,CAAC;gBAAzD,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,MAAM,EAAE,kBAAkB,CAAA;KAAE,CAAC;CAItF;AAED,yEAAyE;AACzE,qBAAa,sBAAuB,SAAQ,KAAK;aACnB,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAC;gBAAxD,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAC;CAIrF"}