Skip to main content
Glama
monkaS013

brasilapi-mcp

by monkaS013

brasilapi-mcp

An authored Model Context Protocol (MCP) server that exposes the public BrasilAPI as tools an LLM client (Claude Desktop, Claude Code, or any MCP host) can call: look up a CEP, a CNPJ, banks, FIPE vehicle prices, national holidays, and DDD area codes.

README em português

Why this exists

Consuming someone else's MCP server is easy; I wanted to prove I can build one — tool schemas, a typed HTTP client, and a boundary that keeps the whole thing testable. BrasilAPI is a good fit: it needs no API key and serves public data, so anyone can clone this and run it immediately, and every tool is exercised in tests without touching the network.

Related MCP server: MCP Brasil API

Tools

Tool

What it returns

cep

Address for a Brazilian postal code (accepts 01001-000 or 01001000)

cnpj

Company registration for a CNPJ (legal name, address, activity, status)

banks

Every bank registered at the Brazilian Central Bank

bank

A single bank by its numeric code (e.g. 001)

holidays

National holidays for a given year

ddd

State and cities served by a two-digit phone area code

fipe_brands

FIPE vehicle brands for carros, motos or caminhoes

fipe_price

FIPE reference price table for a model code

Install

pip install -e .

Dependencies are just mcp (the official Python SDK, v2) and httpx.

Run it

brasilapi-mcp            # runs the MCP server over stdio (what an MCP client launches)
brasilapi-mcp --help     # prints usage and exits, without opening a socket

The server speaks MCP over stdio — you normally don't run it by hand; an MCP client launches it and talks to it. python -m brasilapi_mcp.server works too.

Wire it into a client

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "brasilapi": {
      "command": "brasilapi-mcp"
    }
  }
}

If brasilapi-mcp isn't on your PATH, point command at your venv's script (e.g. .../.venv/Scripts/brasilapi-mcp on Windows) or use "command": "python", "args": ["-m", "brasilapi_mcp.server"].

Claude Code — one command:

claude mcp add brasilapi -- brasilapi-mcp

Then ask, in plain language: "what's the address for CEP 01001-000?" or "list the national holidays in 2026", and the model will call the matching tool.

Design — why it tests offline

The network sits behind an injectable boundary. BrasilAPIClient takes an optional httpx.Client/transport, so the test suite passes an httpx.MockTransport with canned JSON and runs with no real network I/O. The tool bodies are thin wrappers over plain, synchronous functions that take the client explicitly, so the logic is unit-testable in isolation, and a BrasilAPIError becomes a clean message the model can read instead of a traceback.

Testing

pip install -e ".[dev]"
pytest -q

The suite covers the client (every endpoint, input normalization, 404/500 handling) against a mock transport, the tool logic functions, and the server's tool registration. Nothing hits the network.

A note on the data

BrasilAPI is a public service and needs no key; this server stores no secrets and reads no environment variables. Live responses are owned by BrasilAPI and its upstream sources.

License

MIT — see LICENSE.

Available Tools

8 tools
bankA

Look up a single Brazilian bank by its numeric code (e.g. "001" for Banco do Brasil).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes

TDQS

A4.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only says 'look up', which implies a read operation, but omits error behavior, return format, and any potential side effects. For a read-only tool this is a notable gap.

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?

A single, well-structured sentence that front-loads the action and object, then explains the condition. No redundant words; every word 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?

For a simple single-parameter lookup, the description adequately tells the agent what the tool does and how to use it. It does not specify the return structure, but given the simplicity and lack of an output schema, this is a minor omission. The description is nearly complete.

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?

The schema merely defines 'code' as a string with no description; the description compensates by explaining the format ('numeric code') and providing a concrete example ('001' for Banco do Brasil). This fully bridges the 0% schema coverage.

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 states a specific verb ('Look up'), a well-defined resource ('a single Brazilian bank'), and the exact method ('by its numeric code') with a concrete example. This clearly distinguishes it from the sibling 'banks' tool, which presumably lists all banks.

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 context of use is clear: when you have a numeric bank code and need details for one bank. It does not explicitly mention alternatives or when not to use it, but the instruction is unambiguous enough for an agent to select this tool for single-bank lookups. A slight deduction for not differentiating from 'banks'.

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

banksA

List every bank registered at the Brazilian Central Bank.

