DocsOverviewGetting startedPricingAuthentication & conceptsPostsDiagramsBrand & assetsTools & batchErrorsMCP server

MCP server

Connect Claude Code, VS Code, Cursor, a Google ADK agent, or any Model Context Protocol client directly to Capci's generation tools — diagrams, posts, charts, and more — as native tool calls.

Live remote endpoint — nothing to run yourself

Capci hosts the MCP server for you. Point any MCP client at:

https://capci-mcp-990063403257.asia-south1.run.app/mcp

Add your Developer-plan x-api-key header and you're connected — no install, no server to keep running.

What it can do

  • Generate branded posts from a one-line prompt — 20 built-in formats, auto-picked or pinned explicitly.
  • Generate diagrams — architecture, flowchart, sequence, class, ER, mindmap, Gantt — as a conversational resource you keep refining with plain English.
  • Animate a diagram into a reveal GIF.
  • Generate data charts — bar, line, donut, KPI tiles — directly from numbers, no prompt.
  • Restyle or resize anything for free — re-theme/resize a prior result without spending another generation call.
  • Configure a brand once and have every generation apply it automatically, with a per-call unbranded escape hatch.
  • Generate brand-kit assets — social covers, banners, cards — deterministically from your saved brand.
  • Generate a logo mark from a description — the one pay-per-use tool; everything above is unlimited on the Developer plan.

Tools

All eleven are unlimited on an active Developer plan except create_logo. Fields marked * are required.

ToolWhat it doesKey inputs
create_postGenerate a branded social/marketing image from a prompt. Returns a PNG plus reusable content.prompt*, format, size, theme, style, brand, unbranded
restyle_contentFree re-theme/resize of a prior create_post/create_chart result — no new generation.format*, content*, size, theme, brand
create_diagramGenerate a diagram from a prompt. Returns a durable id to refine/restyle/animate later.prompt*, type, size, theme, nodeStyle, transparent, brand, unbranded
refine_diagramUpdate a diagram by id. With a prompt: content edit. Without: free instant restyle.id*, prompt, size, theme, nodeStyle, transparent, colors, brand, unbranded
animate_diagramTurn an existing diagram into a reveal GIF. Blocking — waits for completion.id*, anim, speed
create_chartGenerate a bar/line/donut/KPI chart directly from data — no prompt, deterministic.chartType*, series/slices/tiles, theme, size
set_brandConfigure the saved brand profile every later create_* call inherits by default.name, handle, tagline, logo, colors
list_brandkit_assetsList available brand-kit asset types (banners, covers, cards) and their ids.(none)
create_brandkit_assetGenerate a specific brand-kit asset from the saved brand — free, no prompt.id*, theme, tagline, pills
create_logo
Pay-per-use
Generate a logo mark from a description.prompt*
list_post_layoutsList post layout ids/schemas usable with create_post's format field.(none)

Authentication

Every call needs a Capci Developer Plan API key (Dashboard → Account → Developer, shown once at creation). The MCP server itself has no login — you pass the key when you connect your client, and it's forwarded on every tool call. A key without an active Developer plan can still discover the tools, but every call fails with a clear plan_required error.

x-api-key: capci_your_api_key_here

Connect a client

All configs below use the live remote endpoint — https://capci-mcp-990063403257.asia-south1.run.app/mcp.

Claude Code

claude mcp add --transport http capci https://capci-mcp-990063403257.asia-south1.run.app/mcp \
  --header "x-api-key: YOUR_KEY"

VS Code

Add to .vscode/mcp.json (workspace) or via Command Palette → "MCP: Open User Configuration". Note the top-level key is servers, not mcpServers.

{
  "servers": {
    "capci": {
      "type": "http",
      "url": "https://capci-mcp-990063403257.asia-south1.run.app/mcp",
      "headers": { "x-api-key": "${input:capci-api-key}" }
    }
  },
  "inputs": [
    { "type": "promptString", "id": "capci-api-key", "description": "Capci API key", "password": true }
  ]
}

Cursor

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project). Cursor infers HTTP transport from the presence of url.

{
  "mcpServers": {
    "capci": {
      "url": "https://capci-mcp-990063403257.asia-south1.run.app/mcp",
      "headers": { "x-api-key": "YOUR_KEY" }
    }
  }
}

Google ADK (Python)

Run with CAPCI_MCP_INLINE_IMAGES=0 for agent hosts — the default inline base64 images will blow past a model's token limit on repeated calls.

from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams

capci_tools = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://capci-mcp-990063403257.asia-south1.run.app/mcp",
        headers={"x-api-key": "YOUR_KEY"},
    ),
)

root_agent = LlmAgent(
    model="gemini-2.5-flash",
    name="capci_agent",
    tools=[capci_tools],
)

Any other MCP client works the same way — this is a standard Streamable HTTP server: point it at the /mcp URL above and add an x-api-key header.

Code sample (JS/TS, official SDK)

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';

const transport = new StreamableHTTPClientTransport(
  new URL('https://capci-mcp-990063403257.asia-south1.run.app/mcp'),
  { requestInit: { headers: { 'x-api-key': process.env.CAPCI_API_KEY } } },
);
const client = new Client({ name: 'my-app', version: '1.0.0' });
await client.connect(transport);

// Create a diagram
const diagram = await client.callTool({
  name: 'create_diagram',
  arguments: {
    prompt: 'Users hit a load balancer, which fans out to two API servers backed by a database and a cache.',
    type: 'architecture',
    theme: 'dark',
  },
});

const meta = JSON.parse(diagram.content.find((b) => b.type === 'text' && b.text.startsWith('{'))?.text || '{}');
console.log('Diagram id:', meta.id);

// Refine it — same id, plain-English follow-up
await client.callTool({
  name: 'refine_diagram',
  arguments: { id: meta.id, prompt: 'Add a CDN in front of the load balancer.' },
});

await client.close();

Raw API sample

For integrating from a language without an MCP SDK, or to see the wire format directly: initialize, acknowledge, then call a tool. x-api-key only needs to be present on the tool-call request — discovery works without it.

# 1) Initialize — establishes a session, returns an Mcp-Session-Id header
curl -si -X POST https://capci-mcp-990063403257.asia-south1.run.app/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": { "name": "my-client", "version": "1.0.0" }
    }
  }'
# → look for the "mcp-session-id" response header, save it as $SID

# 2) Acknowledge (required by the protocol before any tool call)
curl -s -X POST https://capci-mcp-990063403257.asia-south1.run.app/mcp \
  -H "mcp-session-id: $SID" \
  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'

# 3) Call a tool
curl -s -X POST https://capci-mcp-990063403257.asia-south1.run.app/mcp \
  -H "mcp-session-id: $SID" -H "x-api-key: YOUR_KEY" \
  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 2, "method": "tools/call",
    "params": { "name": "create_chart", "arguments": {
      "chartType": "bar", "title": "Quarterly Signups",
      "series": [{"label":"Q1","value":120},{"label":"Q2","value":210}]
    }}
  }'