[{"data":1,"prerenderedAt":440},["ShallowReactive",2],{"guide-\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fgemini":3,"guides-all":371},{"id":4,"title":5,"body":6,"category":361,"description":362,"extension":363,"icon":364,"meta":365,"navigation":366,"order":210,"path":367,"seo":368,"stem":369,"__hash__":370},"guides\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fgemini.md","Gemini Code Assist \u002F Gemini CLI",{"type":7,"value":8,"toc":353},"minimark",[9,14,23,28,53,57,63,103,106,120,127,131,134,141,155,243,250,254,257,263,270,275,290,294,308,317,326,330,349],[10,11,13],"h1",{"id":12},"gemini","Gemini",[15,16,17,18,22],"p",{},"Google's Gemini Code Assist (VS Code\u002FIntelliJ extension) and the standalone ",[19,20,21],"code",{},"gemini-cli"," both speak MCP.",[24,25,27],"h2",{"id":26},"prerequisites","Prerequisites",[29,30,31,47],"ul",{},[32,33,34,35,39,40,42,43,46],"li",{},"Gemini Code Assist extension installed, ",[36,37,38],"strong",{},"or"," ",[19,41,21],{}," (",[19,44,45],{},"npm install -g @google\u002Fgemini-cli",")",[32,48,49,50,46],{},"A Transactional API token (",[19,51,52],{},"tk_live_…",[24,54,56],{"id":55},"option-a-gemini-cli-one-liner","Option A — gemini-cli (one-liner)",[15,58,59,60,62],{},"If you have ",[19,61,21],{}," installed, this is the fastest path. Paste this single line in your terminal:",[64,65,70],"pre",{"className":66,"code":67,"language":68,"meta":69,"style":69},"language-bash shiki shiki-themes github-light github-dark","gemini mcp add transactional --http https:\u002F\u002Fmcp.transactional.dev --header \"Authorization=Bearer tk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n","bash","",[19,71,72],{"__ignoreMap":69},[73,74,77,80,84,87,90,94,97,100],"span",{"class":75,"line":76},"line",1,[73,78,12],{"class":79},"sScJk",[73,81,83],{"class":82},"sZZnC"," mcp",[73,85,86],{"class":82}," add",[73,88,89],{"class":82}," transactional",[73,91,93],{"class":92},"sj4cs"," --http",[73,95,96],{"class":82}," https:\u002F\u002Fmcp.transactional.dev",[73,98,99],{"class":92}," --header",[73,101,102],{"class":82}," \"Authorization=Bearer tk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n",[15,104,105],{},"Verify:",[64,107,109],{"className":66,"code":108,"language":68,"meta":69,"style":69},"gemini mcp list\n",[19,110,111],{"__ignoreMap":69},[73,112,113,115,117],{"class":75,"line":76},[73,114,12],{"class":79},[73,116,83],{"class":82},[73,118,119],{"class":82}," list\n",[15,121,122,123,126],{},"Should show ",[19,124,125],{},"transactional"," with five tools.",[24,128,130],{"id":129},"option-b-gemini-code-assist-vs-code-intellij","Option B — Gemini Code Assist (VS Code \u002F IntelliJ)",[15,132,133],{},"For the IDE extension, edit the JSON config directly.",[15,135,136,137,140],{},"Gemini Code Assist reads MCP servers from a ",[19,138,139],{},"settings.json"," file.",[15,142,143,146,147,150,151,154],{},[36,144,145],{},"Path"," — ",[19,148,149],{},"~\u002F.gemini\u002Fsettings.json"," (global) or ",[19,152,153],{},".gemini\u002Fsettings.json"," in the workspace (project-scoped).",[64,156,160],{"className":157,"code":158,"language":159,"meta":69,"style":69},"language-json shiki shiki-themes github-light github-dark","{\n  \"mcpServers\": {\n    \"transactional\": {\n      \"httpUrl\": \"https:\u002F\u002Fmcp.transactional.dev\",\n      \"headers\": {\n        \"Authorization\": \"Bearer tk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n      }\n    }\n  }\n}\n","json",[19,161,162,168,177,185,200,208,219,225,231,237],{"__ignoreMap":69},[73,163,164],{"class":75,"line":76},[73,165,167],{"class":166},"sVt8B","{\n",[73,169,171,174],{"class":75,"line":170},2,[73,172,173],{"class":92},"  \"mcpServers\"",[73,175,176],{"class":166},": {\n",[73,178,180,183],{"class":75,"line":179},3,[73,181,182],{"class":92},"    \"transactional\"",[73,184,176],{"class":166},[73,186,188,191,194,197],{"class":75,"line":187},4,[73,189,190],{"class":92},"      \"httpUrl\"",[73,192,193],{"class":166},": ",[73,195,196],{"class":82},"\"https:\u002F\u002Fmcp.transactional.dev\"",[73,198,199],{"class":166},",\n",[73,201,203,206],{"class":75,"line":202},5,[73,204,205],{"class":92},"      \"headers\"",[73,207,176],{"class":166},[73,209,211,214,216],{"class":75,"line":210},6,[73,212,213],{"class":92},"        \"Authorization\"",[73,215,193],{"class":166},[73,217,218],{"class":82},"\"Bearer tk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n",[73,220,222],{"class":75,"line":221},7,[73,223,224],{"class":166},"      }\n",[73,226,228],{"class":75,"line":227},8,[73,229,230],{"class":166},"    }\n",[73,232,234],{"class":75,"line":233},9,[73,235,236],{"class":166},"  }\n",[73,238,240],{"class":75,"line":239},10,[73,241,242],{"class":166},"}\n",[15,244,245,246,249],{},"Reload the extension (command palette → ",[36,247,248],{},"Gemini Code Assist: Reload MCP Servers","). The transactional tools appear in the chat panel.",[24,251,253],{"id":252},"use-it","Use it",[15,255,256],{},"In Gemini's chat:",[258,259,260],"blockquote",{},[15,261,262],{},"\"List my Transactional documents and tell me which is the invoice template.\"",[15,264,265,266,269],{},"Gemini calls ",[19,267,268],{},"list_documents",", asks for approval, summarizes. Then:",[258,271,272],{},[15,273,274],{},"\"Generate the invoice PDF — customer Acme Corp, amount 1280.50 €.\"",[15,276,277,278,281,282,285,286,289],{},"It will call ",[19,279,280],{},"get_document"," first (to learn the exact ",[19,283,284],{},"variables"," shape your template expects) and then ",[19,287,288],{},"generate_pdf",". The PDF URL is printed inline.",[24,291,293],{"id":292},"troubleshooting","Troubleshooting",[15,295,296,299,300,303,304,307],{},[36,297,298],{},"\"MCP server not responding\""," — Confirm ",[19,301,302],{},"https:\u002F\u002Fmcp.transactional.dev"," returns a 405 on ",[19,305,306],{},"GET"," (the stateless transport rejects non-POST). If it returns 502, our service is down — check the status page.",[15,309,310,316],{},[36,311,312,313],{},"Tools listed but every call returns ",[19,314,315],{},"unauthorized"," — Token revoked or copy-pasted with a leading\u002Ftrailing space. Regenerate from the dashboard.",[15,318,319,322,323,325],{},[36,320,321],{},"Gemini won't show MCP tools at all"," — You're on an older version. Update to the latest extension \u002F ",[19,324,21],{}," build (MCP support landed in 2025).",[24,327,329],{"id":328},"next-steps","Next steps",[29,331,332,341],{},[32,333,334],{},[36,335,336],{},[337,338,340],"a",{"href":339},"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fuse-from-ai#a-first-prompt-to-try","A first prompt to try →",[32,342,343],{},[36,344,345],{},[337,346,348],{"href":347},"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Ftools-reference","MCP tools reference →",[350,351,352],"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 pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":69,"searchDepth":170,"depth":170,"links":354},[355,356,357,358,359,360],{"id":26,"depth":170,"text":27},{"id":55,"depth":170,"text":56},{"id":129,"depth":170,"text":130},{"id":252,"depth":170,"text":253},{"id":292,"depth":170,"text":293},{"id":328,"depth":170,"text":329},"ai-mcp","Connect Transactional to Google's Gemini agents through their MCP support.","md","stars",{},true,"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fgemini",{"title":5,"description":362},"docs\u002Fguides\u002Fai-mcp\u002Fgemini","M_3rb10p_Zh4uVxBPARuENLIW6jHa_7oa7vfHlsmffo",[372,376,380,384,388,389,392,396,401,405,409,413,418,423,427,431,436],{"path":373,"title":374,"description":375,"category":361,"order":202},"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fchatgpt","ChatGPT (via Custom GPT Actions)","ChatGPT doesn't speak MCP natively yet — but you can give it the same powers through a Custom GPT pointed at the Transactional REST API.",{"path":377,"title":378,"description":379,"category":361,"order":179},"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fclaude-code","Claude Code (CLI)","Connect Transactional to Claude Code so it can read your templates and generate PDFs from your terminal.",{"path":381,"title":382,"description":383,"category":361,"order":170},"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fclaude-desktop","Claude Desktop","Connect Transactional to Claude Desktop on macOS or Windows so Claude can read your templates and generate PDFs.",{"path":385,"title":386,"description":387,"category":361,"order":187},"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fcursor","Cursor","Wire Transactional into Cursor's MCP support so you can generate PDFs from inside your editor.",{"path":367,"title":5,"description":362,"category":361,"order":210},{"path":347,"title":390,"description":391,"category":361,"order":221},"MCP tools reference","Every tool the Transactional MCP server exposes, with arguments, return shapes, and a prompt that typically triggers each one.",{"path":393,"title":394,"description":395,"category":361,"order":76},"\u002Fdocs\u002Fguides\u002Fai-mcp\u002Fuse-from-ai","Use Transactional from your AI assistant","Connect Transactional to Claude, Cursor, ChatGPT, or Gemini via MCP so your assistant can read your templates and generate PDFs directly.",{"path":397,"title":398,"description":399,"category":400,"order":170},"\u002Fdocs\u002Fguides\u002Fauthoring\u002Fdesign-for-pdf","Designing templates that survive PDF rendering","PDFs are static — drop the animations, oversample your canvas charts, lean on vectors. The rules that make a template look sharp at print resolution.","authoring",{"path":402,"title":403,"description":404,"category":400,"order":76},"\u002Fdocs\u002Fguides\u002Fauthoring\u002Fhandlebars","Handlebars cheat sheet","The exact subset of Handlebars supported in Transactional templates — variables, conditionals, loops, and what NOT to reach for.",{"path":406,"title":407,"description":408,"category":400,"order":179},"\u002Fdocs\u002Fguides\u002Fauthoring\u002Fmodeling-variables","Modeling your variables","When to make something a variable vs. inline. Keep the API contract small, your templates portable, and your integration code boring.",{"path":410,"title":411,"description":412,"category":400,"order":187},"\u002Fdocs\u002Fguides\u002Fauthoring\u002Fworking-with-ai","Working with the AI assistant","Prompts and patterns to get good templates fast — what to ask, when to iterate, when to start over.",{"path":414,"title":415,"description":416,"category":417,"order":76},"\u002Fdocs\u002Fguides\u002Fgetting-started\u002Fquickstart","Quickstart — your first PDF in 5 minutes","Sign up, design a template, render your first PDF through the API. End-to-end in five minutes.","getting-started",{"path":419,"title":420,"description":421,"category":422,"order":76},"\u002Fdocs\u002Fguides\u002Fintegrations\u002Fnode-bun","Calling \u002Fv1\u002Fgenerate from Node.js & Bun","Production-grade integration using native fetch — retries, error handling, streaming the PDF to your storage.","integrations",{"path":424,"title":425,"description":426,"category":422,"order":170},"\u002Fdocs\u002Fguides\u002Fintegrations\u002Fphp-laravel","Calling \u002Fv1\u002Fgenerate from PHP & Laravel","cURL extension, Guzzle, or Laravel's HTTP client — render PDFs with retries and proper error handling.",{"path":428,"title":429,"description":430,"category":422,"order":179},"\u002Fdocs\u002Fguides\u002Fintegrations\u002Fpython","Calling \u002Fv1\u002Fgenerate from Python","urllib (stdlib), requests, or httpx with retry — render PDFs from Django, FastAPI, or any Python service.",{"path":432,"title":433,"description":434,"category":435,"order":76},"\u002Fdocs\u002Fguides\u002Foperations\u002Fmonitoring-usage","Monitoring usage & credits","Read the dashboard gauges, set sane alerts, and decide when to top up vs. upgrade.","operations",{"path":437,"title":438,"description":439,"category":435,"order":170},"\u002Fdocs\u002Fguides\u002Foperations\u002Fstoring-pdfs","Storing & serving the generated PDF","The \u002Fv1\u002Fgenerate URL is signed and short-lived. Patterns for keeping the PDF around — your bucket, your CDN, your DB.",1780347733847]