A pilha MCP
Um guia de campo de uma competição onde cada servidor foi executado nas mesmas tarefas reais (uma postagem social 1080x1350 em estilo riso; perguntas espaciais reais verificadas por uma consulta independente). Apenas tiers gratuitos.
Regra: apenas gratuito. Nunca faça upgrade, inicie um teste gratuito ou insira um cartão em nenhum desses sem que o proprietário autorize. Uma barreira de pagamento é uma descoberta, não uma compra.
Regra: nada publica. Orshot tem um parâmetro publish que publica em redes sociais; Canva e
Figma podem compartilhar. Nunca os use sem permissão. A saída é um arquivo local que um humano revisa.
Design / arte / marca — escolha pela tarefa
| Tarefa | Use | Por que / custo |
|---|---|---|
| Peça de marketing finalizada a partir de um briefing, com melhor aparência | canva create-design -> resize-design -> export-design | Melhor resultado visual do conjunto. ~6 designs de IA/mês gratuitos (um design = ~15% da cota; reinicia mensalmente). Edite com edit-design em vez de regenerar. |
| Postagem / cartão / pôster riso, ilimitado, números exatos | inkscape MCP inkscape_vector construct_svg (params.header + params.body) -> inkscape_render export_preview | Renderiza padrões de meio-tom reais, granulação feTurbulence, sobreposição multiply, desalinhamento. ~5s, headless, ilimitado. Padrão para tudo que for repetível; mantenha seu corpo SVG como arquivo de modelo. |
| Layout vetorial preciso em um arquivo de design | penpot execute_code -> export_shape | Gratuito, ilimitado. Uma aba do Penpot com o arquivo deve estar aberta (headless OK) ou toda chamada falha. |
| Mesmo, mas no Figma para alguém pegar | figma create_new_file + use_figma | Grátis Iniciante = ~20 chamadas contadas/mês, 3 arquivos. Planeje. Não há createImageAsync/setPluginData. |
| Modelo reutilizável com variáveis (cartão OG, série de posts no IG) | orshot | ~100 renderizações/mês gratuitas. A cor da forma vai em style.fill (backgroundColor pinta de preto). As URLs de saída são públicas e imprevisíveis. |
| Rascunho de ilustração com IA, gratuito | huggingface dynamic_space -> mcp-tools/Qwen-Image, aspect_ratio:"3:4" | Mais próximo do riso entre os modelos gratuitos. ~6 imagens/dia (cota ZeroGPU). 1.6MP; pinta rabiscos de assinatura falsos nos cantos — corte. Os finais vão para um mecanismo pago (make-art). |
| Recorte PNG transparente | huggingface space_name: Upsampler/birefnet-background-removal, {"image":"<URL pública>"} | ~5s. Spaces aceitam apenas URLs públicas, nunca caminhos locais. |
| Raster colorido -> SVG (logotipos, marcas) | shapesoda vectorize {image_base64, image_type:"artwork", colors:8, format:["svg"]} | ~10/dia gratuitos. O link de download expira em 24h — baixe imediatamente. Remova caminhos #ff00ff perdidos nas bordas do recorte. Renderize o SVG em 4x = ampliação gratuita para arte plana. |
| SVG de uma tinta (carimbo, estêncil, chapa de contorno) | svg-tracer trace_bitmap_to_svg (caminhos absolutos) | Potrace local, ilimitado, 0.1s. |
| Gráfico a partir de números reais | antv-chart | Opção de textura desenhada à mão. Envia seus dados para um serviço de renderização de terceiros e retorna uma URL pública — apenas números públicos. O título vazio do eixo x imprime "category". |
| Tipo 3D / maquete de produto | Blender MCP (precisa do aplicativo em execução) | Inicie o Blender com o add-on, depois adicione o servidor ad hoc (uvx mcp-for-blender@<pinned>) com DISABLE_TELEMETRY=true. A telemetria está LIGADA por padrão — sempre desative. |
| Finalização raster (meio-tom de jornal, edição de foto) | GIMP MCP (precisa do gimp-console em execução) | Para GIMP 3.2 headless: gimp-console -i --batch-interpreter=python-fu-eval -b "p=Gimp.get_pdb().lookup_procedure('plug-in-mcp-server'); c=p.create_config(); c.set_property('run-mode', Gimp.RunMode.NONINTERACTIVE); p.run(c)" &. O padrão de jornal é linhas — configure circle. Apenas cores hex. Feche o gimp-console depois. |
| HTML -> PNG cartão, nada sai da máquina | Satori MCP, corrigido | A versão original envia toda imagem para armazenamento público em nuvem; corrija para salvar localmente. Instale com um lockfile congelado. |
Cada número em uma peça vem da fonte ao vivo (curl), nunca digitado. Verifique contraste de cores de destaque em fundos claros (um vermelho médio sobre creme pode ser ~3.8:1, o que falha em texto pequeno; escureça abaixo de ~24px).
Descartados (não retestar): Pollinations (marca d'água, baixa resolução), Stability (teste único), fal/Replicate/Together (sem tier gratuito sem cartão), Krita MCP (sem texto), tldraw e Excalidraw MCP apps (desenham apenas dentro de uma interface de chat), Bannerbear/Placid (testes), Postiz (sem nuvem gratuita, precisa Docker), Remotion MCP (apenas documentação), Buffer (CAPTCHA no cadastro).
Dados / espaciais
| Tarefa | Use | Armadilhas |
|---|---|---|
| SQL + espacial sobre parquet/csv/geojson/.duckdb | duckdb MCP (em memória, espacial carregado) | ST_Transform(ST_Point(lon,lat),'EPSG:4326','EPSG:26915') retorna POINT(inf inf) silenciosamente, então filtros de distância contam 0. Passe always_xy := true. Colunas de avaliação são frequentemente VARCHAR (max classifica como texto); preços de venda podem ter um placeholder 999.999.999. Se o servidor roda read-write, pode COPY TO em qualquer lugar: anexe seus arquivos reais READ_ONLY. |
| Camada ArcGIS FeatureServer ao vivo | duckdb ST_Read('<FeatureServer>/0/query?where=...&outFields=...&orderByFields=OBJECTID&f=geojson&resultOffset=N') | Trunca silenciosamente no maxRecordCount do servidor (geralmente 2.000) sem aviso. Verifique returnCountOnly=true primeiro, pagine com resultOffset + orderByFields, e nomeie colunas no UNION ALL (uma última página vazia não tem nenhuma). |
| OSM / Overpass (restaurantes em um bairro...) | osm openstreetmap_search_places -> id da relação -> openstreetmap_query_bbox{within:"R..."} | Vazamentos de área por nome: o nome de um bairro pode puxar linhas de um local com o mesmo nome em outro estado. Sempre pesquise dentro do id da relação. Overpass espelha 500 com frequência; tente novamente. |
| Census ACS por endereço/trato | census census_resolve_geography{name:"<endereço>"} -> census_query_data{dataset:"acs/acs5", ...} | Retorna MOE (variáveis ...M) — relate. Precisa de uma chave CENSUS_API_KEY gratuita. |
| Renderizar um mapa PNG para ver o que construiu | maplibre render_style | Chrome headless, mapa base OpenFreeMap, sem chave. |
Descartados: gis-mcp (88 ferramentas, DuckDB cobre), o MCP oficial do Census (precisa Docker+Postgres), MCPs ArcGIS estilo crawler sem paginação, PostGIS (DuckDB cobre).
Pesquisa web / extração
| Tarefa | Use | Armadilhas |
|---|---|---|
| "Quem cuida das operações na X", pesquisa de pessoas/empresas | exa web_search_exa | Sem chave. Frequentemente encontra a página de equipe da própria empresa onde a busca genérica na web não encontra nada. |
| Leitura rápida de uma página conhecida | exa web_fetch_exa {urls:[...]} | Subsegundo a partir de seu índice — em cache e sem JS; possível desatualização. |
| Pesquisa por frase exata, scraping renderizado | firecrawl | ~1.000 créditos/mês gratuitos (scrape 1, search 2, JSON 5). A extração JSON inventa campos — confie apenas no que aparece no markdown retornado. |
| Crawl renderizado, ilimitado, e-mails ocultos pelo Cloudflare | Crawl4AI CLI crwl <url> -o markdown | Decodifica data-cfemail que o curl não pega. Lote: AsyncWebCrawler(...).arun_many. |
| Página JS sem nada instalado | curl https://r.jina.ai/<url> | ~20 req/min sem chave, 2-18s. |
- Alguns portais de cidade estão atrás de Cloudflare que nada consegue atravessar headless; sua camada REST ArcGIS geralmente tem os mesmos dados.
- Email: use o endereço que a empresa publica em seu próprio site, depois verifique o MX para esse domínio exato. Diretórios alteram domínios (uma letra removida ou adicionada é comum). A verificação no nível da caixa de entrada geralmente não é possível a partir de uma conexão residencial; a porta 25 está bloqueada.
- Descartados: Reddit MCP (403 anônimo — use
reddit-mining), browser-use (precisa de uma chave LLM paga), Browserbase (verificação por telefone). Tavily/Apify/Hunter/Brave param em um CAPTCHA no cadastro — um clique humano cada um se desejado.
Dados financeiros / governamentais
| Tarefa | Use | Armadilhas |
|---|---|---|
| Demonstrativos financeiros reportados, último trimestre | sec-edgar get_xbrl_concepts (por arquivamento) | O companyfacts da EDGAR (o que muitas ferramentas chamam de get_key_metrics) pode estar um trimestre atrasado — ele para silenciosamente no trimestre anterior. O XBRL por arquivamento obtém o mais recente corretamente. Veja sec-financials. |
| Preços, atualizações de analistas (up/downgrade), estimativas | yfinance | Trate como instável; verifique um fechamento na própria página da bolsa antes de usar um número. |
| Oportunidades SAM.gov, grants.gov, data.gov | Um MCP de dados gov sem chave | A rota SAM gratuita (a API do SAM precisa de login.gov MFA). Os resultados da pesquisa omitem NAICS/set-aside — busque cada aviso. |
| Prêmios USAspending | usaspending | Filtra por local de execução, não local do beneficiário — para "destinatários no estado X" chame spending_by_award com recipient_locations. "Award Amount" é vitalício, não ano fiscal. |
| Treasury de 10 anos etc. | sem chave curl "https://fred.stlouisfed.org/graph/fredgraph.csv?id=DGS10&cosd=<YYYY-MM-DD>" | FRED fica atrasado em relação à própria curva do Treasury em ~1 dia. |
Frameworks
- Claude Agent SDK para agentes headless agendados (ex.: um script uv que chama o
sec-edgar MCP e escreve JSON). Sob macOS launchd, não consegue ler
~/Desktopou~/Documents— coloque arquivos em outro lugar. - promptfoo para avaliações de um produto de chat: execute o prompt real do sistema através de
claude -pcom asserts determinísticos (palavras proibidas, limites de palavras). DefinaPROMPTFOO_DISABLE_TELEMETRY=1. Passe o prompt via stdin (--tools ""engole um prompt posicional). - Observable Framework para dados -> site estático (carregadores Python via
uv run). Uma tag literal de analytics<script>quebra a construção; injete-a em tempo de execução. - Scripts uv (dependências inline PEP 723) para cada pequeno pipeline.
- Descartados: Evidence.dev (agora um studio com login), Pydantic AI/DSPy para pequenos jobs (o SDK cobre), plugins pesados de fornecedores que custam milhares de tokens de contexto por sessão.
Operações
| Necessidade | Use | Nota |
|---|---|---|
| Perguntas pontuais de análise de produto ("quais eventos existem", funis) | posthog (ferramenta única exec) | Mesmos números que HogQL. Uma chave de API pessoal pode escrever flags/coortes — mantenha-a somente leitura. |
| Ler textos em um Mac | MCP do imessage | Supera o SQL bruto do chat.db: decodifica attributedBody, descarta tapbacks, resolve contatos. Nenhuma ferramenta de envio. Fixe-o — mantenedor único. |
| Documentação atual de bibliotecas | context7 | Nomeie o fornecedor na consulta ou ele resolve a biblioteca errada. |
Mantenha uma skill, não o MCP, quando o MCP for mais lento e pesado para a mesma resposta:
Vercel (seu MCP tem ~240 ferramentas incluindo buy_domain; veja vercel-api), Stripe (seu MCP
redige nomes de clientes; veja stripe-dashboard), GitHub (gh), Notion (curl; o MCP hospedado
rejeita tokens de integração), Apple Notes (apple-notes; MCPs incluem ferramentas de exclusão).
Nunca adicione o MCP de um provedor de email que tenha uma ferramenta de envio se sua regra for que um humano
aperta enviar.
Estado de autenticação
- Servidores OAuth (canva, figma, orshot): se
claude mcp listdisser "Needs authentication", execute/mcpuma vez em uma sessão interativa. Mantenha senhas e tokens no Keychain, nunca em um repositório. - Revogue qualquer concessão OAuth nas configurações desse site -> Aplicativos conectados.
Adicionando um novo MCP
Teste antes de registrar: npx -y @modelcontextprotocol/inspector --cli <cmd> --method tools/list (envolva o servidor em um script de shell — o inspector engole -e e flags do
servidor). Depois: fixe a versão ([email protected]; servidores de referência renumeram), leia a lista
de ferramentas em busca de ferramentas de envio/exclusão/publicação, verifique os padrões de telemetria e adicione uma
linha acima com sua armadilha. Descarte quando não merecer mais seu lugar.