@x402scan/mcp 0.0.7-beta.4 → 0.0.8-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/server/index.ts","../../src/server/tools/x402-fetch.ts","../../src/server/tools/response/lib.ts","../../src/server/tools/response/error.ts","../../src/server/tools/response/success.ts","../../src/server/tools/lib/request.ts","../../src/server/tools/lib/check-balance.ts","../../src/shared/token.ts","../../src/shared/neverthrow/x402/index.ts","../../src/server/tools/auth-fetch.ts","../../src/server/lib/x402-extensions.ts","../../src/server/tools/wallet.ts","../../src/server/tools/check-endpoint.ts","../../src/server/tools/redeem-invite.ts","../../src/server/tools/telemetry.ts","../../src/server/tools/discover-resources.ts","../../src/server/resources/origins.ts","../../src/server/resources/_lib.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n\nimport { registerFetchX402ResourceTool } from './tools/x402-fetch';\nimport { registerAuthTools } from './tools/auth-fetch';\nimport { registerWalletTools } from './tools/wallet';\nimport { registerCheckX402EndpointTool } from './tools/check-endpoint';\nimport { registerRedeemInviteTool } from './tools/redeem-invite';\nimport { registerTelemetryTools } from './tools/telemetry';\nimport { registerDiscoveryTools } from './tools/discover-resources';\n\nimport { registerOrigins } from './resources/origins';\n\nimport { MCP_VERSION } from './lib/version';\n\nimport { log } from '@/shared/log';\nimport { getWallet } from '@/shared/wallet';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\n\nimport type { Command } from '@/types';\n\nexport const startServer: Command = async flags => {\n log.info('Starting x402scan-mcp...');\n\n const { dev, invite } = flags;\n\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n log.error(JSON.stringify(walletResult.error, null, 2));\n console.error(walletResult.error);\n process.exit(1);\n }\n\n const { account } = walletResult.value;\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 surface: 'startServer',\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 { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\n\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\n\nimport { mcpError, mcpErrorFetch, mcpSuccessResponse } from './response';\n\nimport { requestSchema, buildRequest } from './lib/request';\nimport { checkBalance } from './lib/check-balance';\n\nimport { DEFAULT_NETWORK } from '@/shared/networks';\nimport { tokenStringToNumber } from '@/shared/token';\nimport {\n safeCreatePaymentPayload,\n safeGetPaymentRequired,\n safeGetPaymentSettlement,\n x402Err,\n} from '@/shared/neverthrow/x402';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'fetch';\n\nexport const registerFetchX402ResourceTool: RegisterTools = ({\n server,\n account,\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n description:\n 'Makes an http fetch request. If the request is to an x402-protected resource, it will handle payment automatically.',\n inputSchema: requestSchema,\n },\n async input => {\n const coreClient = x402Client.fromConfig({\n schemes: [\n { network: DEFAULT_NETWORK, client: new ExactEvmScheme(account) },\n ],\n });\n\n coreClient.onBeforePaymentCreation(async ({ selectedRequirements }) => {\n const amount = tokenStringToNumber(selectedRequirements.amount);\n await checkBalance({\n surface: toolName,\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 });\n\n const client = new x402HTTPClient(coreClient);\n\n const fetchWithPay = safeWrapFetchWithPayment(client);\n\n const fetchResult = await fetchWithPay(buildRequest(input));\n\n if (fetchResult.isErr()) {\n return mcpError(fetchResult);\n }\n\n const response = fetchResult.value;\n\n if (!response.ok) {\n return mcpErrorFetch(toolName, response);\n }\n\n const parseResponseResult = await safeParseResponse(toolName, response);\n\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n\n const settlementResult = safeGetPaymentSettlement(\n toolName,\n client,\n response\n );\n\n return mcpSuccessResponse(\n parseResponseResult.value,\n settlementResult.isOk()\n ? { payment: settlementResult.value }\n : undefined\n );\n }\n );\n};\n\nfunction safeWrapFetchWithPayment(client: x402HTTPClient) {\n return async (input: RequestInfo | URL, init?: RequestInit) => {\n const request = new Request(input, init);\n const clonedRequest = request.clone();\n\n const probeResult = await safeFetch(toolName, request);\n\n if (probeResult.isErr()) {\n return probeResult;\n }\n\n if (probeResult.value.status !== 402) {\n return probeResult;\n }\n\n const response = probeResult.value;\n\n const paymentRequiredResult = await safeGetPaymentRequired(\n toolName,\n client,\n response\n );\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const paymentRequired = paymentRequiredResult.value;\n\n const paymentPayloadResult = await safeCreatePaymentPayload(\n toolName,\n client,\n paymentRequired\n );\n\n if (paymentPayloadResult.isErr()) {\n return paymentPayloadResult;\n }\n\n const paymentPayload = paymentPayloadResult.value;\n\n // Encode payment header\n const paymentHeaders = client.encodePaymentSignatureHeader(paymentPayload);\n\n // Check if this is already a retry to prevent infinite loops\n if (\n clonedRequest.headers.has('PAYMENT-SIGNATURE') ||\n clonedRequest.headers.has('X-PAYMENT')\n ) {\n return x402Err(toolName, {\n cause: 'payment_already_attempted',\n message: 'Payment already attempted',\n });\n }\n\n // Add payment headers to cloned request\n for (const [key, value] of Object.entries(paymentHeaders)) {\n clonedRequest.headers.set(key, value);\n }\n clonedRequest.headers.set(\n 'Access-Control-Expose-Headers',\n 'PAYMENT-RESPONSE,X-PAYMENT-RESPONSE'\n );\n\n // Retry the request with payment\n return await safeFetch(toolName, clonedRequest);\n };\n}\n","import type { ParsedResponse } from '@/shared/neverthrow/fetch/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport const parsedResponseToToolContentPart = (\n data: ParsedResponse\n): CallToolResult['content'][number] => {\n switch (data.type) {\n case 'json':\n return {\n type: 'text' as const,\n text: JSON.stringify(data.data, null, 2),\n };\n case 'image':\n return {\n type: 'image' as const,\n mimeType: data.mimeType,\n data: Buffer.from(data.data).toString('base64'),\n };\n case 'audio':\n return {\n type: 'audio' as const,\n mimeType: data.mimeType,\n data: Buffer.from(data.data).toString('base64'),\n };\n case 'text':\n return { type: 'text' as const, text: data.data };\n default:\n return {\n type: 'text' as const,\n text: `Unsupported response type: ${data.type}`,\n };\n }\n};\n","import { safeStringifyJson } from '@/shared/neverthrow/json';\n\nimport { parsedResponseToToolContentPart } from './lib';\nimport {\n fetchHttpErr,\n isFetchError,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\n\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { BaseError, Err } from '@x402scan/neverthrow/types';\nimport type { BaseX402Error } from '@/shared/neverthrow/x402/types';\nimport type { BaseFetchError } from '@/shared/neverthrow/fetch/types';\n\nconst buildMcpError = (content: CallToolResult['content']): CallToolResult => {\n return {\n content,\n isError: true as const,\n };\n};\n\nexport const mcpErrorJson = (error: JsonObject): CallToolResult => {\n return safeStringifyJson('mcp-error-json', error).match(\n success => buildMcpError([{ type: 'text' as const, text: success }]),\n error =>\n buildMcpError([\n { type: 'text' as const, text: JSON.stringify(error, null, 2) },\n ])\n );\n};\n\nexport const mcpError = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n err: Err<any, BaseX402Error | BaseFetchError | BaseError>\n) => {\n const { error } = err;\n if (isFetchError(error)) {\n switch (error.cause) {\n case 'network':\n case 'parse':\n return mcpErrorJson({ ...error });\n case 'http':\n const { response, ...rest } = error;\n const parseResponseResult = await safeParseResponse(\n 'mcp-error-fetch-parse-response',\n response\n );\n return buildMcpError([\n { type: 'text' as const, text: JSON.stringify(rest, null, 2) },\n ...parseResponseResult.match(\n success => [parsedResponseToToolContentPart(success)],\n () => []\n ),\n ]);\n }\n }\n return mcpErrorJson({ ...error });\n};\n\nexport const mcpErrorFetch = async (surface: string, response: Response) => {\n return mcpError(fetchHttpErr(surface, response));\n};\n","import { safeStringifyJson } from '@/shared/neverthrow/json';\n\nimport { mcpErrorJson } from './error';\n\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { ParsedResponse } from '@/shared/neverthrow/fetch/types';\nimport { parsedResponseToToolContentPart } from './lib';\n\nconst buildMcpSuccess = (\n content: CallToolResult['content']\n): CallToolResult => {\n return {\n content,\n };\n};\n\nexport const mcpSuccessJson = (data: JsonObject): CallToolResult => {\n return safeStringifyJson('mcp-success-text', data).match(\n success => buildMcpSuccess([{ type: 'text' as const, text: success }]),\n error => mcpErrorJson(error)\n );\n};\n\nexport const mcpSuccessResponse = (\n data: ParsedResponse,\n extra?: JsonObject\n): CallToolResult => {\n const parsedExtra = extra\n ? safeStringifyJson('mcp-success-extra', extra).match(\n success => success,\n () => undefined\n )\n : undefined;\n\n return buildMcpSuccess([\n parsedResponseToToolContentPart(data),\n ...(parsedExtra ? [{ type: 'text' as const, text: parsedExtra }] : []),\n ]);\n};\n","import z from 'zod';\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 headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Additional headers to include')\n .default({}),\n});\n\nexport const buildRequest = (input: z.infer<typeof requestSchema>) => {\n return new Request(input.url, {\n method: input.method,\n body: input.body\n ? typeof input.body === 'string'\n ? input.body\n : JSON.stringify(input.body)\n : undefined,\n headers: {\n ...(input.body ? { 'Content-Type': 'application/json' } : {}),\n ...input.headers,\n },\n });\n};\n","import { getBalance } from '@/shared/balance';\nimport { getDepositLink, openDepositLink } from '@/shared/utils';\nimport { log } from '@/shared/log';\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 surface: string;\n}\n\nexport const checkBalance = async ({\n server,\n address,\n amountNeeded,\n message,\n flags,\n surface,\n}: CheckBalanceProps) => {\n const balanceResult = await getBalance({ address, flags, surface });\n\n if (balanceResult.isErr()) {\n log.error(JSON.stringify(balanceResult.error, null, 2));\n return;\n }\n\n const balance = balanceResult.value;\n\n if (balance.balance < amountNeeded) {\n const capabilities = server.server.getClientCapabilities();\n if (!capabilities?.elicitation) {\n throw new Error(\n `${message(balance.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.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.balance;\n};\n","import { formatUnits } from 'viem';\n\nexport const tokenStringToNumber = (amount: string, decimals = 6) => {\n return Number(formatUnits(BigInt(amount), decimals));\n};\n","import {\n err,\n resultFromPromise,\n resultFromThrowable,\n} from '@x402scan/neverthrow';\nimport { createSIWxPayload } from '@x402scan/siwx';\n\nimport type { BaseX402Error } from './types';\nimport type { x402HTTPClient } from '@x402/core/http';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type { SIWxExtensionInfo } from '@x402scan/siwx/types';\nimport type { PrivateKeyAccount } from 'viem';\n\nconst errorType = 'x402';\n\nexport const x402Err = (cause: string, error: BaseX402Error) =>\n err(errorType, cause, error);\n\nconst x402ResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseX402Error\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst x402ResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseX402Error\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const safeGetPaymentRequired = (\n surface: string,\n client: x402HTTPClient,\n response: Response\n) => {\n return x402ResultFromPromise(\n surface,\n response.json().then(\n json =>\n client.getPaymentRequiredResponse(\n name => response.headers.get(name),\n json\n ),\n () =>\n client.getPaymentRequiredResponse(name => response.headers.get(name))\n ),\n error => ({\n cause: 'parse_payment_required',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse payment required',\n })\n );\n};\n\nexport const safeCreatePaymentPayload = (\n surface: string,\n client: x402HTTPClient,\n paymentRequired: PaymentRequired\n) => {\n return x402ResultFromPromise(\n surface,\n client.createPaymentPayload(paymentRequired),\n error => ({\n cause: 'create_payment_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create payment payload',\n })\n );\n};\n\nexport const safeGetPaymentSettlement = (\n surface: string,\n client: x402HTTPClient,\n response: Response\n) => {\n return x402ResultFromThrowable(\n surface,\n () => client.getPaymentSettleResponse(name => response.headers.get(name)),\n error => ({\n cause: 'get_payment_settlement',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to get payment settlement',\n })\n );\n};\n\nexport const safeCreateSIWxPayload = (\n surface: string,\n serverInfo: SIWxExtensionInfo,\n signer: PrivateKeyAccount\n) => {\n return x402ResultFromPromise(\n surface,\n createSIWxPayload(serverInfo, signer),\n error => ({\n cause: 'create_siwx_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create SIWX payload',\n })\n );\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { encodeSIWxHeader } from '@x402scan/siwx';\n\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\nimport {\n safeCreateSIWxPayload,\n safeGetPaymentRequired,\n} from '@/shared/neverthrow/x402';\n\nimport {\n mcpErrorJson,\n mcpError,\n mcpSuccessResponse,\n mcpErrorFetch,\n} from './response';\n\nimport { requestSchema, buildRequest } from './lib/request';\n\nimport type { SIWxExtensionInfo } from '@x402scan/siwx/types';\nimport type { RegisterTools } from '@/server/types';\nimport { getSiwxExtension } from '../lib/x402-extensions';\n\nconst toolName = 'fetchWithAuth';\n\nexport const registerAuthTools: RegisterTools = ({ server, account }) => {\n server.registerTool(\n toolName,\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: requestSchema,\n },\n async input => {\n const httpClient = new x402HTTPClient(new x402Client());\n\n // Step 1: Make initial request\n const firstResult = await safeFetch(toolName, buildRequest(input));\n\n if (firstResult.isErr()) {\n return mcpError(firstResult);\n }\n\n const firstResponse = firstResult.value;\n\n if (firstResponse.status !== 402) {\n if (!firstResponse.ok) {\n return mcpErrorFetch(toolName, firstResponse);\n }\n\n const parseResponseResult = await safeParseResponse(\n toolName,\n firstResponse\n );\n\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n\n return mcpSuccessResponse(parseResponseResult.value);\n }\n\n const getPaymentRequiredResult = await safeGetPaymentRequired(\n toolName,\n httpClient,\n firstResponse\n );\n\n if (getPaymentRequiredResult.isErr()) {\n return mcpError(getPaymentRequiredResult);\n }\n\n const paymentRequired = getPaymentRequiredResult.value;\n\n const siwxExtension = getSiwxExtension(paymentRequired.extensions);\n\n if (!siwxExtension) {\n return mcpErrorJson({\n message:\n 'Endpoint returned 402 but no sign-in-with-x extension found',\n statusCode: 402,\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 const serverInfo = siwxExtension;\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 mcpErrorJson({\n message: 'Invalid sign-in-with-x extension: missing required fields',\n missingFields,\n receivedInfo: { ...serverInfo },\n });\n }\n\n // Step 4: Check for unsupported chain types\n if (serverInfo.chainId.startsWith('solana:')) {\n return mcpErrorJson({\n message: '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 payloadResult = await safeCreateSIWxPayload(\n toolName,\n serverInfo,\n account\n );\n\n if (payloadResult.isErr()) {\n return mcpError(payloadResult);\n }\n\n const siwxHeader = encodeSIWxHeader(payloadResult.value);\n\n // Step 6: Retry with SIGN-IN-WITH-X header\n const authedRequest = buildRequest(input);\n authedRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n\n const authedResult = await safeFetch(toolName, authedRequest);\n\n if (authedResult.isErr()) {\n return mcpError(authedResult);\n }\n\n const authedResponse = authedResult.value;\n\n if (!authedResponse.ok) {\n return mcpErrorFetch(toolName, authedResponse);\n }\n\n const parseResponseResult = await safeParseResponse(\n toolName,\n authedResponse\n );\n\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n\n return mcpSuccessResponse(parseResponseResult.value, {\n authentication: {\n address: account.address,\n domain: serverInfo.domain,\n chainId: serverInfo.chainId,\n },\n });\n }\n );\n};\n","import type { PaymentRequired } from '@x402/core/types';\nimport type { DiscoveryExtension } from '@x402/extensions/bazaar';\nimport type { SIWxExtensionInfo } from '@x402scan/siwx/types';\n\nconst getBazaarExtension = (extensions: PaymentRequired['extensions']) => {\n const { bazaar } = extensions ?? {};\n\n if (!bazaar) {\n return undefined;\n }\n\n return bazaar as DiscoveryExtension;\n};\n\nexport const getInputSchema = (extensions: PaymentRequired['extensions']) =>\n getBazaarExtension(extensions)?.schema.properties.input;\n\nexport const getSiwxExtension = (extensions: PaymentRequired['extensions']) => {\n const siwx = extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo }\n | undefined;\n\n if (!siwx?.info) {\n return undefined;\n }\n\n return siwx.info;\n};\n","import { getBalance } from '@/shared/balance';\nimport { DEFAULT_NETWORK, getChainName } from '@/shared/networks';\nimport { getDepositLink } from '@/shared/utils';\n\nimport { mcpSuccessJson, mcpError } from './response';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'getWalletInfo';\n\nexport const registerWalletTools: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n description:\n 'Check wallet address and USDC balance. Creates wallet if needed.',\n },\n async () => {\n const balanceResult = await getBalance({\n address,\n flags,\n surface: toolName,\n });\n\n if (balanceResult.isErr()) {\n return mcpError(balanceResult);\n }\n\n const { balance } = balanceResult.value;\n\n return mcpSuccessJson({\n address,\n network: DEFAULT_NETWORK,\n networkName: getChainName(DEFAULT_NETWORK),\n usdcBalance: balance,\n isNewWallet: balance === 0,\n depositLink: getDepositLink(address, flags),\n ...(balance < 2.5\n ? {\n message: `Your balance is low. Consider topping it up`,\n }\n : {}),\n });\n }\n );\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\n\nimport {\n mcpError,\n mcpErrorFetch,\n mcpSuccessJson,\n mcpSuccessResponse,\n} from './response';\n\nimport { log } from '@/shared/log';\nimport { tokenStringToNumber } from '@/shared/token';\nimport { safeGetPaymentRequired } from '@/shared/neverthrow/x402';\n\nimport { getInputSchema } from '../lib/x402-extensions';\nimport { requestSchema, buildRequest } from './lib/request';\n\nimport type { RegisterTools } from '@/server/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst toolName = 'checkEndpointSchema';\n\nexport const registerCheckX402EndpointTool: RegisterTools = ({ server }) => {\n server.registerTool(\n toolName,\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 input => {\n log.info('Querying endpoint', input);\n\n const responseResult = await safeFetch(toolName, buildRequest(input));\n\n if (responseResult.isErr()) {\n return mcpError(responseResult);\n }\n\n const response = responseResult.value;\n\n if (response.status !== 402) {\n if (!response.ok) {\n return mcpErrorFetch(toolName, response);\n }\n\n const parseResponseResult = await safeParseResponse(toolName, response);\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n return mcpSuccessResponse(parseResponseResult.value, {\n requiresPayment: false,\n });\n }\n\n const client = new x402HTTPClient(new x402Client());\n\n const paymentRequiredResult = await safeGetPaymentRequired(\n toolName,\n client,\n response\n );\n\n if (paymentRequiredResult.isErr()) {\n return mcpError(paymentRequiredResult);\n }\n\n const { resource, extensions, accepts } = paymentRequiredResult.value;\n\n return mcpSuccessJson({\n requiresPayment: true,\n statusCode: response.status,\n routeDetails: {\n ...resource,\n schema: getInputSchema(extensions) as JsonObject,\n paymentMethods: accepts.map(accept => ({\n price: tokenStringToNumber(accept.amount),\n network: accept.network,\n asset: accept.asset,\n })),\n },\n });\n }\n );\n};\n","import z from 'zod';\nimport { mcpError, mcpSuccessJson } from './response';\n\nimport { redeemInviteCode } from '@/shared/redeem-invite';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'redeemInvite';\n\nexport const registerRedeemInviteTool: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n server.registerTool(\n toolName,\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 result = await redeemInviteCode({\n code,\n dev: flags.dev,\n address,\n surface: toolName,\n });\n\n if (result.isErr()) {\n return mcpError(result);\n }\n\n const { amount, txHash } = result.value;\n\n return mcpSuccessJson({\n redeemed: true,\n amount: `${amount} USDC`,\n txHash,\n });\n }\n );\n};\n","import z from 'zod';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nimport { log } from '@/shared/log';\nimport { getBaseUrl } from '@/shared/utils';\n\nimport { MCP_VERSION } from '../lib/version';\n\nimport { mcpError, mcpSuccessJson } from './response';\n\nimport type { RegisterTools } from '@/server/types';\n\ninterface ReportErrorResponse {\n reportId: string;\n}\n\nconst toolName = 'reportError';\n\nexport const registerTelemetryTools: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n server.registerTool(\n toolName,\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: 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 },\n async input => {\n log.info('Submitting error report', {\n tool: input.tool,\n resource: input.resource,\n summary: input.summary,\n });\n\n const telemetryResult = await safeFetchJson<ReportErrorResponse>(\n toolName,\n new Request(`${getBaseUrl(flags.dev)}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n ...input,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n }),\n })\n );\n\n if (telemetryResult.isErr()) {\n log.error('Failed to submit error report', telemetryResult.error);\n return mcpError(telemetryResult);\n }\n\n const { reportId } = telemetryResult.value;\n\n log.info('Error report submitted successfully', {\n reportId,\n });\n\n return mcpSuccessJson({\n submitted: true,\n reportId,\n message:\n 'Error report submitted successfully. The x402scan team will investigate.',\n });\n }\n );\n};\n","import { z } from 'zod';\n\nimport { log } from '@/shared/log';\nimport {\n safeFetch,\n safeFetchJson,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\n\nimport { mcpErrorJson, mcpSuccessJson } from './response';\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nconst toolName = 'discoverResources';\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\nexport function registerDiscoveryTools(server: McpServer): void {\n server.registerTool(\n 'discover_resources',\n {\n description: `Discover x402-protected resources on an origin. Returns a list of resource URLs.\n Use check_x402_endpoint separately to get detailed pricing/schema info for specific 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 },\n },\n async ({ url }) => {\n const origin = URL.canParse(url) ? new URL(url).origin : url;\n const hostname = URL.canParse(origin) ? new URL(origin).hostname : origin;\n log.info(`Discovering resources for origin: ${origin}`);\n\n // ============================================================\n // Step 1: Try .well-known/x402\n // ============================================================\n const wellKnownUrl = `${origin}/.well-known/x402`;\n log.debug(`Fetching discovery document from: ${wellKnownUrl}`);\n\n const wellKnownResult = await safeFetchJson(\n toolName,\n new Request(wellKnownUrl, { headers: { Accept: 'application/json' } })\n );\n\n if (wellKnownResult.isOk()) {\n const parsed = discoveryDocumentSchema.safeParse(wellKnownResult.value);\n if (parsed.success) {\n return mcpSuccessJson({\n found: true,\n origin,\n source: 'well-known',\n data: parsed.data,\n });\n }\n } else {\n log.info(\n `No well-known x402 discovery document found at ${wellKnownUrl}`\n );\n }\n\n // ============================================================\n // Step 2: Try DNS TXT record _x402.hostname\n // ============================================================\n const dnsQuery = `_x402.${hostname}`;\n log.debug(`Looking up DNS TXT record: ${dnsQuery}`);\n\n const dnsResult = await safeFetchJson<{ Answer?: { data: string }[] }>(\n toolName,\n new Request(\n `https://cloudflare-dns.com/dns-query?name=${encodeURIComponent(dnsQuery)}&type=TXT`,\n { headers: { Accept: 'application/dns-json' } }\n )\n );\n\n if (\n dnsResult.isOk() &&\n dnsResult.value.Answer &&\n dnsResult.value.Answer.length > 0\n ) {\n const dnsUrl = dnsResult.value.Answer[0]!.data.replace(/^\"|\"$/g, '');\n if (URL.canParse(dnsUrl)) {\n const dnsDocResult = await safeFetchJson(\n toolName,\n new Request(dnsUrl, { headers: { Accept: 'application/json' } })\n );\n\n if (dnsDocResult.isOk()) {\n const parsed = discoveryDocumentSchema.safeParse(\n dnsDocResult.value\n );\n\n if (parsed.success) {\n return mcpSuccessJson({\n found: true,\n origin,\n source: 'dns-txt',\n data: parsed.data,\n });\n }\n }\n } else {\n log.debug(`DNS TXT value is not a valid URL: ${dnsUrl}`);\n }\n } else {\n log.info(`No DNS TXT record found for ${dnsQuery}`);\n }\n\n // ============================================================\n // Step 3: Try llms.txt as last resort\n // ============================================================\n const llmsTxtUrl = `${origin}/llms.txt`;\n log.debug(`Fetching llms.txt from: ${llmsTxtUrl}`);\n\n const llmsResult = await safeFetch(\n toolName,\n new Request(llmsTxtUrl, { headers: { Accept: 'text/plain' } })\n );\n\n if (llmsResult.isOk()) {\n const parseResult = await safeParseResponse(toolName, llmsResult.value);\n if (parseResult.isOk() && parseResult.value.type === 'text') {\n return mcpSuccessJson({\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 data: parseResult.value,\n });\n }\n }\n\n return mcpErrorJson({\n found: false,\n origin,\n error:\n 'No discovery document found. Tried: .well-known/x402, DNS TXT record, llms.txt',\n });\n }\n );\n}\n","import { x402HTTPClient } from '@x402/core/client';\nimport { x402Client } from '@x402/core/client';\n\nimport { getWebPageMetadata } from './_lib';\n\nimport { getInputSchema } from '../lib/x402-extensions';\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 metadataResult = await getWebPageMetadata(`https://${origin}`);\n const metadata = metadataResult.isOk() ? metadataResult.value : null;\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 = getInputSchema(\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","import { err, ok } from '@x402scan/neverthrow';\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\n\nconst surface = 'getWebPageMetadata';\n\ninterface WebPageMetadata {\n title: string | null;\n description: string | null;\n}\n\nexport const getWebPageMetadata = (url: string) => {\n return safeFetch(surface, new Request(url))\n .andThen(response => safeParseResponse(surface, response))\n .andThen(parsedResponse => {\n if (parsedResponse.type === 'text') {\n return ok(parseMetadataFromResponse(parsedResponse.data));\n }\n return err('user', surface, {\n cause: 'invalid_response_type',\n message: 'Invalid response type',\n });\n });\n};\n\nconst parseMetadataFromResponse = (html: string): WebPageMetadata => {\n // Extract title\n const titleMatch = /<title[^>]*>([\\s\\S]*?)<\\/title>/i.exec(html);\n const title = titleMatch ? titleMatch[1]!.trim().replace(/\\s+/g, ' ') : 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};\n"],"mappings":"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","names":["error","err","surface","surface","surface","x402Client","x402HTTPClient","toolName","x402HTTPClient","x402Client","parseResponseResult","toolName","x402Client","x402HTTPClient","toolName","x402HTTPClient","x402Client","z","toolName","z","z","toolName","z","z","toolName","z","x402HTTPClient","x402Client","response","x402HTTPClient","x402Client"]}