Skip to main content
Glama
monkaS013

brasilapi-mcp

by monkaS013

brasilapi-mcp

직접 작성한 Model Context Protocol(MCP) 서버로, 공개 BrasilAPI를 LLM 클라이언트(Claude Desktop, Claude Code 또는 모든 MCP 호스트)가 호출할 수 있는 도구로 노출합니다. CEP, CNPJ, 은행, FIPE 차량 가격, 공휴일, DDD 지역 번호를 조회할 수 있습니다.

포르투갈어 README

왜 만들었는가

남이 만든 MCP 서버를 사용하는 것은 쉽습니다. 저는 만드는 것도 할 수 있다는 것을 증명하고 싶었습니다. 도구 스키마, 타입이 지정된 HTTP 클라이언트, 그리고 전체를 테스트 가능하게 유지하는 경계까지요. BrasilAPI는 잘 맞습니다. API 키가 필요 없고 공개 데이터를 제공하기 때문에 누구나 이 저장소를 클론해서 바로 실행할 수 있고, 모든 도구는 네트워크에 닿지 않은 채 테스트로 검증됩니다.

Related MCP server: mcp-brasilapi

도구

도구

반환 내용

cep

브라질 우편번호에 대한 주소(01001-000 또는 01001000 허용)

cnpj

CNPJ에 대한 회사 등록 정보(법인명, 주소, 업종, 상태)

banks

브라질 중앙은행에 등록된 모든 은행

bank

숫자 코드(예: 001)로 단일 은행

holidays

주어진 연도의 공휴일

ddd

두 자리 전화 지역 번호가 서비스하는 주와 도시

fipe_brands

carros, motos 또는 caminhoes에 대한 FIPE 차량 브랜드

fipe_price

모델 코드에 대한 FIPE 기준 가격표

설치

pip install -e .

의존성은 mcp(공식 Python SDK v2)와 httpx뿐입니다.

실행

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

서버는 stdio를 통해 MCP를 사용합니다. 보통 직접 실행하지 않습니다. MCP 클라이언트가 서버를 실행하고 통신합니다. python -m brasilapi_mcp.server도 동작합니다.

클라이언트에 연동하기

Claude Desktop — claude_desktop_config.json에 추가하세요:

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

brasilapi-mcp가 PATH에 없다면 command를 venv의 스크립트(예: Windows의 .../.venv/Scripts/brasilapi-mcp)로 지정하거나 "command": "python", "args": ["-m", "brasilapi_mcp.server"]를 사용하세요.

Claude Code — 명령어 하나:

claude mcp add brasilapi -- brasilapi-mcp

그런 다음 자연어로 "CEP 01001-000의 주소는 무엇인가요?" 또는 *"2026년 공휴일을 나열해 주세요"*라고 물어보세요. 그러면 모델이 해당 도구를 호출합니다.

설계 — 오프라인에서 테스트하는 이유

네트워크는 주입 가능한 경계 뒤에 있습니다. BrasilAPIClient는 선택적인 httpx.Client/transport를 받으므로 테스트 스위트는 미리 준비된 JSON을 담은 httpx.MockTransport를 전달하고 실제 네트워크 I/O 없이 실행됩니다. 도구 본문은 클라이언트를 명시적으로 받는 단순한 동기 함수의 얇은 래퍼이므로 로직을 개별적으로 단위 테스트할 수 있고, BrasilAPIError는 traceback 대신 모델이 읽을 수 있는 깔끔한 메시지가 됩니다.

테스트

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

테스트 스위트는 mock transport를 상대로 클라이언트(모든 엔드포인트, 입력 정규화, 404/500 처리), 도구 로직 함수, 서버의 도구 등록을 다룹니다. 네트워크에는 전혀 닿지 않습니다.

데이터에 관한 참고 사항

BrasilAPI는 공개 서비스이며 키가 필요 없습니다. 이 서버는 비밀을 저장하지 않고 환경 변수를 읽지 않습니다. 실제 응답은 BrasilAPI와 그 업스트림 소스의 소유입니다.

라이선스

MIT — LICENSE를 참조하세요.

Available Tools

8 tools
bankA

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

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.

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.

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.

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.

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.

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).

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.

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.

  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

Scored across 8 tools

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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
    D
    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
    A
    quality
    C
    maintenance
    Enables lookup of Brazilian public data including companies (CNPJ), postal codes (CEP), banking, economy, geography, and more through 15 tools and 2 guided prompts, powered by BrasilAPI with no API key required.
    15
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to query Brazilian public data from IBGE, Banco Central, INMET, and Câmara dos Deputados, including population, economic indicators, weather observations, and legislative information, without requiring API keys for most tools.
    14
    26 PyPI
    2
    MIT