@shroud-fi/mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +130 -0
  3. package/dist/cjs/auth.d.ts +41 -0
  4. package/dist/cjs/auth.d.ts.map +1 -0
  5. package/dist/cjs/auth.js +103 -0
  6. package/dist/cjs/auth.js.map +1 -0
  7. package/dist/cjs/bin/http.d.ts +7 -0
  8. package/dist/cjs/bin/http.d.ts.map +1 -0
  9. package/dist/cjs/bin/http.js +24 -0
  10. package/dist/cjs/bin/http.js.map +1 -0
  11. package/dist/cjs/bin/stdio.d.ts +9 -0
  12. package/dist/cjs/bin/stdio.d.ts.map +1 -0
  13. package/dist/cjs/bin/stdio.js +15 -0
  14. package/dist/cjs/bin/stdio.js.map +1 -0
  15. package/dist/cjs/config.d.ts +22 -0
  16. package/dist/cjs/config.d.ts.map +1 -0
  17. package/dist/cjs/config.js +180 -0
  18. package/dist/cjs/config.js.map +1 -0
  19. package/dist/cjs/constants.d.ts +29 -0
  20. package/dist/cjs/constants.d.ts.map +1 -0
  21. package/dist/cjs/constants.js +35 -0
  22. package/dist/cjs/constants.js.map +1 -0
  23. package/dist/cjs/errors.d.ts +43 -0
  24. package/dist/cjs/errors.d.ts.map +1 -0
  25. package/dist/cjs/errors.js +72 -0
  26. package/dist/cjs/errors.js.map +1 -0
  27. package/dist/cjs/http.d.ts +32 -0
  28. package/dist/cjs/http.d.ts.map +1 -0
  29. package/dist/cjs/http.js +180 -0
  30. package/dist/cjs/http.js.map +1 -0
  31. package/dist/cjs/index.d.ts +19 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +40 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/package.json +1 -0
  36. package/dist/cjs/server.d.ts +14 -0
  37. package/dist/cjs/server.d.ts.map +1 -0
  38. package/dist/cjs/server.js +92 -0
  39. package/dist/cjs/server.js.map +1 -0
  40. package/dist/cjs/stdio.d.ts +9 -0
  41. package/dist/cjs/stdio.d.ts.map +1 -0
  42. package/dist/cjs/stdio.js +21 -0
  43. package/dist/cjs/stdio.js.map +1 -0
  44. package/dist/cjs/tools/balance.d.ts +9 -0
  45. package/dist/cjs/tools/balance.d.ts.map +1 -0
  46. package/dist/cjs/tools/balance.js +61 -0
  47. package/dist/cjs/tools/balance.js.map +1 -0
  48. package/dist/cjs/tools/index.d.ts +17 -0
  49. package/dist/cjs/tools/index.d.ts.map +1 -0
  50. package/dist/cjs/tools/index.js +40 -0
  51. package/dist/cjs/tools/index.js.map +1 -0
  52. package/dist/cjs/tools/receive.d.ts +13 -0
  53. package/dist/cjs/tools/receive.d.ts.map +1 -0
  54. package/dist/cjs/tools/receive.js +100 -0
  55. package/dist/cjs/tools/receive.js.map +1 -0
  56. package/dist/cjs/tools/register.d.ts +9 -0
  57. package/dist/cjs/tools/register.d.ts.map +1 -0
  58. package/dist/cjs/tools/register.js +36 -0
  59. package/dist/cjs/tools/register.js.map +1 -0
  60. package/dist/cjs/tools/schema.d.ts +18 -0
  61. package/dist/cjs/tools/schema.d.ts.map +1 -0
  62. package/dist/cjs/tools/schema.js +25 -0
  63. package/dist/cjs/tools/schema.js.map +1 -0
  64. package/dist/cjs/tools/send-to-wallet.d.ts +9 -0
  65. package/dist/cjs/tools/send-to-wallet.d.ts.map +1 -0
  66. package/dist/cjs/tools/send-to-wallet.js +60 -0
  67. package/dist/cjs/tools/send-to-wallet.js.map +1 -0
  68. package/dist/cjs/tools/send.d.ts +9 -0
  69. package/dist/cjs/tools/send.d.ts.map +1 -0
  70. package/dist/cjs/tools/send.js +68 -0
  71. package/dist/cjs/tools/send.js.map +1 -0
  72. package/dist/cjs/tools/status.d.ts +6 -0
  73. package/dist/cjs/tools/status.d.ts.map +1 -0
  74. package/dist/cjs/tools/status.js +39 -0
  75. package/dist/cjs/tools/status.js.map +1 -0
  76. package/dist/cjs/tools/sweep.d.ts +14 -0
  77. package/dist/cjs/tools/sweep.d.ts.map +1 -0
  78. package/dist/cjs/tools/sweep.js +119 -0
  79. package/dist/cjs/tools/sweep.js.map +1 -0
  80. package/dist/cjs/tools/x402-pay.d.ts +14 -0
  81. package/dist/cjs/tools/x402-pay.d.ts.map +1 -0
  82. package/dist/cjs/tools/x402-pay.js +78 -0
  83. package/dist/cjs/tools/x402-pay.js.map +1 -0
  84. package/dist/cjs/tools/x402-serve.d.ts +17 -0
  85. package/dist/cjs/tools/x402-serve.d.ts.map +1 -0
  86. package/dist/cjs/tools/x402-serve.js +133 -0
  87. package/dist/cjs/tools/x402-serve.js.map +1 -0
  88. package/dist/cjs/types.d.ts +66 -0
  89. package/dist/cjs/types.d.ts.map +1 -0
  90. package/dist/cjs/types.js +6 -0
  91. package/dist/cjs/types.js.map +1 -0
  92. package/dist/esm/auth.d.ts +41 -0
  93. package/dist/esm/auth.d.ts.map +1 -0
  94. package/dist/esm/auth.js +99 -0
  95. package/dist/esm/auth.js.map +1 -0
  96. package/dist/esm/bin/http.d.ts +7 -0
  97. package/dist/esm/bin/http.d.ts.map +1 -0
  98. package/dist/esm/bin/http.js +22 -0
  99. package/dist/esm/bin/http.js.map +1 -0
  100. package/dist/esm/bin/stdio.d.ts +9 -0
  101. package/dist/esm/bin/stdio.d.ts.map +1 -0
  102. package/dist/esm/bin/stdio.js +13 -0
  103. package/dist/esm/bin/stdio.js.map +1 -0
  104. package/dist/esm/config.d.ts +22 -0
  105. package/dist/esm/config.d.ts.map +1 -0
  106. package/dist/esm/config.js +175 -0
  107. package/dist/esm/config.js.map +1 -0
  108. package/dist/esm/constants.d.ts +29 -0
  109. package/dist/esm/constants.d.ts.map +1 -0
  110. package/dist/esm/constants.js +32 -0
  111. package/dist/esm/constants.js.map +1 -0
  112. package/dist/esm/errors.d.ts +43 -0
  113. package/dist/esm/errors.d.ts.map +1 -0
  114. package/dist/esm/errors.js +61 -0
  115. package/dist/esm/errors.js.map +1 -0
  116. package/dist/esm/http.d.ts +32 -0
  117. package/dist/esm/http.d.ts.map +1 -0
  118. package/dist/esm/http.js +177 -0
  119. package/dist/esm/http.js.map +1 -0
  120. package/dist/esm/index.d.ts +19 -0
  121. package/dist/esm/index.d.ts.map +1 -0
  122. package/dist/esm/index.js +18 -0
  123. package/dist/esm/index.js.map +1 -0
  124. package/dist/esm/server.d.ts +14 -0
  125. package/dist/esm/server.d.ts.map +1 -0
  126. package/dist/esm/server.js +89 -0
  127. package/dist/esm/server.js.map +1 -0
  128. package/dist/esm/stdio.d.ts +9 -0
  129. package/dist/esm/stdio.d.ts.map +1 -0
  130. package/dist/esm/stdio.js +18 -0
  131. package/dist/esm/stdio.js.map +1 -0
  132. package/dist/esm/tools/balance.d.ts +9 -0
  133. package/dist/esm/tools/balance.d.ts.map +1 -0
  134. package/dist/esm/tools/balance.js +58 -0
  135. package/dist/esm/tools/balance.js.map +1 -0
  136. package/dist/esm/tools/index.d.ts +17 -0
  137. package/dist/esm/tools/index.d.ts.map +1 -0
  138. package/dist/esm/tools/index.js +28 -0
  139. package/dist/esm/tools/index.js.map +1 -0
  140. package/dist/esm/tools/receive.d.ts +13 -0
  141. package/dist/esm/tools/receive.d.ts.map +1 -0
  142. package/dist/esm/tools/receive.js +97 -0
  143. package/dist/esm/tools/receive.js.map +1 -0
  144. package/dist/esm/tools/register.d.ts +9 -0
  145. package/dist/esm/tools/register.d.ts.map +1 -0
  146. package/dist/esm/tools/register.js +33 -0
  147. package/dist/esm/tools/register.js.map +1 -0
  148. package/dist/esm/tools/schema.d.ts +18 -0
  149. package/dist/esm/tools/schema.d.ts.map +1 -0
  150. package/dist/esm/tools/schema.js +21 -0
  151. package/dist/esm/tools/schema.js.map +1 -0
  152. package/dist/esm/tools/send-to-wallet.d.ts +9 -0
  153. package/dist/esm/tools/send-to-wallet.d.ts.map +1 -0
  154. package/dist/esm/tools/send-to-wallet.js +57 -0
  155. package/dist/esm/tools/send-to-wallet.js.map +1 -0
  156. package/dist/esm/tools/send.d.ts +9 -0
  157. package/dist/esm/tools/send.d.ts.map +1 -0
  158. package/dist/esm/tools/send.js +65 -0
  159. package/dist/esm/tools/send.js.map +1 -0
  160. package/dist/esm/tools/status.d.ts +6 -0
  161. package/dist/esm/tools/status.d.ts.map +1 -0
  162. package/dist/esm/tools/status.js +36 -0
  163. package/dist/esm/tools/status.js.map +1 -0
  164. package/dist/esm/tools/sweep.d.ts +14 -0
  165. package/dist/esm/tools/sweep.d.ts.map +1 -0
  166. package/dist/esm/tools/sweep.js +116 -0
  167. package/dist/esm/tools/sweep.js.map +1 -0
  168. package/dist/esm/tools/x402-pay.d.ts +14 -0
  169. package/dist/esm/tools/x402-pay.d.ts.map +1 -0
  170. package/dist/esm/tools/x402-pay.js +75 -0
  171. package/dist/esm/tools/x402-pay.js.map +1 -0
  172. package/dist/esm/tools/x402-serve.d.ts +17 -0
  173. package/dist/esm/tools/x402-serve.d.ts.map +1 -0
  174. package/dist/esm/tools/x402-serve.js +130 -0
  175. package/dist/esm/tools/x402-serve.js.map +1 -0
  176. package/dist/esm/types.d.ts +66 -0
  177. package/dist/esm/types.d.ts.map +1 -0
  178. package/dist/esm/types.js +5 -0
  179. package/dist/esm/types.js.map +1 -0
  180. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  181. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  182. package/dist/tsconfig.tsbuildinfo +1 -0
  183. package/package.json +81 -0
