SUS healthcare MCP
Provides tools for querying CNES facility capacity data, including registered SUS beds, facility types, services, and authorizations from reviewed CNES snapshots.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SUS healthcare MCPCheck coverage, then show 2025 tafamidis billing by municipality"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SUS healthcare MCP
Ask questions about Brazil's public healthcare data from an MCP client: hospital and outpatient activity, facility capacity, mortality, and selected rare-disease billing patterns.
This is a read-only, fixed-vintage analytical service. It returns reviewed aggregate views, not patient records.
Use the hosted MCP
Add this Streamable HTTP server URL to an MCP client that supports remote servers:
https://sus-health-mcp.fly.dev/mcpNo API key is required. Start with dataset_info, then dataset_coverage to check the scope and warnings before interpreting results. The public instance limits traffic to 40 HTTP requests per minute per client IP.
Example questions:
Which municipalities have visible E85.1 / tafamidis 20 mg billing in 2025?
Where is billing recorded outside the municipality of residence?
What registered SUS bed capacity is available in a reviewed CNES snapshot?
Questions are translated into the fixed tools below by your MCP client. The server does not offer arbitrary SQL or every possible drug filter.
Tool | What it returns |
| Serving scope, vintages and limitations |
| Reviewed periods and source gaps |
| CNES beds, facility types, services and authorizations |
| Annual municipality/CID record intervals |
| Reviewed E85.1 billing and residence-to-billing municipality flows |
| Related E85 codes, tafamidis 61 mg, and separate nonspecific workup billing views |
| Dated code/name lookup; ambiguous matches are listed |
| Exact dated/auxiliary/unmapped code labels |
| Cursor-bound complete retrieval of existing visible cells |
| Query-specific units, time basis, sources and limitations |
| Reference vintages and frozen source coverage |
| SIM death-certificate record intervals by cause, role chain or reselection status |
| Scope, encodings, withholds and dictionary coverage for the SIM views |
| Published PAINEL-Oncologia national aggregates in six fixed views |
| Sources, panel update date and citation for the oncology reference |
| Principal-secondary and secondary-secondary RD pair record intervals by exact CID, residence UF and year |
| Served vs withheld shares and optional exact-CID coverage for the pair views |
| Scope, pair semantics, privacy floor and record-selection deviation for the pair views |
Related MCP server: lakebrasil-mcp
Mortality and oncology reference
sim_template_page returns interval-bounded counts of death-certificate records from the Mortality Information System (SIM), 2022-2024 final files and 2025-2026 preliminary files, by exact ICD-10 code and residence UF (Federal District excluded). The unit is a certificate record, never a person, and records are never linked across certificates or to any other dataset. Source files contain exact duplicate certificate rows, so counts are certificate records as filed, not deduplicated events. The 2025 and 2026 files are preliminary vintages that DATASUS revises. Cells under 20 records and targeted complementary margins are withheld; an absent cell is unknown, never zero. Three fixed views are served: underlying cause, certificate role chain and reselection status. Underlying-cause x co-recorded-cause pair detail is not served. sim_template_methods returns the scope, packed-field encodings, withholds and dictionary coverage (CNVS CID-10 v2019).
oncology_reference_page republishes unchanged six national aggregate views from the DATASUS TabNet PAINEL-Oncologia panel, by diagnosis year 2013-2026 with 2026 partial: grouped and detailed diagnosis, residence UF, time to first treatment under Law 12,732/2012, treatment modality and staging. These are exact counts exactly as DATASUS publishes them (panel data updated 15 October 2026), not recomputed values. oncology_reference_methods returns the source URLs, panel update date and citation. Cite DATASUS when using these numbers.
Co-diagnosis pairs in admission records
codiagnosis_pairs returns interval-bounded counts of co-recorded diagnosis pairs within single SIH RD (hospital admission) billing records, by exact ICD-10 code, residence UF and processing-file year (2022-2025 full; January-July 2026 partial; Federal District and unknown residence excluded). Two fixed views are served: principal x secondary (directed) and secondary x secondary (unordered). The unit is one billing record, never a person, and a pair is a record co-occurrence, not patient comorbidity prevalence. About 22.4% of RD records carry a valid principal-secondary pair. Cells under 20 records are withheld entirely; served cells are aligned 10-wide intervals, and an absent cell is unknown, never zero. Associated-role codes and the PA and AM families are excluded in v1, as is a principal repeated as its own secondary. Raw-row pair counts can sit up to +0.4% above live marginal counts (one-directional, from the shared record-selection rule). codiagnosis_coverage returns served and withheld shares globally or for one exact CID. codiagnosis_methods returns the full scope, pair semantics and limits.
Run the example client
Python 3.10+ is required. Clone this repository, then install the Python package and example scripts:
git clone https://github.com/bnovarini/sus-health-mcp.git
cd sus-health-mcp
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[build,test]'
python scripts/query_remote.py list
python scripts/query_remote.py dataset_info
python scripts/query_remote.py known_care_activity \
--arguments '{"uf":"RJ","year":2025,"view":"residence","limit":100}'On Windows, activate with .venv\Scripts\activate.
Check the returned truncated flag. A truncated response is not a complete list. Use released_cells_page and follow next_cursor until null for complete retrieval of the existing visible lattice. Missing cells remain unknown, not zero. Complete file exports are owner-only; no public file-download route exists. See FOUNDATION.md for reference sources, self-hosting and residual bulk-access risk.
Local setup without real data
The repository includes no data artifacts, credentials, raw health files or usage logs. The following creates a clearly labeled fictional registry fixture so you can test the serving code:
python scripts/create_demo.py
SUS_STAGED_DATA=data/demo SUS_USAGE_DB=/tmp/sus-usage.db \
python -m sus_health_mcp --httpIn another terminal, using the same virtual environment:
curl http://localhost:8080/healthz
python scripts/query_remote.py dataset_info --url http://localhost:8080/mcp
python scripts/query_remote.py facility_capacity --url http://localhost:8080/mcp \
--arguments '{"uf":"SP","year":2024,"month":1,"family":"LT"}'
python -m pytest -qThe demo exposes only registry tools. Its one row is fictional and cannot reproduce the hosted results.
Self-hosting reviewed artifacts
Real-data self-hosting needs separately built and reviewed artifacts. They are not downloadable from this repository. Copy only reviewed serving artifacts into the following directories:
Environment variable | Required files |
|
|
|
|
|
|
|
|
Enable the additional fixed tools with SUS_ENABLE_CLINICAL_2024=true, SUS_ENABLE_KNOWN_CARE=true, and SUS_ENABLE_DEEPER=true. The historical CLINICAL_2024 flag name is retained, but the metadata defines the actual years. Hash checks reject altered artifacts. Period gates reject unverified registry periods.
The Dockerfile installs the code only. Mount reviewed registry artifacts at /data/staged and set the other paths and activation flags as needed. The default HTTP host allowlist is the hosted domain plus localhost and 127.0.0.1; review staged_server.py before serving under another domain. Do not disable host validation to work around deployment errors.
The ingestion code in src/sus_health_mcp/build.py can inventory and aggregate publisher files. Ingestion is not a one-command reproduction of the reviewed hosted release: reconciliation, dated code checks and joint disclosure review are separate steps. Experimental modules are retained for inspection; staged_server.py is the serving implementation used here.
Data scope
Snapshot checked on 14 October 2026. Always consult the live metadata for the current scope.
SIH RD, SIA PA and AM: 2022-2025 full processing-file years; January-July 2026 partial.
CNES ST, LT, SR and HB: 2022-2025 monthly snapshots; January-August 2026 partial. SR/AP August 2024 remains unavailable.
SIM: 2022-2024 stable; full-year 2025 preliminary; January-August 2026 preview. SIM is national mortality data, not SUS-only, and follows death year.
SINASC, SINAN and person linkage are out of scope.
SIH source totals do not exactly match publisher morbidity AIH totals. The differences match principal CID codes absent from the current auxiliary dictionary, but the publisher conversion has not been independently confirmed. AM matching independent publisher totals also remain unverified. Neither issue was "fixed" by dropping or changing source rows. Missing source periods are reported as gaps, not zero activity.
Reading the results
Clinical and billing views use a 20-record minimum, width-10 intervals, targeted withholding and Federal District exclusion. These controls do not guarantee anonymity or 20 distinct people. One person can generate repeated billing records.
Records are not patients, prevalence, diagnoses or untreated need.
Unmarked or absent cells are unknown, not zero.
Billing-provider municipality is not a confirmed clinical hospital or proof of patient travel.
Registered capacity is not occupancy, appointment availability or a disease-specific service guarantee.
Changes across years can reflect coding and reporting, not disease growth.
No patient-finding yield, cost saving or clinical risk score has been validated.
Source families come from DATASUS. This project is not affiliated with DATASUS or Brazil's Ministry of Health. Data licensing and publisher terms are separate from the code license.
Development
The packaged unit tests use synthetic fixtures. Hosted-artifact integration checks are deliberately excluded because their data files are not distributed. No automatic vintage replacement is performed by the serving code.
The older bootstrap_source.py file is a legacy copy of the same source. It is not needed for setup; use the normal src/, tests/ and scripts/ tree.
Fixed state activity
The optional state_activity_page and state_activity_methods tools add separate annual residence-UF CID and procedure source-record intervals. Read STATE_ACTIVITY.md for scope, units and limits. Set both SUS_FOUNDATION_DATA and SUS_STATE_DATA to separately supplied frozen artifacts. This repository contains only code and synthetic tests, not clinical data or private disclosure-review material.
Annual series and population context
Optional annual_activity_series and annual_series_methods compose existing frozen state intervals with a stated population vintage. See ANNUAL_SERIES.md. Set SUS_SERIES_DATA alongside the state/foundation artifact directories. No population workbook or clinical data is bundled here.
Provider activity and administrative catchments
The hosted service now has 17 tools. provider_activity_methods describes the fixed release; provider_activity_page returns separate provider-CID, provider-procedure or residence-UF interval margins. Exact establishment and provider municipality are required. No joint filters or exact totals.
Read PROVIDER_ACTIVITY.md for coverage, billing-record units, dated-registration identity limits and disclosure caveats. The tested known-support model adds no new or stronger small-cell positive bound, but 633 positive bounds already implied by earlier releases remain unchanged. This is not a general privacy guarantee or evidence of patient identification.
Reference reimbursement and registered-capacity context
The hosted service has 29 tools. reimbursement_reference returns dated separate SIGTAP SH/SA/SP reference components, not actual payments or prices. provider_activity_context places unchanged annual provider-procedure record intervals beside an explicitly chosen monthly CNES snapshot and that month's reference. See REFERENCE_CONTEXT.md. No ratios, utilization/shortage scores, rankings, payment multiplication or new clinical cells are introduced. Annual records are not assumed to fall in the selected month; missing is unknown, not zero.
Data revisions
27 October 2026: The fixed SIGTAP reference was extended through October 2026 (January 2022-October 2026; 58 monthly vintages). The September and October 2026 tables were added from the current DATASUS publisher archives. The previous 56 vintages were preserved unchanged. The fixed reference now contains 279,932 procedure-month rows and 1,330,130 dated procedure-relation rows. This is reference metadata only; no clinical or facility data changed. See REFERENCE_CONTEXT.md for the scope and interpretation limits.
19 October 2026: Co-diagnosis pair views added (
codiagnosis_pairs,codiagnosis_coverage,codiagnosis_methods); release IDcodiagnosis-rd-20261019. Existing tools unchanged.17 October 2026: DATASUS re-published the SIH RD processing files for September 2025 through July 2026. The hosted RD2025 and RD2026 tables were re-anchored to the re-released files (net +91,269 source records; RD2026 loses 75 released cells that fell under the 20-record minimum). Earlier published RD2025/RD2026 intervals are superseded. Current release IDs:
clinical-2022-2026-SIMpreviews-20261017-rdrepub,phase2-state-record-margins-20261017-rdrepub,phase4-provider-20261017-rdrepub,registry-fixed2022-2026partial-20261017-rdrepub.
Available Tools
7 toolsdataset_coverageD
Inventory and publisher gates, never treat unpublished months as zero.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| family | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only hints at an unpublished-months caveat. It does not disclose whether the tool is read-only, what 'publisher gates' means operationally, or what the return behavior is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only one sentence, but it is under-specified rather than efficient. The key caution is not front-loaded with enough context to make the sentence actionable.
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 no annotations, no output schema, two undocumented parameters, and 0% schema description coverage, the description is far too sparse. It omits what the tool returns, how year and family affect coverage, and how to interpret unpublished months.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the two parameters, year and family, and the description does not mention either one. The agent receives no explanation of what these parameters filter or how defaults should be interpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description does not state a clear verb and resource; 'Inventory and publisher gates' is cryptic, and 'never treat unpublished months as zero' is a warning rather than a purpose statement. It does not distinguish this tool from siblings such as dataset_info.
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?
There is no guidance on when to call this tool versus alternatives. The unpublished-months caution is useful but does not tell the agent what conditions select dataset_coverage over dataset_info or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_infoA
Call first: coverage, vintage, units, privacy release and audit status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It usefully lists the returned attributes (vintage, units, privacy release, audit status), which is valuable given there is no output schema, but it never states that the operation is read-only/side-effect free, nor what 'privacy release' or 'audit status' actually mean or what form the response takes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single telegraphic clause with the most important instruction ('Call first') front-loaded and zero filler. Nothing could be removed without losing information.
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 no output schema and no annotations, the description must convey what the agent gets back, and it does so by enumerating the metadata categories. It falls short only in not defining the jargon terms or confirming read-only behavior, which is minor for a zero-parameter info call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly spends no words on arguments and instead describes the return content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource implicitly (the dataset) and enumerates exactly what metadata it returns: coverage, vintage, units, privacy release and audit status. That is a clear purpose an agent can grasp without the schema. It does not, however, distinguish itself from the sibling 'dataset_coverage', which overlaps on the coverage dimension.
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?
'Call first' is an explicit, actionable ordering directive that tells the agent when to invoke this relative to the other tools. There are no when-not conditions or named alternatives, but for an entry-point metadata tool the sequencing guidance is the main thing needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecological_hitsC
Pre-reviewed fixed multi-signal ecological hits, not patient case finding.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | Yes | ||
| year | Yes | ||
| limit | No | ||
| context | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. Saying results are 'pre-reviewed fixed' hints that the data is curated/static rather than live, and 'not patient case finding' clarifies the aggregation level, but it says nothing about read-only behavior, permissions, result shape, or how the fixed dataset is scoped.
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?
It is a single front-loaded sentence with no filler, which is structurally efficient. The brevity, however, crosses into under-specification rather than useful concision.
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 four-parameter tool with no annotations, no output schema, and zero schema description coverage, the description leaves the agent without enough information to invoke it correctly. Critical details about parameter semantics and expected results are entirely absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no information about the four parameters. It never explains what 'context', 'year', 'uf', or 'limit' mean or what values are expected, so it fails to compensate for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource ('ecological hits') and adds qualifiers ('pre-reviewed fixed multi-signal'), but supplies no verb and never explains what a 'hit' is or how it differs from the sibling tools. It is closer to an expanded restatement of the tool name than a clear statement of purpose.
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 phrase 'not patient case finding' gives an explicit when-not signal and implies this is for population/ecological-level analysis rather than individual case lookup. However, it names no sibling alternative and gives no positive when-to-use condition beyond that exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facility_capacityC
Registered capacity by facility; inpatient/complementary bed types remain separate.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | Yes | ||
| year | Yes | ||
| limit | No | ||
| month | Yes | ||
| family | No | LT | |
| municipality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and no output schema mean the description carries full behavioral burden, but it only states a data-content nuance. It omits read-only status, permission needs, pagination/limit behavior, and return shape for a six-parameter retrieval tool.
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?
It is a single front-loaded sentence with no filler, and the bed-type caveat is clearly attached. It is terse for a six-parameter tool, but that under-specification is better captured under contextual completeness than as verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, 0% schema description coverage, no annotations, and no output schema, the description is far too incomplete. It conveys the dataset subject but little of what an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters, so the description needed to explain uf, year, month, limit, family, and municipality. It adds only vague domain context ('facility', 'bed types') and leaves required parameters and abbreviations unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource and dimension: registered capacity by facility, with inpatient/complementary bed types kept separate. It lacks an explicit action verb and sibling contrast, but the purpose is still clear enough for an agent to recognize the dataset.
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?
There is no statement of when to use this tool instead of siblings like dataset_info, dataset_coverage, or geographic_signals, and no exclusions or prerequisites. Scope is only implied by 'by facility' and the bed-type note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fixed_proxy_activityD
Reviewed fixed ecological proxy cells. No flexible CID/procedure intersections.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | Yes | ||
| year | Yes | ||
| limit | No | ||
| proxy | Yes | ||
| municipality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it never clarifies whether this is a read, whether results are paginated (the limit parameter defaults to 30), what the default ordering is, or what the response contains. 'Reviewed' weakly implies a read, but nothing about permissions, side effects, or result shape is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, but the brevity is under-specification rather than economy: the text is front-loaded with a vague verdict-like phrase instead of the operation and scope an agent needs first.
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?
A five-parameter, three-required query tool with no annotations, no output schema, and no enum constraints needs the description to carry nearly everything, and it carries almost nothing. The agent has no basis to choose this tool over ecological_hits or geographic_signals, or to construct a valid call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, including three required ones (proxy, year, uf) plus limit and municipality, and the description explains none of them. The agent gets no guidance on format for year or uf, no meaning for proxy, and no hint that limit controls page size.
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?
"Reviewed fixed ecological proxy cells" restates the tool name in obscure domain jargon without a clear operation or resource outcome, and an agent cannot tell what it would actually receive. The only differentiating statement is a negative ('No flexible CID/procedure intersections') that references a sibling tool which does not exist in the provided list.
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?
There is no when-to-use guidance, no prerequisites, and no routing to any of the six listed siblings (dataset_coverage, ecological_hits, geographic_signals, etc.). The single exclusion clause hints at a scope boundary but does not tell the agent which conditions should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geographic_signalsC
Fixed annual municipal diagnosis activity intervals, not patients. Small cells omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | Yes | ||
| year | Yes | ||
| limit | No | ||
| family | No | RD | |
| cid_prefix | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that small cells are omitted and that the unit is activity intervals rather than patients, but it says nothing about permissions, query behavior, defaults, pagination, or result format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with no wasted sentences, but its terseness comes at the cost of clarity rather than being optimally informative. It is appropriately brief for a short definition but under-explains the tool.
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 five-parameter query tool with no annotations and no output schema, the description is far too thin. It gives one important caveat about small-cell suppression but leaves usage, parameters, and expected output largely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no information about any of the five parameters (uf, year, limit, family, cid_prefix). The parameter meanings are left entirely to the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a domain resource ('annual municipal diagnosis activity intervals') and distinguishes it from patient-level data, but it never states a clear action such as 'retrieve' or 'list' and remains ambiguous about what the tool actually returns. An agent cannot confidently tell from this text what geographic_signals does beyond producing some activity-interval aggregation.
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?
There is no explicit guidance on when to use this tool versus siblings such as fixed_proxy_activity or ecological_hits. The phrase 'not patients' hints at a unit-of-analysis distinction, but no alternatives or exclusion conditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
protocol_billing_associationC
Dated protocol/billing association only; never diagnosis or patient eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| disease | Yes | ||
| procedure | Yes | ||
| competence | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It usefully rules out diagnosis and patient eligibility, but says nothing about whether this is read-only or mutating, what permissions are needed, what side effects occur, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one terse sentence with no filler, and the negative constraint is front-loaded. However, it is a fragment rather than structured guidance, and its brevity comes at the cost of necessary detail for a three-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three required undocumented parameters and no output schema, the description is far too thin. It states only a scope exclusion and leaves the agent without the positive purpose, input semantics, or expected result.
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?
All three required parameters (disease, procedure, competence) have 0% schema description coverage, and the description mentions none of them. It provides no explanation of what values to supply or how the parameters combine to form an association.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a fragment that names a resource ('Dated protocol/billing association') and a negative scope ('never diagnosis or patient eligibility'), but it never states a clear action or what the association produces. It does not distinguish this tool from any sibling, all of which appear unrelated.
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 only guidance is a negative exclusion: 'never diagnosis or patient eligibility'. There is no positive statement of when to use this tool, what problem it solves, or which sibling to use instead, so an agent must guess the triggering context.
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.
7 tool updates
v0.1.0- First observed
dataset_coverage - First observed
dataset_info - First observed
ecological_hits - First observed
facility_capacity - First observed
fixed_proxy_activity - First observed
geographic_signals - First observed
protocol_billing_association
TDQS
Scored across 7 tools
dataset_info and dataset_coverage both describe coverage/availability metadata, making them easy to confuse. geographic_signals, fixed_proxy_activity, and ecological_hits all return fixed ecological/proxy signals with subtle jargon-based distinctions that an agent may not reliably parse.
All names are snake_case noun phrases with no camelCase or mixed-style violations, so the surface is readable. However, there is no consistent verb_noun action pattern and prefix conventions vary (dataset_* versus standalone noun phrases).
Seven tools is well within the ideal 3–15 range for a domain-specific data server. Each tool maps to a distinct data product or metadata concern, so the count feels well-scoped.
The surface covers metadata, coverage, geographic signals, facility capacity, proxy activity, ecological hits, and protocol/billing association, which is broad for ecological SUS data. A minor gap is the absence of an explicit data dictionary/variable lookup or flexible query/filter tool, but core read-only data products are present.
Maintenance
Related MCP Connectors
DATASUS SIH/SUS hospital admissions in Brazil (AIH, 1992-2025): ICD-10 causes, ICSAP, rates.
IBGE: geography, census, economy and health from the official APIs, with provenance. 23 tools.
Discover, resolve, and query official Brazilian economic data with semantic search and provenance.
Read-only cited financial datasets, bounded research queries and source diagnostics.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables querying health establishment data from the Brazilian Federal Council of Medicine (CFM), providing read-only access to official information.MIT
- AlicenseNot gradedqualityBmaintenanceEnables agents to query 153 live Brazilian government data tools across federal and state sources, including economy, legislature, judiciary, elections, health, education, and more, reading directly from original APIs.MIT
- AlicenseAqualityAmaintenanceEnables analysis of Brazilian public hospital admissions (SIH/SUS) focusing on primary care-sensitive conditions, with tools for querying annual cubes, monthly series, and municipal rates per 100,000 inhabitants from 1992 to 2025.12870 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural-language querying of Brazilian public health indicators from DataSUS microdata — mortality, dengue, hospitalizations, ICSAP, and births — through 41 tools covering consultation, analysis (peer-stratum comparison, dengue endemic channel, weekly bulletin), reliability warnings, and anomaly detection. It runs locally against the public API with anti-hallucination rules so every figure comes from a tool with its source cited.MIT