@x402scan/mcp 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/run-server.cjs +63706 -76028
- package/dist/esm/index.js +325 -263
- package/dist/esm/index.js.map +1 -1
- package/package.json +3 -3
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/lib/response.ts","../../src/server/lib/schemas.ts","../../src/server/types.ts","../../src/lib/fs.ts","../../src/lib/log.ts","../../src/lib/networks.ts","../../src/lib/token.ts","../../src/lib/balance.ts","../../src/lib/wait.ts","../../src/lib/safe-fetch.ts","../../src/lib/utils.ts","../../src/lib/state.ts","../../src/lib/redeem-invite.ts","../../src/lib/deposit.ts","../../src/server/lib/check-balance.ts","../../src/server/lib/parse-response.ts","../../src/server/tools/fetch-x402-resource.ts","../../src/server/lib/x402/protocol.ts","../../src/server/vendor/sign-in-with-x/solana.ts","../../src/server/vendor/sign-in-with-x/sign.ts","../../src/server/vendor/sign-in-with-x/evm.ts","../../src/server/vendor/sign-in-with-x/message.ts","../../src/server/vendor/sign-in-with-x/client.ts","../../src/server/vendor/sign-in-with-x/encode.ts","../../src/server/tools/auth.ts","../../src/server/tools/wallet.ts","../../src/server/lib/x402/get-route-details.ts","../../src/server/tools/check-endpoint-schema.ts","../../src/server/tools/redeem-invite.ts","../../src/server/lib/version.ts","../../src/server/tools/telemetry.ts","../../src/server/resources/_lib.ts","../../src/server/resources/origins.ts","../../src/lib/wallet.ts","../../src/server/tools/discover-resources.ts","../../src/server/index.ts","../../src/install/clients.ts","../../src/install/1-get-client/index.ts","../../src/install/2-add-server/lib/platforms.ts","../../src/install/2-add-server/lib/file-types.ts","../../src/install/2-add-server/lib/client-config-file.ts","../../src/install/2-add-server/lib/nested-values.ts","../../src/install/2-add-server/lib/index.ts","../../src/install/2-add-server/index.ts","../../src/install/3-add-funds/index.ts","../../src/install/4-redeem-invite/index.ts","../../src/install/index.ts","../../src/fund/index.ts","../../src/index.ts"],"names":["z","fs","spinner","log","err","x402HTTPClient","x402Client","responseHeaders","data","contentType","init_redeem_invite","response","account","stored","init_wallet","Clients","select","client","chalk","Platforms","process","path","format","os","init_lib","clackLog","outro","redeemInviteCode","intro","yargs","startServer","installMcpServer","fundMcpServer"],"mappings":"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","file":"index.js","sourcesContent":["export const mcpSuccess = <T>(data: T) => {\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(data, null, 2) }],\n };\n};\n\nexport const mcpError = (error: unknown, context?: Record<string, unknown>) => {\n const message =\n error instanceof Error\n ? error.message\n : typeof error === 'string'\n ? error\n : String(error);\n\n const details =\n error instanceof Error && error.cause\n ? { cause: JSON.stringify(error.cause) }\n : undefined;\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(\n {\n error: message,\n ...(details && { details }),\n ...(context && { context }),\n },\n null,\n 2\n ),\n },\n ],\n isError: true as const,\n };\n};\n","import z from 'zod';\n\nimport type { Hex } from 'viem';\nimport { getAddress } from 'viem';\n\nexport const ethereumAddressSchema = z\n .string()\n .regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address')\n .transform(address => getAddress(address));\n\nexport const ethereumPrivateKeySchema = z\n .string()\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid Ethereum private key')\n .transform(privateKey => privateKey as Hex);\n\nexport const requestSchema = z.object({\n url: z.url().describe('The endpoint URL'),\n method: z\n .enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])\n .default('GET')\n .describe('HTTP method'),\n body: z\n .unknown()\n .optional()\n .describe('Request body for POST/PUT/PATCH methods'),\n});\n\nexport const requestWithHeadersSchema = requestSchema.extend({\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Additional headers to include')\n .default({}),\n});\n","import type { GlobalFlags } from '@/types';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { PrivateKeyAccount } from 'viem';\n\ninterface RegisterToolsProps {\n server: McpServer;\n account: PrivateKeyAccount;\n flags: GlobalFlags;\n}\n\nexport type RegisterTools = (props: RegisterToolsProps) => void;\n\nexport enum FetchStates {\n INITIAL_REQUEST = 'initial_request',\n PAYMENT_REQUIRED = 'payment_required',\n PAYMENT_CREATED = 'payment_created',\n PAYMENT_FAILED = 'payment_failed',\n PAYMENT_SETTLED = 'payment_settled',\n}\n","import { join } from 'path';\nimport { homedir } from 'os';\nimport * as fs from 'fs';\n\nconst BASE_DIRECTORY = join(homedir(), '.x402scan-mcp');\n\nif (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n}\n\nexport const configFile = (name: `${string}.${string}`) => {\n if (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n }\n const filePath = join(BASE_DIRECTORY, name);\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, '{}');\n }\n return filePath;\n};\n","/**\n * Logger - writes to ~/.x402scan-mcp/mcp.log and stderr\n */\n\nimport { appendFileSync } from 'fs';\n\nimport { configFile } from './fs';\n\nconst LOG_FILE = configFile('mcp.log');\nconst DEBUG = process.env.X402_DEBUG === 'true';\n\nfunction format(args: unknown[]): string {\n return args\n .map(a =>\n typeof a === 'object' && a !== null ? JSON.stringify(a) : String(a)\n )\n .join(' ');\n}\n\nfunction write(level: string, msg: string, args: unknown[]): void {\n const formatted = args.length ? `${msg} ${format(args)}` : msg;\n const line = `[${new Date().toISOString()}] [${level}] ${formatted}\\n`;\n try {\n appendFileSync(LOG_FILE, line);\n } catch {}\n if (process.env.X402_DEBUG === 'true') {\n console.error(`[x402scan] ${formatted}`);\n }\n}\n\nexport const log = {\n info: (msg: string, ...args: unknown[]) => write('INFO', msg, args),\n error: (msg: string, ...args: unknown[]) => write('ERROR', msg, args),\n debug: (msg: string, ...args: unknown[]) =>\n DEBUG && write('DEBUG', msg, args),\n path: LOG_FILE,\n};\n","/**\n * Chain configurations - CAIP-2 identifiers, USDC addresses, viem chains\n */\n\nimport {\n base,\n baseSepolia,\n mainnet,\n sepolia,\n optimism,\n arbitrum,\n polygon,\n} from 'viem/chains';\n\nimport type { Chain } from 'viem';\n\nexport interface ChainConfig {\n chain: Chain;\n caip2: string;\n v1Name: string;\n usdcAddress: `0x${string}`;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n 'eip155:8453': {\n chain: base,\n caip2: 'eip155:8453',\n v1Name: 'base',\n usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n 'eip155:84532': {\n chain: baseSepolia,\n caip2: 'eip155:84532',\n v1Name: 'base-sepolia',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n },\n 'eip155:1': {\n chain: mainnet,\n caip2: 'eip155:1',\n v1Name: 'ethereum',\n usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n },\n 'eip155:11155111': {\n chain: sepolia,\n caip2: 'eip155:11155111',\n v1Name: 'ethereum-sepolia',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n },\n 'eip155:10': {\n chain: optimism,\n caip2: 'eip155:10',\n v1Name: 'optimism',\n usdcAddress: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n },\n 'eip155:42161': {\n chain: arbitrum,\n caip2: 'eip155:42161',\n v1Name: 'arbitrum',\n usdcAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n 'eip155:137': {\n chain: polygon,\n caip2: 'eip155:137',\n v1Name: 'polygon',\n usdcAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n },\n};\n\nconst V1_TO_CAIP2: Record<string, string> = {\n base: 'eip155:8453',\n 'base-sepolia': 'eip155:84532',\n ethereum: 'eip155:1',\n 'ethereum-sepolia': 'eip155:11155111',\n optimism: 'eip155:10',\n arbitrum: 'eip155:42161',\n polygon: 'eip155:137',\n};\n\nexport const DEFAULT_NETWORK = 'eip155:8453';\n\n/** Convert any network identifier to CAIP-2 format */\nexport function toCaip2(network: string): string {\n if (network.startsWith('eip155:')) return network;\n return V1_TO_CAIP2[network.toLowerCase()] ?? network;\n}\n\n/** Get chain config from network identifier */\nexport function getChainConfig(network: string): ChainConfig | undefined {\n return CHAIN_CONFIGS[toCaip2(network)];\n}\n\n/** Get USDC address for a network */\nexport function getUSDCAddress(network: string): `0x${string}` | undefined {\n return getChainConfig(network)?.usdcAddress;\n}\n\n/** Get viem Chain object for a network */\nexport function getChain(network: string): Chain | undefined {\n return getChainConfig(network)?.chain;\n}\n\n/** Extract chain ID from CAIP-2 identifier */\nexport function getChainId(network: string): number | undefined {\n const caip2 = toCaip2(network);\n const match = /^eip155:(\\d+)$/.exec(caip2);\n return match ? parseInt(match[1]!, 10) : undefined;\n}\n\n/** Get human-readable chain name */\nexport function getChainName(network: string): string {\n return getChainConfig(network)?.chain.name ?? network;\n}\n\n/** Check if network is a testnet */\nexport function isTestnet(network: string): boolean {\n return getChainConfig(network)?.chain.testnet === true;\n}\n","import { formatUnits } from 'viem';\n\nexport const tokenBigIntToNumber = (amount: bigint, decimals = 6) => {\n return Number(formatUnits(amount, decimals));\n};\n\nexport const tokenStringToNumber = (amount: string, decimals = 6) => {\n return tokenBigIntToNumber(BigInt(amount), decimals);\n};\n","/**\n * USDC balance reader\n */\n\nimport { createPublicClient, http, erc20Abi } from 'viem';\n\nimport { getChain, getUSDCAddress, DEFAULT_NETWORK, toCaip2 } from './networks';\n\nimport { log } from './log';\n\nimport type { Address } from 'viem';\nimport { tokenBigIntToNumber } from './token';\n\ninterface GetUSDCBalanceProps {\n address: Address;\n network?: string;\n}\n\nexport async function getUSDCBalance({\n address,\n network = DEFAULT_NETWORK,\n}: GetUSDCBalanceProps) {\n const caip2 = toCaip2(network);\n\n const chain = getChain(caip2);\n if (!chain) throw new Error(`Unsupported network: ${network}`);\n\n const usdcAddress = getUSDCAddress(caip2);\n if (!usdcAddress) throw new Error(`No USDC address for network: ${network}`);\n\n log.debug(`Reading USDC balance for ${address} on ${chain.name}`);\n\n const client = createPublicClient({ chain, transport: http() });\n const balance = await client.readContract({\n address: usdcAddress,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [address],\n });\n\n return tokenBigIntToNumber(balance);\n}\n","import { spinner } from '@clack/prompts';\n\ninterface WaitProps {\n startText: string;\n stopText: string;\n ms: number;\n}\n\nexport const wait = async ({ startText, stopText, ms }: WaitProps) => {\n const { start: startSpinner, stop: stopSpinner } = spinner();\n startSpinner(startText);\n await new Promise(resolve => setTimeout(resolve, ms));\n stopSpinner(stopText);\n};\n","import { err, ResultAsync } from 'neverthrow';\n\nimport type { Error } from './error';\n\ntype FetchError = NetworkError | HttpError | ParseError;\n\ntype NetworkError = Error<{\n type: 'network';\n error: Error;\n}>;\n\ntype HttpError<E = unknown> = Error<{\n type: 'http';\n status: number;\n headers: Headers;\n json: E | undefined;\n}>;\n\ntype ParseError = Error<{\n type: 'parse';\n error: Error;\n}>;\n\nfunction safeFetch(\n input: URL | string,\n init?: RequestInit\n): ResultAsync<Response, FetchError> {\n return ResultAsync.fromPromise(\n fetch(input, init),\n (error): NetworkError => ({\n type: 'network' as const,\n message: 'Network error',\n error: error instanceof Error ? error : new Error(String(error)),\n })\n );\n}\n\nexport const safeFetchJson = <T, E = unknown>(\n input: URL | string,\n init?: RequestInit,\n errorMessage?: (e: E) => string\n): ResultAsync<T, FetchError> => {\n return safeFetch(input, init).andThen(response => {\n if (!response.ok) {\n return ResultAsync.fromSafePromise(\n response.json().catch(() => undefined) as Promise<E | undefined>\n ).andThen(json =>\n err<never, HttpError<E>>({\n type: 'http' as const,\n message:\n json !== undefined && errorMessage\n ? errorMessage(json)\n : response.statusText,\n status: response.status,\n headers: response.headers,\n json,\n })\n );\n }\n\n return ResultAsync.fromPromise(\n response.json() as Promise<T>,\n (error): ParseError => ({\n type: 'parse' as const,\n message: 'Could not parse JSON from response',\n error: error instanceof Error ? error : new Error(String(error)),\n })\n );\n });\n};\n","export const getBaseUrl = (dev: boolean) => {\n return dev ? 'http://localhost:3000' : 'https://x402scan.com';\n};\n","import z from 'zod';\nimport fs from 'fs';\n\nimport { configFile } from './fs';\nimport { log } from './log';\n\nconst STATE_FILE = configFile('state.json');\n\nconst stateSchema = z\n .looseObject({\n redeemedCodes: z.array(z.string()),\n })\n .partial();\n\nexport const getState = () => {\n if (!fs.existsSync(STATE_FILE)) {\n fs.writeFileSync(STATE_FILE, JSON.stringify({}));\n return {};\n }\n const result = stateSchema.safeParse(\n JSON.parse(fs.readFileSync(STATE_FILE, 'utf-8'))\n );\n if (!result.success) {\n log.error('Failed to parse state', { error: result.error });\n return {};\n }\n return result.data;\n};\n\nexport const setState = (state: z.infer<typeof stateSchema>) => {\n const existing = getState();\n const newState = stateSchema.parse({ ...existing, ...state });\n fs.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));\n};\n","import { errAsync } from 'neverthrow';\n\nimport { safeFetchJson } from './safe-fetch';\nimport { getBaseUrl } from './utils';\nimport { getState, setState } from './state';\n\nimport type { Address } from 'viem';\n\nexport interface RedeemInviteProps {\n code: string;\n dev: boolean;\n address: Address;\n}\n\ninterface RedeemError {\n success: false;\n message: string;\n}\n\ninterface RedeemResponse {\n success: true;\n data: {\n redemptionId: string;\n txHash: string;\n amount: string;\n };\n}\n\nexport const redeemInviteCode = async ({\n code,\n dev,\n address,\n}: RedeemInviteProps) => {\n const state = getState();\n\n if (state.redeemedCodes?.includes(code)) {\n return Promise.resolve(\n errAsync({\n success: false,\n message: 'This invite code has already been redeemed',\n })\n );\n }\n\n return await safeFetchJson<RedeemResponse, RedeemError>(\n `${getBaseUrl(dev)}/api/invite/redeem`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n code,\n recipientAddr: address,\n }),\n },\n ({ message }) => message\n ).andTee(result => {\n if (result.success) {\n setState({\n redeemedCodes: [...(state.redeemedCodes ?? []), code],\n });\n }\n });\n};\n","import chalk from 'chalk';\nimport { select, text, log, spinner } from '@clack/prompts';\nimport open from 'open';\n\nimport { DEFAULT_NETWORK, getChainName } from './networks';\nimport { wait } from './wait';\nimport { redeemInviteCode } from './redeem-invite';\n\nimport type { GlobalFlags } from '@/types';\nimport type { Address } from 'viem';\nimport { getBaseUrl } from './utils';\n\nexport const getDepositLink = (address: string, flags: GlobalFlags) => {\n return `${getBaseUrl(flags.dev)}/mcp/deposit/${address}`;\n};\n\nexport const openDepositLink = async (address: string, flags: GlobalFlags) => {\n const depositLink = getDepositLink(address, flags);\n await open(depositLink);\n};\n\nconst redeemInviteCodePrompt = async (\n address: Address,\n flags: GlobalFlags\n): Promise<boolean> => {\n const code = await text({\n message: 'Enter your invite code',\n placeholder: 'MRT-XXXXX',\n validate: value => {\n if (!value || value.trim().length === 0) {\n return 'Please enter an invite code';\n }\n },\n });\n\n if (typeof code !== 'string') {\n return false;\n }\n\n const s = spinner();\n s.start('Redeeming invite code...');\n\n const result = await redeemInviteCode({ code, dev: flags.dev, address });\n\n return result.match(\n async ({ data: { amount, txHash } }) => {\n s.stop('Invite code redeemed successfully!');\n\n await wait({\n startText: 'Processing...',\n stopText: chalk.green(\n `${chalk.bold(amount)} USDC has been sent to your wallet!`\n ),\n ms: 1500,\n });\n\n log.success(\n chalk.bold(`Your wallet has been funded with ${amount} USDC`)\n );\n\n if (txHash) {\n log.info(chalk.dim(`Transaction: https://basescan.org/tx/${txHash}`));\n }\n\n return true;\n },\n error => {\n s.stop('Invite code redemption failed');\n log.warning(\n chalk.yellow(`Failed to redeem invite code: ${error?.message}`)\n );\n return false;\n }\n );\n};\n\nexport const promptDeposit = async (address: Address, flags: GlobalFlags) => {\n const depositLink = getDepositLink(address, flags);\n\n const depositChoice = await select({\n message: chalk.bold('How would you like to deposit?'),\n initialValue: 'guided' as string | undefined,\n options: [\n {\n label: 'Guided - Recommended',\n value: 'guided',\n hint: 'Online portal in x402scan',\n },\n {\n label: 'Manual',\n value: 'manual',\n hint: 'Print deposit instructions',\n },\n {\n label: 'Redeem Invite Code',\n value: 'invite',\n hint: 'Enter an invite code for starter money',\n },\n {\n label: 'Skip',\n value: undefined,\n hint: 'Skip deposit process - functionality limited',\n },\n ],\n });\n\n if (depositChoice === 'guided') {\n await wait({\n startText: 'Opening deposit page...',\n stopText: `Opening ${chalk.underline.hex('#2563eb')(depositLink)}`,\n ms: 1000,\n });\n\n await open(depositLink);\n } else if (depositChoice === 'manual') {\n log.step(chalk.bold('Account Information'));\n log.message(`Address: ${address}`);\n log.message(`Network: ${getChainName(DEFAULT_NETWORK)}`);\n log.step(chalk.bold('Online Portal'));\n log.message(`${chalk.underline(depositLink)}`);\n } else if (depositChoice === 'invite') {\n const redeemed = await redeemInviteCodePrompt(address, flags);\n if (!redeemed) {\n // If redemption failed, prompt again for deposit options\n await promptDeposit(address, flags);\n }\n }\n};\n","import { getUSDCBalance } from '@/lib/balance';\nimport { getDepositLink, openDepositLink } from '@/lib/deposit';\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Address } from 'viem';\nimport type { GlobalFlags } from '@/types';\n\ninterface CheckBalanceProps {\n server: McpServer;\n address: Address;\n amountNeeded: number;\n message: (balance: number) => string;\n flags: GlobalFlags;\n}\n\nexport const checkBalance = async ({\n server,\n address,\n amountNeeded,\n message,\n flags,\n}: CheckBalanceProps) => {\n const balance = await getUSDCBalance({\n address,\n });\n\n if (balance < amountNeeded) {\n const capabilities = server.server.getClientCapabilities();\n if (!capabilities?.elicitation) {\n throw new Error(\n `${message(balance)}\\n\\nYou can deposit USDC at ${getDepositLink(address, flags)}`\n );\n }\n\n const result = await server.server.elicitInput({\n mode: 'form',\n message: message(balance),\n requestedSchema: {\n type: 'object',\n properties: {},\n },\n });\n\n if (result.action === 'accept') {\n await openDepositLink(address, flags);\n }\n }\n\n return balance;\n};\n","export const parseResponse = async (\n response: Response\n): Promise<string | object | ArrayBuffer | undefined> => {\n try {\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n return (await response.json()) as object;\n } else if (contentType.includes('image/')) {\n return await response.arrayBuffer();\n } else {\n return await response.text();\n }\n } catch {\n return undefined;\n }\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\nimport { wrapFetchWithPayment } from '@x402/fetch';\n\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { requestWithHeadersSchema } from '@/server/lib/schemas';\nimport { FetchStates } from '@/server/types';\n\nimport { log } from '@/lib/log';\nimport { DEFAULT_NETWORK } from '@/lib/networks';\nimport { tokenStringToNumber } from '@/lib/token';\n\nimport { checkBalance } from '../lib/check-balance';\n\nimport type { RegisterTools } from '@/server/types';\nimport { parseResponse } from '../lib/parse-response';\n\nexport const registerFetchX402ResourceTool: RegisterTools = ({\n server,\n account,\n flags,\n}) => {\n server.registerTool(\n 'fetch',\n {\n description:\n 'Fetches an x402-protected resource and handles payment automatically. If the resource is not x402-protected, it will return the raw response.',\n inputSchema: requestWithHeadersSchema,\n },\n async ({ url, method, body, headers }) => {\n const coreClient = x402Client.fromConfig({\n schemes: [\n { network: DEFAULT_NETWORK, client: new ExactEvmScheme(account) },\n ],\n });\n\n let state: FetchStates = FetchStates.INITIAL_REQUEST;\n\n coreClient.onBeforePaymentCreation(async ({ selectedRequirements }) => {\n const amount = tokenStringToNumber(selectedRequirements.amount);\n await checkBalance({\n server,\n address: account.address,\n amountNeeded: amount,\n message: balance =>\n `This request costs ${amount} USDC. Your current balance is ${balance} USDC.`,\n flags,\n });\n state = FetchStates.PAYMENT_REQUIRED;\n });\n\n coreClient.onAfterPaymentCreation(async ctx => {\n state = FetchStates.PAYMENT_CREATED;\n log.info('After payment creation', ctx);\n return Promise.resolve();\n });\n\n coreClient.onPaymentCreationFailure(async ctx => {\n state = FetchStates.PAYMENT_FAILED;\n log.info('Payment creation failure', ctx);\n return Promise.resolve();\n });\n const client = new x402HTTPClient(coreClient);\n\n const fetchWithPay = wrapFetchWithPayment(fetch, client);\n\n try {\n const response = await fetchWithPay(url, {\n method,\n body:\n typeof body === 'string'\n ? body\n : body\n ? JSON.stringify(body)\n : undefined,\n headers: {\n ...(body ? { 'Content-Type': 'application/json' } : {}),\n ...headers,\n },\n });\n\n if (!response.ok) {\n const errorResponse = {\n data: await parseResponse(response),\n statusCode: response.status,\n state,\n };\n if (response.status === 402) {\n return mcpError('Payment required', errorResponse);\n }\n return mcpError(\n response.statusText ?? 'Request failed',\n errorResponse\n );\n }\n\n const getSettlement = () => {\n try {\n return client.getPaymentSettleResponse(name =>\n response.headers.get(name)\n );\n } catch {\n return undefined;\n }\n };\n\n const settlement = getSettlement();\n\n return mcpSuccess({\n data: await parseResponse(response),\n payment: settlement,\n });\n } catch (err) {\n return mcpError(err, { state });\n }\n }\n );\n};\n","/**\n * x402 protocol handling - v1/v2 normalization and schema extraction\n */\n\nimport type { PaymentRequired, PaymentRequirements } from '@x402/core/types';\n\n// Normalized types - use these downstream\ninterface NormalizedRequirement {\n scheme: string;\n network: string;\n amount: string;\n asset: string;\n payTo: string;\n maxTimeoutSeconds: number;\n extra?: Record<string, unknown>;\n // v1-only fields preserved for display\n resource?: string;\n description?: string;\n mimeType?: string;\n}\n\nexport interface NormalizedPaymentRequired {\n x402Version: number;\n error?: string;\n accepts: NormalizedRequirement[];\n resource?: { url: string; description: string; mimeType: string };\n extensions?: Record<string, unknown>;\n}\n\n// v1 raw types\ninterface RawV1Requirement {\n scheme: string;\n network: string;\n maxAmountRequired: string;\n resource: string;\n description: string;\n mimeType: string;\n outputSchema?: Record<string, unknown>;\n payTo: string;\n maxTimeoutSeconds: number;\n asset: string;\n extra?: Record<string, unknown>;\n}\n\n/** Detect v1 response format (uses maxAmountRequired instead of amount) */\nexport function isV1Response(pr: unknown): boolean {\n if (!pr || typeof pr !== 'object') return false;\n const obj = pr as Record<string, unknown>;\n if (obj.x402Version === 1) return true;\n const accepts = obj.accepts;\n if (Array.isArray(accepts) && accepts.length > 0) {\n return 'maxAmountRequired' in accepts[0];\n }\n return false;\n}\n\nfunction normalizeV1Requirement(req: RawV1Requirement): NormalizedRequirement {\n if (!req.maxAmountRequired) {\n throw new Error('v1 requirement missing maxAmountRequired field');\n }\n return {\n scheme: req.scheme,\n network: req.network,\n amount: req.maxAmountRequired,\n asset: req.asset,\n payTo: req.payTo,\n maxTimeoutSeconds: req.maxTimeoutSeconds,\n extra: req.extra,\n resource: req.resource,\n description: req.description,\n mimeType: req.mimeType,\n };\n}\n\nfunction normalizeV2Requirement(\n req: PaymentRequirements\n): NormalizedRequirement {\n if (!req.amount) {\n throw new Error('v2 requirement missing amount field');\n }\n return {\n scheme: req.scheme,\n network: req.network,\n amount: req.amount,\n asset: req.asset,\n payTo: req.payTo,\n maxTimeoutSeconds: req.maxTimeoutSeconds,\n extra: req.extra,\n };\n}\n\n/** Normalize v1/v2 payment required to consistent format */\nexport function normalizePaymentRequired(\n pr: PaymentRequired | Record<string, unknown>\n): NormalizedPaymentRequired {\n const version = (pr as { x402Version?: number }).x402Version ?? 1;\n\n if (isV1Response(pr)) {\n const v1 = pr as { error?: string; accepts: RawV1Requirement[] };\n return {\n x402Version: 1,\n error: v1.error,\n accepts: v1.accepts.map(normalizeV1Requirement),\n };\n }\n\n const v2 = pr as PaymentRequired;\n return {\n x402Version: version,\n error: v2.error,\n accepts: v2.accepts.map(normalizeV2Requirement),\n resource: v2.resource,\n extensions: v2.extensions,\n };\n}\n\n// V1 schema extraction (inline to avoid @x402/extensions ESM/ajv issue)\n\ninterface V1OutputSchema {\n input: {\n type: string;\n method: string;\n discoverable?: boolean;\n queryParams?: Record<string, unknown>;\n body?: Record<string, unknown>;\n bodyFields?: Record<string, unknown>;\n headers?: Record<string, string>;\n };\n output?: Record<string, unknown>;\n}\n\ninterface V1Accept {\n outputSchema?: V1OutputSchema;\n}\n\n/** Extract discovery info from v1 outputSchema */\nexport function extractV1Schema(\n accept: unknown\n): Record<string, unknown> | null {\n const v1 = accept as V1Accept;\n const schema = v1?.outputSchema;\n if (schema?.input?.type !== 'http' || !schema.input.method) {\n return null;\n }\n if (schema.input.discoverable === false) {\n return null;\n }\n\n const method = schema.input.method.toUpperCase();\n const isBodyMethod = ['POST', 'PUT', 'PATCH'].includes(method);\n\n return {\n input: {\n type: 'http',\n method,\n ...(schema.input.queryParams && {\n queryParams: schema.input.queryParams,\n }),\n ...(isBodyMethod &&\n (schema.input.body ?? schema.input.bodyFields) && {\n bodyType: 'json',\n body: schema.input.body ?? schema.input.bodyFields,\n }),\n ...(schema.input.headers && { headers: schema.input.headers }),\n },\n ...(schema.output && { output: { type: 'json', example: schema.output } }),\n };\n}\n","/**\n * Solana Sign-In-With-X (SIWS) support\n *\n * Implements CAIP-122 compliant message format and Ed25519 signature verification\n * for Solana wallets.\n */\n\nimport { base58 } from '@scure/base';\nimport nacl from 'tweetnacl';\nimport type { SIWxExtensionInfo } from './types';\n\n/**\n * Common Solana network CAIP-2 identifiers.\n * Uses genesis hash as the chain reference per CAIP-30.\n */\nexport const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp';\nexport const SOLANA_DEVNET = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1';\n\n/**\n * Extract chain reference from CAIP-2 Solana chainId.\n *\n * @param chainId - CAIP-2 format chain ID (e.g., \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\")\n * @returns Chain reference (genesis hash)\n *\n * @example\n * ```typescript\n * extractSolanaChainReference(\"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\") // \"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\"\n * ```\n */\nfunction extractSolanaChainReference(chainId: string): string {\n const [, reference] = chainId.split(':');\n return reference!;\n}\n\n/**\n * Format SIWS message following CAIP-122 ABNF specification.\n *\n * The message format is identical to SIWE (EIP-4361) but uses \"Solana account\"\n * instead of \"Ethereum account\" in the header line.\n *\n * @param info - Server-provided extension info\n * @param address - Client's Solana wallet address (Base58 encoded public key)\n * @returns Message string ready for signing\n *\n * @example\n * ```typescript\n * const message = formatSIWSMessage(serverInfo, \"BSmWDgE9ex6dZYbiTsJGcwMEgFp8q4aWh92hdErQPeVW\");\n * // Returns:\n * // \"api.example.com wants you to sign in with your Solana account:\n * // BSmWDgE9ex6dZYbiTsJGcwMEgFp8q4aWh92hdErQPeVW\n * //\n * // Sign in to access your content\n * //\n * // URI: https://api.example.com/data\n * // Version: 1\n * // Chain ID: mainnet\n * // Nonce: abc123\n * // Issued At: 2024-01-01T00:00:00.000Z\"\n * ```\n */\nexport function formatSIWSMessage(\n info: SIWxExtensionInfo,\n address: string\n): string {\n const lines: string[] = [\n `${info.domain} wants you to sign in with your Solana account:`,\n address,\n '',\n ];\n\n // Statement (optional, with blank line after)\n if (info.statement) {\n lines.push(info.statement, '');\n }\n\n // Required fields\n lines.push(\n `URI: ${info.uri}`,\n `Version: ${info.version}`,\n `Chain ID: ${extractSolanaChainReference(info.chainId)}`,\n `Nonce: ${info.nonce}`,\n `Issued At: ${info.issuedAt}`\n );\n\n // Optional fields\n if (info.expirationTime) {\n lines.push(`Expiration Time: ${info.expirationTime}`);\n }\n if (info.notBefore) {\n lines.push(`Not Before: ${info.notBefore}`);\n }\n if (info.requestId) {\n lines.push(`Request ID: ${info.requestId}`);\n }\n\n // Resources (optional)\n if (info.resources && info.resources.length > 0) {\n lines.push('Resources:');\n for (const resource of info.resources) {\n lines.push(`- ${resource}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Verify Ed25519 signature for SIWS.\n *\n * @param message - The SIWS message that was signed\n * @param signature - Ed25519 signature bytes\n * @param publicKey - Solana public key bytes (32 bytes)\n * @returns true if signature is valid\n *\n * @example\n * ```typescript\n * const messageBytes = new TextEncoder().encode(message);\n * const valid = verifySolanaSignature(message, signatureBytes, publicKeyBytes);\n * ```\n */\nexport function verifySolanaSignature(\n message: string,\n signature: Uint8Array,\n publicKey: Uint8Array\n): boolean {\n const messageBytes = new TextEncoder().encode(message);\n return nacl.sign.detached.verify(messageBytes, signature, publicKey);\n}\n\n/**\n * Decode Base58 string to bytes.\n *\n * Solana uses Base58 encoding (Bitcoin alphabet) for addresses and signatures.\n *\n * @param encoded - Base58 encoded string\n * @returns Decoded bytes\n * @throws Error if string contains invalid Base58 characters\n *\n * @example\n * ```typescript\n * const publicKeyBytes = decodeBase58(\"BSmWDgE9ex6dZYbiTsJGcwMEgFp8q4aWh92hdErQPeVW\");\n * // Returns Uint8Array of 32 bytes\n * ```\n */\nexport function decodeBase58(encoded: string): Uint8Array {\n return base58.decode(encoded);\n}\n\n/**\n * Encode bytes to Base58 string.\n *\n * @param bytes - Bytes to encode\n * @returns Base58 encoded string\n */\nexport function encodeBase58(bytes: Uint8Array): string {\n return base58.encode(bytes);\n}\n","/**\n * Message signing for SIWX extension\n *\n * Client-side helpers for signing SIWX messages.\n * Supports both EVM (viem) and Solana wallet adapters.\n */\n\nimport { encodeBase58 } from './solana';\n\n/**\n * Signer interface for EVM SIWX message signing.\n * Compatible with viem WalletClient and PrivateKeyAccount.\n */\nexport interface EVMSigner {\n /** Sign a message and return hex-encoded signature */\n signMessage: (args: {\n message: string;\n account?: unknown;\n }) => Promise<string>;\n /** Account object (for WalletClient) */\n account?: { address: string };\n /** Direct address (for PrivateKeyAccount) */\n address?: string;\n}\n\n/**\n * Signer interface for Solana SIWX message signing.\n * Compatible with @solana/wallet-adapter and Phantom/Solflare wallet APIs.\n */\nexport interface SolanaSigner {\n /** Sign a message and return raw signature bytes */\n signMessage: (message: Uint8Array) => Promise<Uint8Array>;\n /** Solana public key (Base58 encoded string or PublicKey-like object) */\n publicKey: string | { toBase58: () => string };\n}\n\n/**\n * Union type for SIWX signers - supports both EVM and Solana wallets.\n */\nexport type SIWxSigner = EVMSigner | SolanaSigner;\n\n/**\n * Get address from an EVM signer.\n *\n * @param signer - EVM wallet signer instance\n * @returns The wallet address as a hex string\n */\nexport function getEVMAddress(signer: EVMSigner): string {\n if (signer.account?.address) {\n return signer.account.address;\n }\n if (signer.address) {\n return signer.address;\n }\n throw new Error('EVM signer missing address');\n}\n\n/**\n * Get address from a Solana signer.\n *\n * @param signer - Solana wallet signer instance\n * @returns The wallet address as a Base58 string\n */\nexport function getSolanaAddress(signer: SolanaSigner): string {\n const pk = signer.publicKey;\n return typeof pk === 'string' ? pk : pk.toBase58();\n}\n\n/**\n * Sign a message with an EVM wallet.\n * Returns hex-encoded signature.\n *\n * @param message - The message to sign\n * @param signer - EVM wallet signer instance\n * @returns Hex-encoded signature\n */\nexport async function signEVMMessage(\n message: string,\n signer: EVMSigner\n): Promise<string> {\n if (signer.account) {\n return signer.signMessage({ message, account: signer.account });\n }\n return signer.signMessage({ message });\n}\n\n/**\n * Sign a message with a Solana wallet.\n * Returns Base58-encoded signature.\n *\n * @param message - The message to sign\n * @param signer - Solana wallet signer instance\n * @returns Base58-encoded signature\n */\nexport async function signSolanaMessage(\n message: string,\n signer: SolanaSigner\n): Promise<string> {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = await signer.signMessage(messageBytes);\n return encodeBase58(signatureBytes);\n}\n","/**\n * EVM Sign-In-With-Ethereum (SIWE) support\n *\n * Implements EIP-4361 compliant message format and signature verification\n * for EVM chains (Ethereum, Base, Polygon, etc.)\n */\n\nimport { verifyMessage } from 'viem';\nimport { SiweMessage } from 'siwe';\nimport type { SIWxExtensionInfo, EVMMessageVerifier } from './types';\n\n/**\n * Extract numeric chain ID from CAIP-2 EVM chainId.\n *\n * @param chainId - CAIP-2 format chain ID (e.g., \"eip155:8453\")\n * @returns Numeric chain ID (e.g., 8453)\n * @throws Error if chainId format is invalid\n *\n * @example\n * ```typescript\n * extractEVMChainId(\"eip155:1\") // 1 (Ethereum mainnet)\n * extractEVMChainId(\"eip155:8453\") // 8453 (Base)\n * extractEVMChainId(\"eip155:137\") // 137 (Polygon)\n * ```\n */\nfunction extractEVMChainId(chainId: string): number {\n const match = /^eip155:(\\d+)$/.exec(chainId);\n if (!match) {\n throw new Error(\n `Invalid EVM chainId format: ${chainId}. Expected eip155:<number>`\n );\n }\n return parseInt(match[1]!, 10);\n}\n\n/**\n * Format SIWE message following EIP-4361 specification.\n *\n * Uses the siwe library to ensure message format matches verification.\n *\n * @param info - Server-provided extension info\n * @param address - Client's EVM wallet address (0x-prefixed)\n * @returns Message string ready for signing\n *\n * @example\n * ```typescript\n * const message = formatSIWEMessage(serverInfo, \"0x1234...abcd\");\n * // Returns EIP-4361 formatted message:\n * // \"api.example.com wants you to sign in with your Ethereum account:\n * // 0x1234...abcd\n * //\n * // Sign in to access your content\n * //\n * // URI: https://api.example.com/data\n * // Version: 1\n * // Chain ID: 8453\n * // Nonce: abc123\n * // Issued At: 2024-01-01T00:00:00.000Z\"\n * ```\n */\nexport function formatSIWEMessage(\n info: SIWxExtensionInfo,\n address: string\n): string {\n const numericChainId = extractEVMChainId(info.chainId);\n\n const siweMessage = new SiweMessage({\n domain: info.domain,\n address,\n statement: info.statement,\n uri: info.uri,\n version: info.version,\n chainId: numericChainId,\n nonce: info.nonce,\n issuedAt: info.issuedAt,\n expirationTime: info.expirationTime,\n notBefore: info.notBefore,\n requestId: info.requestId,\n resources: info.resources,\n });\n\n return siweMessage.prepareMessage();\n}\n\n/**\n * Verify EVM signature.\n *\n * Supports:\n * - EOA signatures (standard ECDSA via EIP-191) - always available\n * - EIP-1271 (deployed smart contract wallets) - requires verifier\n * - EIP-6492 (counterfactual/pre-deploy smart wallets) - requires verifier\n *\n * @param message - The SIWE message that was signed\n * @param address - The claimed signer address\n * @param signature - The signature to verify\n * @param verifier - Optional message verifier for smart wallet support.\n * Pass publicClient.verifyMessage for EIP-1271/EIP-6492 support.\n * Without this, only EOA signatures are verified.\n * @returns true if signature is valid\n *\n * @example\n * ```typescript\n * // EOA-only verification (default, no RPC required)\n * const valid = await verifyEVMSignature(message, address, signature);\n *\n * // Smart wallet verification with viem PublicClient\n * import { createPublicClient, http } from 'viem';\n * import { base } from 'viem/chains';\n *\n * const publicClient = createPublicClient({ chain: base, transport: http() });\n * const valid = await verifyEVMSignature(\n * message,\n * address,\n * signature,\n * publicClient.verifyMessage\n * );\n * ```\n */\nexport async function verifyEVMSignature(\n message: string,\n address: string,\n signature: string,\n verifier?: EVMMessageVerifier\n): Promise<boolean> {\n const args = {\n address: address as `0x${string}`,\n message,\n signature: signature as `0x${string}`,\n };\n\n if (verifier) {\n // Use provided verifier (supports EIP-1271/EIP-6492 via RPC)\n return verifier(args);\n }\n\n // Fallback to standalone verifyMessage (EOA only, no RPC)\n return verifyMessage(args);\n}\n","/**\n * CAIP-122 message construction for SIWX extension\n *\n * Constructs the canonical message string for signing.\n * Routes to chain-specific formatters based on chainId namespace.\n */\n\nimport { formatSIWEMessage } from './evm';\nimport { formatSIWSMessage } from './solana';\nimport type { SIWxExtensionInfo } from './types';\n\n/**\n * Construct CAIP-122 compliant message string for signing.\n *\n * Routes to the appropriate chain-specific message formatter based on the\n * chainId namespace prefix:\n * - `eip155:*` → SIWE (EIP-4361) format via siwe library\n * - `solana:*` → SIWS format\n *\n * @param serverInfo - Server-provided extension info\n * @param address - Client wallet address\n * @returns Message string ready for signing\n * @throws Error if chainId namespace is not supported\n *\n * @example\n * ```typescript\n * // EVM (Ethereum, Base, etc.)\n * const evmMessage = createSIWxMessage(serverInfo, \"0x1234...\");\n *\n * // Solana\n * const solMessage = createSIWxMessage(serverInfo, \"BSmWDg...\");\n * ```\n */\nexport function createSIWxMessage(\n serverInfo: SIWxExtensionInfo,\n address: string\n): string {\n // Route by chain namespace\n if (serverInfo.chainId.startsWith('eip155:')) {\n return formatSIWEMessage(serverInfo, address);\n }\n\n if (serverInfo.chainId.startsWith('solana:')) {\n return formatSIWSMessage(serverInfo, address);\n }\n\n throw new Error(\n `Unsupported chain namespace: ${serverInfo.chainId}. ` +\n `Supported: eip155:* (EVM), solana:* (Solana)`\n );\n}\n","/**\n * Complete client flow for SIWX extension\n *\n * Combines message construction, signing, and payload creation.\n * Supports both EVM and Solana wallets.\n */\n\nimport type { SIWxExtensionInfo, SIWxPayload } from './types';\nimport type { SIWxSigner, EVMSigner, SolanaSigner } from './sign';\nimport {\n getEVMAddress,\n getSolanaAddress,\n signEVMMessage,\n signSolanaMessage,\n} from './sign';\nimport { createSIWxMessage } from './message';\n\n/**\n * Create a complete SIWX payload from server extension info.\n *\n * Routes to EVM or Solana signing based on the chainId prefix:\n * - `eip155:*` → EVM signing\n * - `solana:*` → Solana signing\n *\n * @param serverExtension - Server-provided extension info from PaymentRequired\n * @param signer - Wallet that can sign messages (EVMSigner or SolanaSigner)\n * @returns Complete SIWX payload with signature\n *\n * @example\n * ```typescript\n * // EVM wallet\n * const payload = await createSIWxPayload(serverInfo, evmWallet);\n *\n * // Solana wallet\n * const payload = await createSIWxPayload(serverInfo, solanaSigner);\n * ```\n */\nexport async function createSIWxPayload(\n serverExtension: SIWxExtensionInfo,\n signer: SIWxSigner\n): Promise<SIWxPayload> {\n const isSolana = serverExtension.chainId.startsWith('solana:');\n\n // Get address and sign based on chain type\n const address = isSolana\n ? getSolanaAddress(signer as SolanaSigner)\n : getEVMAddress(signer as EVMSigner);\n\n const message = createSIWxMessage(serverExtension, address);\n\n const signature = isSolana\n ? await signSolanaMessage(message, signer as SolanaSigner)\n : await signEVMMessage(message, signer as EVMSigner);\n\n return {\n domain: serverExtension.domain,\n address,\n statement: serverExtension.statement,\n uri: serverExtension.uri,\n version: serverExtension.version,\n chainId: serverExtension.chainId,\n type: serverExtension.type,\n nonce: serverExtension.nonce,\n issuedAt: serverExtension.issuedAt,\n expirationTime: serverExtension.expirationTime,\n notBefore: serverExtension.notBefore,\n requestId: serverExtension.requestId,\n resources: serverExtension.resources,\n signatureScheme: serverExtension.signatureScheme,\n signature,\n };\n}\n","/**\n * Header encoding for SIWX extension\n *\n * Encodes SIWX payload for the SIGN-IN-WITH-X HTTP header.\n * Per CHANGELOG-v2.md line 335: header should be base64-encoded.\n */\n\nimport { safeBase64Encode } from '@x402/core/utils';\nimport type { SIWxPayload } from './types';\n\n/**\n * Encode SIWX payload for SIGN-IN-WITH-X header.\n *\n * Uses base64 encoding per x402 v2 spec (CHANGELOG-v2.md line 335).\n *\n * @param payload - Complete SIWX payload with signature\n * @returns Base64-encoded JSON string\n *\n * @example\n * ```typescript\n * const payload = await createSIWxPayload(serverInfo, signer);\n * const header = encodeSIWxHeader(payload);\n *\n * fetch(url, {\n * headers: { 'SIGN-IN-WITH-X': header }\n * });\n * ```\n */\nexport function encodeSIWxHeader(payload: SIWxPayload): string {\n return safeBase64Encode(JSON.stringify(payload));\n}\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { mcpSuccess, mcpError } from '../lib/response';\n\nimport { normalizePaymentRequired } from '../lib/x402/protocol';\n\nimport { createSIWxPayload } from '../vendor/sign-in-with-x/client';\nimport { encodeSIWxHeader } from '../vendor/sign-in-with-x/encode';\n\nimport { requestWithHeadersSchema } from '@/server/lib/schemas';\n\nimport type { RegisterTools } from '@/server/types';\nimport type { SIWxExtensionInfo } from '../vendor/sign-in-with-x/types';\n\nexport const registerAuthTools: RegisterTools = ({ server, account }) => {\n server.registerTool(\n 'authed_call',\n {\n description:\n 'Make a request to a SIWX-protected endpoint. Handles auth flow automatically: detects SIWX requirement from 402 response, signs proof with server-provided challenge, retries.',\n inputSchema: requestWithHeadersSchema,\n },\n async ({ url, method, body, headers }) => {\n try {\n const httpClient = new x402HTTPClient(new x402Client());\n\n // Step 1: Make initial request\n const firstResponse = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n // If not 402, return the response directly\n if (firstResponse.status !== 402) {\n const responseHeaders = Object.fromEntries(\n firstResponse.headers.entries()\n );\n\n if (firstResponse.ok) {\n let data: unknown;\n const contentType = firstResponse.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n data = await firstResponse.json();\n } else {\n data = await firstResponse.text();\n }\n return mcpSuccess({\n statusCode: firstResponse.status,\n headers: responseHeaders,\n data,\n });\n }\n\n let errorBody: unknown;\n try {\n errorBody = await firstResponse.json();\n } catch {\n errorBody = await firstResponse.text();\n }\n return mcpError(`HTTP ${firstResponse.status}`, {\n statusCode: firstResponse.status,\n headers: responseHeaders,\n body: errorBody,\n });\n }\n\n // Step 2: Parse 402 response\n let rawBody: unknown;\n try {\n rawBody = await firstResponse.clone().json();\n } catch {\n rawBody = undefined;\n }\n\n const rawPaymentRequired = httpClient.getPaymentRequiredResponse(\n name => firstResponse.headers.get(name),\n rawBody\n );\n const paymentRequired = normalizePaymentRequired(rawPaymentRequired);\n\n // Step 3: Check for sign-in-with-x extension\n const siwxExtension = paymentRequired.extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo }\n | undefined;\n\n if (!siwxExtension?.info) {\n return mcpError(\n 'Endpoint returned 402 but no sign-in-with-x extension found',\n {\n statusCode: 402,\n x402Version: paymentRequired.x402Version,\n extensions: Object.keys(paymentRequired.extensions ?? {}),\n hint: 'This endpoint may require payment instead of authentication. Use execute_call for paid requests.',\n }\n );\n }\n\n const serverInfo = siwxExtension.info;\n\n // Validate required fields\n const requiredFields = [\n 'domain',\n 'uri',\n 'version',\n 'chainId',\n 'nonce',\n 'issuedAt',\n ];\n const missingFields = requiredFields.filter(\n f => !serverInfo[f as keyof SIWxExtensionInfo]\n );\n if (missingFields.length > 0) {\n return mcpError(\n 'Invalid sign-in-with-x extension: missing required fields',\n {\n missingFields,\n receivedInfo: serverInfo,\n }\n );\n }\n\n // Step 4: Check for unsupported chain types\n if (serverInfo.chainId.startsWith('solana:')) {\n return mcpError('Solana authentication not supported', {\n chainId: serverInfo.chainId,\n hint: 'This endpoint requires a Solana wallet. The MCP server currently only supports EVM wallets.',\n });\n }\n\n // Step 5: Create signed proof using server-provided challenge\n const payload = await createSIWxPayload(serverInfo, account);\n const siwxHeader = encodeSIWxHeader(payload);\n\n // Step 6: Retry with SIGN-IN-WITH-X header\n const authedResponse = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'SIGN-IN-WITH-X': siwxHeader,\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const responseHeaders = Object.fromEntries(\n authedResponse.headers.entries()\n );\n\n if (!authedResponse.ok) {\n let errorBody: unknown;\n try {\n errorBody = await authedResponse.json();\n } catch {\n errorBody = await authedResponse.text();\n }\n return mcpError(\n `HTTP ${authedResponse.status} after authentication`,\n {\n statusCode: authedResponse.status,\n headers: responseHeaders,\n body: errorBody,\n authAddress: account.address,\n }\n );\n }\n\n // Parse successful response\n let data: unknown;\n const contentType = authedResponse.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n data = await authedResponse.json();\n } else {\n data = await authedResponse.text();\n }\n\n return mcpSuccess({\n statusCode: authedResponse.status,\n headers: responseHeaders,\n data,\n authentication: {\n address: account.address,\n domain: serverInfo.domain,\n chainId: serverInfo.chainId,\n },\n });\n } catch (err) {\n return mcpError(err, { tool: 'authed_call', url });\n }\n }\n );\n};\n","import { mcpSuccess } from '@/server/lib/response';\n\nimport { getUSDCBalance } from '@/lib/balance';\nimport { DEFAULT_NETWORK, getChainName } from '@/lib/networks';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerWalletTools: RegisterTools = ({\n server,\n account: { address },\n}) => {\n server.registerTool(\n 'check_balance',\n {\n description:\n 'Check wallet address and USDC balance. Creates wallet if needed.',\n },\n async () => {\n const balance = await getUSDCBalance({\n address,\n });\n\n return mcpSuccess({\n address,\n network: DEFAULT_NETWORK,\n networkName: getChainName(DEFAULT_NETWORK),\n usdcBalance: balance,\n balanceFormatted: balance.toString(),\n isNewWallet: balance === 0,\n });\n }\n );\n\n server.registerTool(\n 'get_wallet_address',\n {\n description: 'Get the wallet address.',\n },\n () => mcpSuccess({ address })\n );\n};\n","import { tokenStringToNumber } from '@/lib/token';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type { DiscoveryExtension } from '@x402/extensions/bazaar';\n\nexport const getRouteDetails = (paymentRequired: PaymentRequired) => {\n const { accepts, extensions, resource } = paymentRequired;\n\n return {\n ...resource,\n schema: getSchema(extensions),\n paymentMethods: accepts.map(accept => ({\n price: tokenStringToNumber(accept.amount),\n network: accept.network,\n asset: accept.asset,\n })),\n };\n};\n\nexport const getSchema = (extensions: PaymentRequired['extensions']) => {\n const { bazaar } = extensions ?? {};\n\n if (!bazaar) {\n return undefined;\n }\n\n const { schema } = bazaar as DiscoveryExtension;\n\n return schema.properties.input;\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { requestSchema } from '@/server/lib/schemas';\n\nimport { log } from '@/lib/log';\n\nimport { getRouteDetails } from '../lib/x402/get-route-details';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerCheckX402EndpointTool: RegisterTools = ({ server }) => {\n server.registerTool(\n 'check_x402_endpoint',\n {\n description:\n 'Check if an endpoint is x402-protected and get pricing options, schema, and auth requirements (if applicable).',\n inputSchema: requestSchema,\n },\n async ({ url, method, body }) => {\n try {\n log.info('Querying endpoint', { url, method, body });\n const response = await fetch(url, {\n method,\n body: body\n ? typeof body === 'string'\n ? body\n : JSON.stringify(body)\n : undefined,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n const bodyText = await response.text().catch(() => undefined);\n\n if (response.status !== 402) {\n return mcpSuccess({\n data: bodyText,\n statusCode: response.status,\n requiresPayment: false,\n });\n }\n\n const paymentRequired = new x402HTTPClient(\n new x402Client()\n ).getPaymentRequiredResponse(\n name => response.headers.get(name),\n JSON.parse(bodyText ?? '{}')\n );\n\n const routeDetails = getRouteDetails(paymentRequired);\n\n return mcpSuccess({\n requiresPayment: true,\n statusCode: response.status,\n routeDetails,\n });\n } catch (err) {\n return mcpError(err, { tool: 'query_endpoint', url });\n }\n }\n );\n};\n","import z from 'zod';\nimport { mcpSuccess, mcpError } from '@/server/lib/response';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerRedeemInviteTool: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n const baseUrl = flags.dev ? 'http://localhost:3000' : 'https://x402scan.com';\n\n server.registerTool(\n 'redeem_invite',\n {\n description: 'Redeem an invite code to receive USDC.',\n inputSchema: z.object({\n code: z.string().min(1).describe('The invite code'),\n }),\n },\n async ({ code }) => {\n const res = await fetch(`${baseUrl}/api/invite/redeem`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code, recipientAddr: address }),\n });\n\n const data = (await res.json()) as {\n success: boolean;\n error?: string;\n amount?: string;\n txHash?: string;\n };\n\n if (!data.success) {\n return mcpError(data.error ?? 'Failed to redeem invite code');\n }\n\n return mcpSuccess({\n amount: `${data.amount} USDC`,\n txHash: data.txHash,\n });\n }\n );\n};\n","import { readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { fileURLToPath } from 'url';\n\ndeclare const __MCP_VERSION__: string | undefined;\n\nfunction getVersion(): string {\n if (typeof __MCP_VERSION__ !== 'undefined') {\n return __MCP_VERSION__;\n }\n // Fallback for dev mode (tsx)\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(\n readFileSync(join(__dirname, '../../../package.json'), 'utf-8')\n ) as { version: string };\n return pkg.version;\n}\n\nexport const MCP_VERSION = getVersion();\n","/**\n * Telemetry tool - report errors and logs back to x402scan developers\n */\n\nimport { log } from '@/lib/log';\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { z } from 'zod';\n\nimport { MCP_VERSION } from '../lib/version';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst errorReportSchema = z.object({\n tool: z.string().describe('MCP tool name'),\n resource: z.string().optional().describe('x402 resource URL'),\n summary: z.string().describe('1-2 sentence summary'),\n errorMessage: z.string().describe('Error message'),\n stack: z.string().optional().describe('Stack trace'),\n fullReport: z\n .string()\n .optional()\n .describe('Detailed report with context, logs, repro steps'),\n});\n\ntype ErrorReport = z.infer<typeof errorReportSchema>;\n\nexport const registerTelemetryTools: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n const baseUrl = flags.dev ? 'http://localhost:3000' : 'https://x402scan.com';\n\n server.registerTool(\n 'report_error',\n {\n description:\n 'EMERGENCY ONLY. Report critical MCP tool bugs. Do NOT use for normal errors (balance, network, 4xx) - those are recoverable.',\n inputSchema: errorReportSchema,\n },\n async (input: ErrorReport) => {\n try {\n log.info('Submitting error report', {\n tool: input.tool,\n resource: input.resource,\n summary: input.summary,\n });\n\n const report = {\n ...input,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n };\n\n const response = await fetch(`${baseUrl}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(report),\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error');\n log.error('Failed to submit error report', {\n status: response.status,\n error: errorText,\n });\n return mcpError(\n `Failed to submit error report: ${response.status} ${errorText}`,\n { tool: 'report_error' }\n );\n }\n\n const result = (await response.json()) as { reportId: string };\n\n log.info('Error report submitted successfully', {\n reportId: result.reportId,\n });\n\n return mcpSuccess({\n submitted: true,\n reportId: result.reportId,\n message:\n 'Error report submitted successfully. The x402scan team will investigate.',\n });\n } catch (err) {\n log.error('Failed to submit error report', { error: err });\n return mcpError(err, { tool: 'report_error' });\n }\n }\n );\n};\n","export const getWebPageMetadata = async (url: string) => {\n try {\n const response = await fetch(url);\n\n if (!response.ok) {\n return null;\n }\n\n const html = await response.text();\n\n // Extract title\n const titleMatch = /<title[^>]*>([\\s\\S]*?)<\\/title>/i.exec(html);\n const title = titleMatch\n ? titleMatch[1]!.trim().replace(/\\s+/g, ' ')\n : null;\n\n // Extract description from meta tags\n // Try standard meta description first\n let descriptionMatch =\n /<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']*)[\"']/i.exec(html);\n\n // If not found, try og:description\n descriptionMatch ??=\n /<meta\\s+property=[\"']og:description[\"']\\s+content=[\"']([^\"']*)[\"']/i.exec(\n html\n );\n\n // Also check for reversed attribute order\n descriptionMatch ??=\n /<meta\\s+content=[\"']([^\"']*)[\"']\\s+name=[\"']description[\"']/i.exec(html);\n\n descriptionMatch ??=\n /<meta\\s+content=[\"']([^\"']*)[\"']\\s+property=[\"']og:description[\"']/i.exec(\n html\n );\n\n const description = descriptionMatch\n ? descriptionMatch[1]!.trim().replace(/\\s+/g, ' ')\n : null;\n\n return {\n title,\n description,\n };\n } catch (error) {\n throw new Error(\n `Failed to fetch web page metadata: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n};\n","import { x402HTTPClient } from '@x402/core/client';\nimport { x402Client } from '@x402/core/client';\n\nimport { getWebPageMetadata } from './_lib';\n\nimport { getSchema } from '../lib/x402/get-route-details';\n\nimport type { RegisterResources } from './types';\n\nconst origins = ['enrichx402.com'];\n\nexport const registerOrigins: RegisterResources = async ({ server }) => {\n await Promise.all(\n origins.map(async origin => {\n const metadata = await getWebPageMetadata(`https://${origin}`);\n server.registerResource(\n origin,\n `api://${origin}`,\n {\n title: metadata?.title ?? origin,\n description: metadata?.description ?? '',\n mimeType: 'application/json',\n },\n async uri => {\n const response = (await fetch(\n `${uri.toString().replace('api://', 'https://')}/.well-known/x402`\n ).then(response => response.json())) as { resources: string[] };\n const resources = await Promise.all(\n response.resources.map(async resource => {\n const resourceResponse = await getResourceResponse(\n resource,\n await fetch(resource, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n );\n if (resourceResponse) {\n return resourceResponse;\n }\n const getResponse = await getResourceResponse(\n resource,\n await fetch(resource, {\n method: 'GET',\n })\n );\n if (getResponse) {\n return getResponse;\n }\n console.error(`Failed to get resource response for ${resource}`);\n return null;\n })\n );\n return {\n contents: [\n {\n uri: origin,\n text: JSON.stringify({\n server: origin,\n name: metadata?.title,\n description: metadata?.description,\n resources: resources.filter(Boolean).map(resource => {\n if (!resource) return null;\n const schema = getSchema(\n resource.paymentRequired?.extensions\n );\n\n return {\n url: resource.resource,\n schema,\n mimeType: resource.paymentRequired.resource.mimeType,\n };\n }),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n );\n })\n );\n};\n\nconst getResourceResponse = async (resource: string, response: Response) => {\n const client = new x402HTTPClient(new x402Client());\n if (response.status === 402) {\n const paymentRequired = client.getPaymentRequiredResponse(\n name => response.headers.get(name),\n JSON.parse(await response.text())\n );\n return {\n paymentRequired,\n resource,\n };\n }\n return null;\n};\n","/**\n * Keystore - private key management\n *\n * Stores wallet at ~/.x402scan-mcp/wallet.json\n * Can be overridden via X402_PRIVATE_KEY env var\n */\n\nimport z from 'zod';\n\nimport { randomBytes } from 'crypto';\nimport * as fs from 'fs/promises';\n\nimport { privateKeyToAccount } from 'viem/accounts';\n\nimport { log } from './log';\nimport {\n ethereumAddressSchema,\n ethereumPrivateKeySchema,\n} from '../server/lib/schemas';\nimport type { Hex } from 'viem';\nimport { configFile } from './fs';\n\nconst WALLET_FILE = configFile('wallet.json');\n\nconst storedWalletSchema = z.object({\n privateKey: ethereumPrivateKeySchema,\n address: ethereumAddressSchema,\n createdAt: z.string(),\n});\n\nexport async function getWallet() {\n // Environment override\n if (process.env.X402_PRIVATE_KEY) {\n const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY as Hex);\n log.info(`Using wallet from env: ${account.address}`);\n return { account, isNew: false };\n }\n\n // Try loading existing\n try {\n const data = await fs.readFile(WALLET_FILE, 'utf-8');\n const stored = storedWalletSchema.parse(JSON.parse(data));\n const account = privateKeyToAccount(stored.privateKey);\n log.info(`Loaded wallet: ${account.address}`);\n return { account, isNew: false };\n } catch {\n // File doesn't exist or is invalid, generate new wallet\n }\n\n // Generate new\n const privateKey = `0x${randomBytes(32).toString('hex')}` as const;\n const account = privateKeyToAccount(privateKey);\n const stored = {\n privateKey,\n address: account.address,\n createdAt: new Date().toISOString(),\n };\n\n await fs.writeFile(WALLET_FILE, JSON.stringify(stored, null, 2));\n try {\n await fs.chmod(WALLET_FILE, 0o600);\n } catch {}\n\n log.info(`Created wallet: ${account.address}`);\n log.info(`Saved to: ${WALLET_FILE}`);\n return { account, isNew: true };\n}\n","/**\n * Discovery tool - discover x402 resources from an origin's well-known endpoint\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { log } from '@/lib/log';\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { tokenStringToNumber } from '@/lib/token';\nimport { getChainName } from '@/lib/networks';\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\n\n// Discovery document schema per spec\nconst DiscoveryDocumentSchema = z.object({\n version: z.number().refine(v => v === 1, { message: 'version must be 1' }),\n resources: z.array(z.url()),\n ownershipProofs: z.array(z.string()).optional(),\n instructions: z.string().optional(),\n});\n\ntype DiscoveryDocument = z.infer<typeof DiscoveryDocumentSchema>;\n\ntype DiscoverySource = 'well-known' | 'dns-txt' | 'llms-txt';\n\ninterface DiscoveredResource {\n url: string;\n isX402Endpoint?: boolean;\n description?: string;\n price?: number;\n priceRaw?: string;\n network?: string;\n networkName?: string;\n x402Version?: number;\n bazaar?: {\n info?: unknown;\n schema?: unknown;\n };\n signInWithX?: {\n required: boolean;\n info?: unknown;\n };\n error?: string;\n}\n\ninterface DiscoveryResult {\n found: boolean;\n origin: string;\n source?: DiscoverySource;\n instructions?: string;\n usage: string;\n resources: DiscoveredResource[];\n llmsTxtContent?: string;\n error?: string;\n}\n\n/**\n * Lookup DNS TXT record for _x402.hostname using DNS-over-HTTPS\n * Returns the URL path from the TXT record if found\n */\nasync function lookupDnsTxtRecord(hostname: string): Promise<string | null> {\n const dnsQuery = `_x402.${hostname}`;\n log.debug(`Looking up DNS TXT record: ${dnsQuery}`);\n\n try {\n // Use Cloudflare DNS-over-HTTPS\n const response = await fetch(\n `https://cloudflare-dns.com/dns-query?name=${encodeURIComponent(\n dnsQuery\n )}&type=TXT`,\n {\n headers: { Accept: 'application/dns-json' },\n }\n );\n\n if (!response.ok) {\n log.debug(`DNS lookup failed: HTTP ${response.status}`);\n return null;\n }\n\n const data = (await response.json()) as {\n Answer?: { data: string }[];\n };\n\n if (!data.Answer || data.Answer.length === 0) {\n log.debug('No DNS TXT record found');\n return null;\n }\n\n // TXT record data comes with quotes, strip them\n const txtValue = data.Answer[0]!.data.replace(/^\"|\"$/g, '');\n log.debug(`Found DNS TXT record: ${txtValue}`);\n\n // Validate it's a URL\n try {\n new URL(txtValue);\n return txtValue;\n } catch {\n log.debug(`DNS TXT value is not a valid URL: ${txtValue}`);\n return null;\n }\n } catch (err) {\n log.debug(\n `DNS lookup error: ${err instanceof Error ? err.message : String(err)}`\n );\n return null;\n }\n}\n\n/**\n * Fetch llms.txt from origin - returns raw content since it won't be properly formatted\n */\nasync function fetchLlmsTxt(\n origin: string\n): Promise<{ found: boolean; content?: string; error?: string }> {\n const llmsTxtUrl = `${origin}/llms.txt`;\n log.debug(`Fetching llms.txt from: ${llmsTxtUrl}`);\n\n try {\n const response = await fetch(llmsTxtUrl, {\n headers: { Accept: 'text/plain' },\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { found: false, error: 'No llms.txt found' };\n }\n return { found: false, error: `HTTP ${response.status}` };\n }\n\n const content = await response.text();\n if (!content || content.trim().length === 0) {\n return { found: false, error: 'llms.txt is empty' };\n }\n\n return { found: true, content };\n } catch (err) {\n return {\n found: false,\n error: `Network error: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n}\n\ninterface FetchResult {\n found: boolean;\n source?: DiscoverySource;\n document?: DiscoveryDocument;\n llmsTxtContent?: string;\n error?: string;\n rawResponse?: unknown;\n attemptedSources: string[];\n}\n\n/**\n * Fetch discovery document from a specific URL\n */\nasync function fetchDiscoveryFromUrl(url: string): Promise<{\n found: boolean;\n document?: DiscoveryDocument;\n error?: string;\n rawResponse?: unknown;\n}> {\n log.debug(`Fetching discovery document from: ${url}`);\n\n try {\n const response = await fetch(url, {\n headers: { Accept: 'application/json' },\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { found: false, error: `Not found at ${url}` };\n }\n return {\n found: false,\n error: `HTTP ${response.status}: ${await response.text()}`,\n };\n }\n\n let rawData: unknown;\n try {\n rawData = await response.json();\n } catch {\n return {\n found: false,\n error: 'Failed to parse discovery document as JSON',\n };\n }\n\n // Validate against schema\n const parsed = DiscoveryDocumentSchema.safeParse(rawData);\n if (!parsed.success) {\n return {\n found: false,\n error: `Invalid discovery document: ${parsed.error.issues\n .map(e => e.message)\n .join(', ')}`,\n rawResponse: rawData,\n };\n }\n\n return { found: true, document: parsed.data };\n } catch (err) {\n return {\n found: false,\n error: `Network error: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n}\n\n/**\n * Fetch discovery document with fallback chain:\n * 1. .well-known/x402\n * 2. DNS _x402 TXT record pointing to discovery URL\n * 3. llms.txt (raw content, not structured)\n */\nasync function fetchDiscoveryDocument(origin: string): Promise<FetchResult> {\n const attemptedSources: string[] = [];\n const hostname = getHostname(origin);\n\n // 1. Try .well-known/x402\n const wellKnownUrl = `${origin}/.well-known/x402`;\n attemptedSources.push(wellKnownUrl);\n const wellKnownResult = await fetchDiscoveryFromUrl(wellKnownUrl);\n\n if (wellKnownResult.found && wellKnownResult.document) {\n return {\n found: true,\n source: 'well-known',\n document: wellKnownResult.document,\n attemptedSources,\n };\n }\n\n // 2. Try DNS TXT record _x402.hostname\n attemptedSources.push(`DNS TXT _x402.${hostname}`);\n const dnsUrl = await lookupDnsTxtRecord(hostname);\n\n if (dnsUrl) {\n attemptedSources.push(dnsUrl);\n const dnsResult = await fetchDiscoveryFromUrl(dnsUrl);\n\n if (dnsResult.found && dnsResult.document) {\n return {\n found: true,\n source: 'dns-txt',\n document: dnsResult.document,\n attemptedSources,\n };\n }\n }\n\n // 3. Try llms.txt as last resort\n attemptedSources.push(`${origin}/llms.txt`);\n const llmsResult = await fetchLlmsTxt(origin);\n\n if (llmsResult.found && llmsResult.content) {\n return {\n found: true,\n source: 'llms-txt',\n llmsTxtContent: llmsResult.content,\n attemptedSources,\n };\n }\n\n // Nothing found\n return {\n found: false,\n error:\n 'No discovery document found. Tried: .well-known/x402, DNS TXT record, llms.txt',\n attemptedSources,\n };\n}\n\n/**\n * Query a resource URL using the same logic as query_endpoint tool\n * Returns full pricing, bazaar schema, and SIWX info\n */\nasync function queryResource(url: string): Promise<DiscoveredResource> {\n log.debug(`Querying resource: ${url}`);\n\n try {\n const result = await fetch(url, { method: 'GET' });\n\n if (!result.ok) {\n return {\n url,\n isX402Endpoint: false,\n error: result.statusText ?? 'Failed to query endpoint',\n };\n }\n\n if (result.status !== 402) {\n return {\n url,\n isX402Endpoint: false,\n };\n }\n\n const pr = new x402HTTPClient(new x402Client()).getPaymentRequiredResponse(\n name => result.headers.get(name),\n JSON.parse(await result.text())\n );\n\n const firstReq = pr.accepts[0]!;\n\n const resource: DiscoveredResource = {\n url,\n isX402Endpoint: true,\n x402Version: pr.x402Version,\n price: tokenStringToNumber(firstReq.amount),\n priceRaw: firstReq.amount,\n network: firstReq.network,\n networkName: getChainName(firstReq.network),\n };\n\n // Extract bazaar info\n if (pr.extensions?.bazaar) {\n const bazaar = pr.extensions.bazaar as {\n info?: unknown;\n schema?: unknown;\n };\n resource.bazaar = { info: bazaar.info, schema: bazaar.schema };\n // Extract description from bazaar info if available\n const info = bazaar.info as { description?: string } | undefined;\n if (info?.description) {\n resource.description = info.description;\n }\n }\n\n // Extract SIWX info\n if (pr.extensions?.['sign-in-with-x']) {\n const siwx = pr.extensions['sign-in-with-x'] as { info?: unknown };\n resource.signInWithX = { required: true, info: siwx.info };\n }\n\n return resource;\n } catch (err) {\n return {\n url,\n isX402Endpoint: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\nexport function registerDiscoveryTools(server: McpServer): void {\n server.registerTool(\n 'discover_resources',\n {\n description: `Discover x402-protected resources on an origin.\n NEVER use 'fanOut = true' on the first try.\n NEVER use 'fanOut = true' when there are more than 8 resources.\n\n Known default origins with resource packs. Discover if more needed:\n - https://enrichx402.com ->\n People + Org search\n Google Maps (places + locations)\n Grok twitter search\n Exa web search\n Clado linkedin data\n Firecrawl web scrape\n - https://stablestudio.io -> generate images / videos\n `,\n inputSchema: {\n url: z\n .url()\n .describe(\n 'The origin URL or any URL on the origin to discover resources from'\n ),\n fanOut: z\n .boolean()\n .default(false)\n .describe(\n 'Whether to query each discovered resource for full pricing/schema info. NEVER use on first try.'\n ),\n concurrency: z\n .number()\n .int()\n .min(1)\n .max(10)\n .default(5)\n .describe(\n 'Max concurrent requests when querying resources (default: 5)'\n ),\n },\n },\n async ({ url, fanOut, concurrency }) => {\n try {\n const origin = getOrigin(url);\n log.info(`Discovering resources for origin: ${origin}`);\n\n // Fetch the discovery document using fallback chain:\n // 1. .well-known/x402\n // 2. DNS TXT _x402.hostname\n // 3. llms.txt (raw content)\n const discoveryResult = await fetchDiscoveryDocument(origin);\n\n // Handle llms.txt case - return raw content for LLM to interpret\n if (discoveryResult.found && discoveryResult.source === 'llms-txt') {\n return mcpSuccess({\n found: true,\n origin,\n source: 'llms-txt',\n usage:\n 'Found llms.txt but no structured x402 discovery document. The content below may contain information about x402 resources. Parse it to find relevant endpoints.',\n llmsTxtContent: discoveryResult.llmsTxtContent,\n attemptedSources: discoveryResult.attemptedSources,\n resources: [],\n });\n }\n\n if (!discoveryResult.found || !discoveryResult.document) {\n return mcpSuccess({\n found: false,\n origin,\n error: discoveryResult.error,\n attemptedSources: discoveryResult.attemptedSources,\n rawResponse: discoveryResult.rawResponse,\n });\n }\n\n const doc = discoveryResult.document;\n const result: DiscoveryResult = {\n found: true,\n origin,\n source: discoveryResult.source,\n instructions: doc.instructions,\n usage:\n 'Use query_endpoint to get full pricing/requirements for a resource. Use execute_call (for payment) or authed_call (for SIWX auth) to call it.',\n resources: [],\n };\n\n // If not testing resources, just return the URLs from discovery doc\n if (!fanOut) {\n result.resources = doc.resources.map(resourceUrl => ({\n url: resourceUrl,\n }));\n return mcpSuccess(result);\n }\n\n // Query resources with concurrency limit to get full pricing/schema info\n const resourceUrls = doc.resources;\n const allResources: DiscoveredResource[] = [];\n\n // Process in batches based on concurrency\n for (let i = 0; i < resourceUrls.length; i += concurrency) {\n const batch = resourceUrls.slice(i, i + concurrency);\n const batchResults = await Promise.all(\n batch.map(resourceUrl => queryResource(resourceUrl))\n );\n allResources.push(...batchResults);\n }\n\n result.resources = allResources;\n\n return mcpSuccess(result);\n } catch (err) {\n return mcpError(err, { tool: 'discover_resources', url });\n }\n }\n );\n}\n\nfunction getOrigin(urlString: string): string {\n try {\n return new URL(urlString).origin;\n } catch {\n return urlString;\n }\n}\n\nfunction getHostname(origin: string): string {\n try {\n return new URL(origin).hostname;\n } catch {\n return origin;\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n\nimport { registerFetchX402ResourceTool } from './tools/fetch-x402-resource';\nimport { registerAuthTools } from './tools/auth';\nimport { registerWalletTools } from './tools/wallet';\nimport { registerCheckX402EndpointTool } from './tools/check-endpoint-schema';\nimport { registerRedeemInviteTool } from './tools/redeem-invite';\nimport { registerTelemetryTools } from './tools/telemetry';\n\nimport { registerOrigins } from './resources/origins';\n\nimport { log } from '@/lib/log';\nimport { getWallet } from '@/lib/wallet';\n\nimport type { Command } from '@/types';\nimport { registerDiscoveryTools } from './tools/discover-resources';\nimport { redeemInviteCode } from '@/lib/redeem-invite';\nimport { MCP_VERSION } from './lib/version';\n\nexport const startServer: Command = async flags => {\n log.info('Starting x402scan-mcp...');\n\n const { dev, invite } = flags;\n\n const { account } = await getWallet();\n\n const code = invite ?? process.env.INVITE_CODE;\n\n if (code) {\n await redeemInviteCode({\n code,\n dev,\n address: account.address,\n });\n }\n\n const server = new McpServer(\n {\n name: '@x402scan/mcp',\n version: MCP_VERSION,\n websiteUrl: 'https://x402scan.com/mcp',\n icons: [{ src: 'https://x402scan.com/logo.svg' }],\n },\n {\n capabilities: {\n resources: {\n subscribe: true,\n listChanged: true,\n },\n },\n }\n );\n\n const props = {\n server,\n account,\n flags,\n };\n\n registerFetchX402ResourceTool(props);\n registerAuthTools(props);\n registerWalletTools(props);\n registerCheckX402EndpointTool(props);\n registerRedeemInviteTool(props);\n registerDiscoveryTools(server);\n registerTelemetryTools(props);\n\n await registerOrigins({ server, flags });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n log.info('Shutting down...');\n await server.close();\n process.exit(0);\n };\n\n process.on('SIGINT', () => void shutdown());\n process.on('SIGTERM', () => void shutdown());\n};\n","export enum Clients {\n ClaudeCode = 'claude-code',\n Cursor = 'cursor',\n Claude = 'claude',\n Codex = 'codex',\n Vscode = 'vscode',\n Cline = 'cline',\n RooCline = 'roo-cline',\n Windsurf = 'windsurf',\n Warp = 'warp',\n GeminiCli = 'gemini-cli',\n Goose = 'goose',\n Zed = 'zed',\n Opencode = 'opencode',\n}\n\ninterface ClientMetadata {\n name: string;\n description: string;\n website: string;\n}\n\nexport const clientMetadata: Record<Clients, ClientMetadata> = {\n [Clients.ClaudeCode]: {\n name: 'Claude Code',\n description: 'Claude Code is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Cursor]: {\n name: 'Cursor',\n description: 'Cursor is a code editor that uses the Cursor API.',\n website: 'https://cursor.com',\n },\n [Clients.Claude]: {\n name: 'Claude',\n description: 'Claude is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Codex]: {\n name: 'Codex',\n description: 'Codex is a code editor that uses the Codex API.',\n website: 'https://codex.com',\n },\n [Clients.Vscode]: {\n name: 'VSCode',\n description: 'VSCode is a code editor that uses the VSCode API.',\n website: 'https://vscode.com',\n },\n [Clients.Cline]: {\n name: 'Cline',\n description: 'Cline is a code editor that uses the Cline API.',\n website: 'https://cline.com',\n },\n [Clients.RooCline]: {\n name: 'RooCline',\n description: 'RooCline is a code editor that uses the RooCline API.',\n website: 'https://roo-cline.com',\n },\n [Clients.Windsurf]: {\n name: 'Windsurf',\n description: 'Windsurf is a code editor that uses the Windsurf API.',\n website: 'https://windsurf.com',\n },\n [Clients.Warp]: {\n name: 'Warp',\n description: 'Warp is a code editor that uses the Warp API.',\n website: 'https://warp.com',\n },\n [Clients.GeminiCli]: {\n name: 'Gemini CLI',\n description: 'Gemini CLI is a code editor that uses the Gemini CLI API.',\n website: 'https://gemini-cli.com',\n },\n [Clients.Goose]: {\n name: 'Goose',\n description: 'Goose is a code editor that uses the Goose API.',\n website: 'https://goose.com',\n },\n [Clients.Zed]: {\n name: 'Zed',\n description: 'Zed is a code editor that uses the Zed API.',\n website: 'https://zed.com',\n },\n [Clients.Opencode]: {\n name: 'Opencode',\n description: 'Opencode is a code editor that uses the Opencode API.',\n website: 'https://opencode.com',\n },\n};\n","import z from 'zod';\n\nimport { select, log, outro } from '@clack/prompts';\n\nimport chalk from 'chalk';\n\nimport { clientMetadata, Clients } from '../clients';\n\nimport type { InstallFlags } from '..';\n\nexport const getClient = async ({ client: flagClient }: InstallFlags) => {\n const parsedClient = z.enum(Clients).safeParse(flagClient);\n if (parsedClient.success) {\n return parsedClient.data;\n }\n if (flagClient) {\n log.error(`${flagClient} is not a valid client. Please select a client`);\n }\n const client = await select({\n message: 'Where would you like to install the x402scan MCP server?',\n options: Object.values(Clients).map(client => {\n const metadata = clientMetadata[client];\n return {\n label: metadata.name,\n value: client,\n };\n }),\n maxItems: 7,\n });\n\n const parsedClientSelection = z.enum(Clients).safeParse(client);\n if (parsedClientSelection.success) {\n return parsedClientSelection.data;\n }\n outro(chalk.bold.red('No MCP client selected'));\n process.exit(0);\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport z from 'zod';\n\nenum Platforms {\n Windows = 'win32',\n MacOS = 'darwin',\n Linux = 'linux',\n}\n\nexport const getPlatformPath = () => {\n const platform = z.enum(Platforms).safeParse(process.platform);\n if (!platform.success) {\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n\n const homeDir = os.homedir();\n\n switch (platform.data) {\n case Platforms.Windows:\n return {\n baseDir:\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.MacOS:\n return {\n baseDir: path.join(homeDir, 'Library', 'Application Support'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.Linux:\n return {\n baseDir: process.env.XDG_CONFIG_HOME ?? path.join(homeDir, '.config'),\n vscodePath: path.join('Code/User'),\n };\n default:\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n};\n","import fs from 'fs';\n\nimport * as TOML from '@iarna/toml';\nimport yaml from 'js-yaml';\nimport * as jsonc from 'jsonc-parser';\n\nimport type { ClientConfigObject, ClientConfigFile } from '../types';\n\nexport enum FileFormat {\n JSON = 'json',\n YAML = 'yaml',\n TOML = 'toml',\n}\n\n/**\n * Parse file content based on format\n */\nexport const parseClientConfig = ({ format, path }: ClientConfigFile) => {\n const fileContent = fs.readFileSync(path, 'utf8');\n\n let config: ClientConfigObject = {};\n if (format === FileFormat.YAML) {\n config = yaml.load(fileContent) as ClientConfigObject;\n } else if (format === FileFormat.TOML) {\n config = TOML.parse(fileContent) as ClientConfigObject;\n } else if (path.endsWith('.jsonc')) {\n // Use jsonc-parser for .jsonc files to support comments\n config = jsonc.parse(fileContent) as ClientConfigObject;\n } else {\n // Default to JSON\n config = JSON.parse(fileContent) as ClientConfigObject;\n }\n\n return {\n config,\n fileContent,\n };\n};\n\nexport const serializeClientConfig = (\n { format, path }: ClientConfigFile,\n config: ClientConfigObject,\n originalContent?: string\n): string => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n if (path.endsWith('.jsonc') && originalContent) {\n // For .jsonc files, try to preserve comments and formatting using jsonc-parser\n try {\n // Apply modifications to preserve existing structure\n const editedContent = originalContent;\n const modifications: jsonc.Edit[] = [];\n\n // Generate edit operations for each key in the merged config\n for (const key of Object.keys(config)) {\n const path = [key];\n const edits = jsonc.modify(editedContent, path, config[key], {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n });\n modifications.push(...edits);\n }\n\n // Apply all edits\n return jsonc.applyEdits(originalContent, modifications);\n } catch (error) {\n // Fallback to standard JSON.stringify if edit fails\n console.log(\n `Error applying JSONC edits: ${error instanceof Error ? error.message : String(error)}`\n );\n console.log('Falling back to JSON.stringify (comments will be lost)');\n return JSON.stringify(config, null, 2);\n }\n }\n // Default to JSON\n return JSON.stringify(config, null, 2);\n};\n\nexport const stringifyObject = (\n config: ClientConfigObject,\n format: FileFormat\n) => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n return JSON.stringify(config, null, 2);\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport fs from 'fs';\n\nimport { getPlatformPath } from './platforms';\nimport { log } from '@/lib/log';\n\nimport { Clients } from '../../clients';\n\nimport type { ClientConfigFile } from '../types';\nimport { FileFormat } from './file-types';\n\nexport const getClientConfigFile = (client: Clients): ClientConfigFile => {\n const homeDir = os.homedir();\n const { baseDir, vscodePath } = getPlatformPath();\n\n switch (client) {\n case Clients.Claude:\n return {\n path: path.join(baseDir, 'Claude', 'claude_desktop_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'saoudrizwan.claude-dev',\n 'settings',\n 'cline_mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.RooCline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'rooveterinaryinc.roo-cline',\n 'settings',\n 'mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Windsurf:\n return {\n path: path.join(homeDir, '.codeium', 'windsurf', 'mcp_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cursor:\n return {\n path: path.join(homeDir, '.cursor', 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Warp:\n return {\n path: 'no-local-config', // it's okay this isn't a real path, we never use it\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.GeminiCli:\n return {\n path: path.join(homeDir, '.gemini', 'settings.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Vscode:\n return {\n path: path.join(baseDir, vscodePath, 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.ClaudeCode:\n return {\n path: path.join(homeDir, '.claude.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Goose:\n return {\n path: path.join(homeDir, '.config', 'goose', 'config.yaml'),\n configKey: 'extensions',\n format: FileFormat.YAML,\n };\n case Clients.Zed:\n return {\n path:\n process.platform === 'win32'\n ? path.join(\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n 'Zed',\n 'settings.json'\n )\n : path.join(homeDir, '.config', 'zed', 'settings.json'),\n configKey: 'context_servers',\n format: FileFormat.JSON,\n };\n case Clients.Codex:\n return {\n path: path.join(\n process.env.CODEX_HOME ?? path.join(homeDir, '.codex'),\n 'config.toml'\n ),\n configKey: 'mcp_servers',\n format: FileFormat.TOML,\n };\n case Clients.Opencode: {\n const jsonPath = path.join(\n homeDir,\n '.config',\n 'opencode',\n 'opencode.json'\n );\n const jsoncPath = jsonPath.replace('.json', '.jsonc');\n\n // For OpenCode, check if .jsonc exists and prefer it over .json\n if (fs.existsSync(jsoncPath)) {\n log.info(`Found .jsonc file for OpenCode, using: ${jsoncPath}`);\n return {\n path: jsoncPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n\n return {\n path: jsonPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n default:\n throw new Error(`Unknown client: ${String(client)}`);\n }\n};\n","import type { ClientConfigObject } from '../types';\n\nexport const getNestedValue = (obj: ClientConfigObject, path: string) => {\n const keys = path.split('.');\n let current: ClientConfigObject | undefined = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key] as ClientConfigObject;\n } else {\n return undefined;\n }\n }\n return current;\n};\n\nexport const setNestedValue = (\n obj: ClientConfigObject,\n path: string,\n value: ClientConfigObject\n) => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) return;\n const target = keys.reduce((current, key) => {\n current[key] ??= {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return current[key];\n }, obj);\n target[lastKey] = value;\n};\n","export * from './client-config-file';\nexport * from './file-types';\nexport * from './nested-values';\nexport * from './platforms';\n","import fs from 'fs';\n\nimport chalk from 'chalk';\n\nimport { log as clackLog, confirm, outro, stream } from '@clack/prompts';\n\nimport { log } from '@/lib/log';\n\nimport { clientMetadata, Clients } from '../clients';\nimport {\n FileFormat,\n parseClientConfig,\n serializeClientConfig,\n stringifyObject,\n getClientConfigFile,\n getNestedValue,\n setNestedValue,\n} from './lib';\n\nimport { wait } from '@/lib/wait';\n\nimport type { ClientConfigObject } from './types';\nimport type { GlobalFlags } from '@/types';\n\nconst getMcpConfig = (globalFlags: GlobalFlags) => {\n if (globalFlags.dev) {\n return {\n serverName: 'x402',\n command: 'node',\n args: [`${process.cwd()}/dist/index.js`, '--dev'],\n };\n }\n return {\n serverName: 'x402',\n command: 'npx',\n args: ['-y', '@x402scan/mcp@latest'],\n };\n};\n\nexport async function addServer(client: Clients, globalFlags: GlobalFlags) {\n const { serverName, command, args } = getMcpConfig(globalFlags);\n\n if (client === Clients.Warp) {\n clackLog.info(\n chalk.bold.yellow('Warp requires a manual installation through their UI.')\n );\n clackLog.message(\n 'Please copy the following configuration object and add it to your Warp MCP config:'\n );\n console.log();\n console.log(\n JSON.stringify(\n {\n [serverName]: {\n command,\n args,\n working_directory: null,\n start_on_launch: true,\n },\n },\n null,\n 2\n )\n );\n console.log();\n clackLog.message(\n `Read Warp's documentation at https://docs.warp.dev/knowledge-and-collaboration/mcp`\n );\n const addedToWarp = await confirm({\n message: 'Did you add the MCP server to your Warp config?',\n });\n if (!addedToWarp) {\n throw new Error('Warp MCP server not added');\n }\n }\n\n const clientFileTarget = getClientConfigFile(client);\n const { name } = clientMetadata[client];\n\n try {\n let config: ClientConfigObject = {};\n let content: string | undefined = undefined;\n\n log.info(`Checking if config file exists at: ${clientFileTarget.path}`);\n if (!fs.existsSync(clientFileTarget.path)) {\n log.info('Config file not found, creating default empty config');\n setNestedValue(config, clientFileTarget.configKey, {});\n log.info('Config created successfully');\n await wait({\n startText: 'Locating config file',\n stopText: `No config found, creating default empty config`,\n ms: 1000,\n });\n } else {\n log.info('Config file found, reading config file content');\n const { config: rawConfig, fileContent } =\n parseClientConfig(clientFileTarget);\n config = rawConfig;\n content = fileContent;\n const existingValue = getNestedValue(\n rawConfig,\n clientFileTarget.configKey\n );\n if (!existingValue) {\n setNestedValue(rawConfig, clientFileTarget.configKey, {});\n }\n log.info(\n `Config loaded successfully: ${JSON.stringify(rawConfig, null, 2)}`\n );\n await wait({\n startText: `Locating config file`,\n stopText: `Config loaded from ${clientFileTarget.path}`,\n ms: 1000,\n });\n }\n\n const servers = getNestedValue(config, clientFileTarget.configKey);\n if (!servers || typeof servers !== 'object') {\n log.error(`Invalid ${clientFileTarget.configKey} structure in config`);\n clackLog.error(\n chalk.bold.red(\n `Invalid ${clientFileTarget.configKey} structure in config`\n )\n );\n throw new Error(`Invalid ${clientFileTarget.configKey} structure`);\n }\n\n if (client === Clients.Goose) {\n servers[serverName] = {\n name: serverName,\n cmd: command,\n args,\n enabled: true,\n envs: {},\n type: 'stdio',\n timeout: 300,\n };\n } else if (client === Clients.Zed) {\n // Zed has a different config structure\n servers[serverName] = {\n source: 'custom',\n command,\n args,\n env: {},\n };\n } else if (client === Clients.Opencode) {\n servers[serverName] = {\n type: 'local',\n command,\n args,\n enabled: true,\n environment: {},\n };\n } else {\n servers[serverName] = {\n command,\n args,\n };\n }\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n clackLog.step(\n `The following will be added to ${chalk.bold.underline(clientFileTarget.path)}`\n );\n\n const configStr = formatDiffByFormat(\n {\n [clientFileTarget.configKey]: {\n [serverName]: servers[serverName] as object,\n },\n },\n clientFileTarget.format\n );\n\n await stream.message(\n (async function* () {\n for (const num of Array.from(\n { length: configStr.length },\n (_, i) => i\n )) {\n const char = configStr[num]!;\n yield char;\n if (!['\\n', ' ', '─', '╮', '╭', '╰', '╯', '│'].includes(char)) {\n await new Promise(resolve => setTimeout(resolve, 5));\n } else {\n await new Promise(resolve => setTimeout(resolve, 2));\n }\n }\n })()\n );\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n const isConfirmed = await confirm({\n message: `Would you like to proceed?`,\n active: 'Install MCP',\n inactive: 'Cancel',\n });\n if (isConfirmed !== true) {\n outro(chalk.bold.red('Installation cancelled'));\n process.exit(0);\n }\n\n const configContent = serializeClientConfig(\n clientFileTarget,\n config,\n content\n );\n\n fs.writeFileSync(clientFileTarget.path, configContent);\n clackLog.success(chalk.bold.green(`Added x402scan MCP to ${name}`));\n } catch (e) {\n clackLog.error(chalk.bold.red(`Error adding x402scan MCP to ${name}`));\n throw e;\n }\n}\n\nconst formatDiffByFormat = (obj: object, format: FileFormat) => {\n const str = stringifyObject(obj, format);\n switch (format) {\n case FileFormat.JSON: {\n const numLines = str.split('\\n').length;\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, numLines - 2, numLines - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.YAML: {\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, str.length - 2, str.length - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.TOML: {\n return str\n .split('\\n')\n .filter(line => line.trim() !== '')\n .map(line => {\n return `${chalk.bold.green(`+ ${line.trim()}`)}`;\n })\n .join('\\n');\n }\n }\n};\n","import chalk from 'chalk';\nimport { log } from '@clack/prompts';\n\nimport { getUSDCBalance } from '@/lib/balance';\nimport { promptDeposit } from '@/lib/deposit';\nimport { wait } from '@/lib/wait';\n\nimport type { Address } from 'viem';\nimport type { InstallFlags } from '..';\n\ninterface AddFundsProps {\n flags: InstallFlags;\n address: Address;\n isNew: boolean;\n}\n\nexport const addFunds = async ({ flags, address, isNew }: AddFundsProps) => {\n if (isNew) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n log.info('To use paid API tools, you will need USDC in your wallet.');\n await promptDeposit(address, flags);\n } else {\n const balance = await getUSDCBalance({ address });\n await wait({\n startText: 'Checking balance...',\n stopText: `Balance: ${chalk.bold(`${balance} USDC`)} `,\n ms: 1000,\n });\n if (balance < 1) {\n log.warning(\n chalk.bold(\n `Your balance is low (${balance} USDC). Consider topping up.`\n )\n );\n await promptDeposit(address, flags);\n }\n }\n};\n","import chalk from 'chalk';\nimport { log, spinner } from '@clack/prompts';\n\nimport { wait } from '@/lib/wait';\n\nimport { redeemInviteCode as redeemInviteCodeLib } from '@/lib/redeem-invite';\n\nimport type { RedeemInviteProps } from '@/lib/redeem-invite';\n\nexport const redeemInviteCode = async (props: RedeemInviteProps) => {\n const s = spinner();\n s.start('Redeeming invite code...');\n\n const result = await redeemInviteCodeLib(props);\n\n return result.match(\n async ({ data }) => {\n s.stop('Invite code redeemed successfully!');\n\n await wait({\n startText: 'Processing...',\n stopText: chalk.green(\n `${chalk.bold(data.amount)} USDC has been sent to your wallet!`\n ),\n ms: 1000,\n });\n\n log.info(\n chalk.dim(`Transaction: https://basescan.org/tx/${data.txHash}`)\n );\n\n return true;\n },\n error => {\n s.stop('Invite code redemption failed');\n log.warning(\n chalk.yellow(`Failed to redeem invite code: ${error?.message}`)\n );\n return false;\n }\n );\n};\n","import { getWallet } from '@/lib/wallet';\nimport { getClient } from './1-get-client';\nimport { addServer } from './2-add-server';\nimport { addFunds } from './3-add-funds';\nimport { redeemInviteCode } from './4-redeem-invite';\n\nimport type { Command, GlobalFlags } from '@/types';\nimport { intro, outro } from '@clack/prompts';\nimport chalk from 'chalk';\n\nexport type InstallFlags = GlobalFlags<{\n client?: string;\n}>;\n\nexport const installMcpServer: Command<InstallFlags> = async flags => {\n const {\n account: { address },\n isNew,\n } = await getWallet();\n\n intro(chalk.green.bold(`Install x402scan MCP`));\n\n const client = await getClient(flags);\n\n await addServer(client, flags);\n\n const inviteRedeemed = flags.invite\n ? await redeemInviteCode({\n code: flags.invite,\n dev: flags.dev,\n address,\n })\n : false;\n\n if (!inviteRedeemed) {\n await addFunds({ flags, address, isNew });\n }\n\n outro(chalk.bold.green('Your x402scan MCP server is ready to use!'));\n};\n","import type { Command } from '@/types';\nimport { intro, outro } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { getWallet } from '@/lib/wallet';\nimport { promptDeposit } from '@/lib/deposit';\n\nexport const fundMcpServer: Command = async flags => {\n intro(chalk.bold(`Fund ${chalk.hex('#2563eb')('x402scan MCP')}`));\n\n const {\n account: { address },\n } = await getWallet();\n\n await promptDeposit(address, flags);\n\n outro(chalk.bold.green('Your x402scan MCP server is funded!'));\n};\n","#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nvoid yargs(hideBin(process.argv))\n .scriptName('@x402scan/mcp')\n .option('dev', {\n type: 'boolean',\n description: 'Enable dev mode',\n default: false,\n })\n .option('invite', {\n type: 'string',\n description: 'Invite code to redeem for starter money',\n required: false,\n })\n .command(\n '$0',\n 'Start the MCP server',\n yargs => yargs,\n async args => {\n const { startServer } = await import('@/server');\n await startServer(args);\n }\n )\n .command(\n 'install',\n 'Install the MCP server',\n yargs =>\n yargs.option('client', {\n type: 'string',\n description: 'The client name',\n required: false,\n }),\n async args => {\n const { installMcpServer } = await import('@/install');\n await installMcpServer(args);\n }\n )\n .command(\n 'fund',\n 'Open the funding page',\n yargs => yargs,\n async args => {\n const { fundMcpServer } = await import('@/fund');\n await fundMcpServer(args);\n }\n )\n .strict()\n .demandCommand(0, 1, '', 'Too many commands provided')\n .help()\n .parseAsync()\n .catch(err => {\n console.error('Fatal:', err);\n process.exit(1);\n });\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/install/clients.ts","../../src/server/lib/response.ts","../../src/server/lib/schemas.ts","../../src/server/types.ts","../../src/lib/fs.ts","../../src/lib/log.ts","../../src/lib/networks.ts","../../src/lib/token.ts","../../src/lib/utils.ts","../../src/lib/balance.ts","../../src/lib/wait.ts","../../src/lib/safe-fetch.ts","../../src/lib/state.ts","../../src/lib/redeem-invite.ts","../../src/lib/deposit.ts","../../src/server/lib/check-balance.ts","../../src/server/lib/parse-response.ts","../../src/server/tools/fetch-x402-resource.ts","../../src/server/lib/x402/protocol.ts","../../src/server/vendor/sign-in-with-x/solana.ts","../../src/server/vendor/sign-in-with-x/sign.ts","../../src/server/vendor/sign-in-with-x/evm.ts","../../src/server/vendor/sign-in-with-x/message.ts","../../src/server/vendor/sign-in-with-x/client.ts","../../src/server/vendor/sign-in-with-x/encode.ts","../../src/server/tools/auth.ts","../../src/server/tools/wallet.ts","../../src/server/lib/x402/get-route-details.ts","../../src/server/tools/check-endpoint-schema.ts","../../src/server/tools/redeem-invite.ts","../../src/server/lib/version.ts","../../src/server/tools/telemetry.ts","../../src/server/resources/_lib.ts","../../src/server/resources/origins.ts","../../src/lib/wallet.ts","../../src/server/tools/discover-resources.ts","../../src/server/index.ts","../../src/install/1-get-client/index.ts","../../src/install/2-add-server/lib/platforms.ts","../../src/install/2-add-server/lib/file-types.ts","../../src/install/2-add-server/lib/client-config-file.ts","../../src/install/2-add-server/lib/nested-values.ts","../../src/install/2-add-server/lib/index.ts","../../src/install/2-add-server/index.ts","../../src/install/3-redeem-invite/index.ts","../../src/install/4-add-funds/index.ts","../../src/install/index.ts","../../src/fund/index.ts","../../src/index.ts"],"names":["Clients","z","fs","spinner","log","err","x402HTTPClient","x402Client","responseHeaders","data","contentType","init_redeem_invite","response","account","stored","init_wallet","parsedClient","select","client","chalk","Platforms","process","path","format","os","init_lib","clackLog","outro","redeemInviteCode","intro","yargs","startServer","installMcpServer","fundMcpServer"],"mappings":"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","file":"index.js","sourcesContent":["export enum Clients {\n ClaudeCode = 'claude-code',\n Cursor = 'cursor',\n Claude = 'claude',\n Codex = 'codex',\n Vscode = 'vscode',\n Cline = 'cline',\n RooCline = 'roo-cline',\n Windsurf = 'windsurf',\n Warp = 'warp',\n GeminiCli = 'gemini-cli',\n Goose = 'goose',\n Zed = 'zed',\n Opencode = 'opencode',\n}\n\ninterface ClientMetadata {\n name: string;\n description: string;\n website: string;\n}\n\nexport const clientMetadata: Record<Clients, ClientMetadata> = {\n [Clients.ClaudeCode]: {\n name: 'Claude Code',\n description: 'Claude Code is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Cursor]: {\n name: 'Cursor',\n description: 'Cursor is a code editor that uses the Cursor API.',\n website: 'https://cursor.com',\n },\n [Clients.Claude]: {\n name: 'Claude',\n description: 'Claude is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Codex]: {\n name: 'Codex',\n description: 'Codex is a code editor that uses the Codex API.',\n website: 'https://codex.com',\n },\n [Clients.Vscode]: {\n name: 'VSCode',\n description: 'VSCode is a code editor that uses the VSCode API.',\n website: 'https://vscode.com',\n },\n [Clients.Cline]: {\n name: 'Cline',\n description: 'Cline is a code editor that uses the Cline API.',\n website: 'https://cline.com',\n },\n [Clients.RooCline]: {\n name: 'RooCline',\n description: 'RooCline is a code editor that uses the RooCline API.',\n website: 'https://roo-cline.com',\n },\n [Clients.Windsurf]: {\n name: 'Windsurf',\n description: 'Windsurf is a code editor that uses the Windsurf API.',\n website: 'https://windsurf.com',\n },\n [Clients.Warp]: {\n name: 'Warp',\n description: 'Warp is a code editor that uses the Warp API.',\n website: 'https://warp.com',\n },\n [Clients.GeminiCli]: {\n name: 'Gemini CLI',\n description: 'Gemini CLI is a code editor that uses the Gemini CLI API.',\n website: 'https://gemini-cli.com',\n },\n [Clients.Goose]: {\n name: 'Goose',\n description: 'Goose is a code editor that uses the Goose API.',\n website: 'https://goose.com',\n },\n [Clients.Zed]: {\n name: 'Zed',\n description: 'Zed is a code editor that uses the Zed API.',\n website: 'https://zed.com',\n },\n [Clients.Opencode]: {\n name: 'Opencode',\n description: 'Opencode is a code editor that uses the Opencode API.',\n website: 'https://opencode.com',\n },\n};\n","export const mcpSuccess = <T>(data: T) => {\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(data, null, 2) }],\n };\n};\n\nexport const mcpError = (error: unknown, context?: Record<string, unknown>) => {\n const message =\n error instanceof Error\n ? error.message\n : typeof error === 'string'\n ? error\n : String(error);\n\n const details =\n error instanceof Error && error.cause\n ? { cause: JSON.stringify(error.cause) }\n : undefined;\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(\n {\n error: message,\n ...(details && { details }),\n ...(context && { context }),\n },\n null,\n 2\n ),\n },\n ],\n isError: true as const,\n };\n};\n","import z from 'zod';\n\nimport type { Hex } from 'viem';\nimport { getAddress } from 'viem';\n\nexport const ethereumAddressSchema = z\n .string()\n .regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address')\n .transform(address => getAddress(address));\n\nexport const ethereumPrivateKeySchema = z\n .string()\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid Ethereum private key')\n .transform(privateKey => privateKey as Hex);\n\nexport const requestSchema = z.object({\n url: z.url().describe('The endpoint URL'),\n method: z\n .enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])\n .default('GET')\n .describe('HTTP method'),\n body: z\n .unknown()\n .optional()\n .describe('Request body for POST/PUT/PATCH methods'),\n});\n\nexport const requestWithHeadersSchema = requestSchema.extend({\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Additional headers to include')\n .default({}),\n});\n","import type { GlobalFlags } from '@/types';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { PrivateKeyAccount } from 'viem';\n\ninterface RegisterToolsProps {\n server: McpServer;\n account: PrivateKeyAccount;\n flags: GlobalFlags;\n}\n\nexport type RegisterTools = (props: RegisterToolsProps) => void;\n\nexport enum FetchStates {\n INITIAL_REQUEST = 'initial_request',\n PAYMENT_REQUIRED = 'payment_required',\n PAYMENT_CREATED = 'payment_created',\n PAYMENT_FAILED = 'payment_failed',\n PAYMENT_SETTLED = 'payment_settled',\n}\n","import { join } from 'path';\nimport { homedir } from 'os';\nimport * as fs from 'fs';\n\nconst BASE_DIRECTORY = join(homedir(), '.x402scan-mcp');\n\nif (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n}\n\nexport const configFile = (name: `${string}.${string}`) => {\n if (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n }\n const filePath = join(BASE_DIRECTORY, name);\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, '{}');\n }\n return filePath;\n};\n","/**\n * Logger - writes to ~/.x402scan-mcp/mcp.log and stderr\n */\n\nimport { appendFileSync } from 'fs';\n\nimport { configFile } from './fs';\n\nconst LOG_FILE = configFile('mcp.log');\nconst DEBUG = process.env.X402_DEBUG === 'true';\n\nfunction format(args: unknown[]): string {\n return args\n .map(a =>\n typeof a === 'object' && a !== null ? JSON.stringify(a) : String(a)\n )\n .join(' ');\n}\n\nfunction write(level: string, msg: string, args: unknown[]): void {\n const formatted = args.length ? `${msg} ${format(args)}` : msg;\n const line = `[${new Date().toISOString()}] [${level}] ${formatted}\\n`;\n try {\n appendFileSync(LOG_FILE, line);\n } catch {}\n if (process.env.X402_DEBUG === 'true') {\n console.error(`[x402scan] ${formatted}`);\n }\n}\n\nexport const log = {\n info: (msg: string, ...args: unknown[]) => write('INFO', msg, args),\n error: (msg: string, ...args: unknown[]) => write('ERROR', msg, args),\n debug: (msg: string, ...args: unknown[]) =>\n DEBUG && write('DEBUG', msg, args),\n path: LOG_FILE,\n};\n","/**\n * Chain configurations - CAIP-2 identifiers, USDC addresses, viem chains\n */\n\nimport {\n base,\n baseSepolia,\n mainnet,\n sepolia,\n optimism,\n arbitrum,\n polygon,\n} from 'viem/chains';\n\nimport type { Chain } from 'viem';\n\nexport interface ChainConfig {\n chain: Chain;\n caip2: string;\n v1Name: string;\n usdcAddress: `0x${string}`;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n 'eip155:8453': {\n chain: base,\n caip2: 'eip155:8453',\n v1Name: 'base',\n usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n 'eip155:84532': {\n chain: baseSepolia,\n caip2: 'eip155:84532',\n v1Name: 'base-sepolia',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n },\n 'eip155:1': {\n chain: mainnet,\n caip2: 'eip155:1',\n v1Name: 'ethereum',\n usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n },\n 'eip155:11155111': {\n chain: sepolia,\n caip2: 'eip155:11155111',\n v1Name: 'ethereum-sepolia',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n },\n 'eip155:10': {\n chain: optimism,\n caip2: 'eip155:10',\n v1Name: 'optimism',\n usdcAddress: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n },\n 'eip155:42161': {\n chain: arbitrum,\n caip2: 'eip155:42161',\n v1Name: 'arbitrum',\n usdcAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n 'eip155:137': {\n chain: polygon,\n caip2: 'eip155:137',\n v1Name: 'polygon',\n usdcAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n },\n};\n\nconst V1_TO_CAIP2: Record<string, string> = {\n base: 'eip155:8453',\n 'base-sepolia': 'eip155:84532',\n ethereum: 'eip155:1',\n 'ethereum-sepolia': 'eip155:11155111',\n optimism: 'eip155:10',\n arbitrum: 'eip155:42161',\n polygon: 'eip155:137',\n};\n\nexport const DEFAULT_NETWORK = 'eip155:8453';\n\n/** Convert any network identifier to CAIP-2 format */\nexport function toCaip2(network: string): string {\n if (network.startsWith('eip155:')) return network;\n return V1_TO_CAIP2[network.toLowerCase()] ?? network;\n}\n\n/** Get chain config from network identifier */\nexport function getChainConfig(network: string): ChainConfig | undefined {\n return CHAIN_CONFIGS[toCaip2(network)];\n}\n\n/** Get USDC address for a network */\nexport function getUSDCAddress(network: string): `0x${string}` | undefined {\n return getChainConfig(network)?.usdcAddress;\n}\n\n/** Extract chain ID from CAIP-2 identifier */\nexport function getChainId(network: string): number | undefined {\n const caip2 = toCaip2(network);\n const match = /^eip155:(\\d+)$/.exec(caip2);\n return match ? parseInt(match[1]!, 10) : undefined;\n}\n\n/** Get human-readable chain name */\nexport function getChainName(network: string): string {\n return getChainConfig(network)?.chain.name ?? network;\n}\n\n/** Check if network is a testnet */\nexport function isTestnet(network: string): boolean {\n return getChainConfig(network)?.chain.testnet === true;\n}\n","import { formatUnits } from 'viem';\n\nexport const tokenStringToNumber = (amount: string, decimals = 6) => {\n return Number(formatUnits(BigInt(amount), decimals));\n};\n","export const getBaseUrl = (dev: boolean) => {\n return dev ? 'http://localhost:3000' : 'https://x402scan.com';\n};\n","import type { Address } from 'viem';\nimport { getBaseUrl } from './utils';\nimport { z } from 'zod';\nimport type { GlobalFlags } from '@/types';\n\nconst balanceApiResponseSchema = z.object({\n address: z.string(),\n chain: z.number().int(),\n balance: z.coerce.number(),\n rawBalance: z.string(),\n});\n\nexport async function getUSDCBalance(\n address: Address,\n flags: GlobalFlags\n): Promise<{ balanceFormatted: number; balanceRaw: string }> {\n const url = `${getBaseUrl(flags.dev)}/api/rpc/balance/${address}`;\n\n const res = await fetch(url, {\n method: 'GET',\n headers: {\n accept: 'application/json',\n },\n });\n\n if (!res.ok) {\n throw new Error(\n `Balance API request failed (${res.status} ${res.statusText})`\n );\n }\n\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n throw new Error(\n `Failed to parse balance API response as JSON (${res.status} ${res.statusText})`\n );\n }\n\n const result = balanceApiResponseSchema.safeParse(json);\n if (!result.success) {\n throw new Error(\n `Failed to safeParse balance API response (${res.status} ${res.statusText})`\n );\n }\n return {\n balanceFormatted: result.data.balance,\n balanceRaw: result.data.rawBalance,\n };\n}\n","import { spinner } from '@clack/prompts';\n\ninterface WaitProps {\n startText: string;\n stopText: string;\n ms: number;\n}\n\nexport const wait = async ({ startText, stopText, ms }: WaitProps) => {\n const { start: startSpinner, stop: stopSpinner } = spinner();\n startSpinner(startText);\n await new Promise(resolve => setTimeout(resolve, ms));\n stopSpinner(stopText);\n};\n","import { err, ResultAsync } from 'neverthrow';\n\nimport type { Error } from './error';\n\ntype FetchError = NetworkError | HttpError | ParseError;\n\ntype NetworkError = Error<{\n type: 'network';\n error: Error;\n}>;\n\ntype HttpError<E = unknown> = Error<{\n type: 'http';\n status: number;\n headers: Headers;\n json: E | undefined;\n}>;\n\ntype ParseError = Error<{\n type: 'parse';\n error: Error;\n}>;\n\nfunction safeFetch(\n input: URL | string,\n init?: RequestInit\n): ResultAsync<Response, FetchError> {\n return ResultAsync.fromPromise(\n fetch(input, init),\n (error): NetworkError => ({\n type: 'network' as const,\n message: 'Network error',\n error: error instanceof Error ? error : new Error(String(error)),\n })\n );\n}\n\nexport const safeFetchJson = <T, E = unknown>(\n input: URL | string,\n init?: RequestInit,\n errorMessage?: (e: E) => string\n): ResultAsync<T, FetchError> => {\n return safeFetch(input, init).andThen(response => {\n if (!response.ok) {\n return ResultAsync.fromSafePromise(\n response.json().catch(() => undefined) as Promise<E | undefined>\n ).andThen(json =>\n err<never, HttpError<E>>({\n type: 'http' as const,\n message:\n json !== undefined && errorMessage\n ? errorMessage(json)\n : response.statusText,\n status: response.status,\n headers: response.headers,\n json,\n })\n );\n }\n\n return ResultAsync.fromPromise(\n response.json() as Promise<T>,\n (error): ParseError => ({\n type: 'parse' as const,\n message: 'Could not parse JSON from response',\n error: error instanceof Error ? error : new Error(String(error)),\n })\n );\n });\n};\n","import z from 'zod';\nimport fs from 'fs';\n\nimport { configFile } from './fs';\nimport { log } from './log';\n\nconst STATE_FILE = configFile('state.json');\n\nconst stateSchema = z\n .looseObject({\n redeemedCodes: z.array(z.string()),\n })\n .partial();\n\nexport const getState = () => {\n if (!fs.existsSync(STATE_FILE)) {\n fs.writeFileSync(STATE_FILE, JSON.stringify({}));\n return {};\n }\n const result = stateSchema.safeParse(\n JSON.parse(fs.readFileSync(STATE_FILE, 'utf-8'))\n );\n if (!result.success) {\n log.error('Failed to parse state', { error: result.error });\n return {};\n }\n return result.data;\n};\n\nexport const setState = (state: z.infer<typeof stateSchema>) => {\n const existing = getState();\n const newState = stateSchema.parse({ ...existing, ...state });\n fs.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));\n};\n","import { errAsync } from 'neverthrow';\n\nimport { safeFetchJson } from './safe-fetch';\nimport { getBaseUrl } from './utils';\nimport { getState, setState } from './state';\n\nimport type { Address } from 'viem';\n\nexport interface RedeemInviteProps {\n code: string;\n dev: boolean;\n address: Address;\n}\n\ninterface RedeemError {\n success: false;\n message: string;\n}\n\ninterface RedeemResponse {\n success: true;\n data: {\n redemptionId: string;\n txHash: string;\n amount: string;\n };\n}\n\nexport const redeemInviteCode = async ({\n code,\n dev,\n address,\n}: RedeemInviteProps) => {\n const state = getState();\n\n if (state.redeemedCodes?.includes(code)) {\n return Promise.resolve(\n errAsync({\n success: false,\n message: 'This invite code has already been redeemed',\n })\n );\n }\n\n return await safeFetchJson<RedeemResponse, RedeemError>(\n `${getBaseUrl(dev)}/api/invite/redeem`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n code,\n recipientAddr: address,\n }),\n },\n ({ message }) => message\n ).andTee(result => {\n if (result.success) {\n setState({\n redeemedCodes: [...(state.redeemedCodes ?? []), code],\n });\n }\n });\n};\n","import chalk from 'chalk';\nimport { select, text, log, spinner } from '@clack/prompts';\nimport open from 'open';\n\nimport { DEFAULT_NETWORK, getChainName } from './networks';\nimport { wait } from './wait';\nimport { redeemInviteCode } from './redeem-invite';\n\nimport type { GlobalFlags } from '@/types';\nimport type { Address } from 'viem';\nimport { getBaseUrl } from './utils';\n\nexport const getDepositLink = (address: string, flags: GlobalFlags) => {\n return `${getBaseUrl(flags.dev)}/mcp/deposit/${address}`;\n};\n\nexport const openDepositLink = async (address: string, flags: GlobalFlags) => {\n const depositLink = getDepositLink(address, flags);\n await open(depositLink);\n};\n\nconst redeemInviteCodePrompt = async (\n address: Address,\n flags: GlobalFlags\n): Promise<boolean> => {\n const code = await text({\n message: 'Enter your invite code',\n placeholder: 'MRT-XXXXX',\n validate: value => {\n if (!value || value.trim().length === 0) {\n return 'Please enter an invite code';\n }\n },\n });\n\n if (typeof code !== 'string') {\n return false;\n }\n\n const s = spinner();\n s.start('Redeeming invite code...');\n\n const result = await redeemInviteCode({ code, dev: flags.dev, address });\n\n return result.match(\n async ({ data: { amount, txHash } }) => {\n s.stop('Invite code redeemed successfully!');\n\n await wait({\n startText: 'Processing...',\n stopText: chalk.green(\n `${chalk.bold(amount)} USDC has been sent to your wallet!`\n ),\n ms: 1500,\n });\n\n log.success(\n chalk.bold(`Your wallet has been funded with ${amount} USDC`)\n );\n\n if (txHash) {\n log.info(chalk.dim(`Transaction: https://basescan.org/tx/${txHash}`));\n }\n\n return true;\n },\n error => {\n s.stop('Invite code redemption failed');\n log.warning(\n chalk.yellow(`Failed to redeem invite code: ${error?.message}`)\n );\n return false;\n }\n );\n};\n\nexport const promptDeposit = async (address: Address, flags: GlobalFlags) => {\n const depositLink = getDepositLink(address, flags);\n\n const depositChoice = flags.yes\n ? 'manual'\n : await select({\n message: chalk.bold('How would you like to deposit?'),\n initialValue: 'guided' as string | undefined,\n options: [\n {\n label: 'Guided - Recommended',\n value: 'guided',\n hint: 'Online portal in x402scan',\n },\n {\n label: 'Manual',\n value: 'manual',\n hint: 'Print deposit instructions',\n },\n {\n label: 'Redeem Invite Code',\n value: 'invite',\n hint: 'Enter an invite code for starter money',\n },\n {\n label: 'Skip',\n value: undefined,\n hint: 'Skip deposit process - functionality limited',\n },\n ],\n });\n\n if (depositChoice === 'guided') {\n await wait({\n startText: 'Opening deposit page...',\n stopText: `Opening ${chalk.underline.hex('#2563eb')(depositLink)}`,\n ms: 1000,\n });\n\n await open(depositLink);\n } else if (depositChoice === 'manual') {\n log.step(chalk.bold('Account Information'));\n log.message(`Address: ${address}`);\n log.message(`Network: ${getChainName(DEFAULT_NETWORK)}`);\n log.step(chalk.bold('Online Portal'));\n log.message(`${chalk.underline(depositLink)}`);\n } else if (depositChoice === 'invite') {\n const redeemed = await redeemInviteCodePrompt(address, flags);\n if (!redeemed) {\n // If redemption failed, prompt again for deposit options\n await promptDeposit(address, flags);\n }\n }\n};\n","import { getUSDCBalance } from '@/lib/balance';\nimport { getDepositLink, openDepositLink } from '@/lib/deposit';\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Address } from 'viem';\nimport type { GlobalFlags } from '@/types';\n\ninterface CheckBalanceProps {\n server: McpServer;\n address: Address;\n amountNeeded: number;\n message: (balance: number) => string;\n flags: GlobalFlags;\n}\n\nexport const checkBalance = async ({\n server,\n address,\n amountNeeded,\n message,\n flags,\n}: CheckBalanceProps) => {\n const { balanceFormatted } = await getUSDCBalance(address, flags);\n\n if (balanceFormatted < amountNeeded) {\n const capabilities = server.server.getClientCapabilities();\n if (!capabilities?.elicitation) {\n throw new Error(\n `${message(balanceFormatted)}\\n\\nYou can deposit USDC at ${getDepositLink(address, flags)}`\n );\n }\n\n const result = await server.server.elicitInput({\n mode: 'form',\n message: message(balanceFormatted),\n requestedSchema: {\n type: 'object',\n properties: {},\n },\n });\n\n if (result.action === 'accept') {\n await openDepositLink(address, flags);\n }\n }\n\n return balanceFormatted;\n};\n","export const parseResponse = async (\n response: Response\n): Promise<string | object | ArrayBuffer | undefined> => {\n try {\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n return (await response.json()) as object;\n } else if (contentType.includes('image/')) {\n return await response.arrayBuffer();\n } else {\n return await response.text();\n }\n } catch {\n return undefined;\n }\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\nimport { wrapFetchWithPayment } from '@x402/fetch';\n\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { requestWithHeadersSchema } from '@/server/lib/schemas';\nimport { FetchStates } from '@/server/types';\n\nimport { log } from '@/lib/log';\nimport { DEFAULT_NETWORK } from '@/lib/networks';\nimport { tokenStringToNumber } from '@/lib/token';\n\nimport { checkBalance } from '../lib/check-balance';\n\nimport type { RegisterTools } from '@/server/types';\nimport { parseResponse } from '../lib/parse-response';\n\nexport const registerFetchX402ResourceTool: RegisterTools = ({\n server,\n account,\n flags,\n}) => {\n server.registerTool(\n 'fetch',\n {\n description:\n 'Fetches an x402-protected resource and handles payment automatically. If the resource is not x402-protected, it will return the raw response.',\n inputSchema: requestWithHeadersSchema,\n },\n async ({ url, method, body, headers }) => {\n const coreClient = x402Client.fromConfig({\n schemes: [\n { network: DEFAULT_NETWORK, client: new ExactEvmScheme(account) },\n ],\n });\n\n let state: FetchStates = FetchStates.INITIAL_REQUEST;\n\n coreClient.onBeforePaymentCreation(async ({ selectedRequirements }) => {\n const amount = tokenStringToNumber(selectedRequirements.amount);\n await checkBalance({\n server,\n address: account.address,\n amountNeeded: amount,\n message: balance =>\n `This request costs ${amount} USDC. Your current balance is ${balance} USDC.`,\n flags,\n });\n state = FetchStates.PAYMENT_REQUIRED;\n });\n\n coreClient.onAfterPaymentCreation(async ctx => {\n state = FetchStates.PAYMENT_CREATED;\n log.info('After payment creation', ctx);\n return Promise.resolve();\n });\n\n coreClient.onPaymentCreationFailure(async ctx => {\n state = FetchStates.PAYMENT_FAILED;\n log.info('Payment creation failure', ctx);\n return Promise.resolve();\n });\n const client = new x402HTTPClient(coreClient);\n\n const fetchWithPay = wrapFetchWithPayment(fetch, client);\n\n try {\n const response = await fetchWithPay(url, {\n method,\n body:\n typeof body === 'string'\n ? body\n : body\n ? JSON.stringify(body)\n : undefined,\n headers: {\n ...(body ? { 'Content-Type': 'application/json' } : {}),\n ...headers,\n },\n });\n\n if (!response.ok) {\n const errorResponse = {\n data: await parseResponse(response),\n statusCode: response.status,\n state,\n };\n if (response.status === 402) {\n return mcpError('Payment required', errorResponse);\n }\n return mcpError(\n response.statusText ?? 'Request failed',\n errorResponse\n );\n }\n\n const getSettlement = () => {\n try {\n return client.getPaymentSettleResponse(name =>\n response.headers.get(name)\n );\n } catch {\n return undefined;\n }\n };\n\n const settlement = getSettlement();\n\n return mcpSuccess({\n data: await parseResponse(response),\n payment: settlement,\n });\n } catch (err) {\n return mcpError(err, { state });\n }\n }\n );\n};\n","/**\n * x402 protocol handling - v1/v2 normalization and schema extraction\n */\n\nimport type { PaymentRequired, PaymentRequirements } from '@x402/core/types';\n\n// Normalized types - use these downstream\ninterface NormalizedRequirement {\n scheme: string;\n network: string;\n amount: string;\n asset: string;\n payTo: string;\n maxTimeoutSeconds: number;\n extra?: Record<string, unknown>;\n // v1-only fields preserved for display\n resource?: string;\n description?: string;\n mimeType?: string;\n}\n\nexport interface NormalizedPaymentRequired {\n x402Version: number;\n error?: string;\n accepts: NormalizedRequirement[];\n resource?: { url: string; description: string; mimeType: string };\n extensions?: Record<string, unknown>;\n}\n\n// v1 raw types\ninterface RawV1Requirement {\n scheme: string;\n network: string;\n maxAmountRequired: string;\n resource: string;\n description: string;\n mimeType: string;\n outputSchema?: Record<string, unknown>;\n payTo: string;\n maxTimeoutSeconds: number;\n asset: string;\n extra?: Record<string, unknown>;\n}\n\n/** Detect v1 response format (uses maxAmountRequired instead of amount) */\nexport function isV1Response(pr: unknown): boolean {\n if (!pr || typeof pr !== 'object') return false;\n const obj = pr as Record<string, unknown>;\n if (obj.x402Version === 1) return true;\n const accepts = obj.accepts;\n if (Array.isArray(accepts) && accepts.length > 0) {\n return 'maxAmountRequired' in accepts[0];\n }\n return false;\n}\n\nfunction normalizeV1Requirement(req: RawV1Requirement): NormalizedRequirement {\n if (!req.maxAmountRequired) {\n throw new Error('v1 requirement missing maxAmountRequired field');\n }\n return {\n scheme: req.scheme,\n network: req.network,\n amount: req.maxAmountRequired,\n asset: req.asset,\n payTo: req.payTo,\n maxTimeoutSeconds: req.maxTimeoutSeconds,\n extra: req.extra,\n resource: req.resource,\n description: req.description,\n mimeType: req.mimeType,\n };\n}\n\nfunction normalizeV2Requirement(\n req: PaymentRequirements\n): NormalizedRequirement {\n if (!req.amount) {\n throw new Error('v2 requirement missing amount field');\n }\n return {\n scheme: req.scheme,\n network: req.network,\n amount: req.amount,\n asset: req.asset,\n payTo: req.payTo,\n maxTimeoutSeconds: req.maxTimeoutSeconds,\n extra: req.extra,\n };\n}\n\n/** Normalize v1/v2 payment required to consistent format */\nexport function normalizePaymentRequired(\n pr: PaymentRequired | Record<string, unknown>\n): NormalizedPaymentRequired {\n const version = (pr as { x402Version?: number }).x402Version ?? 1;\n\n if (isV1Response(pr)) {\n const v1 = pr as { error?: string; accepts: RawV1Requirement[] };\n return {\n x402Version: 1,\n error: v1.error,\n accepts: v1.accepts.map(normalizeV1Requirement),\n };\n }\n\n const v2 = pr as PaymentRequired;\n return {\n x402Version: version,\n error: v2.error,\n accepts: v2.accepts.map(normalizeV2Requirement),\n resource: v2.resource,\n extensions: v2.extensions,\n };\n}\n\n// V1 schema extraction (inline to avoid @x402/extensions ESM/ajv issue)\n\ninterface V1OutputSchema {\n input: {\n type: string;\n method: string;\n discoverable?: boolean;\n queryParams?: Record<string, unknown>;\n body?: Record<string, unknown>;\n bodyFields?: Record<string, unknown>;\n headers?: Record<string, string>;\n };\n output?: Record<string, unknown>;\n}\n\ninterface V1Accept {\n outputSchema?: V1OutputSchema;\n}\n\n/** Extract discovery info from v1 outputSchema */\nexport function extractV1Schema(\n accept: unknown\n): Record<string, unknown> | null {\n const v1 = accept as V1Accept;\n const schema = v1?.outputSchema;\n if (schema?.input?.type !== 'http' || !schema.input.method) {\n return null;\n }\n if (schema.input.discoverable === false) {\n return null;\n }\n\n const method = schema.input.method.toUpperCase();\n const isBodyMethod = ['POST', 'PUT', 'PATCH'].includes(method);\n\n return {\n input: {\n type: 'http',\n method,\n ...(schema.input.queryParams && {\n queryParams: schema.input.queryParams,\n }),\n ...(isBodyMethod &&\n (schema.input.body ?? schema.input.bodyFields) && {\n bodyType: 'json',\n body: schema.input.body ?? schema.input.bodyFields,\n }),\n ...(schema.input.headers && { headers: schema.input.headers }),\n },\n ...(schema.output && { output: { type: 'json', example: schema.output } }),\n };\n}\n","/**\n * Solana Sign-In-With-X (SIWS) support\n *\n * Implements CAIP-122 compliant message format and Ed25519 signature verification\n * for Solana wallets.\n */\n\nimport { base58 } from '@scure/base';\nimport nacl from 'tweetnacl';\nimport type { SIWxExtensionInfo } from './types';\n\n/**\n * Common Solana network CAIP-2 identifiers.\n * Uses genesis hash as the chain reference per CAIP-30.\n */\nexport const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp';\nexport const SOLANA_DEVNET = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1';\n\n/**\n * Extract chain reference from CAIP-2 Solana chainId.\n *\n * @param chainId - CAIP-2 format chain ID (e.g., \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\")\n * @returns Chain reference (genesis hash)\n *\n * @example\n * ```typescript\n * extractSolanaChainReference(\"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\") // \"5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\"\n * ```\n */\nfunction extractSolanaChainReference(chainId: string): string {\n const [, reference] = chainId.split(':');\n return reference!;\n}\n\n/**\n * Format SIWS message following CAIP-122 ABNF specification.\n *\n * The message format is identical to SIWE (EIP-4361) but uses \"Solana account\"\n * instead of \"Ethereum account\" in the header line.\n *\n * @param info - Server-provided extension info\n * @param address - Client's Solana wallet address (Base58 encoded public key)\n * @returns Message string ready for signing\n *\n * @example\n * ```typescript\n * const message = formatSIWSMessage(serverInfo, \"BSmWDgE9ex6dZYbiTsJGcwMEgFp8q4aWh92hdErQPeVW\");\n * // Returns:\n * // \"api.example.com wants you to sign in with your Solana account:\n * // BSmWDgE9ex6dZYbiTsJGcwMEgFp8q4aWh92hdErQPeVW\n * //\n * // Sign in to access your content\n * //\n * // URI: https://api.example.com/data\n * // Version: 1\n * // Chain ID: mainnet\n * // Nonce: abc123\n * // Issued At: 2024-01-01T00:00:00.000Z\"\n * ```\n */\nexport function formatSIWSMessage(\n info: SIWxExtensionInfo,\n address: string\n): string {\n const lines: string[] = [\n `${info.domain} wants you to sign in with your Solana account:`,\n address,\n '',\n ];\n\n // Statement (optional, with blank line after)\n if (info.statement) {\n lines.push(info.statement, '');\n }\n\n // Required fields\n lines.push(\n `URI: ${info.uri}`,\n `Version: ${info.version}`,\n `Chain ID: ${extractSolanaChainReference(info.chainId)}`,\n `Nonce: ${info.nonce}`,\n `Issued At: ${info.issuedAt}`\n );\n\n // Optional fields\n if (info.expirationTime) {\n lines.push(`Expiration Time: ${info.expirationTime}`);\n }\n if (info.notBefore) {\n lines.push(`Not Before: ${info.notBefore}`);\n }\n if (info.requestId) {\n lines.push(`Request ID: ${info.requestId}`);\n }\n\n // Resources (optional)\n if (info.resources && info.resources.length > 0) {\n lines.push('Resources:');\n for (const resource of info.resources) {\n lines.push(`- ${resource}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Verify Ed25519 signature for SIWS.\n *\n * @param message - The SIWS message that was signed\n * @param signature - Ed25519 signature bytes\n * @param publicKey - Solana public key bytes (32 bytes)\n * @returns true if signature is valid\n *\n * @example\n * ```typescript\n * const messageBytes = new TextEncoder().encode(message);\n * const valid = verifySolanaSignature(message, signatureBytes, publicKeyBytes);\n * ```\n */\nexport function verifySolanaSignature(\n message: string,\n signature: Uint8Array,\n publicKey: Uint8Array\n): boolean {\n const messageBytes = new TextEncoder().encode(message);\n return nacl.sign.detached.verify(messageBytes, signature, publicKey);\n}\n\n/**\n * Decode Base58 string to bytes.\n *\n * Solana uses Base58 encoding (Bitcoin alphabet) for addresses and signatures.\n *\n * @param encoded - Base58 encoded string\n * @returns Decoded bytes\n * @throws Error if string contains invalid Base58 characters\n *\n * @example\n * ```typescript\n * const publicKeyBytes = decodeBase58(\"BSmWDgE9ex6dZYbiTsJGcwMEgFp8q4aWh92hdErQPeVW\");\n * // Returns Uint8Array of 32 bytes\n * ```\n */\nexport function decodeBase58(encoded: string): Uint8Array {\n return base58.decode(encoded);\n}\n\n/**\n * Encode bytes to Base58 string.\n *\n * @param bytes - Bytes to encode\n * @returns Base58 encoded string\n */\nexport function encodeBase58(bytes: Uint8Array): string {\n return base58.encode(bytes);\n}\n","/**\n * Message signing for SIWX extension\n *\n * Client-side helpers for signing SIWX messages.\n * Supports both EVM (viem) and Solana wallet adapters.\n */\n\nimport { encodeBase58 } from './solana';\n\n/**\n * Signer interface for EVM SIWX message signing.\n * Compatible with viem WalletClient and PrivateKeyAccount.\n */\nexport interface EVMSigner {\n /** Sign a message and return hex-encoded signature */\n signMessage: (args: {\n message: string;\n account?: unknown;\n }) => Promise<string>;\n /** Account object (for WalletClient) */\n account?: { address: string };\n /** Direct address (for PrivateKeyAccount) */\n address?: string;\n}\n\n/**\n * Signer interface for Solana SIWX message signing.\n * Compatible with @solana/wallet-adapter and Phantom/Solflare wallet APIs.\n */\nexport interface SolanaSigner {\n /** Sign a message and return raw signature bytes */\n signMessage: (message: Uint8Array) => Promise<Uint8Array>;\n /** Solana public key (Base58 encoded string or PublicKey-like object) */\n publicKey: string | { toBase58: () => string };\n}\n\n/**\n * Union type for SIWX signers - supports both EVM and Solana wallets.\n */\nexport type SIWxSigner = EVMSigner | SolanaSigner;\n\n/**\n * Get address from an EVM signer.\n *\n * @param signer - EVM wallet signer instance\n * @returns The wallet address as a hex string\n */\nexport function getEVMAddress(signer: EVMSigner): string {\n if (signer.account?.address) {\n return signer.account.address;\n }\n if (signer.address) {\n return signer.address;\n }\n throw new Error('EVM signer missing address');\n}\n\n/**\n * Get address from a Solana signer.\n *\n * @param signer - Solana wallet signer instance\n * @returns The wallet address as a Base58 string\n */\nexport function getSolanaAddress(signer: SolanaSigner): string {\n const pk = signer.publicKey;\n return typeof pk === 'string' ? pk : pk.toBase58();\n}\n\n/**\n * Sign a message with an EVM wallet.\n * Returns hex-encoded signature.\n *\n * @param message - The message to sign\n * @param signer - EVM wallet signer instance\n * @returns Hex-encoded signature\n */\nexport async function signEVMMessage(\n message: string,\n signer: EVMSigner\n): Promise<string> {\n if (signer.account) {\n return signer.signMessage({ message, account: signer.account });\n }\n return signer.signMessage({ message });\n}\n\n/**\n * Sign a message with a Solana wallet.\n * Returns Base58-encoded signature.\n *\n * @param message - The message to sign\n * @param signer - Solana wallet signer instance\n * @returns Base58-encoded signature\n */\nexport async function signSolanaMessage(\n message: string,\n signer: SolanaSigner\n): Promise<string> {\n const messageBytes = new TextEncoder().encode(message);\n const signatureBytes = await signer.signMessage(messageBytes);\n return encodeBase58(signatureBytes);\n}\n","/**\n * EVM Sign-In-With-Ethereum (SIWE) support\n *\n * Implements EIP-4361 compliant message format and signature verification\n * for EVM chains (Ethereum, Base, Polygon, etc.)\n */\n\nimport { verifyMessage } from 'viem';\nimport { SiweMessage } from 'siwe';\nimport type { SIWxExtensionInfo, EVMMessageVerifier } from './types';\n\n/**\n * Extract numeric chain ID from CAIP-2 EVM chainId.\n *\n * @param chainId - CAIP-2 format chain ID (e.g., \"eip155:8453\")\n * @returns Numeric chain ID (e.g., 8453)\n * @throws Error if chainId format is invalid\n *\n * @example\n * ```typescript\n * extractEVMChainId(\"eip155:1\") // 1 (Ethereum mainnet)\n * extractEVMChainId(\"eip155:8453\") // 8453 (Base)\n * extractEVMChainId(\"eip155:137\") // 137 (Polygon)\n * ```\n */\nfunction extractEVMChainId(chainId: string): number {\n const match = /^eip155:(\\d+)$/.exec(chainId);\n if (!match) {\n throw new Error(\n `Invalid EVM chainId format: ${chainId}. Expected eip155:<number>`\n );\n }\n return parseInt(match[1]!, 10);\n}\n\n/**\n * Format SIWE message following EIP-4361 specification.\n *\n * Uses the siwe library to ensure message format matches verification.\n *\n * @param info - Server-provided extension info\n * @param address - Client's EVM wallet address (0x-prefixed)\n * @returns Message string ready for signing\n *\n * @example\n * ```typescript\n * const message = formatSIWEMessage(serverInfo, \"0x1234...abcd\");\n * // Returns EIP-4361 formatted message:\n * // \"api.example.com wants you to sign in with your Ethereum account:\n * // 0x1234...abcd\n * //\n * // Sign in to access your content\n * //\n * // URI: https://api.example.com/data\n * // Version: 1\n * // Chain ID: 8453\n * // Nonce: abc123\n * // Issued At: 2024-01-01T00:00:00.000Z\"\n * ```\n */\nexport function formatSIWEMessage(\n info: SIWxExtensionInfo,\n address: string\n): string {\n const numericChainId = extractEVMChainId(info.chainId);\n\n const siweMessage = new SiweMessage({\n domain: info.domain,\n address,\n statement: info.statement,\n uri: info.uri,\n version: info.version,\n chainId: numericChainId,\n nonce: info.nonce,\n issuedAt: info.issuedAt,\n expirationTime: info.expirationTime,\n notBefore: info.notBefore,\n requestId: info.requestId,\n resources: info.resources,\n });\n\n return siweMessage.prepareMessage();\n}\n\n/**\n * Verify EVM signature.\n *\n * Supports:\n * - EOA signatures (standard ECDSA via EIP-191) - always available\n * - EIP-1271 (deployed smart contract wallets) - requires verifier\n * - EIP-6492 (counterfactual/pre-deploy smart wallets) - requires verifier\n *\n * @param message - The SIWE message that was signed\n * @param address - The claimed signer address\n * @param signature - The signature to verify\n * @param verifier - Optional message verifier for smart wallet support.\n * Pass publicClient.verifyMessage for EIP-1271/EIP-6492 support.\n * Without this, only EOA signatures are verified.\n * @returns true if signature is valid\n *\n * @example\n * ```typescript\n * // EOA-only verification (default, no RPC required)\n * const valid = await verifyEVMSignature(message, address, signature);\n *\n * // Smart wallet verification with viem PublicClient\n * import { createPublicClient, http } from 'viem';\n * import { base } from 'viem/chains';\n *\n * const publicClient = createPublicClient({ chain: base, transport: http() });\n * const valid = await verifyEVMSignature(\n * message,\n * address,\n * signature,\n * publicClient.verifyMessage\n * );\n * ```\n */\nexport async function verifyEVMSignature(\n message: string,\n address: string,\n signature: string,\n verifier?: EVMMessageVerifier\n): Promise<boolean> {\n const args = {\n address: address as `0x${string}`,\n message,\n signature: signature as `0x${string}`,\n };\n\n if (verifier) {\n // Use provided verifier (supports EIP-1271/EIP-6492 via RPC)\n return verifier(args);\n }\n\n // Fallback to standalone verifyMessage (EOA only, no RPC)\n return verifyMessage(args);\n}\n","/**\n * CAIP-122 message construction for SIWX extension\n *\n * Constructs the canonical message string for signing.\n * Routes to chain-specific formatters based on chainId namespace.\n */\n\nimport { formatSIWEMessage } from './evm';\nimport { formatSIWSMessage } from './solana';\nimport type { SIWxExtensionInfo } from './types';\n\n/**\n * Construct CAIP-122 compliant message string for signing.\n *\n * Routes to the appropriate chain-specific message formatter based on the\n * chainId namespace prefix:\n * - `eip155:*` → SIWE (EIP-4361) format via siwe library\n * - `solana:*` → SIWS format\n *\n * @param serverInfo - Server-provided extension info\n * @param address - Client wallet address\n * @returns Message string ready for signing\n * @throws Error if chainId namespace is not supported\n *\n * @example\n * ```typescript\n * // EVM (Ethereum, Base, etc.)\n * const evmMessage = createSIWxMessage(serverInfo, \"0x1234...\");\n *\n * // Solana\n * const solMessage = createSIWxMessage(serverInfo, \"BSmWDg...\");\n * ```\n */\nexport function createSIWxMessage(\n serverInfo: SIWxExtensionInfo,\n address: string\n): string {\n // Route by chain namespace\n if (serverInfo.chainId.startsWith('eip155:')) {\n return formatSIWEMessage(serverInfo, address);\n }\n\n if (serverInfo.chainId.startsWith('solana:')) {\n return formatSIWSMessage(serverInfo, address);\n }\n\n throw new Error(\n `Unsupported chain namespace: ${serverInfo.chainId}. ` +\n `Supported: eip155:* (EVM), solana:* (Solana)`\n );\n}\n","/**\n * Complete client flow for SIWX extension\n *\n * Combines message construction, signing, and payload creation.\n * Supports both EVM and Solana wallets.\n */\n\nimport type { SIWxExtensionInfo, SIWxPayload } from './types';\nimport type { SIWxSigner, EVMSigner, SolanaSigner } from './sign';\nimport {\n getEVMAddress,\n getSolanaAddress,\n signEVMMessage,\n signSolanaMessage,\n} from './sign';\nimport { createSIWxMessage } from './message';\n\n/**\n * Create a complete SIWX payload from server extension info.\n *\n * Routes to EVM or Solana signing based on the chainId prefix:\n * - `eip155:*` → EVM signing\n * - `solana:*` → Solana signing\n *\n * @param serverExtension - Server-provided extension info from PaymentRequired\n * @param signer - Wallet that can sign messages (EVMSigner or SolanaSigner)\n * @returns Complete SIWX payload with signature\n *\n * @example\n * ```typescript\n * // EVM wallet\n * const payload = await createSIWxPayload(serverInfo, evmWallet);\n *\n * // Solana wallet\n * const payload = await createSIWxPayload(serverInfo, solanaSigner);\n * ```\n */\nexport async function createSIWxPayload(\n serverExtension: SIWxExtensionInfo,\n signer: SIWxSigner\n): Promise<SIWxPayload> {\n const isSolana = serverExtension.chainId.startsWith('solana:');\n\n // Get address and sign based on chain type\n const address = isSolana\n ? getSolanaAddress(signer as SolanaSigner)\n : getEVMAddress(signer as EVMSigner);\n\n const message = createSIWxMessage(serverExtension, address);\n\n const signature = isSolana\n ? await signSolanaMessage(message, signer as SolanaSigner)\n : await signEVMMessage(message, signer as EVMSigner);\n\n return {\n domain: serverExtension.domain,\n address,\n statement: serverExtension.statement,\n uri: serverExtension.uri,\n version: serverExtension.version,\n chainId: serverExtension.chainId,\n type: serverExtension.type,\n nonce: serverExtension.nonce,\n issuedAt: serverExtension.issuedAt,\n expirationTime: serverExtension.expirationTime,\n notBefore: serverExtension.notBefore,\n requestId: serverExtension.requestId,\n resources: serverExtension.resources,\n signatureScheme: serverExtension.signatureScheme,\n signature,\n };\n}\n","/**\n * Header encoding for SIWX extension\n *\n * Encodes SIWX payload for the SIGN-IN-WITH-X HTTP header.\n * Per CHANGELOG-v2.md line 335: header should be base64-encoded.\n */\n\nimport { safeBase64Encode } from '@x402/core/utils';\nimport type { SIWxPayload } from './types';\n\n/**\n * Encode SIWX payload for SIGN-IN-WITH-X header.\n *\n * Uses base64 encoding per x402 v2 spec (CHANGELOG-v2.md line 335).\n *\n * @param payload - Complete SIWX payload with signature\n * @returns Base64-encoded JSON string\n *\n * @example\n * ```typescript\n * const payload = await createSIWxPayload(serverInfo, signer);\n * const header = encodeSIWxHeader(payload);\n *\n * fetch(url, {\n * headers: { 'SIGN-IN-WITH-X': header }\n * });\n * ```\n */\nexport function encodeSIWxHeader(payload: SIWxPayload): string {\n return safeBase64Encode(JSON.stringify(payload));\n}\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { mcpSuccess, mcpError } from '../lib/response';\n\nimport { normalizePaymentRequired } from '../lib/x402/protocol';\n\nimport { createSIWxPayload } from '../vendor/sign-in-with-x/client';\nimport { encodeSIWxHeader } from '../vendor/sign-in-with-x/encode';\n\nimport { requestWithHeadersSchema } from '@/server/lib/schemas';\n\nimport type { RegisterTools } from '@/server/types';\nimport type { SIWxExtensionInfo } from '../vendor/sign-in-with-x/types';\n\nexport const registerAuthTools: RegisterTools = ({ server, account }) => {\n server.registerTool(\n 'authed_call',\n {\n description:\n 'Make a request to a SIWX-protected endpoint. Handles auth flow automatically: detects SIWX requirement from 402 response, signs proof with server-provided challenge, retries.',\n inputSchema: requestWithHeadersSchema,\n },\n async ({ url, method, body, headers }) => {\n try {\n const httpClient = new x402HTTPClient(new x402Client());\n\n // Step 1: Make initial request\n const firstResponse = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n // If not 402, return the response directly\n if (firstResponse.status !== 402) {\n const responseHeaders = Object.fromEntries(\n firstResponse.headers.entries()\n );\n\n if (firstResponse.ok) {\n let data: unknown;\n const contentType = firstResponse.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n data = await firstResponse.json();\n } else {\n data = await firstResponse.text();\n }\n return mcpSuccess({\n statusCode: firstResponse.status,\n headers: responseHeaders,\n data,\n });\n }\n\n let errorBody: unknown;\n try {\n errorBody = await firstResponse.json();\n } catch {\n errorBody = await firstResponse.text();\n }\n return mcpError(`HTTP ${firstResponse.status}`, {\n statusCode: firstResponse.status,\n headers: responseHeaders,\n body: errorBody,\n });\n }\n\n // Step 2: Parse 402 response\n let rawBody: unknown;\n try {\n rawBody = await firstResponse.clone().json();\n } catch {\n rawBody = undefined;\n }\n\n const rawPaymentRequired = httpClient.getPaymentRequiredResponse(\n name => firstResponse.headers.get(name),\n rawBody\n );\n const paymentRequired = normalizePaymentRequired(rawPaymentRequired);\n\n // Step 3: Check for sign-in-with-x extension\n const siwxExtension = paymentRequired.extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo }\n | undefined;\n\n if (!siwxExtension?.info) {\n return mcpError(\n 'Endpoint returned 402 but no sign-in-with-x extension found',\n {\n statusCode: 402,\n x402Version: paymentRequired.x402Version,\n extensions: Object.keys(paymentRequired.extensions ?? {}),\n hint: 'This endpoint may require payment instead of authentication. Use execute_call for paid requests.',\n }\n );\n }\n\n const serverInfo = siwxExtension.info;\n\n // Validate required fields\n const requiredFields = [\n 'domain',\n 'uri',\n 'version',\n 'chainId',\n 'nonce',\n 'issuedAt',\n ];\n const missingFields = requiredFields.filter(\n f => !serverInfo[f as keyof SIWxExtensionInfo]\n );\n if (missingFields.length > 0) {\n return mcpError(\n 'Invalid sign-in-with-x extension: missing required fields',\n {\n missingFields,\n receivedInfo: serverInfo,\n }\n );\n }\n\n // Step 4: Check for unsupported chain types\n if (serverInfo.chainId.startsWith('solana:')) {\n return mcpError('Solana authentication not supported', {\n chainId: serverInfo.chainId,\n hint: 'This endpoint requires a Solana wallet. The MCP server currently only supports EVM wallets.',\n });\n }\n\n // Step 5: Create signed proof using server-provided challenge\n const payload = await createSIWxPayload(serverInfo, account);\n const siwxHeader = encodeSIWxHeader(payload);\n\n // Step 6: Retry with SIGN-IN-WITH-X header\n const authedResponse = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'SIGN-IN-WITH-X': siwxHeader,\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const responseHeaders = Object.fromEntries(\n authedResponse.headers.entries()\n );\n\n if (!authedResponse.ok) {\n let errorBody: unknown;\n try {\n errorBody = await authedResponse.json();\n } catch {\n errorBody = await authedResponse.text();\n }\n return mcpError(\n `HTTP ${authedResponse.status} after authentication`,\n {\n statusCode: authedResponse.status,\n headers: responseHeaders,\n body: errorBody,\n authAddress: account.address,\n }\n );\n }\n\n // Parse successful response\n let data: unknown;\n const contentType = authedResponse.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n data = await authedResponse.json();\n } else {\n data = await authedResponse.text();\n }\n\n return mcpSuccess({\n statusCode: authedResponse.status,\n headers: responseHeaders,\n data,\n authentication: {\n address: account.address,\n domain: serverInfo.domain,\n chainId: serverInfo.chainId,\n },\n });\n } catch (err) {\n return mcpError(err, { tool: 'authed_call', url });\n }\n }\n );\n};\n","import { mcpSuccess } from '@/server/lib/response';\n\nimport { getUSDCBalance } from '@/lib/balance';\nimport { DEFAULT_NETWORK, getChainName } from '@/lib/networks';\n\nimport type { RegisterTools } from '@/server/types';\nimport { getDepositLink } from '@/lib/deposit';\n\nexport const registerWalletTools: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n server.registerTool(\n 'check_balance',\n {\n description:\n 'Check wallet address and USDC balance. Creates wallet if needed.',\n },\n async () => {\n const { balanceFormatted } = await getUSDCBalance(address, flags);\n\n return mcpSuccess({\n address,\n network: DEFAULT_NETWORK,\n networkName: getChainName(DEFAULT_NETWORK),\n usdcBalance: balanceFormatted,\n balanceFormatted: balanceFormatted.toString(),\n isNewWallet: balanceFormatted === 0,\n depositLink: getDepositLink(address, flags),\n });\n }\n );\n\n server.registerTool(\n 'get_wallet_address',\n {\n description: 'Get the wallet address.',\n },\n () => mcpSuccess({ address })\n );\n};\n","import { tokenStringToNumber } from '@/lib/token';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type { DiscoveryExtension } from '@x402/extensions/bazaar';\n\nexport const getRouteDetails = (paymentRequired: PaymentRequired) => {\n const { accepts, extensions, resource } = paymentRequired;\n\n return {\n ...resource,\n schema: getSchema(extensions),\n paymentMethods: accepts.map(accept => ({\n price: tokenStringToNumber(accept.amount),\n network: accept.network,\n asset: accept.asset,\n })),\n };\n};\n\nexport const getSchema = (extensions: PaymentRequired['extensions']) => {\n const { bazaar } = extensions ?? {};\n\n if (!bazaar) {\n return undefined;\n }\n\n const { schema } = bazaar as DiscoveryExtension;\n\n return schema.properties.input;\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { requestSchema } from '@/server/lib/schemas';\n\nimport { log } from '@/lib/log';\n\nimport { getRouteDetails } from '../lib/x402/get-route-details';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerCheckX402EndpointTool: RegisterTools = ({ server }) => {\n server.registerTool(\n 'check_x402_endpoint',\n {\n description:\n 'Check if an endpoint is x402-protected and get pricing options, schema, and auth requirements (if applicable).',\n inputSchema: requestSchema,\n },\n async ({ url, method, body }) => {\n try {\n log.info('Querying endpoint', { url, method, body });\n const response = await fetch(url, {\n method,\n body: body\n ? typeof body === 'string'\n ? body\n : JSON.stringify(body)\n : undefined,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n const bodyText = await response.text().catch(() => undefined);\n\n if (response.status !== 402) {\n return mcpSuccess({\n data: bodyText,\n statusCode: response.status,\n requiresPayment: false,\n });\n }\n\n const paymentRequired = new x402HTTPClient(\n new x402Client()\n ).getPaymentRequiredResponse(\n name => response.headers.get(name),\n JSON.parse(bodyText ?? '{}')\n );\n\n const routeDetails = getRouteDetails(paymentRequired);\n\n return mcpSuccess({\n requiresPayment: true,\n statusCode: response.status,\n routeDetails,\n });\n } catch (err) {\n return mcpError(err, { tool: 'query_endpoint', url });\n }\n }\n );\n};\n","import z from 'zod';\nimport { mcpSuccess, mcpError } from '@/server/lib/response';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerRedeemInviteTool: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n const baseUrl = flags.dev ? 'http://localhost:3000' : 'https://x402scan.com';\n\n server.registerTool(\n 'redeem_invite',\n {\n description: 'Redeem an invite code to receive USDC.',\n inputSchema: z.object({\n code: z.string().min(1).describe('The invite code'),\n }),\n },\n async ({ code }) => {\n const res = await fetch(`${baseUrl}/api/invite/redeem`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code, recipientAddr: address }),\n });\n\n const data = (await res.json()) as {\n success: boolean;\n error?: string;\n amount?: string;\n txHash?: string;\n };\n\n if (!data.success) {\n return mcpError(data.error ?? 'Failed to redeem invite code');\n }\n\n return mcpSuccess({\n amount: `${data.amount} USDC`,\n txHash: data.txHash,\n });\n }\n );\n};\n","import { readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { fileURLToPath } from 'url';\n\ndeclare const __MCP_VERSION__: string | undefined;\n\nfunction getVersion(): string {\n if (typeof __MCP_VERSION__ !== 'undefined') {\n return __MCP_VERSION__;\n }\n // Fallback for dev mode (tsx)\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(\n readFileSync(join(__dirname, '../../../package.json'), 'utf-8')\n ) as { version: string };\n return pkg.version;\n}\n\nexport const MCP_VERSION = getVersion();\n","/**\n * Telemetry tool - report errors and logs back to x402scan developers\n */\n\nimport { log } from '@/lib/log';\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { z } from 'zod';\n\nimport { MCP_VERSION } from '../lib/version';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst errorReportSchema = z.object({\n tool: z.string().describe('MCP tool name'),\n resource: z.string().optional().describe('x402 resource URL'),\n summary: z.string().describe('1-2 sentence summary'),\n errorMessage: z.string().describe('Error message'),\n stack: z.string().optional().describe('Stack trace'),\n fullReport: z\n .string()\n .optional()\n .describe('Detailed report with context, logs, repro steps'),\n});\n\ntype ErrorReport = z.infer<typeof errorReportSchema>;\n\nexport const registerTelemetryTools: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n const baseUrl = flags.dev ? 'http://localhost:3000' : 'https://x402scan.com';\n\n server.registerTool(\n 'report_error',\n {\n description:\n 'EMERGENCY ONLY. Report critical MCP tool bugs. Do NOT use for normal errors (balance, network, 4xx) - those are recoverable.',\n inputSchema: errorReportSchema,\n },\n async (input: ErrorReport) => {\n try {\n log.info('Submitting error report', {\n tool: input.tool,\n resource: input.resource,\n summary: input.summary,\n });\n\n const report = {\n ...input,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n };\n\n const response = await fetch(`${baseUrl}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(report),\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => 'Unknown error');\n log.error('Failed to submit error report', {\n status: response.status,\n error: errorText,\n });\n return mcpError(\n `Failed to submit error report: ${response.status} ${errorText}`,\n { tool: 'report_error' }\n );\n }\n\n const result = (await response.json()) as { reportId: string };\n\n log.info('Error report submitted successfully', {\n reportId: result.reportId,\n });\n\n return mcpSuccess({\n submitted: true,\n reportId: result.reportId,\n message:\n 'Error report submitted successfully. The x402scan team will investigate.',\n });\n } catch (err) {\n log.error('Failed to submit error report', { error: err });\n return mcpError(err, { tool: 'report_error' });\n }\n }\n );\n};\n","export const getWebPageMetadata = async (url: string) => {\n try {\n const response = await fetch(url);\n\n if (!response.ok) {\n return null;\n }\n\n const html = await response.text();\n\n // Extract title\n const titleMatch = /<title[^>]*>([\\s\\S]*?)<\\/title>/i.exec(html);\n const title = titleMatch\n ? titleMatch[1]!.trim().replace(/\\s+/g, ' ')\n : null;\n\n // Extract description from meta tags\n // Try standard meta description first\n let descriptionMatch =\n /<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']*)[\"']/i.exec(html);\n\n // If not found, try og:description\n descriptionMatch ??=\n /<meta\\s+property=[\"']og:description[\"']\\s+content=[\"']([^\"']*)[\"']/i.exec(\n html\n );\n\n // Also check for reversed attribute order\n descriptionMatch ??=\n /<meta\\s+content=[\"']([^\"']*)[\"']\\s+name=[\"']description[\"']/i.exec(html);\n\n descriptionMatch ??=\n /<meta\\s+content=[\"']([^\"']*)[\"']\\s+property=[\"']og:description[\"']/i.exec(\n html\n );\n\n const description = descriptionMatch\n ? descriptionMatch[1]!.trim().replace(/\\s+/g, ' ')\n : null;\n\n return {\n title,\n description,\n };\n } catch (error) {\n throw new Error(\n `Failed to fetch web page metadata: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n};\n","import { x402HTTPClient } from '@x402/core/client';\nimport { x402Client } from '@x402/core/client';\n\nimport { getWebPageMetadata } from './_lib';\n\nimport { getSchema } from '../lib/x402/get-route-details';\n\nimport type { RegisterResources } from './types';\n\nconst origins = ['enrichx402.com'];\n\nexport const registerOrigins: RegisterResources = async ({ server }) => {\n await Promise.all(\n origins.map(async origin => {\n const metadata = await getWebPageMetadata(`https://${origin}`);\n server.registerResource(\n origin,\n `api://${origin}`,\n {\n title: metadata?.title ?? origin,\n description: metadata?.description ?? '',\n mimeType: 'application/json',\n },\n async uri => {\n const response = (await fetch(\n `${uri.toString().replace('api://', 'https://')}/.well-known/x402`\n ).then(response => response.json())) as { resources: string[] };\n const resources = await Promise.all(\n response.resources.map(async resource => {\n const resourceResponse = await getResourceResponse(\n resource,\n await fetch(resource, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n );\n if (resourceResponse) {\n return resourceResponse;\n }\n const getResponse = await getResourceResponse(\n resource,\n await fetch(resource, {\n method: 'GET',\n })\n );\n if (getResponse) {\n return getResponse;\n }\n console.error(`Failed to get resource response for ${resource}`);\n return null;\n })\n );\n return {\n contents: [\n {\n uri: origin,\n text: JSON.stringify({\n server: origin,\n name: metadata?.title,\n description: metadata?.description,\n resources: resources.filter(Boolean).map(resource => {\n if (!resource) return null;\n const schema = getSchema(\n resource.paymentRequired?.extensions\n );\n\n return {\n url: resource.resource,\n schema,\n mimeType: resource.paymentRequired.resource.mimeType,\n };\n }),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n );\n })\n );\n};\n\nconst getResourceResponse = async (resource: string, response: Response) => {\n const client = new x402HTTPClient(new x402Client());\n if (response.status === 402) {\n const paymentRequired = client.getPaymentRequiredResponse(\n name => response.headers.get(name),\n JSON.parse(await response.text())\n );\n return {\n paymentRequired,\n resource,\n };\n }\n return null;\n};\n","/**\n * Keystore - private key management\n *\n * Stores wallet at ~/.x402scan-mcp/wallet.json\n * Can be overridden via X402_PRIVATE_KEY env var\n */\n\nimport z from 'zod';\n\nimport { randomBytes } from 'crypto';\nimport * as fs from 'fs/promises';\n\nimport { privateKeyToAccount } from 'viem/accounts';\n\nimport { log } from './log';\nimport {\n ethereumAddressSchema,\n ethereumPrivateKeySchema,\n} from '../server/lib/schemas';\nimport type { Hex } from 'viem';\nimport { configFile } from './fs';\n\nconst WALLET_FILE = configFile('wallet.json');\n\nconst storedWalletSchema = z.object({\n privateKey: ethereumPrivateKeySchema,\n address: ethereumAddressSchema,\n createdAt: z.string(),\n});\n\nexport async function getWallet() {\n // Environment override\n if (process.env.X402_PRIVATE_KEY) {\n const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY as Hex);\n log.info(`Using wallet from env: ${account.address}`);\n return { account, isNew: false };\n }\n\n // Try loading existing\n try {\n const data = await fs.readFile(WALLET_FILE, 'utf-8');\n const stored = storedWalletSchema.parse(JSON.parse(data));\n const account = privateKeyToAccount(stored.privateKey);\n log.info(`Loaded wallet: ${account.address}`);\n return { account, isNew: false };\n } catch {\n // File doesn't exist or is invalid, generate new wallet\n }\n\n // Generate new\n const privateKey = `0x${randomBytes(32).toString('hex')}` as const;\n const account = privateKeyToAccount(privateKey);\n const stored = {\n privateKey,\n address: account.address,\n createdAt: new Date().toISOString(),\n };\n\n await fs.writeFile(WALLET_FILE, JSON.stringify(stored, null, 2));\n try {\n await fs.chmod(WALLET_FILE, 0o600);\n } catch {}\n\n log.info(`Created wallet: ${account.address}`);\n log.info(`Saved to: ${WALLET_FILE}`);\n return { account, isNew: true };\n}\n","/**\n * Discovery tool - discover x402 resources from an origin's well-known endpoint\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { log } from '@/lib/log';\nimport { mcpError, mcpSuccess } from '@/server/lib/response';\nimport { tokenStringToNumber } from '@/lib/token';\nimport { getChainName } from '@/lib/networks';\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\n\n// Discovery document schema per spec\nconst DiscoveryDocumentSchema = z.object({\n version: z.number().refine(v => v === 1, { message: 'version must be 1' }),\n resources: z.array(z.url()),\n ownershipProofs: z.array(z.string()).optional(),\n instructions: z.string().optional(),\n});\n\ntype DiscoveryDocument = z.infer<typeof DiscoveryDocumentSchema>;\n\ntype DiscoverySource = 'well-known' | 'dns-txt' | 'llms-txt';\n\ninterface DiscoveredResource {\n url: string;\n isX402Endpoint?: boolean;\n description?: string;\n price?: number;\n priceRaw?: string;\n network?: string;\n networkName?: string;\n x402Version?: number;\n bazaar?: {\n info?: unknown;\n schema?: unknown;\n };\n signInWithX?: {\n required: boolean;\n info?: unknown;\n };\n error?: string;\n}\n\ninterface DiscoveryResult {\n found: boolean;\n origin: string;\n source?: DiscoverySource;\n instructions?: string;\n usage: string;\n resources: DiscoveredResource[];\n llmsTxtContent?: string;\n error?: string;\n}\n\n/**\n * Lookup DNS TXT record for _x402.hostname using DNS-over-HTTPS\n * Returns the URL path from the TXT record if found\n */\nasync function lookupDnsTxtRecord(hostname: string): Promise<string | null> {\n const dnsQuery = `_x402.${hostname}`;\n log.debug(`Looking up DNS TXT record: ${dnsQuery}`);\n\n try {\n // Use Cloudflare DNS-over-HTTPS\n const response = await fetch(\n `https://cloudflare-dns.com/dns-query?name=${encodeURIComponent(\n dnsQuery\n )}&type=TXT`,\n {\n headers: { Accept: 'application/dns-json' },\n }\n );\n\n if (!response.ok) {\n log.debug(`DNS lookup failed: HTTP ${response.status}`);\n return null;\n }\n\n const data = (await response.json()) as {\n Answer?: { data: string }[];\n };\n\n if (!data.Answer || data.Answer.length === 0) {\n log.debug('No DNS TXT record found');\n return null;\n }\n\n // TXT record data comes with quotes, strip them\n const txtValue = data.Answer[0]!.data.replace(/^\"|\"$/g, '');\n log.debug(`Found DNS TXT record: ${txtValue}`);\n\n // Validate it's a URL\n try {\n new URL(txtValue);\n return txtValue;\n } catch {\n log.debug(`DNS TXT value is not a valid URL: ${txtValue}`);\n return null;\n }\n } catch (err) {\n log.debug(\n `DNS lookup error: ${err instanceof Error ? err.message : String(err)}`\n );\n return null;\n }\n}\n\n/**\n * Fetch llms.txt from origin - returns raw content since it won't be properly formatted\n */\nasync function fetchLlmsTxt(\n origin: string\n): Promise<{ found: boolean; content?: string; error?: string }> {\n const llmsTxtUrl = `${origin}/llms.txt`;\n log.debug(`Fetching llms.txt from: ${llmsTxtUrl}`);\n\n try {\n const response = await fetch(llmsTxtUrl, {\n headers: { Accept: 'text/plain' },\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { found: false, error: 'No llms.txt found' };\n }\n return { found: false, error: `HTTP ${response.status}` };\n }\n\n const content = await response.text();\n if (!content || content.trim().length === 0) {\n return { found: false, error: 'llms.txt is empty' };\n }\n\n return { found: true, content };\n } catch (err) {\n return {\n found: false,\n error: `Network error: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n}\n\ninterface FetchResult {\n found: boolean;\n source?: DiscoverySource;\n document?: DiscoveryDocument;\n llmsTxtContent?: string;\n error?: string;\n rawResponse?: unknown;\n attemptedSources: string[];\n}\n\n/**\n * Fetch discovery document from a specific URL\n */\nasync function fetchDiscoveryFromUrl(url: string): Promise<{\n found: boolean;\n document?: DiscoveryDocument;\n error?: string;\n rawResponse?: unknown;\n}> {\n log.debug(`Fetching discovery document from: ${url}`);\n\n try {\n const response = await fetch(url, {\n headers: { Accept: 'application/json' },\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { found: false, error: `Not found at ${url}` };\n }\n return {\n found: false,\n error: `HTTP ${response.status}: ${await response.text()}`,\n };\n }\n\n let rawData: unknown;\n try {\n rawData = await response.json();\n } catch {\n return {\n found: false,\n error: 'Failed to parse discovery document as JSON',\n };\n }\n\n // Validate against schema\n const parsed = DiscoveryDocumentSchema.safeParse(rawData);\n if (!parsed.success) {\n return {\n found: false,\n error: `Invalid discovery document: ${parsed.error.issues\n .map(e => e.message)\n .join(', ')}`,\n rawResponse: rawData,\n };\n }\n\n return { found: true, document: parsed.data };\n } catch (err) {\n return {\n found: false,\n error: `Network error: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n}\n\n/**\n * Fetch discovery document with fallback chain:\n * 1. .well-known/x402\n * 2. DNS _x402 TXT record pointing to discovery URL\n * 3. llms.txt (raw content, not structured)\n */\nasync function fetchDiscoveryDocument(origin: string): Promise<FetchResult> {\n const attemptedSources: string[] = [];\n const hostname = getHostname(origin);\n\n // 1. Try .well-known/x402\n const wellKnownUrl = `${origin}/.well-known/x402`;\n attemptedSources.push(wellKnownUrl);\n const wellKnownResult = await fetchDiscoveryFromUrl(wellKnownUrl);\n\n if (wellKnownResult.found && wellKnownResult.document) {\n return {\n found: true,\n source: 'well-known',\n document: wellKnownResult.document,\n attemptedSources,\n };\n }\n\n // 2. Try DNS TXT record _x402.hostname\n attemptedSources.push(`DNS TXT _x402.${hostname}`);\n const dnsUrl = await lookupDnsTxtRecord(hostname);\n\n if (dnsUrl) {\n attemptedSources.push(dnsUrl);\n const dnsResult = await fetchDiscoveryFromUrl(dnsUrl);\n\n if (dnsResult.found && dnsResult.document) {\n return {\n found: true,\n source: 'dns-txt',\n document: dnsResult.document,\n attemptedSources,\n };\n }\n }\n\n // 3. Try llms.txt as last resort\n attemptedSources.push(`${origin}/llms.txt`);\n const llmsResult = await fetchLlmsTxt(origin);\n\n if (llmsResult.found && llmsResult.content) {\n return {\n found: true,\n source: 'llms-txt',\n llmsTxtContent: llmsResult.content,\n attemptedSources,\n };\n }\n\n // Nothing found\n return {\n found: false,\n error:\n 'No discovery document found. Tried: .well-known/x402, DNS TXT record, llms.txt',\n attemptedSources,\n };\n}\n\n/**\n * Query a resource URL using the same logic as query_endpoint tool\n * Returns full pricing, bazaar schema, and SIWX info\n */\nasync function queryResource(url: string): Promise<DiscoveredResource> {\n log.debug(`Querying resource: ${url}`);\n\n try {\n const result = await fetch(url, { method: 'GET' });\n\n if (!result.ok) {\n return {\n url,\n isX402Endpoint: false,\n error: result.statusText ?? 'Failed to query endpoint',\n };\n }\n\n if (result.status !== 402) {\n return {\n url,\n isX402Endpoint: false,\n };\n }\n\n const pr = new x402HTTPClient(new x402Client()).getPaymentRequiredResponse(\n name => result.headers.get(name),\n JSON.parse(await result.text())\n );\n\n const firstReq = pr.accepts[0]!;\n\n const resource: DiscoveredResource = {\n url,\n isX402Endpoint: true,\n x402Version: pr.x402Version,\n price: tokenStringToNumber(firstReq.amount),\n priceRaw: firstReq.amount,\n network: firstReq.network,\n networkName: getChainName(firstReq.network),\n };\n\n // Extract bazaar info\n if (pr.extensions?.bazaar) {\n const bazaar = pr.extensions.bazaar as {\n info?: unknown;\n schema?: unknown;\n };\n resource.bazaar = { info: bazaar.info, schema: bazaar.schema };\n // Extract description from bazaar info if available\n const info = bazaar.info as { description?: string } | undefined;\n if (info?.description) {\n resource.description = info.description;\n }\n }\n\n // Extract SIWX info\n if (pr.extensions?.['sign-in-with-x']) {\n const siwx = pr.extensions['sign-in-with-x'] as { info?: unknown };\n resource.signInWithX = { required: true, info: siwx.info };\n }\n\n return resource;\n } catch (err) {\n return {\n url,\n isX402Endpoint: false,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\nexport function registerDiscoveryTools(server: McpServer): void {\n server.registerTool(\n 'discover_resources',\n {\n description: `Discover x402-protected resources on an origin.\n NEVER use 'fanOut = true' on the first try.\n NEVER use 'fanOut = true' when there are more than 8 resources.\n\n Known default origins with resource packs. Discover if more needed:\n - https://enrichx402.com ->\n People + Org search\n Google Maps (places + locations)\n Grok twitter search\n Exa web search\n Clado linkedin data\n Firecrawl web scrape\n - https://stablestudio.io -> generate images / videos\n `,\n inputSchema: {\n url: z\n .url()\n .describe(\n 'The origin URL or any URL on the origin to discover resources from'\n ),\n fanOut: z\n .boolean()\n .default(false)\n .describe(\n 'Whether to query each discovered resource for full pricing/schema info. NEVER use on first try.'\n ),\n concurrency: z\n .number()\n .int()\n .min(1)\n .max(10)\n .default(5)\n .describe(\n 'Max concurrent requests when querying resources (default: 5)'\n ),\n },\n },\n async ({ url, fanOut, concurrency }) => {\n try {\n const origin = getOrigin(url);\n log.info(`Discovering resources for origin: ${origin}`);\n\n // Fetch the discovery document using fallback chain:\n // 1. .well-known/x402\n // 2. DNS TXT _x402.hostname\n // 3. llms.txt (raw content)\n const discoveryResult = await fetchDiscoveryDocument(origin);\n\n // Handle llms.txt case - return raw content for LLM to interpret\n if (discoveryResult.found && discoveryResult.source === 'llms-txt') {\n return mcpSuccess({\n found: true,\n origin,\n source: 'llms-txt',\n usage:\n 'Found llms.txt but no structured x402 discovery document. The content below may contain information about x402 resources. Parse it to find relevant endpoints.',\n llmsTxtContent: discoveryResult.llmsTxtContent,\n attemptedSources: discoveryResult.attemptedSources,\n resources: [],\n });\n }\n\n if (!discoveryResult.found || !discoveryResult.document) {\n return mcpSuccess({\n found: false,\n origin,\n error: discoveryResult.error,\n attemptedSources: discoveryResult.attemptedSources,\n rawResponse: discoveryResult.rawResponse,\n });\n }\n\n const doc = discoveryResult.document;\n const result: DiscoveryResult = {\n found: true,\n origin,\n source: discoveryResult.source,\n instructions: doc.instructions,\n usage:\n 'Use query_endpoint to get full pricing/requirements for a resource. Use execute_call (for payment) or authed_call (for SIWX auth) to call it.',\n resources: [],\n };\n\n // If not testing resources, just return the URLs from discovery doc\n if (!fanOut) {\n result.resources = doc.resources.map(resourceUrl => ({\n url: resourceUrl,\n }));\n return mcpSuccess(result);\n }\n\n // Query resources with concurrency limit to get full pricing/schema info\n const resourceUrls = doc.resources;\n const allResources: DiscoveredResource[] = [];\n\n // Process in batches based on concurrency\n for (let i = 0; i < resourceUrls.length; i += concurrency) {\n const batch = resourceUrls.slice(i, i + concurrency);\n const batchResults = await Promise.all(\n batch.map(resourceUrl => queryResource(resourceUrl))\n );\n allResources.push(...batchResults);\n }\n\n result.resources = allResources;\n\n return mcpSuccess(result);\n } catch (err) {\n return mcpError(err, { tool: 'discover_resources', url });\n }\n }\n );\n}\n\nfunction getOrigin(urlString: string): string {\n try {\n return new URL(urlString).origin;\n } catch {\n return urlString;\n }\n}\n\nfunction getHostname(origin: string): string {\n try {\n return new URL(origin).hostname;\n } catch {\n return origin;\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n\nimport { registerFetchX402ResourceTool } from './tools/fetch-x402-resource';\nimport { registerAuthTools } from './tools/auth';\nimport { registerWalletTools } from './tools/wallet';\nimport { registerCheckX402EndpointTool } from './tools/check-endpoint-schema';\nimport { registerRedeemInviteTool } from './tools/redeem-invite';\nimport { registerTelemetryTools } from './tools/telemetry';\n\nimport { registerOrigins } from './resources/origins';\n\nimport { log } from '@/lib/log';\nimport { getWallet } from '@/lib/wallet';\n\nimport type { Command } from '@/types';\nimport { registerDiscoveryTools } from './tools/discover-resources';\nimport { redeemInviteCode } from '@/lib/redeem-invite';\nimport { MCP_VERSION } from './lib/version';\n\nexport const startServer: Command = async flags => {\n log.info('Starting x402scan-mcp...');\n\n const { dev, invite } = flags;\n\n const { account } = await getWallet();\n\n const code = invite ?? process.env.INVITE_CODE;\n\n if (code) {\n await redeemInviteCode({\n code,\n dev,\n address: account.address,\n });\n }\n\n const server = new McpServer(\n {\n name: '@x402scan/mcp',\n version: MCP_VERSION,\n websiteUrl: 'https://x402scan.com/mcp',\n icons: [{ src: 'https://x402scan.com/logo.svg' }],\n },\n {\n capabilities: {\n resources: {\n subscribe: true,\n listChanged: true,\n },\n },\n }\n );\n\n const props = {\n server,\n account,\n flags,\n };\n\n registerFetchX402ResourceTool(props);\n registerAuthTools(props);\n registerWalletTools(props);\n registerCheckX402EndpointTool(props);\n registerRedeemInviteTool(props);\n registerDiscoveryTools(server);\n registerTelemetryTools(props);\n\n await registerOrigins({ server, flags });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n log.info('Shutting down...');\n await server.close();\n process.exit(0);\n };\n\n process.on('SIGINT', () => void shutdown());\n process.on('SIGTERM', () => void shutdown());\n};\n","import z from 'zod';\n\nimport { select, log, outro } from '@clack/prompts';\n\nimport chalk from 'chalk';\n\nimport { clientMetadata, Clients } from '../clients';\n\nimport type { InstallFlags } from '..';\n\nexport const getClient = async ({ client: flagClient, yes }: InstallFlags) => {\n if (yes) {\n if (!flagClient) {\n throw new Error(\n `Client is required when yes is true. Pass --client as one of these values: ${Object.values(Clients).join(', ')}`\n );\n }\n const parsedClient = z.enum(Clients).safeParse(flagClient);\n if (!parsedClient.success) {\n throw new Error(\n `${flagClient} is not a valid client. Valid options are: ${Object.values(Clients).join(', ')}`\n );\n }\n return parsedClient.data;\n }\n const parsedClient = z.enum(Clients).safeParse(flagClient);\n if (parsedClient.success) {\n return parsedClient.data;\n }\n if (flagClient) {\n log.error(`${flagClient} is not a valid client. Please select a client`);\n }\n const client = await select({\n message: 'Where would you like to install the x402scan MCP server?',\n options: Object.values(Clients).map(client => {\n const metadata = clientMetadata[client];\n return {\n label: metadata.name,\n value: client,\n };\n }),\n maxItems: 7,\n });\n\n const parsedClientSelection = z.enum(Clients).safeParse(client);\n if (parsedClientSelection.success) {\n return parsedClientSelection.data;\n }\n outro(chalk.bold.red('No MCP client selected'));\n process.exit(0);\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport z from 'zod';\n\nenum Platforms {\n Windows = 'win32',\n MacOS = 'darwin',\n Linux = 'linux',\n}\n\nexport const getPlatformPath = () => {\n const platform = z.enum(Platforms).safeParse(process.platform);\n if (!platform.success) {\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n\n const homeDir = os.homedir();\n\n switch (platform.data) {\n case Platforms.Windows:\n return {\n baseDir:\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.MacOS:\n return {\n baseDir: path.join(homeDir, 'Library', 'Application Support'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.Linux:\n return {\n baseDir: process.env.XDG_CONFIG_HOME ?? path.join(homeDir, '.config'),\n vscodePath: path.join('Code/User'),\n };\n default:\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n};\n","import fs from 'fs';\n\nimport * as TOML from '@iarna/toml';\nimport yaml from 'js-yaml';\nimport * as jsonc from 'jsonc-parser';\n\nimport type { ClientConfigObject, ClientConfigFile } from '../types';\n\nexport enum FileFormat {\n JSON = 'json',\n YAML = 'yaml',\n TOML = 'toml',\n}\n\n/**\n * Parse file content based on format\n */\nexport const parseClientConfig = ({ format, path }: ClientConfigFile) => {\n const fileContent = fs.readFileSync(path, 'utf8');\n\n let config: ClientConfigObject = {};\n if (format === FileFormat.YAML) {\n config = yaml.load(fileContent) as ClientConfigObject;\n } else if (format === FileFormat.TOML) {\n config = TOML.parse(fileContent) as ClientConfigObject;\n } else if (path.endsWith('.jsonc')) {\n // Use jsonc-parser for .jsonc files to support comments\n config = jsonc.parse(fileContent) as ClientConfigObject;\n } else {\n // Default to JSON\n config = JSON.parse(fileContent) as ClientConfigObject;\n }\n\n return {\n config,\n fileContent,\n };\n};\n\nexport const serializeClientConfig = (\n { format, path }: ClientConfigFile,\n config: ClientConfigObject,\n originalContent?: string\n): string => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n if (path.endsWith('.jsonc') && originalContent) {\n // For .jsonc files, try to preserve comments and formatting using jsonc-parser\n try {\n // Apply modifications to preserve existing structure\n const editedContent = originalContent;\n const modifications: jsonc.Edit[] = [];\n\n // Generate edit operations for each key in the merged config\n for (const key of Object.keys(config)) {\n const path = [key];\n const edits = jsonc.modify(editedContent, path, config[key], {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n });\n modifications.push(...edits);\n }\n\n // Apply all edits\n return jsonc.applyEdits(originalContent, modifications);\n } catch (error) {\n // Fallback to standard JSON.stringify if edit fails\n console.log(\n `Error applying JSONC edits: ${error instanceof Error ? error.message : String(error)}`\n );\n console.log('Falling back to JSON.stringify (comments will be lost)');\n return JSON.stringify(config, null, 2);\n }\n }\n // Default to JSON\n return JSON.stringify(config, null, 2);\n};\n\nexport const stringifyObject = (\n config: ClientConfigObject,\n format: FileFormat\n) => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n return JSON.stringify(config, null, 2);\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport fs from 'fs';\n\nimport { getPlatformPath } from './platforms';\nimport { log } from '@/lib/log';\n\nimport { Clients } from '../../clients';\n\nimport type { ClientConfigFile } from '../types';\nimport { FileFormat } from './file-types';\n\nexport const getClientConfigFile = (client: Clients): ClientConfigFile => {\n const homeDir = os.homedir();\n const { baseDir, vscodePath } = getPlatformPath();\n\n switch (client) {\n case Clients.Claude:\n return {\n path: path.join(baseDir, 'Claude', 'claude_desktop_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'saoudrizwan.claude-dev',\n 'settings',\n 'cline_mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.RooCline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'rooveterinaryinc.roo-cline',\n 'settings',\n 'mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Windsurf:\n return {\n path: path.join(homeDir, '.codeium', 'windsurf', 'mcp_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cursor:\n return {\n path: path.join(homeDir, '.cursor', 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Warp:\n return {\n path: 'no-local-config', // it's okay this isn't a real path, we never use it\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.GeminiCli:\n return {\n path: path.join(homeDir, '.gemini', 'settings.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Vscode:\n return {\n path: path.join(baseDir, vscodePath, 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.ClaudeCode:\n return {\n path: path.join(homeDir, '.claude.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Goose:\n return {\n path: path.join(homeDir, '.config', 'goose', 'config.yaml'),\n configKey: 'extensions',\n format: FileFormat.YAML,\n };\n case Clients.Zed:\n return {\n path:\n process.platform === 'win32'\n ? path.join(\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n 'Zed',\n 'settings.json'\n )\n : path.join(homeDir, '.config', 'zed', 'settings.json'),\n configKey: 'context_servers',\n format: FileFormat.JSON,\n };\n case Clients.Codex:\n return {\n path: path.join(\n process.env.CODEX_HOME ?? path.join(homeDir, '.codex'),\n 'config.toml'\n ),\n configKey: 'mcp_servers',\n format: FileFormat.TOML,\n };\n case Clients.Opencode: {\n const jsonPath = path.join(\n homeDir,\n '.config',\n 'opencode',\n 'opencode.json'\n );\n const jsoncPath = jsonPath.replace('.json', '.jsonc');\n\n // For OpenCode, check if .jsonc exists and prefer it over .json\n if (fs.existsSync(jsoncPath)) {\n log.info(`Found .jsonc file for OpenCode, using: ${jsoncPath}`);\n return {\n path: jsoncPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n\n return {\n path: jsonPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n default:\n throw new Error(`Unknown client: ${String(client)}`);\n }\n};\n","import type { ClientConfigObject } from '../types';\n\nexport const getNestedValue = (obj: ClientConfigObject, path: string) => {\n const keys = path.split('.');\n let current: ClientConfigObject | undefined = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key] as ClientConfigObject;\n } else {\n return undefined;\n }\n }\n return current;\n};\n\nexport const setNestedValue = (\n obj: ClientConfigObject,\n path: string,\n value: ClientConfigObject\n) => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) return;\n const target = keys.reduce((current, key) => {\n current[key] ??= {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return current[key];\n }, obj);\n target[lastKey] = value;\n};\n","export * from './client-config-file';\nexport * from './file-types';\nexport * from './nested-values';\nexport * from './platforms';\n","import fs from 'fs';\n\nimport chalk from 'chalk';\n\nimport { log as clackLog, confirm, outro, stream } from '@clack/prompts';\n\nimport { log } from '@/lib/log';\n\nimport { clientMetadata, Clients } from '../clients';\nimport {\n FileFormat,\n parseClientConfig,\n serializeClientConfig,\n stringifyObject,\n getClientConfigFile,\n getNestedValue,\n setNestedValue,\n} from './lib';\n\nimport { wait } from '@/lib/wait';\n\nimport type { ClientConfigObject } from './types';\nimport type { GlobalFlags } from '@/types';\n\nconst getMcpConfig = (globalFlags: GlobalFlags) => {\n if (globalFlags.dev) {\n return {\n serverName: 'x402',\n command: 'node',\n args: [`${process.cwd()}/dist/esm/index.js`, '--dev'],\n };\n }\n return {\n serverName: 'x402',\n command: 'npx',\n args: ['-y', '@x402scan/mcp@latest'],\n };\n};\n\nexport async function addServer(client: Clients, globalFlags: GlobalFlags) {\n const { serverName, command, args } = getMcpConfig(globalFlags);\n\n if (client === Clients.Warp) {\n clackLog.info(\n chalk.bold.yellow('Warp requires a manual installation through their UI.')\n );\n clackLog.message(\n 'Please copy the following configuration object and add it to your Warp MCP config:'\n );\n console.log();\n console.log(\n JSON.stringify(\n {\n [serverName]: {\n command,\n args,\n working_directory: null,\n start_on_launch: true,\n },\n },\n null,\n 2\n )\n );\n console.log();\n clackLog.message(\n `Read Warp's documentation at https://docs.warp.dev/knowledge-and-collaboration/mcp`\n );\n const addedToWarp = await confirm({\n message: 'Did you add the MCP server to your Warp config?',\n });\n if (!addedToWarp) {\n throw new Error('Warp MCP server not added');\n }\n }\n\n const clientFileTarget = getClientConfigFile(client);\n const { name } = clientMetadata[client];\n\n try {\n let config: ClientConfigObject = {};\n let content: string | undefined = undefined;\n\n log.info(`Checking if config file exists at: ${clientFileTarget.path}`);\n if (!fs.existsSync(clientFileTarget.path)) {\n log.info('Config file not found, creating default empty config');\n setNestedValue(config, clientFileTarget.configKey, {});\n log.info('Config created successfully');\n if (!globalFlags.yes) {\n await wait({\n startText: 'Locating config file',\n stopText: `No config found, creating default empty config`,\n ms: 1000,\n });\n }\n } else {\n log.info('Config file found, reading config file content');\n const { config: rawConfig, fileContent } =\n parseClientConfig(clientFileTarget);\n config = rawConfig;\n content = fileContent;\n const existingValue = getNestedValue(\n rawConfig,\n clientFileTarget.configKey\n );\n if (!existingValue) {\n setNestedValue(rawConfig, clientFileTarget.configKey, {});\n }\n log.info(\n `Config loaded successfully: ${JSON.stringify(rawConfig, null, 2)}`\n );\n if (!globalFlags.yes) {\n await wait({\n startText: `Locating config file`,\n stopText: `Config loaded from ${clientFileTarget.path}`,\n ms: 1000,\n });\n }\n }\n\n const servers = getNestedValue(config, clientFileTarget.configKey);\n if (!servers || typeof servers !== 'object') {\n log.error(`Invalid ${clientFileTarget.configKey} structure in config`);\n clackLog.error(\n chalk.bold.red(\n `Invalid ${clientFileTarget.configKey} structure in config`\n )\n );\n throw new Error(`Invalid ${clientFileTarget.configKey} structure`);\n }\n\n if (client === Clients.Goose) {\n servers[serverName] = {\n name: serverName,\n cmd: command,\n args,\n enabled: true,\n envs: {},\n type: 'stdio',\n timeout: 300,\n };\n } else if (client === Clients.Zed) {\n // Zed has a different config structure\n servers[serverName] = {\n source: 'custom',\n command,\n args,\n env: {},\n };\n } else if (client === Clients.Opencode) {\n servers[serverName] = {\n type: 'local',\n command,\n args,\n enabled: true,\n environment: {},\n };\n } else {\n servers[serverName] = {\n command,\n args,\n };\n }\n\n if (!globalFlags.yes) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n if (!globalFlags.yes) {\n clackLog.step(\n `The following will be added to ${chalk.bold.underline(clientFileTarget.path)}`\n );\n }\n\n const configStr = formatDiffByFormat(\n {\n [clientFileTarget.configKey]: {\n [serverName]: servers[serverName] as object,\n },\n },\n clientFileTarget.format\n );\n\n if (!globalFlags.yes) {\n await stream.message(\n (async function* () {\n for (const num of Array.from(\n { length: configStr.length },\n (_, i) => i\n )) {\n const char = configStr[num]!;\n yield char;\n if (!['\\n', ' ', '─', '╮', '╭', '╰', '╯', '│'].includes(char)) {\n await new Promise(resolve => setTimeout(resolve, 5));\n } else {\n await new Promise(resolve => setTimeout(resolve, 2));\n }\n }\n })()\n );\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n const isConfirmed = globalFlags.yes\n ? true\n : await confirm({\n message: `Would you like to proceed?`,\n active: 'Install MCP',\n inactive: 'Cancel',\n });\n if (isConfirmed !== true) {\n outro(chalk.bold.red('Installation cancelled'));\n process.exit(0);\n }\n\n const configContent = serializeClientConfig(\n clientFileTarget,\n config,\n content\n );\n\n fs.writeFileSync(clientFileTarget.path, configContent);\n clackLog.success(chalk.bold.green(`Added x402scan MCP to ${name}`));\n } catch (e) {\n clackLog.error(chalk.bold.red(`Error adding x402scan MCP to ${name}`));\n throw e;\n }\n}\n\nconst formatDiffByFormat = (obj: object, format: FileFormat) => {\n const str = stringifyObject(obj, format);\n switch (format) {\n case FileFormat.JSON: {\n const numLines = str.split('\\n').length;\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, numLines - 2, numLines - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.YAML: {\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, str.length - 2, str.length - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.TOML: {\n return str\n .split('\\n')\n .filter(line => line.trim() !== '')\n .map(line => {\n return `${chalk.bold.green(`+ ${line.trim()}`)}`;\n })\n .join('\\n');\n }\n }\n};\n","import chalk from 'chalk';\nimport { log, spinner } from '@clack/prompts';\n\nimport { wait } from '@/lib/wait';\n\nimport { redeemInviteCode as redeemInviteCodeLib } from '@/lib/redeem-invite';\n\nimport type { RedeemInviteProps } from '@/lib/redeem-invite';\nimport type { GlobalFlags } from '@/types';\n\nexport const redeemInviteCode = async (\n props: RedeemInviteProps,\n flags: GlobalFlags\n) => {\n const s = spinner();\n\n if (!flags.yes) {\n s.start('Redeeming invite code...');\n }\n\n const result = await redeemInviteCodeLib(props);\n\n return result.match(\n async ({ data }) => {\n if (!flags.yes) {\n s.stop('Invite code redeemed successfully!');\n\n await wait({\n startText: 'Processing...',\n stopText: chalk.green(\n `${chalk.bold(data.amount)} USDC has been sent to your wallet!`\n ),\n ms: 1000,\n });\n } else {\n log.success(\n chalk.green(\n `${chalk.bold(data.amount)} USDC has been sent to your wallet!`\n )\n );\n }\n\n log.info(\n chalk.dim(`Transaction: https://basescan.org/tx/${data.txHash}`)\n );\n\n return true;\n },\n error => {\n if (!flags.yes) {\n s.stop('Invite code redemption failed');\n }\n log.warning(\n chalk.yellow(`Failed to redeem invite code: ${error?.message}`)\n );\n return false;\n }\n );\n};\n","import chalk from 'chalk';\nimport { log } from '@clack/prompts';\n\nimport { getUSDCBalance } from '@/lib/balance';\nimport { promptDeposit } from '@/lib/deposit';\nimport { wait } from '@/lib/wait';\n\nimport type { Address } from 'viem';\nimport type { InstallFlags } from '..';\n\ninterface AddFundsProps {\n flags: InstallFlags;\n address: Address;\n isNew: boolean;\n}\n\nexport const addFunds = async ({ flags, address, isNew }: AddFundsProps) => {\n if (isNew) {\n if (!flags.yes) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n log.info('To use paid API tools, you will need USDC in your wallet.');\n await promptDeposit(address, flags);\n } else {\n const { balanceFormatted } = await getUSDCBalance(address, flags);\n if (!flags.yes) {\n await wait({\n startText: 'Checking balance...',\n stopText: `Balance: ${chalk.bold(`${balanceFormatted} USDC`)} `,\n ms: 1000,\n });\n }\n if (balanceFormatted < 1) {\n log.warning(\n chalk.bold(\n `Your balance is low (${balanceFormatted} USDC). Consider topping up.`\n )\n );\n await promptDeposit(address, flags);\n }\n }\n};\n","import { getWallet } from '@/lib/wallet';\nimport { getClient } from './1-get-client';\nimport { addServer } from './2-add-server';\nimport { redeemInviteCode } from './3-redeem-invite';\nimport { addFunds } from './4-add-funds';\n\nimport type { Command, GlobalFlags } from '@/types';\nimport { intro, outro } from '@clack/prompts';\nimport chalk from 'chalk';\n\nexport type InstallFlags = GlobalFlags<{\n client?: string;\n}>;\n\nexport const installMcpServer: Command<InstallFlags> = async flags => {\n const {\n account: { address },\n isNew,\n } = await getWallet();\n\n intro(chalk.green.bold(`Install x402scan MCP`));\n\n const client = await getClient(flags);\n\n await addServer(client, flags);\n\n const inviteRedeemed = flags.invite\n ? await redeemInviteCode(\n {\n code: flags.invite,\n dev: flags.dev,\n address,\n },\n flags\n )\n : false;\n\n if (!inviteRedeemed) {\n await addFunds({ flags, address, isNew });\n }\n\n outro(chalk.bold.green('Your x402scan MCP server is ready to use!'));\n};\n","import type { Command } from '@/types';\nimport { intro, outro } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { getWallet } from '@/lib/wallet';\nimport { promptDeposit } from '@/lib/deposit';\n\nexport const fundMcpServer: Command = async flags => {\n intro(chalk.bold(`Fund ${chalk.hex('#2563eb')('x402scan MCP')}`));\n\n const {\n account: { address },\n } = await getWallet();\n\n await promptDeposit(address, flags);\n\n outro(chalk.bold.green('Your x402scan MCP server is funded!'));\n};\n","#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { Clients } from './install/clients';\n\nconst isClaudeCode = Boolean(process.env.CLAUDECODE);\nconst defaultYes = isClaudeCode || Boolean(process.env.CI);\n\nvoid yargs(hideBin(process.argv))\n .scriptName('@x402scan/mcp')\n .option('dev', {\n type: 'boolean',\n description: 'Enable dev mode',\n default: false,\n })\n .option('invite', {\n type: 'string',\n description: 'Invite code to redeem for starter money',\n required: false,\n })\n .option('yes', {\n alias: 'y',\n type: 'boolean',\n description: 'Yes to all prompts',\n default: defaultYes ? true : undefined,\n })\n .command(\n '$0',\n 'Start the MCP server',\n yargs => yargs,\n async args => {\n const { startServer } = await import('@/server');\n await startServer(args);\n }\n )\n .command(\n 'install',\n 'Install the MCP server',\n yargs =>\n yargs.option('client', {\n type: 'string',\n description: 'The client name',\n required: false,\n default: isClaudeCode ? Clients.ClaudeCode : undefined,\n }),\n async args => {\n const { installMcpServer } = await import('@/install');\n await installMcpServer(args);\n }\n )\n .command(\n 'fund',\n 'Open the funding page',\n yargs => yargs,\n async args => {\n const { fundMcpServer } = await import('@/fund');\n await fundMcpServer(args);\n }\n )\n .strict()\n .demandCommand(0, 1, '', 'Too many commands provided')\n .help()\n .parseAsync()\n .catch(err => {\n console.error('Fatal:', err);\n process.exit(1);\n });\n"]}
|