Returns an array of banks, each with ispb, name, code and full name.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states the return format (array with fields ispb, name, code, full name), which is helpful, but it does not mention whether the operation is read-only, if there are any rate limits, authentication requirements, or potential errors. Since this is a simple listing tool, the behavior is fairly predictable, but without annotations or explicit safety hints, the description only partially covers transparency.

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 extremely concise: two short sentences that immediately state the action and the return structure. No fluff, no repetition. It front-loads the core purpose and packs the essential output details into the second sentence. Every word earns its place.

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?

For a tool with no parameters, no output schema, and no annotations, the description provides the essential information: what it returns and the fields. It does not mention use cases or related tools, but given the simplicity of the operation, the description is nearly complete. A minor gap is the lack of any note about pagination or data size, but that may be out of scope for this basic list tool.

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?

The tool has zero parameters, and the schema already reflects that (properties empty, coverage 100%). The description adds no parameter details, but none are needed. Per the baseline for 0-parameter tools, a score of 4 is appropriate because there is nothing more to explain about parameters.

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 function: 'List every bank registered at the Brazilian Central Bank.' It specifies the resource (banks) and the action (list), and the scope (every bank). This distinguishes it from sibling tools like 'bank' which likely fetches a single bank, so the purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as 'bank', 'cnpj', or others. The description does not mention any conditions, prerequisites, or exclusions. An agent has to infer when this list tool is the right choice, which is a gap for a tool with sibling tools that could overlap.

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

cepA

Look up a Brazilian postal code (CEP).

Accepts formats like "01001-000" or "01001000". Returns the address: state, city, neighborhood and street.

ParametersJSON Schema
NameRequiredDescriptionDefault
cepYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are present, so the description must disclose behavioral traits itself. It does state the return format ('Returns the address: state, city, neighborhood and street'), which is useful. However, it does not mention error handling, rate limits, or whether the operation is read-only (though that is implied for a lookup). The description adds some value beyond the schema but leaves room for more disclosure.

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 extremely concise, consisting of two short sentences that place the core purpose first and provide necessary format examples. Every sentence earns its place, with no filler or redundant information.

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?

For a simple lookup tool with one parameter and no output schema, the description is largely complete. It states the input format and the output fields (state, city, neighborhood, street). It could mention potential error cases or the read-only nature, but given the simplicity of the tool, this is sufficient.

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?

The schema has no parameter description coverage, and the description compensates by clearly defining accepted formats: 'Accepts formats like "01001-000" or "01001000".' This goes beyond the bare schema field type and gives the agent actionable formatting guidance, which is highly valuable.

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

Purpose4/5

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

The description clearly states the verb 'Look up' and the resource 'Brazilian postal code (CEP)', making the tool's function unambiguous. It does not explicitly distinguish itself from siblings like cnpj or ddd, but those are obviously different data types, so the absence of a named alternative is not a major drawback. It is specific and concise.

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

Usage Guidelines3/5

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

The description implies usage (a CEP lookup for Brazilian addresses) and provides format guidance, but it does not explicitly state when to use this tool versus alternatives or when not to use it. There is no mention of other tools or exclusions, so the guidance is implied rather than explicit.

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

cnpjA

Look up a Brazilian company by its CNPJ.

Accepts the number with or without punctuation. Returns registration data: legal name, trade name, address, main activity and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
cnpjYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the input can be with or without punctuation and lists the output fields, which is useful. However, it does not mention error behavior (e.g., invalid CNPJ, not found) or any rate limits/auth requirements, which could be relevant for an API-based lookup. For a read-only lookup, this is adequate but not comprehensive.

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 two sentences long, front-loads the purpose, and includes only high-value details (input flexibility and returned fields). Every word earns its place with no redundancy.

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?

For a simple one-parameter lookup tool without an output schema, the description covers the essential aspects: what it does, how to format the input, and what data is returned. It does not detail edge cases or exhaustive output, but given the low complexity, it is sufficiently 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.

Parameters4/5

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

The schema provides only the type 'string' with no description (0% coverage). The description compensates by explaining that the CNPJ can be provided with or without punctuation, which is a crucial formatting detail. It does not fully describe validation rules or length, but it adds significant meaning beyond the bare 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 states a specific verb ('look up'), a resource ('Brazilian company'), and an identifier ('CNPJ'), which clearly distinguishes it from sibling tools like cep (postal code) or banks. It also lists the returned fields, leaving no ambiguity about what the tool does.

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 clearly identifies the use case (company lookup by CNPJ) and implicitly differentiates it from other lookup tools (CEP, banks, DDD, etc.). It does not explicitly mention when not to use it, but the resource and identifier make the context unambiguous, placing it above 'implied usage' yet below explicit exclusion guidance.

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

dddA

Look up a Brazilian phone area code (DDD).

Returns the state and the list of cities served by the two-digit area code.

ParametersJSON Schema
NameRequiredDescriptionDefault
dddYes

TDQS

A3.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states what is returned and does not mention that this is a read-only operation, whether authentication is required, what happens on invalid input, or any other behavioral traits. This is a significant gap for a tool with zero annotation coverage.

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 short sentences with no filler. The main purpose is stated first, and the outcome is described immediately. Every word contributes to understanding the tool's function. This is a model of concise, front-loaded documentation.

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?

For a simple single-parameter lookup tool, the description is nearly complete: it identifies the input, the operation, and the output. The absence of an output schema is partially mitigated by the explicit statement of what is returned. However, it does not mention error behavior or any edge cases (e.g., invalid DDD), which an agent might encounter. Still, the core information needed to invoke it correctly is present.

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?

The schema provides no description for the parameter 'ddd' (0% coverage), so the description must compensate. It adds that the parameter is a two-digit area code, which gives meaningful semantic context beyond the bare schema property. However, it does not specify format constraints (e.g., exactly two digits, numeric only) or error handling for malformed input, so compensation is partial.

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 (look up), the resource (Brazilian phone area code / DDD), and the expected output (state and list of cities). It is specific enough to differentiate from sibling tools like cep, cnpj, banks, etc., which operate on entirely different data domains.

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 conveys its use case implicitly: querying a Brazilian DDD to get state and cities. It does not explicitly mention alternatives or exclusions, but the context of sibling tools makes it clear that this is the dedicated DDD resolver. There are no pitfalls or prerequisites to warn about, so the guidance is adequate.

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

fipe_brandsA

List FIPE vehicle brands for a type.

vehicle_type must be one of: carros, motos, caminhoes.

ParametersJSON Schema
NameRequiredDescriptionDefault
vehicle_typeYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action (listing brands) but does not disclose any additional behavioral traits such as response format, ordering, rate limits, or side effects. For a read-only listing operation, this is minimal but not contradictory; still, it leaves the agent uninformed about what the returned data will look like beyond the implied list of brand strings.

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 two short sentences with no fluff. The purpose is front-loaded in the first sentence, and the constraint is placed second. Every word earns its place, making it easy for an agent to parse quickly.

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?

For a tool with a single parameter, no output schema, and a straightforward list operation, the description is largely complete. It specifies the allowed parameter values and the core purpose. It does not describe the return structure, but that is not critical for a simple listing tool. It could optionally mention that the response contains brand names, but the lack of this is a minor gap.

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?

The schema only defines vehicle_type as a string with no enum or description (coverage 0%). The description compensates by explicitly listing the valid values ('carros, motos, caminhoes'), which adds critical semantic value beyond the schema. It does not explain the meaning of each value, but they are self-explanatory for the FIPE domain, so this is adequate.

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 action ('List'), the resource ('FIPE vehicle brands'), and scopes it by 'for a type.' This is specific and distinguishes it from the sibling fipe_price, which deals with pricing. The allowed vehicle types are explicitly enumerated, leaving no ambiguity about what the tool does.

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

Usage Guidelines3/5

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

The description provides a hard constraint on the parameter ('vehicle_type must be one of...') which is useful, but it gives no guidance on when to use this tool versus alternatives like fipe_price. It does not mention that this is for listing brands as opposed to other FIPE operations, nor does it advise against using it for other vehicle types. The usage context is implied but not explicit.

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

fipe_priceC

Look up the FIPE price table for a vehicle model code.

Returns the reference prices (value, brand, model, model year, fuel).

ParametersJSON Schema
NameRequiredDescriptionDefault
fipe_codeYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It lists the returned fields, which is some transparency, but does not state that this is a read-only operation, the currency of the price data, whether multiple model years are returned, or error behavior for invalid codes. The 'Returns...' clause is largely a restatement of expected output rather than deeper behavioral context.

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

Conciseness4/5

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

Two sentences with the action front-loaded and no filler. Every clause earns its place, though slightly more content (e.g., usage note) could justify a 5.

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

Completeness3/5

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

A simple single-parameter tool, but with the sibling fipe_brands likely producing the code, the description omits the workflow connection and how the code is obtained. Return fields are enumerated adequately, yet an agent must infer the prerequisite step. Adequate but with clear gaps.

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 0%, so the description must compensate. 'Vehicle model code' does clarify that fipe_code refers to a vehicle model identifier, adding meaning beyond the schema's bare 'Fipe Code' title. However, it omits any format expectations, how to source the code, or validity rules.

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

Purpose4/5

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

