MCP Bling
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Blinglist my products"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Bling
Servidor MCP (Model Context Protocol) remoto que expõe a API v3 do Bling a agentes de IA — multi-tenant, stateless e rodando na edge com Cloudflare Workers.
Stack: TypeScript · @modelcontextprotocol/sdk · Cloudflare Workers · Hono · Zod
Ferramenta de desenvolvimento/debug: o time aponta o MCP para a conta de qualquer cliente (passando o access_token daquele cliente) e trabalha com dados reais — NF-e, etiquetas, particularidades — direto de um assistente de IA, sem o cliente precisar reautenticar nada.
Destaques de engenharia
🔑 Modelo read-through de token — o Worker é stateless e nunca guarda nem renova credenciais. Decisão deliberada: o Bling rotaciona o
refresh_tokena cada refresh, então renovar aqui invalidaria o token do app em produção do cliente. O MCP só repassa umaccess_tokenjá válido.🔒 Somente-leitura por padrão — as tools de escrita nem aparecem para o agente; habilitar escrita exige um header explícito, e há um kill-switch global (
FORCE_READ_ONLY) no Worker.🧩 CRUD genérico tipado — 6 tools cobrem ~30 módulos do Bling (produtos, pedidos, NF-e, estoque, financeiro…) via um enum
recurso, em vez de dezenas de tools redundantes. Uma "escotilha" (bling_request) cobre sub-rotas especiais.☁️ Edge nativo — deploy global em Cloudflare Workers, transporte Streamable HTTP, custom domain e observabilidade habilitada.
Related MCP server: blip-mcp
Sumário
Transporte: Streamable HTTP (
/mcp)Auth do chamador: service token compartilhado (
Authorization: Bearer …)Token do cliente: header
X-Bling-Access-Token(pass-through, somente leitura — o MCP nunca renova)Stateless: sem Durable Objects, sem KV, sem credenciais do Bling no Worker
Produção:
https://mcp-bling.bconnector.com.br— endpoint MCP em…/mcp.
Modelo de auth
A API v3 do Bling é OAuth 2.0 (a apikey da v2 foi desativada em ago/2024). Cada app de vocês
já guarda e renova o token de cada cliente. O MCP não gerencia token nenhum: o chamador envia
um access_token válido e o MCP só o repassa para a API do Bling.
você (Claude Code) ──(Bearer SERVICE_TOKEN + X-Bling-Access-Token)──► MCP Worker ──► API Bling do clientePor que o MCP não renova o token
O Bling rotaciona o refresh_token a cada refresh. Como cada app de vocês tem a própria cópia
do token do cliente, se o MCP renovasse, invalidaria o token do app em produção daquele cliente.
Por isso o MCP é read-through: recebe um access_token já válido (vence em ~6h) e nunca renova.
Quem renova continua sendo o app dono do token.
Endpoints
Método | Rota | Auth | Descrição |
GET |
| — | Landing/health |
POST |
|
| Endpoint MCP (Streamable HTTP) |
Arquivos
Arquivo | Papel |
| Worker: valida o service token e monta o handler MCP por requisição |
| Tools MCP (CRUD genérico por |
|
|
Setup
npm install
npx wrangler secret put SERVICE_TOKEN # token compartilhado entre quem usa o MCP
npm run deployPara dev local: copie .dev.vars.example para .dev.vars e preencha o SERVICE_TOKEN.
Uso (Claude Code / VS Code)
Pegue o access_token vivo do cliente-alvo (aquele que o app daquele cliente já usa) e configure:
{
"mcpServers": {
"bling": {
"type": "http",
"url": "https://mcp-bling.bconnector.com.br/mcp",
"headers": {
"Authorization": "Bearer ${BLING_SERVICE_TOKEN}",
"X-Bling-Access-Token": "${BLING_ACCESS_TOKEN}"
}
}
}
}Use
${...}para o Claude Code expandir variáveis de ambiente — assim você não commita segredo. DefinaBLING_SERVICE_TOKEN(o service token) eBLING_ACCESS_TOKEN(o token do cliente do momento) no ambiente. Oaccess_tokenvence em ~6h; quando expirar, atualize a env var com um novo (pego do app daquele cliente) e reconecte (/mcp).
Testar no Inspector: npx @modelcontextprotocol/inspector → Transport Streamable HTTP,
URL …/mcp, e em Headers adicione Authorization: Bearer <SERVICE_TOKEN> e
X-Bling-Access-Token: <token>.
Tools disponíveis
São 6 tools: 5 genéricas tipadas (CRUD) parametrizadas pelo recurso, + uma escotilha.
Tool | Descrição |
| Lista (paginado) registros de um recurso, com |
| Detalhe de um registro por ID |
| Cria um registro (POST) |
| Atualiza um registro (PUT, ou PATCH com |
| Remove um registro (DELETE) |
| Escotilha: sub-rotas/endpoints especiais ( |
O parâmetro recurso é um enum que cobre ~30 módulos do Bling (produtos, pedidos-vendas,
pedidos-compras, contatos, contas-pagar, contas-receber, contas-contabeis, nfe, estoques,
depositos, empresas, categorias-produtos, categorias-receitas-despesas, canais-venda,
formas-pagamentos, naturezas-operacoes, logisticas[-objetos/-remessas/-servicos],
ordens-producao, produtos-[estruturas/fornecedores/variacoes], propostas-comerciais,
situacoes[-modulos/-transicoes], contratos, usuarios). O mapa recurso→path está em src/tools.ts.
Modo somente-leitura (padrão)
Você opera sobre a conta de produção do cliente, então o MCP é somente-leitura por padrão:
expõe apenas bling_listar, bling_obter e bling_request (limitado a GET). As tools de escrita
nem aparecem.
Para habilitar escrita (bling_criar/bling_atualizar/bling_excluir e métodos não-GET no
bling_request), envie o header na conexão:
X-Bling-Allow-Write: trueKill-switch global: defina o secret/var FORCE_READ_ONLY=true no Worker para travar tudo em
somente-leitura, ignorando o header (npx wrangler secret put FORCE_READ_ONLY).
Mesmo com escrita habilitada:
bling_criar/bling_atualizar/bling_excluiralteram dados reais do cliente. Use com cuidado.
Hardening (próximos passos sugeridos)
Chave por dev/app em vez de service token único (auditoria/revogação).
Espelho de token central (Supabase): cada app grava o
access_tokenatual numa tabela read-only; o MCP passa a ler porX-Tenant-Ide você escolhe o cliente sem colar token na mão.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dgsidney/mcp-bling'
If you have feedback or need assistance with the MCP directory API, please join our Discord server