Skip to main content
Glama

Brazil Invoices (NFS-e nota fiscal de serviço)

Server Details

Brazil NFS-e service invoices for AI agents via Focus NFe and NFe.io. Stateless, never stores data.

Status
Unhealthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 3 of 3 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool has a clearly distinct purpose: create, query, cancel. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (cancel_invoice, create_invoice, query_invoice).

Tool Count4/5

Three tools is a minimal but reasonable set for the core lifecycle of an invoice (create, query, cancel). Could benefit from a list tool, but still scoped appropriately.

Completeness3/5

The set covers create, query, and cancel, but lacks a list/search tool, which would be helpful for managing multiple invoices. No update or other operations, but those are often not needed for invoices.

Available Tools

3 tools
cancel_invoiceA
DestructiveIdempotent
Inspect

Cancel (void) an authorized Brazil NFS-e at the prefeitura, using its ref. Requires a justificativa (cancellation reason) of 15 to 255 characters. Only an AUTHORIZED NFS-e can be canceled; cancellation is permanent.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesThe ref returned by create_invoice (your ref for Focus NFe; NFe.io's invoice id for NFe.io).
providerNoOptional explicit provider. Omit to auto-route by credential headers. Overrides header x-invoice-provider.
justificativaYesReason for cancellation (justificativa), 15-255 characters — required by the prefeitura (Focus NFe). NFe.io cancels without a mandatory reason but this is still collected for parity.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context beyond annotations: justificativa length requirement, state requirement, and permanent destruction. Annotations confirm destructiveHint=true and idempotentHint= true, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous words. First sentence declares purpose, second adds constraints. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters and no output schema, the description covers all necessary behavioral context, state, and parameter details. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Though schema coverage is 100%, the description enriches parameter understanding: explains ref origin, justificativa rationale and length, and provider auto-routing behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Cancel (void)' and the resource 'authorized Brazil NFS-e at the prefeitura'. It distinguishes from siblings by specifying the action unique to this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the condition 'Only an AUTHORIZED NFS-e can be canceled' and the permanent effect, but does not explicitly mention when not to use or compare with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_invoiceAInspect

Issue a Brazil NFS-e (nota fiscal de serviço eletrônica — the electronic service invoice municipalities/prefeituras require). Two interchangeable providers behind one tool (bring your own credentials as HTTP headers; this server stores nothing, and the merchant certificate + municipal registration stay in the merchant's own provider account): (A) FOCUS NFe — header x-focusnfe-token (free homologação/sandbox token issues test NFS-e with no fiscal effect; the produção token issues real ones; add x-focusnfe-mode: production to switch, default is the safer sandbox). (B) NFE.IO — headers x-nfeio-key (your NFe.io API key) + x-nfeio-company-id (the id of your issuing company/empresa in NFe.io, which holds the CNPJ, municipal registration and certificate; whether it is a Test or Production company — and thus fiscal effect — is set in your NFe.io account, not per request). Routing: whichever credential headers you send picks the provider; if both are present Focus NFe wins unless you set header x-invoice-provider: nfeio. ISSUANCE IS ASYNCHRONOUS: this returns status PROCESSING plus a ref — poll query_invoice with that ref until AUTHORIZED (nota autorizada) or ERROR. Ref semantics differ: with Focus NFe the ref is yours (auto-generated if omitted); with NFe.io the ref returned is NFe.io's own invoice id (a passed-in ref is ignored). For NFe.io the issuer comes from x-nfeio-company-id, so the prestador_* fields are validated but not forwarded. This is for service invoices (serviços); NF-e for physical goods is on the v2 roadmap.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoOptional caller-chosen unique reference for this NFS-e (used to poll/cancel). Applies to Focus NFe only (auto-generated if omitted); NFe.io ignores it and returns its own invoice id as the ref.
aliquotaNoISS rate. Focus NFe expects it as a decimal fraction (0.05 = 5%). Optional — many municipalities derive it from item_lista_servico; pass it only if your prefeitura requires it.
providerNoOptional explicit provider. Omit to auto-route by which credential headers you sent (x-focusnfe-token -> focusnfe, x-nfeio-key -> nfeio). Overrides header x-invoice-provider.
iss_retidoNoWhether ISS is withheld by the buyer (ISS retido na fonte). Default false.
data_emissaoNoOptional issue date-time in ISO-8601 with offset, e.g. 2026-07-10T10:30:00-03:00. Defaults to now.
customer_nameYesBuyer/taker legal or full name (razão social or nome do tomador).
discriminacaoYesDescription of the service rendered (discriminação do serviço) — free text shown on the NFS-e.
customer_emailNoOptional buyer email — Focus NFe can email the NFS-e to it once authorized.
prestador_cnpjYesService provider (merchant) CNPJ, 14 digits — the business issuing the invoice. Must match the certificate configured in the Focus NFe account.
valor_servicosYesTotal service amount in BRL (reais). This is the invoice total the ISS tax and owner policy caps apply to.
customer_tax_idYesBuyer CPF (11 digits, individual) or CNPJ (14 digits, company). Digits only or formatted — punctuation is stripped.
natureza_operacaoNoOperation nature code (natureza da operação). Default "1" (tributação no município).
item_lista_servicoYesService list item code from Lei Complementar 116 (lista de serviços), e.g. "01.07" software support, "17.09" consultoria. Determines the ISS classification; required by every prefeitura.
optante_simples_nacionalNoWhether the provider is a Simples Nacional opter. Default true.
prestador_codigo_municipioNoIBGE 7-digit code of the provider municipality (código do município), e.g. 3550308 for São Paulo. Also used as the service municipality unless the service is elsewhere.
codigo_tributario_municipioNoOptional municipal tax/service code (código tributário do município / CNAE-based) some prefeituras require in addition to item_lista_servico.
prestador_inscricao_municipalYesProvider municipal registration (inscrição municipal) issued by the prefeitura where the service is taxed.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond annotations, disclosing key behaviors: asynchronous issuance, two interchangeable providers with different authentication and ref semantics, that the server stores nothing, and that for NFe.io the prestador fields are validated but not forwarded. This provides rich context that annotations alone (readOnlyHint=false, openWorldHint=true) do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy and covers many details. While justified by the complexity of the tool, it could be more concise. The core purpose is front-loaded, but the extensive details (provider differences, header explanations) could be better structured or summarized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (17 parameters, 2 providers, asynchronous behavior, no output schema), the description is comprehensive. It explains the return format, how to poll for results, provider-specific behavior, and credential requirements. An AI agent has sufficient information to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema_description_coverage, the schema already defines each parameter. The description adds value by explaining high-level semantics like how provider selection works, how the ref parameter behaves differently per provider, and the interplay with credential headers. This goes beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool issues a Brazil NFS-e invoice. It distinguishes from sibling tools (cancel_invoice, query_invoice) by focusing on issuance and mentioning polling via query_invoice. The verb 'Issue' and resource 'Brazil NFS-e' are 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: to issue an invoice. It explicitly instructs to poll with query_invoice for the asynchronous result. It explains provider selection via headers and an optional parameter. However, it does not explicitly state when not to use this tool (e.g., for cancellation or querying), but the sibling tools cover those.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_invoiceA
Read-only
Inspect

Check a Brazil NFS-e created by create_invoice, using its ref. Status values: PROCESSING (prefeitura is still authorizing — poll again shortly), AUTHORIZED (nota autorizada — numero and codigo_verificacao are populated, url links the official NFS-e), ERROR (authorization was rejected — see message for the reason), CANCELED (voided). Safe to call anytime.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesThe ref returned by create_invoice (your ref for Focus NFe; NFe.io's invoice id for NFe.io).
providerNoOptional explicit provider. Omit to auto-route by credential headers. Overrides header x-invoice-provider.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint. The description adds significant behavioral detail: enumerating status values (PROCESSING, AUTHORIZED, ERROR, CANCELED) and explaining what each means, including side effects like populating fields. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences. The first states purpose, the second provides status details and safety reassurance. No wasted words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description covers return values by listing statuses and their implications. It mentions that AUTHORIZED populates fields like numero and url. Parameter coverage is complete. Lacks a complete output structure but sufficient for a query tool with readOnlyHint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds minimal extra meaning: it reiterates that 'ref' comes from create_invoice and that provider can be omitted for auto-routing, mostly redundant with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'check', the resource 'Brazil NFS-e', and the context 'created by create_invoice, using its ref'. It also lists the possible status values, which differentiates it from sibling tools create_invoice and cancel_invoice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes 'Safe to call anytime' and implies polling for PROCESSING status. While it doesn't explicitly state when not to use it or contrast with alternatives, the sibling tools have distinct purposes, and the description is clear enough for most use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources