MCP server that provides access to fundamental data of Brazilian publicly traded companies, REITs, and ETFs through the Dados B3 public API
This server presents a mixed quality profile. Strengths: all 8 tools have excellent Portuguese-language descriptions (100-400+ chars each) with clear usage guidance, parameter purposes, and methodological context. All tools are read-only, correctly marked, and accept API key handling via environment variable (secure pattern). Naming is mostly verb-noun consistent (listar_empresas, indicadores_anuais, fatos_contabeis, etc.). Weaknesses: (1) Input schemas are visible and typed for most tools, but missing entirely for the tool metadata handshake / capabilities negotiation, schema completeness varies. (2) Parameters like 'chave_api' accept free-form strings rather than using server-side secret injection (environment variable fallback exists but parameter exposure remains). (3) Output schemas are not explicitly documented in the source, return types are inferred from API responses, not formally declared to the MCP client. (4) No error handling guidance in descriptions (pattern:recovery-guide missing). (5) screener tool accepts an open 'filtros' dict with no schema for the nested structure, only free-text description of valid keys. (6) No tool annotations (readOnlyHint, idempotentHint) visible in the code, though all tools ARE read-only. Tool definitions are explicit and registered via @mcp.tool() decorators, so no inferred-tool penalty applies.
Proventos em dinheiro pagos por uma empresa da B3, com dividend yield. Devolve cada provento (dividendo ou JCP) com valor por ação, data-com e data de aprovação, mais o resumo por ano e o dividend yield dos últimos 12 meses. A fonte é a própria B3, e o registro guarda o tipo original declarado por ela, não só o normalizado. Parâmetros: ticker — código da ação na B3, em maiúsculas e com o dígito da classe. Exemplos: "WEGE3", "PETR4", "SANB11". Veja `listar_empresas`. chave_api — chave do Dados B3. Dispensável para WEGE3, aberta como degustação; necessária para as demais. Deixe "" para usar a variável de ambiente DADOS_B3_API_KEY, quando existir. Ausência de provento e ausência de informação são coisas diferentes aqui: a resposta distingue "a B3 respondeu que não houve" de "não conseguimos perguntar", em vez de devolver zero para os dois casos.
Contas contábeis padronizadas de uma empresa da B3, com a origem de cada número. Devolve, por período: receita, EBIT, lucro líquido, patrimônio líquido, caixa, dívida bruta e dívida líquida, entre outras — e, junto de cada valor, o código da conta CVM de onde ele saiu, para auditoria. Parâmetros: ticker — código da ação na B3, em maiúsculas e com o dígito da classe. Exemplos: "WEGE3", "PETR4", "SANB11". Veja `listar_empresas`. trimestral — escolhe a granularidade da série, e só isso. False (padrão) devolve os exercícios ANUAIS, vindos dos formulários DFP; True devolve os TRIMESTRES, vindos dos ITR. Não é um filtro: os dois modos cobrem o mesmo histórico, muda apenas o período de cada linha. chave_api — chave do Dados B3. Dispensável para WEGE3, aberta como degustação; necessária para as demais. Deixe "" para usar a variável de ambiente DADOS_B3_API_KEY, quando existir.
Série anual de indicadores fundamentalistas de uma empresa da B3. Cobre de 2010 até o último exercício publicado e devolve, por ano: ROIC, ROE, margens (bruta, EBIT e líquida), crescimento de receita e de lucro, e dívida líquida/EBITDA. Para saber como cada um é calculado, chame `metodologia`. Parâmetros: ticker — código da ação na B3, em maiúsculas e com o dígito da classe. Exemplos: "WEGE3" (ordinária), "PETR4" (preferencial), "SANB11" (unit). Use `listar_empresas` para descobrir os disponíveis. chave_api — chave do Dados B3. Dispensável para WEGE3, aberta como degustação; necessária para qualquer outra empresa. Deixe "" para usar a variável de ambiente DADOS_B3_API_KEY, quando existir. Sem chave válida a resposta vem com o campo `erro` explicando como obter uma.
screener tool accepts 'filtros' parameter as an open object with no JSON Schema constraint, only free-text description of valid keys (roic, roe, etc.). LLMs cannot validate allowed filter combinations and will hallucinate invalid keys.
API key (chave_api) exposed as a tool parameter on 7 of 8 tools. Although environment variable fallback exists (DADOS_B3_API_KEY), agent traces will log the passed value, leaking credentials into logs and prompt history. Should use only server-side injection.
No error handling guidance in tool descriptions. Descriptions mention that invalid API keys return an 'erro' field, but do not tell the LLM what to do next (retry? ask user for a key? suggest free tier?). Pattern:recovery-guide not implemented.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 73 | 2026-07-28+ | v2 |
Lista as companhias abertas brasileiras cobertas pelo Dados B3. Devolve, para cada empresa: nome, CNPJ, código CVM e ticker principal, mais a contagem total. É o ponto de partida para descobrir qual ticker passar nas outras ferramentas. Sem parâmetros. Gratuito — não exige chave. A contagem não fica escrita nesta descrição de propósito: o universo cresce quando a CVM publica, e um número congelado aqui envelheceria sem ninguém ver. Para o número de hoje, chame `saude`.
Múltiplos de avaliação ponto-no-tempo de uma empresa da B3. Devolve P/L, P/VP e EV/EBITDA por exercício, mais P/L TTM por trimestre. O preço usado é o do primeiro pregão A PARTIR da data real de publicação do balanço (na maioria dos casos, o próprio dia da entrega) — não o fechamento do exercício, que ninguém conhecia naquela data. É essa escolha que elimina o look-ahead e permite usar a série em backtest sem contaminar o passado. Parâmetros: ticker — código da ação na B3, em maiúsculas e com o dígito da classe. Exemplos: "WEGE3", "PETR4", "SANB11". Veja `listar_empresas`. chave_api — chave do Dados B3. Dispensável para WEGE3, aberta como degustação; necessária para as demais. Deixe "" para usar a variável de ambiente DADOS_B3_API_KEY, quando existir.
Balanços que a empresa republicou depois, com as duas versões lado a lado. Quando uma companhia reapresenta um exercício já publicado, o número antigo costuma sumir das bases — aqui ele fica. Devolve, por conta afetada, o valor da versão original e o da versão nova, com as datas das duas publicações. Serve para auditar mudança de histórico e para saber se um backtest rodou sobre números que depois foram revistos. Parâmetros: ticker — código da ação na B3, em maiúsculas e com o dígito da classe. Exemplos: "WEGE3", "PETR4", "SANB11". Veja `listar_empresas`. chave_api — chave do Dados B3. Dispensável para WEGE3, aberta como degustação; necessária para as demais. Deixe "" para usar a variável de ambiente DADOS_B3_API_KEY, quando existir.
Scores de qualidade e de valor de uma empresa da B3, critério por critério. Devolve o Piotroski F-Score (0 a 9) com **cada um dos nove critérios aberto**, dizendo qual passou e com que número, e o critério de Graham. O objetivo é poder discordar do score: você vê a conta, não só a nota. Parâmetros: ticker — código da ação na B3, em maiúsculas e com o dígito da classe. Exemplos: "WEGE3", "PETR4", "SANB11". Veja `listar_empresas`. chave_api — chave do Dados B3. Dispensável para WEGE3, aberta como degustação; necessária para as demais. Deixe "" para usar a variável de ambiente DADOS_B3_API_KEY, quando existir.
Filtra o universo inteiro da B3 por faixas de indicadores. Parâmetros: filtros — dicionário de faixas. Cada chave é o nome de um indicador seguido de `_min` ou `_max`, e o valor é o número da faixa. Frações, não porcentagens: ROIC de 15% é 0.15. Exemplo: {"roic_min": 0.15, "dl_ebitda_max": 2} Indicadores aceitos: roic, roe, margem_bruta, margem_ebit, margem_liquida, dl_ebitda, cresc_receita_1a, cresc_receita_5a_cagr, piotroski. Chame SEM filtros para receber o cardápio: a lista de indicadores válidos e exemplos de uso. ano — exercício alvo. 0 (padrão) usa, para cada empresa, o último ano com dado disponível
Output schemas are not formally documented. Return types are only described in prose (e.g., 'Devolve, para cada empresa: nome, CNPJ, código CVM e ticker principal'). LLMs cannot parse the expected response structure to plan downstream tool calls or extract fields reliably.
No tool annotations visible (readOnlyHint, idempotentHint, destructiveHint). All tools are read-only, but this is not signaled to the MCP client via metadata. Clients cannot determine safe retry semantics without explicit hints.
screener tool lacks pagination or result limit declaration. Descriptions mention 'default 100' for results, but no max or page/offset params visible in the schema. Unbounded result sets risk context window exhaustion.