import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { makePaymentAwareClientTransport } from "@civic/x402-mcp";
import { createWalletClient, http, publicActions } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { baseSepolia } from "viem/chains";
// Set up wallet with public actions
const wallet = createWalletClient({
account: privateKeyToAccount(process.env.PRIVATE_KEY),
chain: baseSepolia,
transport: http()
}).extend(publicActions);
// Create payment-aware transport
const transport = makePaymentAwareClientTransport(
"http://localhost:3000/mcp",
wallet,
(txHash) => console.log("Payment sent:", txHash) // Optional callback
);
// Connect MCP client
const client = new Client(
{ name: "my-client", version: "1.0.0" },
{ capabilities: {} }
);
await client.connect(transport);
// Use tools normally - payments happen automatically
const result = await client.request({
method: "tools/call",
params: {
name: "expensive-analysis",
arguments: { data: "..." }
}
});