[{"data":1,"prerenderedAt":414},["ShallowReactive",2],{"integration:\u002Fintegrations\u002Fvercel-ai-sdk":3},{"id":4,"title":5,"body":6,"description":404,"extension":405,"keywords":406,"logo":407,"meta":408,"navigation":151,"order":409,"path":410,"product":19,"seo":411,"stem":412,"__hash__":413},"integrations\u002Fintegrations\u002Fvercel-ai-sdk.md","Use 402.report with the Vercel AI SDK",{"type":7,"value":8,"toc":399},"minimark",[9,34,39,67,80,84,301,305,311,392,395],[10,11,12,13,20,21,25,26,29,30,33],"p",{},"The ",[14,15,19],"a",{"href":16,"rel":17},"https:\u002F\u002Fai-sdk.dev",[18],"nofollow","Vercel AI SDK"," speaks MCP (",[22,23,24],"code",{},"@ai-sdk\u002Fmcp"," \u002F\n",[22,27,28],{},"experimental_createMCPClient",") and accepts a custom ",[22,31,32],{},"fetch",". 402.report plugs into both: expose\nyour spend as tools, and observe the payments your agent makes.",[35,36,38],"h2",{"id":37},"_1-install","1. Install",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-bash shiki shiki-themes github-light github-dark","npm install @402report\u002Fsdk ai\n","bash","",[22,47,48],{"__ignoreMap":45},[49,50,53,57,61,64],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sScJk","npm",[49,58,60],{"class":59},"sZZnC"," install",[49,62,63],{"class":59}," @402report\u002Fsdk",[49,65,66],{"class":59}," ai\n",[10,68,69,70,73,74,79],{},"Set your key as ",[22,71,72],{},"REPORT402_API_KEY"," (create one in the ",[14,75,78],{"href":76,"rel":77},"https:\u002F\u002F402.report",[18],"dashboard",").",[35,81,83],{"id":82},"_2-add-the-spend-tools","2. Add the spend tools",[40,85,89],{"className":86,"code":87,"language":88,"meta":45,"style":45},"language-ts shiki shiki-themes github-light github-dark","import { experimental_createMCPClient as createMCPClient, generateText } from \"ai\";\nimport { openai } from \"@ai-sdk\u002Fopenai\";\nimport { aiSdkMcpTransport } from \"@402report\u002Fsdk\";\n\nconst mcp = await createMCPClient({\n  transport: aiSdkMcpTransport({ apiKey: process.env.REPORT402_API_KEY! }),\n});\n\nconst { text } = await generateText({\n  model: openai(\"gpt-4o\"),\n  tools: await mcp.tools(),\n  prompt: \"How much have my agents paid this week, and did any payments fail?\",\n});\n\nawait mcp.close();\n","ts",[22,90,91,116,131,146,153,175,195,201,206,230,248,266,278,283,288],{"__ignoreMap":45},[49,92,93,97,101,104,107,110,113],{"class":51,"line":52},[49,94,96],{"class":95},"szBVR","import",[49,98,100],{"class":99},"sVt8B"," { experimental_createMCPClient ",[49,102,103],{"class":95},"as",[49,105,106],{"class":99}," createMCPClient, generateText } ",[49,108,109],{"class":95},"from",[49,111,112],{"class":59}," \"ai\"",[49,114,115],{"class":99},";\n",[49,117,119,121,124,126,129],{"class":51,"line":118},2,[49,120,96],{"class":95},[49,122,123],{"class":99}," { openai } ",[49,125,109],{"class":95},[49,127,128],{"class":59}," \"@ai-sdk\u002Fopenai\"",[49,130,115],{"class":99},[49,132,134,136,139,141,144],{"class":51,"line":133},3,[49,135,96],{"class":95},[49,137,138],{"class":99}," { aiSdkMcpTransport } ",[49,140,109],{"class":95},[49,142,143],{"class":59}," \"@402report\u002Fsdk\"",[49,145,115],{"class":99},[49,147,149],{"class":51,"line":148},4,[49,150,152],{"emptyLinePlaceholder":151},true,"\n",[49,154,156,159,163,166,169,172],{"class":51,"line":155},5,[49,157,158],{"class":95},"const",[49,160,162],{"class":161},"sj4cs"," mcp",[49,164,165],{"class":95}," =",[49,167,168],{"class":95}," await",[49,170,171],{"class":55}," createMCPClient",[49,173,174],{"class":99},"({\n",[49,176,178,181,184,187,189,192],{"class":51,"line":177},6,[49,179,180],{"class":99},"  transport: ",[49,182,183],{"class":55},"aiSdkMcpTransport",[49,185,186],{"class":99},"({ apiKey: process.env.",[49,188,72],{"class":161},[49,190,191],{"class":95},"!",[49,193,194],{"class":99}," }),\n",[49,196,198],{"class":51,"line":197},7,[49,199,200],{"class":99},"});\n",[49,202,204],{"class":51,"line":203},8,[49,205,152],{"emptyLinePlaceholder":151},[49,207,209,211,214,217,220,223,225,228],{"class":51,"line":208},9,[49,210,158],{"class":95},[49,212,213],{"class":99}," { ",[49,215,216],{"class":161},"text",[49,218,219],{"class":99}," } ",[49,221,222],{"class":95},"=",[49,224,168],{"class":95},[49,226,227],{"class":55}," generateText",[49,229,174],{"class":99},[49,231,233,236,239,242,245],{"class":51,"line":232},10,[49,234,235],{"class":99},"  model: ",[49,237,238],{"class":55},"openai",[49,240,241],{"class":99},"(",[49,243,244],{"class":59},"\"gpt-4o\"",[49,246,247],{"class":99},"),\n",[49,249,251,254,257,260,263],{"class":51,"line":250},11,[49,252,253],{"class":99},"  tools: ",[49,255,256],{"class":95},"await",[49,258,259],{"class":99}," mcp.",[49,261,262],{"class":55},"tools",[49,264,265],{"class":99},"(),\n",[49,267,269,272,275],{"class":51,"line":268},12,[49,270,271],{"class":99},"  prompt: ",[49,273,274],{"class":59},"\"How much have my agents paid this week, and did any payments fail?\"",[49,276,277],{"class":99},",\n",[49,279,281],{"class":51,"line":280},13,[49,282,200],{"class":99},[49,284,286],{"class":51,"line":285},14,[49,287,152],{"emptyLinePlaceholder":151},[49,289,291,293,295,298],{"class":51,"line":290},15,[49,292,256],{"class":95},[49,294,259],{"class":99},[49,296,297],{"class":55},"close",[49,299,300],{"class":99},"();\n",[35,302,304],{"id":303},"_3-observe-the-payments-your-agent-makes","3. Observe the payments your agent makes",[10,306,307,308,310],{},"Route model\u002Ftool HTTP through the proxy with a drop-in ",[22,309,32],{}," so every x402 challenge and\npayment is recorded:",[40,312,314],{"className":86,"code":313,"language":88,"meta":45,"style":45},"import { createProxyFetch } from \"@402report\u002Fsdk\";\nimport { createOpenAI } from \"@ai-sdk\u002Fopenai\";\n\nconst openai = createOpenAI({\n  apiKey: process.env.OPENAI_API_KEY!,\n  fetch: createProxyFetch({ apiKey: process.env.REPORT402_API_KEY! }),\n});\n",[22,315,316,329,342,346,360,372,388],{"__ignoreMap":45},[49,317,318,320,323,325,327],{"class":51,"line":52},[49,319,96],{"class":95},[49,321,322],{"class":99}," { createProxyFetch } ",[49,324,109],{"class":95},[49,326,143],{"class":59},[49,328,115],{"class":99},[49,330,331,333,336,338,340],{"class":51,"line":118},[49,332,96],{"class":95},[49,334,335],{"class":99}," { createOpenAI } ",[49,337,109],{"class":95},[49,339,128],{"class":59},[49,341,115],{"class":99},[49,343,344],{"class":51,"line":133},[49,345,152],{"emptyLinePlaceholder":151},[49,347,348,350,353,355,358],{"class":51,"line":148},[49,349,158],{"class":95},[49,351,352],{"class":161}," openai",[49,354,165],{"class":95},[49,356,357],{"class":55}," createOpenAI",[49,359,174],{"class":99},[49,361,362,365,368,370],{"class":51,"line":155},[49,363,364],{"class":99},"  apiKey: process.env.",[49,366,367],{"class":161},"OPENAI_API_KEY",[49,369,191],{"class":95},[49,371,277],{"class":99},[49,373,374,377,380,382,384,386],{"class":51,"line":177},[49,375,376],{"class":99},"  fetch: ",[49,378,379],{"class":55},"createProxyFetch",[49,381,186],{"class":99},[49,383,72],{"class":161},[49,385,191],{"class":95},[49,387,194],{"class":99},[49,389,390],{"class":51,"line":197},[49,391,200],{"class":99},[10,393,394],{},"402.report is non-custodial — it observes x402 activity, it never holds or settles funds.",[396,397,398],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":45,"searchDepth":118,"depth":118,"links":400},[401,402,403],{"id":37,"depth":118,"text":38},{"id":82,"depth":118,"text":83},{"id":303,"depth":118,"text":304},"Route your Vercel AI SDK agent's HTTP through 402.report and expose its x402 spend as MCP tools — set one API key.","md","Vercel AI SDK MCP, AI SDK x402, createMCPClient 402.report, ai sdk agent spend, agentic payments","\u002Fvercel.svg",{},20,"\u002Fintegrations\u002Fvercel-ai-sdk",{"title":5,"description":404},"integrations\u002Fvercel-ai-sdk","6tBpCiFcmzsgOoXhjwl_upZ_BGmgN4nysJeVGUGaCNY",1784841652774]