@@ -0,0 +1,130 @@
1
+ /**
2
+ * shroud_x402_serve — server-side x402 primitives.
3
+ *
4
+ * One tool, two ops:
5
+ * - op: 'challenge' → mint a 402 challenge bundle (headers + body) the
6
+ * caller serves from their own HTTP framework. Each challenge derives a
7
+ * FRESH stealth payTo address.
8
+ * - op: 'verify' → verify a client's signed X-PAYMENT payload against a
9
+ * prior challenge. Skip-facilitator mode by default — caller settles
10
+ * the EIP-3009 authorization on-chain themselves.
11
+ *
12
+ * Caller is responsible for transport (Express/Fastify/Next/etc) — this
13
+ * stays framework-agnostic.
14
+ */
15
+ import { z } from 'zod';
16
+ import { createX402Server } from '@shroud-fi/x402';
17
+ import { getUSDC } from '@shroud-fi/transport';
18
+ import { McpInvalidArgsError } from '../errors.js';
19
+ import { Uint256StringSchema } from './schema.js';
20
+ const ChallengeArgs = z
21
+ .object({
22
+ op: z.literal('challenge'),
23
+ resource: z.string().min(1),
24
+ description: z.string().optional(),
25
+ priceUsdcAtomic: Uint256StringSchema.optional(),
26
+ })
27
+ .strict();
28
+ const VerifyArgs = z
29
+ .object({
30
+ op: z.literal('verify'),
31
+ signedPayloadBase64: z.string().min(1),
32
+ challenge: z.object({
33
+ body: z.object({
34
+ x402Version: z.literal(2),
35
+ error: z.string(),
36
+ accepts: z.array(z.any()),
37
+ }),
38
+ headers: z.record(z.string()),
39
+ }),
40
+ skipFacilitator: z.boolean().optional(),
41
+ })
42
+ .strict();
43
+ const ArgsSchema = z.discriminatedUnion('op', [ChallengeArgs, VerifyArgs]);
44
+ export const shroudX402ServeTool = {
45
+ name: 'shroud_x402_serve',
46
+ description: 'Server-side x402 primitives. `op: "challenge"` mints a fresh 402 challenge (headers + body + per-call stealth payTo); caller attaches to their HTTP response. `op: "verify"` verifies a client X-PAYMENT payload against a prior challenge. Defaults to skip-facilitator mode (caller settles on-chain themselves).',
47
+ inputSchema: {
48
+ type: 'object',
49
+ oneOf: [
50
+ {
51
+ properties: {
52
+ op: { const: 'challenge' },
53
+ resource: { type: 'string' },
54
+ description: { type: 'string' },
55
+ priceUsdcAtomic: { type: 'string', pattern: '^\\d+$' },
56
+ },
57
+ required: ['op', 'resource'],
58
+ },
59
+ {
60
+ properties: {
61
+ op: { const: 'verify' },
62
+ signedPayloadBase64: { type: 'string' },
63
+ challenge: { type: 'object' },
64
+ skipFacilitator: { type: 'boolean' },
65
+ },
66
+ required: ['op', 'signedPayloadBase64', 'challenge'],
67
+ },
68
+ ],
69
+ },
70
+ async handler(ctx, raw) {
71
+ const parsed = ArgsSchema.safeParse(raw);
72
+ if (!parsed.success) {
73
+ throw new McpInvalidArgsError();
74
+ }
75
+ const usdc = getUSDC(ctx.chainId);
76
+ if (usdc === undefined) {
77
+ throw new McpInvalidArgsError();
78
+ }
79
+ const server = createX402Server({
80
+ transport: ctx.transport,
81
+ chainId: ctx.chainId,
82
+ recipientMetaAddress: ctx.agent.metaAddressEncoded,
83
+ asset: usdc,
84
+ defaultPriceAtomic: parsed.data.op === 'challenge' && parsed.data.priceUsdcAtomic !== undefined
85
+ ? BigInt(parsed.data.priceUsdcAtomic)
86
+ : 10000n,
87
+ });
88
+ if (parsed.data.op === 'challenge') {
89
+ const args = {
90
+ resource: parsed.data.resource,
91
+ };
92
+ if (parsed.data.description !== undefined)
93
+ args.description = parsed.data.description;
94
+ if (parsed.data.priceUsdcAtomic !== undefined) {
95
+ args.priceAtomic = BigInt(parsed.data.priceUsdcAtomic);
96
+ }
97
+ const ch = await server.challenge(args);
98
+ return {
99
+ ok: true,
100
+ status: ch.status,
101
+ headers: ch.headers,
102
+ body: ch.body,
103
+ announcement: ch.announcement,
104
+ };
105
+ }
106
+ // op === 'verify' — caller round-trips the same shape they received from
107
+ // the challenge op. Cast through unknown so the schema declaration stays
108
+ // permissive (zod already ran structural checks).
109
+ const verifyResult = await server.verify({
110
+ signedPayload: parsed.data.signedPayloadBase64,
111
+ challenge: parsed.data.challenge,
112
+ skipFacilitator: parsed.data.skipFacilitator ?? true,
113
+ });
114
+ if (verifyResult.valid) {
115
+ return {
116
+ ok: true,
117
+ valid: true,
118
+ ...(verifyResult.settledTxHash !== undefined
119
+ ? { settledTxHash: verifyResult.settledTxHash }
120
+ : {}),
121
+ };
122
+ }
123
+ return {
124
+ ok: true,
125
+ valid: false,
126
+ error: verifyResult.error,
127
+ };
128
+ },
129
+ };
130
+ //# sourceMappingURL=x402-serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-serve.js","sourceRoot":"","sources":["../../../src/tools/x402-serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Public types for @shroud-fi/mcp-server.
3
+ */
4
+ import type { Hex } from 'viem';
5
+ import type { ShroudAgent } from '@shroud-fi/agent-runtime';
6
+ import type { ShroudFiTransport } from '@shroud-fi/transport';
7
+ /**
8
+ * Resolved server context — what every tool handler receives.
9
+ *
10
+ * Built once by createMcpServer/bootstrap and reused for every tool call.
11
+ * No mutable state lives here; the scanner cursor is owned by the agent.
12
+ */
13
+ export interface McpServerContext {
14
+ readonly agent: ShroudAgent;
15
+ readonly transport: ShroudFiTransport;
16
+ readonly chainId: number;
17
+ /** Resolution of the operator's signing wallet, when present. */
18
+ readonly walletAddress: `0x${string}` | undefined;
19
+ }
20
+ /** JSON-safe tool result shape. MCP wraps this in a `content` array. */
21
+ export interface McpToolResult {
22
+ readonly ok: boolean;
23
+ readonly [k: string]: unknown;
24
+ }
25
+ /**
26
+ * Minimal tool descriptor. We mirror the MCP SDK shape but stay decoupled so
27
+ * tests can exercise tools without spinning up the full MCP server.
28
+ */
29
+ export interface McpTool {
30
+ readonly name: string;
31
+ readonly description: string;
32
+ readonly inputSchema: object;
33
+ readonly handler: (ctx: McpServerContext, args: unknown) => Promise<McpToolResult>;
34
+ }
35
+ /**
36
+ * EIP-191 challenge record. The HTTP transport caches outstanding challenges
37
+ * keyed by client wallet address until they expire or are consumed.
38
+ */
39
+ export interface Eip191Challenge {
40
+ readonly wallet: `0x${string}`;
41
+ readonly nonce: Hex;
42
+ readonly issuedAtMs: number;
43
+ readonly expiresAtMs: number;
44
+ readonly message: string;
45
+ }
46
+ /** Resolved server bootstrap config. */
47
+ export interface McpServerBootstrapConfig {
48
+ readonly chainId: number;
49
+ readonly rpcUrl: string;
50
+ readonly privateKey: Hex | undefined;
51
+ readonly startBlock: bigint;
52
+ /**
53
+ * Optional 32-byte deterministic master seed. When supplied, the
54
+ * ShroudAgent's stealth meta-address derivation is identical across every
55
+ * process that loads this config — required for multi-surface deployments
56
+ * (MCP + REST + UI) to agree on the operator's recipient identity. When
57
+ * undefined, ShroudAgent generates a random seed per boot.
58
+ */
59
+ readonly masterSeed: Uint8Array | undefined;
60
+ /**
61
+ * If non-empty, the HTTP transport rejects every authenticated request
62
+ * whose recovered wallet is not in this set. Stdio transport ignores it.
63
+ */
64
+ readonly httpAllowedWallets: ReadonlySet<`0x${string}`>;
65
+ }
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;CACnD;AAED,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAChB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,OAAO,KACV,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wCAAwC;AACxC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,GAAG,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;CACzD"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Public types for @shroud-fi/mcp-server.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}