Kalvi — NFS-e e IBS/CBS
Server Details
Confere a NFS-e brasileira para IBS/CBS antes de transmitir. Sem cadastro e sem chave.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 3 tools
The three tools target clearly separate workflows: service tax classification, rejection-code explanation, and DPS XML validation. Although validation can surface rejection codes that the explanation tool interprets, their use cases and outputs are described distinctly enough to avoid confusion.
All tool names follow a consistent Portuguese verb_noun pattern in snake_case: classificar_servico, explicar_rejeicao, validar_nfse. The naming is predictable and readable.
Three tools are well scoped for a focused NFS-e/IBS-CBS reference and validation server. Each tool corresponds to a distinct user question and earns its place without bloat.
The surface covers the main advisory workflows: classifying a service, validating a DPS XML, and explaining rejection codes. Minor gaps remain, such as direct exploration of rate tables or broader rule listings, but the included tools let an agent handle core tasks.
Available Tools
3 toolsclassificar_servicoDescobrir o CST e o cClassTrib de um serviçoAInspect
A partir do item da LC 116 (ou do código de tributação nacional), do regime do prestador, do município e da data de competência, devolve os candidatos de CST e cClassTrib com justificativa, alíquotas vigentes e a fonte oficial de cada regra. Use quando a pergunta for 'qual código eu uso neste serviço'.
| Name | Required | Description | Default |
|---|---|---|---|
| nbs_code | No | NBS, quando houver. | |
| tax_regime | Yes | ||
| service_code | Yes | Item da LC 116 ("04.01") ou cTribNac de 6 dígitos ("040101"). | |
| competence_date | Yes | AAAA-MM-DD. | |
| operation_nature | No | ||
| municipality_code | Yes | Código IBGE de 7 dígitos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does meaningful work: it discloses that the result is a set of candidates (not a single deterministic answer) accompanied by justification, current rates and the official source of each rule. It does not say what happens when nothing matches (empty result vs. error) or note any auth prerequisites, which is a read-only lookup so risk is low.
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?
Two dense sentences: inputs first, outputs second, usage trigger last. No filler, no repetition of the tool name, and the key classification constraint 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?
For a 6-parameter, annotation-free tool with no output schema, the description substitutes well by describing the return payload (candidates, justification, rates, sources). Remaining gaps are the unmentioned optional parameters and the no-match behavior, but the core call is fully specified.
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 67% and the description reinforces the meaning of service_code (accepts either "04.01" or a 6-digit cTribNac). However, nbs_code and operation_nature are absent from both the description and the schema, and the enum parameters (tax_regime, operation_nature) have no explanation of their effect on classification.
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?
States a specific verb+resource: given the LC 116 item (or national tax code), regime, municipality and competence date, it returns CST/cClassTrib candidates. The enumerated inputs and outputs make the function unambiguous. It does not explicitly differentiate from siblings (validar_nfse, explicar_rejeicao), though the tasks are plainly distinct.
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 closing sentence gives an explicit trigger: use it when the question is 'which code do I use for this service'. That is a clear usage context, but no when-not-to-use guidance or prerequisite/alternative routing is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explicar_rejeicaoExplicar um código de rejeição da NFS-eAInspect
Recebe um código de rejeição da NFS-e nacional (E0958, E0855, E0959...) e devolve o texto oficial da regra, o campo do XML a que ela se refere e se o efeito é recusar a nota. Use quando a pergunta for 'o que significa este erro'.
| Name | Required | Description | Default |
|---|---|---|---|
| codigo | Yes | O código, como veio na recusa. Ex.: "E0958". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the return content (rule text, XML field, rejection effect), which effectively signals a read-only lookup. It does not say what happens for an unrecognized code or whether partial matches are resolved, which is the main residual gap.
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?
Two sentences, zero waste: the return contract comes first, the usage trigger second. Nothing is repeated 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?
Since there is no output schema, the description properly enumerates the returned fields, which is the critical information here. Minor omission: behavior on an unknown or malformed rejection code is not covered.
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 100% and the single parameter already carries its own description and example ("E0958"). The description only re-states the example codes with an ellipsis, adding no format or normalization guidance beyond the schema, so the 3 baseline applies.
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?
Specific verb pair (recebe / devolve) plus the exact resource (código de rejeição da NFS-e nacional), and it enumerates the three things returned: official rule text, XML field, and whether the effect is rejection. It is clearly a lookup-dictionary tool, distinguishable in spirit from validar_nfse, though it never names a sibling to contrast with.
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 trigger: "Use quando a pergunta for 'o que significa este erro'." That cleanly separates diagnostic explanation from validation or classification work. No explicit 'do not use when' clause or named alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validar_nfseConferir uma NFS-e antes de transmitirAInspect
Confere o XML da DPS (NFS-e do padrão nacional) contra as regras oficiais de IBS/CBS e devolve o que seria recusado, com o código oficial de rejeição e o campo do XML que causou. Use antes de transmitir. Nada da nota é guardado.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | Yes | O XML da DPS, completo, como string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it discloses dry-run semantics ('devolve o que seria recusado') and a no-persistence guarantee ('Nada da nota é guardado'), which tells the agent this is a side-effect-free operation. It omits whether all violations are returned or only the first, and says nothing about size limits or auth requirements.
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?
Three tight sentences: what it checks, what it returns, when to use it, and the no-storage guarantee. No filler, and the core action plus output shape are 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?
With one parameter, no annotations and no output schema, the description carries the disclosure burden well by describing the return payload (official rejection code plus offending XML field). The main remaining gap is what a passing validation returns and whether multiple errors surface at once.
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 100%, so the baseline is 3, but the description adds meaning beyond the schema field text by clarifying that the XML is the DPS under the national standard ('padrão nacional'), distinguishing it from municipal NFS-e layouts. That is useful disambiguation for a single-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?
States a specific verb and resource: checks the DPS XML (national-standard NFS-e) against official IBS/CBS rules. The purpose is unambiguous and clearly a pre-transmission validation, but it never names or contrasts with the siblings classificar_servico and explicar_rejeicao, even though 'explicar_rejeicao' overlaps with its rejection-code output.
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?
'Use antes de transmitir' gives a clear trigger condition for when to call it. It does not state when NOT to use it or point to explicar_rejeicao for deeper explanation of a returned code, so the routing guidance is contextual but not complete.
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.
3 tool updates
- First observed
classificar_servico - First observed
explicar_rejeicao - First observed
validar_nfse
Related MCP Connectors
Notas fiscais eletrônicas brasileiras: consulta, análise, manifestação e emissão de NFS-e.
- SudrelOAuthbr.com.sudrel
Notas fiscais do Brasil: emita NFS-e de uma planilha, com confirmação, e consulte NF-e e CT-e.
Brazilian AI-powered accounting & tax automation: NFS-e invoicing, CBS/IBS tax reform, compliance.
Issue and manage Brazilian fiscal documents: NF-e for goods, NFS-e for services.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAllows consultation of NFS-e (electronic service invoices) from the Brazilian Federal Revenue official source, with a single read-only tool.MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying issued electronic service invoices (NFS-e) from the Brazilian Federal Revenue via natural language, providing read-only access to official invoice data.MIT
- AlicenseNot gradedqualityCmaintenanceServidor MCP para consulta de notas fiscais de serviço emitidas (detalhes) na Receita Federal, em fonte oficial.MIT
- AlicenseNot gradedqualityCmaintenanceProvides read-only consultation of Rio de Janeiro's electronic service invoices (NFS-e) from official sources, with pay-per-use credits.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.