ChartPane

Renderiza gráficos interativos do Chart.js e dashboards diretamente em conversas de IA.

Documentação

ChartPane

Aplicativo MCP que renderiza gráficos interativos Chart.js inline na interface do Claude. Funciona com Claude Desktop, ChatGPT, VS Code, Cursor e qualquer cliente que suporte aplicativos MCP.

Instância ao vivo: mcp.chartpane.com

Recursos

  • 9 tipos de gráficos: barra, linha, área, pizza, rosca, polarArea, bolha, dispersão, radar
  • Variantes de gráfico de barras empilhadas e horizontais
  • Grades de painéis com vários gráficos (até 4 colunas)
  • Cores personalizadas ou paleta automática de 12 cores
  • Renderização no lado do cliente — os dados do gráfico nunca são armazenados no servidor
  • Funciona com qualquer cliente compatível com MCP (Claude Desktop, ChatGPT, VS Code, Cursor)

Ferramentas

  • render_chart — Renderiza um único gráfico (barra, linha, área, pizza, rosca, polarArea, bolha, dispersão, radar, empilhado)
  • render_dashboard — Renderiza um layout de grade com vários gráficos

Início Rápido

Adicione ChartPane ao Claude Desktop via Configurações > Conectores > Adicionar conector personalizado:

https://mcp.chartpane.com/mcp

Ou use mcp-remote (requer Node.js):

{
  "mcpServers": {
    "chartpane": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.chartpane.com/mcp"]
    }
  }
}

Exemplos de Uso

1. Gráfico de barras

Prompt: "Crie um gráfico de barras da receita trimestral: Q1 $50k, Q2 $80k, Q3 $120k, Q4 $95k"

Claude chama render_chart com:

{
  "type": "bar",
  "title": "Quarterly Revenue",
  "data": {
    "labels": ["Q1", "Q2", "Q3", "Q4"],
    "datasets": [{ "label": "Revenue ($k)", "data": [50, 80, 120, 95] }]
  }
}

Um gráfico de barras interativo é renderizado inline na conversa.

2. Gráfico de pizza

Prompt: "Mostre a participação de mercado dos navegadores como um gráfico de pizza: Chrome 65%, Safari 19%, Firefox 8%, Edge 5%, Outros 3%"

Claude chama render_chart com:

{
  "type": "pie",
  "title": "Browser Market Share",
  "data": {
    "labels": ["Chrome", "Safari", "Firefox", "Edge", "Other"],
    "datasets": [{ "label": "Share", "data": [65, 19, 8, 5, 3] }]
  }
}

Cada fatia recebe uma cor distinta da paleta integrada.

3. Painel com vários gráficos

Prompt: "Crie um painel com usuários ativos mensais como um gráfico de linha e inscrições por canal como um gráfico de barras"

Claude chama render_dashboard com:

{
  "title": "Growth Dashboard",
  "charts": [
    {
      "type": "line",
      "title": "Monthly Active Users",
      "data": {
        "labels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
        "datasets": [{ "label": "MAU", "data": [12000, 15000, 18000, 22000, 28000, 35000] }]
      }
    },
    {
      "type": "bar",
      "title": "Signups by Channel",
      "data": {
        "labels": ["Organic", "Referral", "Paid", "Social"],
        "datasets": [{ "label": "Signups", "data": [4500, 3200, 2800, 1500] }]
      }
    }
  ],
  "columns": 2
}

Ambos os gráficos são renderizados lado a lado em um layout de grade.

Auto-hospedagem

ChartPane roda em Cloudflare Workers.

npm install
cp .dev.vars.example .dev.vars    # Configure secrets (optional)
npm run dev                        # Local dev server (port 8787 + sandbox on 3456)
npm run deploy                     # Deploy to Cloudflare Workers

Você precisará criar seu próprio namespace KV e banco de dados D1 — veja os comentários em wrangler.jsonc.

Desenvolvimento

npm run dev        # wrangler dev + sandbox dev server (localhost:3456)
npm run build      # Type-check (tsc --noEmit) + bundle UI
npm test           # Run all tests (vitest)
npm run test:watch # Watch mode

Arquitetura

As chamadas de ferramentas do Claude passam por um servidor MCP leve que valida a entrada e retorna structuredContent. A interface no lado do navegador transforma a entrada em configurações do Chart.js e renderiza no canvas. Toda a lógica compartilhada (tipos, validação, cores, configuração) fica em shared/.

Claude tool call → server.ts (validate) → structuredContent
    → mcp-app.ts (browser) → buildChartConfig() → Chart.js canvas

Privacidade

ChartPane registra apenas metadados de solicitação (tipo de gráfico, título, timestamp). Os valores dos dados do gráfico nunca são armazenados. Os gráficos são renderizados inteiramente no lado do cliente no seu navegador. Política completa: chartpane.com/privacy

Suporte

Licença

MIT