dados-b3-mcp
This server lets AI agents access auditable fundamentals of Brazilian listed companies (B3), including banks and insurers, from 2010 to today, with a published methodology and point-in-time multiples.
List all covered companies (name, CNPJ, CVM code, ticker).
Get annual indicators: ROE, ROIC, margins, revenue/profit growth, net debt/EBITDA.
Get point-in-time multiples: P/E, P/B, EV/EBITDA and trailing P/E, priced after the real filing publication date to avoid look-ahead.
Retrieve standardized accounting facts with the source CVM account codes, in annual or quarterly granularity.
Obtain dividends, annual summaries, and 12-month dividend yield.
Compute ready-made scores: Piotroski F-Score (all nine criteria) and Graham test.
Compare restated filings side by side.
Screen the entire market by indicator ranges.
Read the full public methodology and the indicator dictionary.
Check current coverage and last ingestion via the health tool.
WEGE3 and the methodology are open without a key; other companies require a free or Pro API key.
Not the target of this MCP server; it's only used to run the server locally. Not an integration.
Click on "Deploy 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., "@dados-b3-mcpQuais os múltiplos atuais da PETR4?"
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.
Dados B3 — MCP server (Brazilian stock market, auditable fundamentals)
An MCP connector that gives your AI agent (Claude, ChatGPT, Cursor and others) access to fundamentals for Brazilian listed companies (B3) — banks and insurers included — from 2010 to today, with a fully published methodology: ROE, ROIC, margins, growth, net debt/EBITDA, point-in-time multiples (P/E, P/B, EV/EBITDA priced at the first trading session on or after the day the filing actually became public — no look-ahead, usable for backtests), dividends and dividend yield, ready-made scores (Piotroski F-Score and Graham) and a record of restated filings.
Sources: CVM open data (ODbL) and B3 (COTAHIST). Every figure carries the CVM account it came from, and nothing is published unless a suite of invariant tests passes — the balance sheet balances, the income statement reconciles, and a price never precedes the filing that justifies it.
Product and plans: https://dadosb3.com
Use 1 — remote (nothing to install, recommended)
Add this remote connector to your AI client:
https://dadosb3.com/mcp/In Claude: Settings → Connectors → add custom connector → paste the URL.
Related MCP server: brdata-mcp
Use 2 — local (stdio)
pip install -r requirements.txt
python server.py{
"mcpServers": {
"dados-b3": {
"command": "python",
"args": ["server.py"],
"env": { "DADOS_B3_API_KEY": "your_optional_key" }
}
}
}Use 3 — Docker image (one command, no local Python)
docker run -i --rm -e DADOS_B3_API_KEY=your_optional_key ghcr.io/val7h/dados-b3-mcp:latest{
"mcpServers": {
"dados-b3": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/val7h/dados-b3-mcp:latest"]
}
}
}The image is published on every push to main
(.github/workflows/publicar-imagem.yml). It exists for two reasons: a
one-command install path, and letting MCP directories actually run the server
in order to evaluate it.
Tools
Tool | What it does | Free? |
| Every covered company (name, tax ID, ticker), banks and insurers included | yes |
| ROE, ROIC, margins, growth, net debt/EBITDA — annual series from 2010 | WEGE3 yes; others need a key |
| P/E, P/B, EV/EBITDA point-in-time; trailing P/E | WEGE3 yes; others need a key |
| Standardised accounts carrying the CVM code each figure came from | WEGE3 yes; others need a key |
| Cash distributions, annual summary and 12-month dividend yield | WEGE3 yes; others need a key |
| Piotroski F-Score with all nine criteria shown, plus the Graham test | WEGE3 yes; others need a key |
| Restated filings — the original and the revised figure side by side | WEGE3 yes; others need a key |
| Quarterly series: Q1/Q2/Q3 accounts as filed, the quarter's price, margins and trailing ROE | WEGE3 yes; others need a key |
| What changed in the last 30 days: filings published, filings re-sent, dividends, fund distributions, corporate actions, ticker changes | yes |
| One real-estate fund: point-in-time P/B, 12-month yield, vacancy, recent distributions | MXRF11 yes; others need a key |
| Filters funds by P/B and dividend-yield ranges | key required |
| Filters the whole market by indicator ranges | key required |
| Formula, CVM accounts and earnings base of each indicator, as JSON | yes |
| The published methodology pages, as text | yes |
| Current coverage and last ingestion | yes |
trimestres stops at Q3 on purpose. The interim filing (ITR) never carries a
standalone fourth quarter — it can be derived as full year − nine months, and
some do derive it. We do not: a figure we computed would sit in the same list as
the figures the company reported, carrying the error of two filings and erasing
the line between what was filed and what we calculated. For the closed year, ask
for the annual series.
WEGE3 and the whole methodology are open, no key needed. For other
companies, create a free key (200 queries/day, no card) or subscribe to
Pro at https://dadosb3.com, and pass it in the chave_api argument or the
DADOS_B3_API_KEY environment variable.
The company count is deliberately not written here: the universe grows whenever
the CVM publishes, and a number frozen in a README ages without anyone
noticing. Call saude for today's figure.
Banks and insurers
Financial institutions file under a different chart of accounts — there is no EBIT and no sales revenue. The connector classifies them by their actual chart of accounts and returns the indicators that mean something for them — ROE, margin, growth, P/E, P/B, dividends — and deliberately does not publish ROIC, EBITDA or EV/EBITDA for them, because those do not apply. Examples: Itaú, Bradesco, Banco do Brasil, BB Seguridade, IRB.
Why this one
A methodology published rather than described, invariant tests gating every release, multiples with no future information leaking in, and restatements kept on the record — when a company republishes a filing, both versions stay side by side. An honest comparison, including where competitors are better: https://dadosb3.com/comparativo
Licence
MIT (this connector). The underlying data is public (CVM/B3); the service adds standardisation, methodology and tests.
Dados B3 — servidor MCP (bolsa brasileira, fundamentos auditáveis)
Conector MCP que dá ao seu agente de IA (Claude, ChatGPT, Cursor e outros) acesso a dados fundamentalistas das companhias abertas brasileiras (B3) — inclusive bancos e seguradoras —, de 2010 até hoje, com metodologia 100% pública: ROE, ROIC, margens, crescimento, dívida líquida/EBITDA, múltiplos ponto-no-tempo (P/L, P/VP, EV/EBITDA com o preço do 1º pregão a partir da publicação real do balanço — sem look-ahead, próprio para backtest), dividendos e dividend yield, scores prontos (Piotroski F-Score e Graham) e histórico de reapresentações de balanço.
Fonte: CVM (dados abertos, ODbL) e B3 (COTAHIST). Cada número carrega a conta CVM de origem; nada é publicado sem uma bateria de testes de invariantes passando (o balanço fecha, a DRE fecha, o preço nunca antecede a publicação).
Produto e planos: https://dadosb3.com
Uso 1 — remoto (nada para instalar, recomendado)
Adicione este conector remoto ao seu cliente de IA:
https://dadosb3.com/mcp/No Claude: Configurações → Conectores → adicionar conector personalizado → cole a URL.
Uso 2 — local (stdio)
pip install -r requirements.txt
python server.pyUso 3 — imagem Docker (um comando, sem Python local)
docker run -i --rm -e DADOS_B3_API_KEY=sua_chave_opcional ghcr.io/val7h/dados-b3-mcp:latestA imagem é publicada a cada push na main. Ela existe por dois motivos: dar um
caminho de instalação de um comando só, e permitir que diretórios de MCP rodem
o servidor para avaliá-lo.
Ferramentas
Ferramenta | O que faz | Grátis? |
| Todas as companhias cobertas (nome, CNPJ, ticker), incl. bancos e seguradoras | sim |
| ROE, ROIC, margens, crescimento, DL/EBITDA — série anual desde 2010 | WEGE3 sim; demais com chave |
| P/L, P/VP, EV/EBITDA ponto-no-tempo; P/L TTM | WEGE3 sim; demais com chave |
| Contas padronizadas com a conta CVM de origem de cada número | WEGE3 sim; demais com chave |
| Proventos, resumo anual e dividend yield de 12 meses | WEGE3 sim; demais com chave |
| Piotroski F-Score com os nove critérios abertos, e o critério de Graham | WEGE3 sim; demais com chave |
| Balanços republicados — versão original e revisada lado a lado | WEGE3 sim; demais com chave |
| Série trimestral: contas do 1T/2T/3T como publicadas, preço do trimestre, margens e ROE TTM | WEGE3 sim; demais com chave |
| O que mudou nos últimos 30 dias: balanços publicados, balanços reenviados, proventos, rendimentos de FII, eventos societários, trocas de ticker | sim |
| Um fundo imobiliário: P/VP ponto-no-tempo, DY de 12 meses, vacância, rendimentos recentes | MXRF11 sim; demais com chave |
| Filtra fundos por faixas de P/VP e dividend yield | exige chave |
| Filtra o mercado inteiro por faixas de indicadores | exige chave |
| Fórmula, contas CVM e base do lucro de cada indicador, em JSON | sim |
| As páginas de metodologia publicadas, em texto | sim |
| Cobertura atual e última ingestão | sim |
trimestres para no 3T de propósito. A ITR nunca traz o 4º trimestre isolado —
ele sai de exercício cheio − 9 meses, e há quem derive. Nós não: um número
calculado por nós entraria na MESMA lista dos que a companhia reportou,
carregando o erro de dois arquivos e apagando a fronteira entre "foi publicado"
e "nós calculamos". Para o ano fechado, peça a série anual.
A empresa WEGE3 e a metodologia são abertas para degustação, sem chave.
Para as demais, crie uma chave grátis (200 consultas/dia, sem cartão) ou
assine o Pro em https://dadosb3.com e passe a chave no argumento
chave_api (ou na variável DADOS_B3_API_KEY).
A contagem de empresas não fica escrita aqui de propósito: o universo cresce
quando a CVM publica, e um número congelado num README envelheceria sem
ninguém ver. Para o número de hoje, chame saude.
Bancos e seguradoras
Instituições financeiras têm plano de contas próprio (não há EBIT nem receita de venda). O conector as classifica pelo plano de contas real e entrega os indicadores que fazem sentido — ROE, margem, crescimento, P/L, P/VP, dividendos — e não publica ROIC/EBITDA/EV-EBITDA para elas (não se aplicam). Ex.: Itaú, Bradesco, Banco do Brasil, BB Seguridade, IRB.
Por que este e não outro
Metodologia 100% pública, testes de invariantes antes de cada publicação, múltiplos sem vazamento de informação futura, e histórico de reapresentações registrado. Comparativo honesto, inclusive onde os concorrentes são melhores: https://dadosb3.com/comparativo
Licença
MIT (este conector). Os dados são públicos (CVM/B3); o serviço adiciona padronização, metodologia e testes.
Available Tools
15 toolsdicionarioAInspect
Dicionário técnico dos indicadores: fórmula, contas CVM e base do lucro.
Devolve, para cada indicador que o Dados B3 publica, a fórmula exata, os
códigos de conta CVM que entram nela, e qual linha de lucro é usada como
base. É o mapa que permite recalcular qualquer número à mão a partir dos
documentos originais.
Sem parâmetros. Gratuito — não exige chave.
Diferença para `metodologia`: aqui vem a definição em JSON, própria para
um programa consumir; lá vem o texto explicativo, próprio para leitura.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes that the tool has no parameters and is free (no API key required), which are important behavioral traits. It does not explicitly mention that the tool has no side effects, but for a read-only dictionary lookup this is implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It provides essential information, including the exact output content and the distinction from a sibling tool, without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters and the output is a JSON dictionary, the description sufficiently explains what the tool returns and how it differs from the alternative. No critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so there is nothing to misinterpret or clarify. The description correctly states 'Sem parâmetros' and the schema confirms an empty properties object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it provides a technical dictionary of indicators, including formulas, CVM account codes, and the profit line used. It also distinguishes this JSON definition from the 'metodologia' alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts this tool with 'metodologia', indicating that this one returns JSON definitions for programmatic consumption while the other provides readable explanatory text. This gives clear guidance on when to choose this tool over the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dividendosAInspect
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.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly distinguishes between 'no dividend' and 'no information' in the response, clarifying a potential ambiguity. It also notes that the source is B3 and that the original type is preserved. However, it does not describe error handling or response format details beyond this distinction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-organized: a brief summary, a detailed return description, parameter explanations, and a note on response semantics. No redundant information, and each section serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers both input parameters and the core behavior, including the crucial distinction between absence of data and absence of information. There is no output schema, but the description provides sufficient context about the return content. Minor gaps like explicit error scenarios or response format details are not critical for usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are thoroughly explained: ticker includes format, case, and examples; chave_api explains its purpose, when it's dispensable, and how to use the environment variable fallback. This fully covers the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides cash dividends from B3-listed companies, including dividend yield. It further elaborates on the output: each dividend with value per share, ex-dividend date, approval date, plus annual summary and trailing twelve-month yield. This is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Parameter usage is well explained: ticker format with examples and reference to listar_empresas, and chave_api with instructions to leave empty for environment variable. However, it does not explicitly state when to prefer this tool over siblings or mention any prerequisites or limitations beyond parameter handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fatos_contabeisAInspect
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.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No | ||
| trimestral | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It explains that 'trimestral' changes granularity but not filtering, that APIs are optional for WEGE3, and how to fall back to an environment variable. It also clarifies the output includes period-level metrics with source codes. It does not describe the exact response structure or error behavior, but for a read-only data query, this is reasonable coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a short purpose paragraph followed by a bullet-style parameter list. It is concise, each sentence adds value, and the most important information (purpose) is front-loaded. There is no fluff or repetition, and the formatting aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, parameters, and output concept (list of period metrics with source codes). However, it does not specify the exact JSON response structure, pagination, or error handling (e.g., invalid ticker). Since there is no output schema, a bit more detail on the return format would make it fully complete. Still, it is sufficient for an agent to invoke correctly and interpret the results at a high level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. All three parameters are explained with examples, defaults, and business context: 'ticker' includes format and examples, 'trimestral' is thoroughly explained, and 'chave_api' covers optionality, default, and environment variable fallback. This far exceeds what a bare schema provides, making it excellent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: returning standardized accounting data for a B3 company with auditability (CVM account codes). It lists the specific metrics (receita, EBIT, etc.) and distinguishes from other tools by its focus on raw accounting figures with provenance. This is clear and specific, clearly apart from siblings like 'indicadores_anuais' or 'multiplos' which derive different metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains parameter behavior in detail (tickercase examples, trimestral granularity semantics, chave_api requirements), which aids correct invocation. However, it provides no explicit guidance on when to choose this tool over alternatives (e.g., when to use 'indicadores_anuais' instead). It only references 'listar_empresas' for ticker format, not for selection criteria. Thus, usage guidance is present but lacks comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fiiAInspect
Um fundo imobiliário (FII) da B3, com o histórico auditável.
Devolve o cadastro (CNPJ, segmento, mandato, tipo de gestão, público-alvo),
a série de P/VP ponto-no-tempo (preço do 1º pregão a partir da entrega do
informe mensal ÷ valor patrimonial da cota), o dividend yield de 12 meses,
a vacância quando é fundo de tijolo, e os rendimentos recentes.
Rendimento de FII é DISTRIBUIÇÃO DE CAIXA, não lucro — um yield alto pode
ser devolução de capital ou ganho não recorrente. O dado vem dos informes
mensais entregues à CVM, não de agregador.
Parâmetros:
ticker — código do fundo na B3. Ex.: "MXRF11", "HGLG11".
chave_api — chave do Dados B3. MXRF11 é aberto como degustação.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Sem annotations, a descrição assume o peso de revelar o comportamento. Ela informa a fonte dos dados ('informes mensais entregues à CVM, não de agregador'), a fórmula exata do P/VP, a condicionalidade da vacância ('quando é fundo de tijolo') e a ressalva importante de que rendimento é distribuição de caixa, não lucro. Faltam apenas detalhes como autenticação, limites de uso e formato do retorno.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A descrição é estruturada em blocos úteis: visão geral, lista de retornos, ressalva conceitual e parâmetros. Cada frase agrega valor; não há repetição de informações do schema e a ressalva sobre distribuição de caixa evita mau uso da métrica.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Para uma ferramenta sem output schema e sem annotations, a descrição cobre bem os principais aspectos: o que retorna, como calcula P/VP, quando a vacância aparece, a origem dos dados e o significado dos rendimentos. Faltam apenas detalhes sobre estrutura exata da resposta, período coberto e comportamento em caso de ticker inválido, mas o nível atual é suficiente para uso correto.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
A cobertura do schema é 0%, mas a descrição compensa integralmente: explica 'ticker' como código na B3 com exemplos reais ('MXRF11', 'HGLG11') e 'chave_api' como chave do Dados B3, além de indicar que MXRF11 é aberto como degustação. Isso adiciona significado muito além do schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A descrição identifica com precisão o recurso ('fundo imobiliário (FII) da B3') e usa o verbo explícito 'Devolve', enumerando saídas concretas: cadastro, série de P/VP, dividend yield, vacância e rendimentos. Isso permite distinguir claramente a ferramenta de irmãs como 'fiis', 'dividendos' ou 'multiplos'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Não há orientação explícita sobre quando usar esta ferramenta em vez de alternativas como 'fiis', 'dividendos', 'multiplos' ou 'scores'. O contexto de dados de FII está implícito, mas não há regra de decisão, nem exclusões ou condições de uso comparativas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fiisAInspect
Filtra os fundos imobiliários por faixas de P/VP e dividend yield.
Todos os parâmetros são opcionais; sem nenhum, devolve o universo ordenado.
Parâmetros:
pvp_min / pvp_max — faixa de P/VP. Ex.: pvp_max=1.0 para fundos abaixo do
valor patrimonial.
dy_min / dy_max — faixa de dividend yield de 12 meses, em FRAÇÃO:
dy_min=0.10 significa 10% ao ano, não 10.
segmento — segmento CVM, casando exato (sem caixa). Ex.: "Shoppings".
cotistas_min — piso de cotistas, para tirar fundo ilíquido. Padrão 5000.
limite — quantos devolver (padrão 50, teto 200).
chave_api — obrigatória: o filtro varre o universo inteiro, não há
degustação possível.
Só entra número LIMPO: um P/VP ou DY marcado com flag não é tratado como
valor filtrável, e o fundo simplesmente não casa aquele filtro — em vez de
entrar na lista com um número em que nós mesmos não confiamos. Não é
recomendação de investimento.| Name | Required | Description | Default |
|---|---|---|---|
| dy_max | No | ||
| dy_min | No | ||
| limite | No | ||
| pvp_max | No | ||
| pvp_min | No | ||
| segmento | No | ||
| chave_api | No | ||
| cotistas_min | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: mandatory chave_api, full-universe scan, defaults/caps, exact segment matching, the dirty-number policy, and the investment disclaimer. This is well beyond a minimal read-filter description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded, followed by a tight parameter list and a single caveat paragraph. Each sentence adds information—there is no filler or repetition of schema titles.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema and no annotations, the description covers behavior, defaults, required key, matching exactness, and disclaimers. The only minor omission is explicit return-shape details, but 'devolve o universo ordenado' gives enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description documents every parameter with units, defaults, examples (pvp_max=1.0, dy_min=0.10, 'Shoppings'), and edge semantics such as dy being a fraction. It fully compensates for the schema's bare defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: filters real estate funds (FIIs) by P/VP and dividend yield ranges. It also clarifies that with no parameters it returns the full ordered universe, preventing confusion with single-fund lookup tools like fii.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines when to use the tool: filtering FIIs by P/VP, dividend yield, segment, and liquidity, including the no-params behavior. It does not explicitly contrast it with sibling tools (e.g., fii or screener), so a small alternative-routing gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hojeAInspect
O que mudou no mercado brasileiro nos últimos 30 dias.
Responde "o que aconteceu com a empresa X esta semana" — a pergunta que
nenhuma série anual responde. Devolve, na janela: os balanços que ficaram
públicos (com a data de entrega à CVM), os documentos REENVIADOS (versão
maior que 1: a companhia republicou o que já tinha entregue), os proventos
de ações aprovados, os rendimentos e informes de FII, os eventos
societários (grupamento, desdobramento, bonificação) e as trocas de ticker.
Cada seção declara `dados_ate`: a data máxima daquela FONTE. As defasagens
são diferentes — a CVM entrega documento com dias de atraso, a B3 publica
rendimento de FII quase no dia — e a janela é fixa a partir de hoje, então
uma fonte parada aparece como parada em vez de parecer recente.
Sem parâmetros. Gratuito — não exige chave.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does exceptionally well: it discloses source-specific lag, explains `dados_ate` and the difference between CVM and B3 publication delays, defines version>1 as re-submission semantics, and mentions that no API key is required. It also clearly implies a read-only operation by saying it 'devolve' data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and organized into content categories, data-freshness behavior, and invocation notes. It is slightly longer than strictly necessary due to a natural-language flourish, but each paragraph adds distinct operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-output-schema tool, the description is unusually complete: it lists every returned section, explains freshness and lag, and states invocation essentials. The only notable gap is that the example about 'empresa X' could imply company-level filtering, but the tool has no parameters and the description never clarifies whether a specific company can be requested.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema is empty with 100% coverage, so there are no parameters to explain. The description reinforces this with 'Sem parâmetros' and adds the useful operational fact that it is free and requires no key, which is appropriate for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a concrete purpose: report what changed in the Brazilian market in the last 30 days. The description then lists the exact categories returned — balanços, documentos reenviados, proventos, rendimentos e informes de FII, eventos societários e trocas de ticker — which clearly distinguishes it from historical/series-oriented sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It identifies the target question ('o que aconteceu com a empresa X esta semana') and explicitly says that annual series do not answer it, signaling use for recent-change discovery. It also notes the window is fixed and the tool has no parameters. However, it does not name the alternative sibling tools or state exactly when not to use them, only implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
indicadores_anuaisAInspect
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.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden and does it well: it states the time range, the annual output contents, the API-key requirement (optional only for WEGE3), the environment-variable fallback, and the `erro` field returned when no valid key is provided. It does not mention rate limits or exact response structure, but the essential authentication, scope, and error behaviors are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and output, followed by a one-line pointer to `metodologia` and a compact `Parâmetros` section. It is about 150 words, and every sentence adds needed information about scope, return contents, parameter syntax, or error handling. Nothing feels redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers selection, parameter syntax, data range, metric list, and error behavior. The only real gap is an explicit response shape, but the listed indicators and the mention of an `erro` field make the return contract reasonably predictable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates fully. For `ticker`, it explains the B3 uppercase class-digit format and gives examples (WEGE3, PETR4, SANB11), plus points to `listar_empresas`. For `chave_api`, it explains the free WEGE3 option, the requirement for other companies, the empty-string environment-variable fallback, and the error behavior. This far exceeds the bare string types in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence defines the tool as an annual series of fundamental indicators for a B3 company, and the description explicitly lists the returned metrics per year: ROIC, ROE, margins, revenue/profit growth, and net debt/EBITDA. This is a specific verb/resource pairing that clearly differentiates it from sibling tools like multiplos or fatos_contabeis, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: it covers 2010 through the last published fiscal year and returns per-year metrics, which implies use for historical fundamental analysis. It also explicitly routes users to `metodologia` for calculation details and to `listar_empresas` for ticker discovery. However, it does not explicitly contrast with sibling tools like `saude`, `multiplos`, or `fatos_contabeis`, so selection among those alternatives is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listar_empresasAInspect
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`.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It clearly states the tool is read-only (returns data, no side effects), free, and no key required. It also explains why the count is not hardcoded, adding behavioral context about dynamic data. This is more than a bare minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, then a list of outputs, usage context, and parameter/freemium info. It front-loads the core purpose and keeps sentences concise. The note about count is a bit extra but adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is remarkably complete. It tells the agent what it returns, why it's useful, that it's free and keyless, and even points to 'saude' for dynamic count. An agent could call this tool without any further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters and 100% coverage (empty schema is fully covered). The description explicitly states 'Sem parâmetros', reinforcing the schema. Since there are no parameters to explain, the description adds value by confirming the absence, making the agent confident it needs no inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Brazilian publicly traded companies covered by Dados B3, with specific fields returned (nome, CNPJ, código CVM, ticker principal) and total count. It distinguishes itself by being the starting point for finding tickers for other tools, differentiating from siblings like 'saude' or 'indicadores_anuais'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it has no parameters and is free without API key, and positions it as the entry point for discovering tickers. It does not explicitly mention when not to use it, but the context of being the starting point implies alternatives are for deeper analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metodologiaAInspect
Metodologia pública por trás dos indicadores — como cada número é calculado.
Tem dois modos, conforme o argumento:
- sem `nome` (padrão): devolve a LISTA das páginas disponíveis, com o
identificador de cada uma;
- com `nome`: devolve o TEXTO completo daquela página, em Markdown.
Parâmetros:
nome — identificador da página, exatamente como aparece na listagem.
Exemplo: "roic". Deixe "" para listar em vez de ler.
Gratuito — não exige chave. Use quando precisar auditar ou justificar um
número devolvido pelas outras ferramentas.| Name | Required | Description | Default |
|---|---|---|---|
| nome | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and largely delivers: it documents the mode-switching behavior (default list vs. explicit read), the parameter format with a concrete example, and the access properties ('Gratuito — não exige chave'). Missing edge-case behavior like invalid page identifiers, but the disclosed traits substantially outpace the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the essential purpose and then breaks down behavior cleanly in a list-like structure. There is minor redundancy — the two-mode behavior is explained both in the intro bullets and again in the parameter documentation — but every sentence adds real information, and nothing is fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool (1 optional parameter, no output schema, no annotations), this description is nearly exhaustive: behavior, usage trigger, parameter semantics, and access model are all covered. The only gaps are minor (error behavior for invalid page names, and the exact shape of the returned listing), which are acceptable given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the schema only reveals the parameter name and default. The description carries the full semantic load and succeeds completely: it explains the default behavior ('' lists pages), the page-identifier contract ('exatamente como aparece na listagem'), and gives a realistic example ('roic'). The agent can call it correctly after reading only the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line clarifies the resource ('pública... por trás dos indicadores — como cada número é calculado'), which goes well beyond the terse name 'metodologia' by explaining the tool returns the public calculation methodology behind indicator numbers. The dual-mode behavior (list vs. read page) further sharpens the purpose. It doesn't explicitly differentiate from siblings by name, but the intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use quando precisar auditar ou justificar um número devolvido pelas outras ferramentas.' This identifies a clear trigger condition and implies the siblings are the tools producing those numbers. Could give slightly more contrast with alternatives (e.g., raw data vs. methodology), but the direction is correct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multiplosAInspect
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.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It explains the crucial behavioral choice: price is taken from the first trading session after the actual balance-sheet publication date to avoid look-ahead. It also discloses API-key requirements and the WEGE3 free-tasting exception. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and outputs, followed by the single most important caveat (point-in-time pricing), then parameters. Every sentence adds value; the methodological note is justified because it directly affects how the returned data should be interpreted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description gives a clear high-level list of returned metrics and the core pricing convention. It is slightly lacking an exact response structure or error/availability caveats, but nothing an agent needs to invoke the tool with correct parameters is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it fully does. It explains ticker format (uppercase, class digit), gives examples, points to listar_empresas, and details chave_api behavior including the environment-variable fallback and the WEGE3 exception.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Devolve') and identifies the resource: point-in-time valuation multiples for a B3 company. It names concrete outputs (P/L, P/VP, EV/EBITDA per fiscal year, plus P/L TTM per quarter), which clearly separates it from siblings like dividendos or fatos_contabeis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames the tool for backtesting: 'permite usar a série em backtest sem contaminar o passado.' It does not state explicit exclusions or name a specific alternative tool, but the use case and point-in-time methodology are clear enough for an agent to choose it over raw financial-data siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reapresentacoesAInspect
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.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description bears the full burden of disclosing behavior, and it does well: it explicitly explains that the originally published numbers that normally disappear from databases are retained here, and it says what will be returned for each affected account. It could add operational details such as pagination, limits, or whether no results are returned for tickers without restatement, but the writing already communicates the tool's distinctive behavior clearly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the introductory sentence conveys the essence immediately, followed by behavioral notes, use cases, and parameter definitions. It is somewhat longer than necessary, but every sentence adds meaningful information for a potential data-retrieval tool, and the parameter section is highly useful. The structure is logical, with no filler or repetition that would harm an agent's parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description does enough by summarizing the return content (original and new values with publication dates, per affected account) and by explaining scenarios suited to the tool. Missing pieces include formal response format, behavior on tickers with no restatement, and explicit guidance on when this tool is not the one to use. As a whole, an agent can invoke the tool correctly with confidence, and an essential data is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 0% description coverage, so the entire semantic weight is on the description. It fully compensates: `ticker` is clarified as a B3 code, uppercase, with class digit and examples; `chave_api` explains when it is optional, when required, which ticker works as a free sample, and how the environment variable fallback behaves. This is exactly the kind of parameter guidance agents need when the schema is unhelpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it returns restated financial statements with both the original and reissued versions ('Devolve, por conta afetada, o valor da versão original e o da versão nova, com as datas das duas publicações'). The resource is identifiable as 'Balanços que a empresa republicou depois', and the emphasis on old numbers staying visible distinguishes it from standard financial-report tools, even though it does not explicitly name a sibling. A 4 is appropriate because the objective is clear, but sibling differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear contexts: it 'Serve para auditar mudança de histórico e para saber se um backtest rodou sobre números que depois foram revistos'. This gives an agent an actionable sense of when to invoke the tool. However, it does not state when not to use it or mention alternatives such as `fatos_contabeis` or `indicadores_anuais` for current data, so it falls short of the explicit when/not/alternatives standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saudeAInspect
Estado atual da base do Dados B3: o que está coberto e quão fresco está.
Devolve as contagens por tipo de dado (empresas, fatos anuais e
trimestrais, indicadores, múltiplos e preços) e a data-hora da última
ingestão. Serve para saber o tamanho do universo hoje e para conferir se a
base foi atualizada antes de confiar num número.
Sem parâmetros. Gratuito — não exige chave.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses that no API key is required, that the tool returns counts and a timestamp, and that it is meant as a status check. It does not mention potential latency or caching behavior, but for a simple no-parameter status endpoint this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well structured: it states what the tool returns, why it is useful, and that it requires no parameters or key. Every sentence adds value, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description sufficiently explains the return content: counts per data type and the last-ingestion timestamp. For a zero-parameter health-check tool, this is complete enough for an agent to call it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4, and the description explicitly states 'Sem parâmetros', confirming that no arguments are needed. This adds clarity beyond the empty input schema and removes any doubt about invocation requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear subject, 'Estado atual da base do Dados B3', and then uses a concrete verb, 'Devolve', to state exactly what is returned: counts by data type and last-ingestion timestamp. This makes the tool's purpose obvious and distinguishable from data-retrieval siblings like listar_empresas or indicadores_anuais.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context for when to use the tool: to know the current universe size and to verify data freshness before trusting a number. It does not explicitly name alternatives or state when not to use it, but the intended use case is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scoresAInspect
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.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns detailed criteria (not just a score), that the API key is dispensable for WEGE3 but necessary for others, and that an empty string uses an environment variable. This is good behavioral context, though it doesn't mention potential errors or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear intro, a bolded statement of the output, and a parameter list. It's a bit long but every sentence adds value. The front-loading of the purpose and the explicit 'you see the account, not just the score' is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, no output schema, and no annotations, the description covers the essential aspects: what it returns, how to format parameters, and the API key handling. It could mention error cases or the exact structure of the output, but it's largely complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does: it explains the ticker format (uppercase, with class digit, examples) and the chave_api parameter (optional, default behavior, environment variable fallback). This adds significant meaning beyond the schema's bare property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it returns quality and value scores for a B3 company, criterion by criterion, including the Piotroski F-Score with each of the nine criteria detailed and the Graham criterion. It explicitly says the goal is to allow disagreement with the score by showing the underlying calculations, which distinguishes it from a simple score lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to see detailed scores and criteria for a B3 company) and provides clear parameter guidance, including examples and a reference to `listar_empresas` for finding tickers. It does not explicitly mention when not to use it or alternatives, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenerAInspect
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 — que não é o mesmo ano para todas.
limite — máximo de empresas na resposta. Padrão 100.
chave_api — obrigatória aqui, mesmo para WEGE3, porque a consulta
percorre todo o universo. Deixe "" para usar DADOS_B3_API_KEY.
Só entram valores SEM flag, isto é, números que passaram limpos pela
bateria de invariantes. Um indicador marcado como suspeito não é filtrado
silenciosamente: ele simplesmente não participa. Nome de indicador
desconhecido é recusado com erro, nunca ignorado.| Name | Required | Description | Default |
|---|---|---|---|
| ano | No | ||
| limite | No | ||
| filtros | No | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses key behaviors: it filters only values without flags (clean data), unknown indicator names are rejected with errors, and it implies the operation scans the entire universe (hence API key requirement). It also explains the 'ano' parameter's behavior (not same year for all companies). However, it doesn't disclose performance implications (e.g., slow because full scan) or rate limits, but the core behavioral aspects are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with sections for parameters and behavior. It is detailed but not excessively verbose; each sentence adds value. The front-loading of the main purpose is good, and the parameter list is formatted clearly. It could be slightly more concise in the parameter explanations, but the level of detail is necessary given zero schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters and no output schema, the description covers the input semantics comprehensively. It doesn't describe the output format, but since there is no output schema and the tool returns a list of companies, it might be helpful to mention the output structure. However, the tool's complexity is moderate and the missing output detail is a minor gap. The description sufficiently covers all operational aspects an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document parameters. It does: explains 'filtros' with a dictionary format, provides an example, lists all 8 accepted indicators, and the 'ano' and 'limite' semantics are clear. It even documents the API key parameter's purpose and default behavior. This is exemplary compensation for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool filters the entire B3 universe by indicator ranges. It specifies the resource (B3 universe) and the action (filter by indicator ranges). It distinguishes itself from siblings like listar_empresas and indicadores_anuais by focusing on filtering across the whole universe by indicators, and mentions that it returns a 'cardápio' when called without filters, which distinguishes its behavior from other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use the tool: to filter the full universe by indicator ranges. It includes a crucial instruction to call without filters to get the list of valid indicators and examples, which serves as a self-help mechanism. However, it doesn't explicitly state when NOT to use this tool versus alternatives like 'multiplos' or 'indicadores_anuais', but the scope (entire universe vs. specific company) is implicit. It also warns about API key requirements, which helps decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trimestresAInspect
Série TRIMESTRAL de uma empresa da B3: contas da ITR, preço e indicadores.
Use quando a pergunta for sobre o ANO CORRENTE ou sobre o trimestre mais
recente — "como foi o 2T", "a margem melhorou este ano?". A série anual só
responde depois que o exercício fecha, e fica até um ano defasada.
Devolve, por trimestre: as contas publicadas na ITR (receita, resultado
bruto, EBIT, lucro, PL, ativo...), o preço do 1º pregão a partir da
publicação daquela ITR, P/L TTM e P/VP, e os indicadores margem_bruta,
margem_ebit, margem_liquida e roe_ttm no mesmo formato da série anual.
O 4º TRIMESTRE NÃO VEM, e isso é escolha: a ITR publica 1T, 2T e 3T; o
exercício fechado é da DFP. É possível derivar `4T = anual − 9M` (há quem
derive), e não derivamos — número calculado por nós não entra na mesma
lista dos que a companhia reportou. Para o ano fechado use
`indicadores_anuais`.
Instituição financeira (banco/seguradora) recebe só margem líquida e
roe_ttm: não há resultado bruto nem EBIT nesse plano de contas.
Parâmetros:
ticker — código da ação na B3, em maiúsculas. Ex.: "WEGE3", "PETR4".
chave_api — chave do Dados B3. Dispensável para WEGE3.| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| chave_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It does this well by listing what is returned per quarter, noting the price is from the first trading session after ITR publication, and explicitly warning that the 4th quarter is not included because it belongs to the annual DFP series. It stops short of a 5 because it does not address error cases, missing data, or API-key/auth behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core content is well-structured and front-loaded: purpose first, then usage, then return details, then the important Q4 caveat, then an example. The tail is weaker, with redundant phrasing and placeholders like '[maybe]' and '[???]' that add noise rather than value, so it does not earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description covers the most important decision and behavior points: quarterly scope, what data is included, the missing 4th quarter, and the call example. It is not fully complete because parameter semantics are thin and the broken tail leaves some guidance unfinished, but an agent can still invoke and interpret the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description shows the call signature 'trimestres(ticker, chave_api)' and an example 'trimestres('WEGE3')', which conveys argument order and that chave_api is optional in practice. However, schema coverage is 0%, and the description does not explain what chave_api is, when it is required, or how ticker should be formatted beyond the example. This is partial compensation, not full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states the exact deliverable: a TRIMESTRAL series for one B3 company containing ITR accounts, price, and indicators. It also distinguishes itself from the annual series by saying the annual series only answers after the fiscal year closes, so an agent can tell this tool apart from sibling annual-data tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this tool when the question is about the current year or the most recent quarter, and gives concrete examples like 'como foi o 2T' and 'a margem melhorou este ano?'. It also clearly states the alternative: 'Para o ano fechado, use a série anual.' This is strong when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.2.1- Added
fii - Added
fiis - Added
hoje - Added
trimestres
5 tool updates
v1.1.1- Added
dicionario - Added
dividendos - Added
reapresentacoes - Added
scores - Added
screener
6 tool updates
- First observed
fatos_contabeis - First observed
indicadores_anuais - First observed
listar_empresas - First observed
metodologia - First observed
multiplos - First observed
saude
TDQS
Scored across 15 tools
Most tools map cleanly to distinct data resources—scores, annual indicators, multiples, dividends, restatements, FIIs, recent market activity, and database health. A few overlap in output (trimestres also returns P/L, P/VP, and accounts that multiplos and fatos_contabeis provide), but the descriptions include explicit cross-references and usage guidance, so an agent can usually select correctly.
The convention is largely uniform: lowercase Portuguese nouns or noun phrases naming the returned data domain (multiplos, dividendos, trimestres, saude), all in snake_case. The deviations are listar_empresas, which is verb-led, and screener, which is English, but they remain readable and do not create real ambiguity.
At 15 tools, the server sits at the top of the ideal range, but each tool covers a distinct part of the domain: company discovery, annual and quarterly fundamentals, valuation multiples, dividends, restatements, stock and FII screening, methodology, recent events, and data health. No tool feels redundant or purely decorative.
The surface covers the core fundamental-analysis workflow well: discover companies, retrieve accounts and indicators, screen by criteria, audit methodology, and verify data freshness. Minor gaps exist—no raw full financial statement endpoint, no standalone historical price series, and no company profile/sector detail—but agents can work around these with the provided tools.
Maintenance
Related MCP Connectors
brapi.dev MCP — Brazilian stock + crypto + ETF quotes.
Brazilian investments MCP: B3 quotes, fundamentals, portfolio X-ray, theses and news for AI agents.
Research-only MCP server: your AI as a quant research desk. 90 tools, no trades, no brokers.
Financial data MCP for market, company, news, macro, and US Congress research.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server that fetches Brazilian financial data from the CVM open data portal and exposes tools for LLM clients to query companies and calculate financial indicators from published financial statements.4MIT
- AlicenseAqualityBmaintenanceAn MCP server for Brazilian company and public procurement data, enabling CNPJ lookup, company search, tender resolution, and more via paid USDC-based API calls.1575MIT
- AlicenseAqualityCmaintenanceMCP server providing fundamental and technical data on Indian-listed companies from Screener.in and Yahoo Finance, including financial statements, ratios, and technical indicators.12MIT
- AlicenseBqualityCmaintenanceMCP server for B3 (Brazilian stock exchange) data, offering tools for real-time quotes, historical prices, dividends, FIIs, fundamental analysis, options, and indices via natural language.9MIT