States a specific verb ('Look up'), an explicit resource (FIPE price table), and identifies the input as a 'vehicle model code.' The listed return fields (value, brand, model, model year, fuel) reinforce the tool's purpose. It is domain-distinct from siblings like cep/cnpj, though it doesn't explicitly contrast itself with the closely related fipe_brands.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus its sibling fipe_brands, nor on how a valid fipe_code is obtained (likely from fipe_brands). There are no prerequisites, exclusions, or workflow hints, leaving the agent to infer the lookup sequence on its own.

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

holidaysA

List Brazilian national holidays for a given year.

Returns an array of holidays, each with date, name and type.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does state that it returns an array of holidays with date, name, and type, which is a useful behavioral detail. However, it does not disclose potential error cases (e.g., invalid year ranges), the date format (e.g., ISO), or any limitations on historical/future years. For a simple read-only lookup, this is acceptable but not thorough, hence a 3.

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 consists of two concise sentences: the first states the core purpose, the second outlines the return format. There is no redundant verbiage, and the most critical information (what the tool does) is front-loaded. It is an appropriately sized and well-structured description.

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

Completeness3/5

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

The tool is simple (one integer input, outputs an array of objects), but with no output schema, the description must explain the return values more thoroughly. It only mentions 'date, name and type' without specifying the date format or the possible types (e.g., 'national', 'observance'). It also lacks details on edge cases like leap years or invalid years. While adequate for a basic lookup, it is not fully complete for an agent to predict all responses.

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

Parameters2/5

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

The description merely restates that the year is an input ('for a given year') without adding any meaning beyond the schema's property name. The schema has 0% description coverage, so the description must compensate by specifying format, range, or constraints, but it does not. The sole parameter 'year' is left underdocumented, making it hard for an agent to know valid inputs. This is a clear gap.

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 'List', the resource 'Brazilian national holidays', and the scope 'for a given year'. It unambiguously distinguishes this tool from siblings like 'cep' or 'banks' which handle different Brazilian data domains. The return structure is also declared, leaving no doubt about the tool's function.

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

Usage Guidelines3/5

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

There is no explicit guidance on when to use this tool versus alternatives, but since none of the siblings overlap in purpose, it is implicitly the only tool for holiday queries. However, the description does not state any exclusions or conditions (e.g., only national holidays, not state-level), which would help an agent decide when to rely on it. The usage context is clear but not explicitly framed.

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. Dates show when Glama detected each change.

  1. 8 tool updatesv0.1.0
    • First observedbank
    • First observedbanks
    • First observedcep
    • First observedcnpj
    • First observedddd
    • First observedfipe_brands
    • First observedfipe_price
    • First observedholidays

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct Brazilian data resource — postal codes, CNPJ, banks, holidays, area codes, and FIPE data. There is no overlap or ambiguity; even banks and bank are clearly separated as list vs single lookup. An agent can easily select the correct tool based on the resource name.

Naming Consistency4/5

All tool names are lowercase and represent the resource they query, following a consistent pattern of using the resource name directly. The only minor inconsistency is the underscore in 'fipe_brands' and 'fipe_price' versus the single-word names like 'cep' and 'cnpj', but this is a stylistic variation that doesn't hinder predictability.

Tool Count5/5

With 8 tools, the server is well-scoped and stays within the sweet spot for usability. Each tool covers a distinct endpoint from the Brasil API, and the number is neither too thin nor overwhelming for the domain of Brazilian public data lookups.

Completeness4/5

The tool surface covers a broad range of common Brazilian data lookups, including location (cep, ddd), legal entities (cnpj), banking, holidays, and vehicle pricing. A notable gap is the lack of a FIPE model listing step between brand and price, which could force agents to work around missing intermediate data, but overall the coverage is solid for the selected domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Query a variety of data from Brasil resources seamlessly. Access information on postal codes, area codes, banks, holidays, taxes, and more through a unified interface. Enhance your AI agents and applications with rich and updated data from BrasilAPI effortlessly.
    6
    7
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to query Brazilian public data such as CEP, CNPJ, DDD, exchange rates, banks, and holidays via the Model Context Protocol.
    12
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Exposes the BrasilAPI as MCP tools, enabling AI agents to query Brazilian public data such as CEP, CNPJ, DDD, IBGE, banks, PIX, FIPE, NCM, exchange rates, taxes, weather, CVM information, holidays, ISBN, domains, stock tickers, and TUSS.
    41
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Brazilian company-registry lookup via Receita Federal, allowing AI agents to query CNPJ data.
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/monkaS013/brasilapi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server