Skip to main content
Glama

List Regulations

list_regulations
Read-onlyIdempotent

Regulations (normativas, decretos, resoluciones) — list, search, or fetch one by id, in a single tool. Authoritative, primary-source data from official gazettes and issuing-agency portals, refreshed daily-to-twice-daily. It is a gazette feed, not a compendium of law in force: '¿cuál es la normativa vigente para X?' gets case-by-case acts, so say that rather than presenting them as the framework.

No id (default): paginated list across country_code (comma-separated; omit for every accessible/your default country). Filter by rtype_id (use list_regulation_types() to discover valid IDs), entity_id (use list_entities(q="") to discover valid IDs) — comma-separated for several at once, since a sector like 'automotriz' spans MinTransporte, MinComercio, MinAmbiente and the tax authority — exclude_rtype_id (drop the nombramientos/autorizaciones churn that dominates a ministry's daily feed), or a since/until date range.

Have the norm's number? Use number, not q — e.g. number="0091" or number="Decreto 0091 de 2026". Matched number-for-number against title and short name with leading zeros ignored, so '0091' and '91' are one query; add the year to narrow it. If nothing matches exactly, say so AND report the near misses you did find — a norm with that number from a different entity is useful information, not a miss.

Only know the topic? q tries the hybrid/semantic engine first, then falls back to a keyword match over BOTH title and summary. That summary half is what makes topical search work at all in several countries, where the title is only an identifier ('Decreto exento número 190, de 2026') and the subject lives in the summary. Semantic hits carry a relevance score (cosine) and a rerank score (cross-encoder). Cite rerank, not relevance: measured on production, similarity sits near 0.6 for almost anything and 58% of the rows that clear min_similarity are rejected by the reranker, whose sign separates them cleanly. Rows below min_rerank are dropped and reported under empty_result.near_misses when nothing else survives.

⚠️ Cite display_title when it is present. In most countries the gazette title is only an identifier ('Resolución 0829 - 2026') and the subject matter lives in summary; display_title joins them into something a reader can act on. title stays exactly as the gazette printed it, for citation.

With id: ignores every other filter and returns full detail — title, type, issuing entity, publication date, and external_link (citable source URL, may be null).

Input Schema

NameRequiredDescriptionDefault
qNoSearch by subject matter. Do NOT put a norm's number here — use `number`. Semantic first, then a keyword match over title AND summary; that summary half matters, because in several countries the title is only an identifier and the subject lives in the summary.
idNoA regulation's own id. Set it to fetch that one record's full detail; every other filter is ignored.
limitNoRows per page (1-100, default 20). The response's `meta.has_more` and `meta.next_cursor` tell you whether there are more. `meta.total`, when it is not null, is the full count without paging; some lists return null rather than pay for a count. Raise the limit when you genuinely need a whole list in one call rather than the most relevant few.
sinceNoPublished on or after this date (YYYY-MM-DD).
untilNoPublished on or before this date (YYYY-MM-DD).
cursorNoOpaque pagination cursor from a previous response's `meta.next_cursor`. Pass every other filter unchanged when paging. Only ever use a cursor this API handed you — never build one. With `q`, a cursor continues the keyword listing (`meta.mode: "keyword_fallback"`): relevance-ranked results are a single page of at most 20 rows and report `has_more: false`, so if you got one there is no next page to ask for, and a `limit` above 20 adds nothing to it. Narrow `q` instead of paging.
numberNoFind a norm by its number, e.g. '0091' or 'Decreto 0091 de 2026'. Matched number-for-number with leading zeros ignored, so '0091' and '91' are one query; include the year to narrow it.
rtype_idNoKeep only this regulation type (list_regulation_types to discover IDs).
entity_idNoIssuing entity ID; several as '21,44' or [21, 44] — a sector usually spans more than one agency. Resolve names with list_entities(q='<name>').
min_rerankNoCross-encoder floor for the semantic branch of `q`. Rows the reranker scores below this are dropped; if that empties the result, what was rejected comes back under `empty_result.near_misses` so you can see what the index does hold. Pass null to disable the filter entirely.
country_codeNoISO alpha-2 country codes, comma-separated or as a list: 'BR,CO' or ['BR','CO']. Pass 'all' for every country you can access. Omitting it is NOT the same as 'all': logged in via OAuth it falls back to your own default country, and the response says so in `meta.country_scope`.
min_similarityNoCosine-similarity floor for the semantic branch of `q` (0-1). A coarse filter only: measured on production, 58% of the rows that clear it are then rejected by the cross-encoder, and the two score ranges overlap almost completely — `min_rerank` is the parameter that actually discriminates. Lower this to widen a search that came back empty.
exclude_rtype_idNoRegulation type IDs to drop, as '3,7' or [3, 7]. Use it to strip the administrative churn — nombramientos, autorizaciones puntuales — that dominates a ministry's daily gazette feed.
include_committee_minutesNoInclude INVIMA specialized-board minutes (`rtype='Acta'`), excluded by default. They record what a sanitary committee decided about one product — a medicine, a new molecule — not what a rule says, and they are 87% of Colombia's indexed corpus at 210 chunks each, so leaving them in means a regulatory search competes against INVIMA's archive. `meta.committee_minutes_hidden` reports how many were dropped; use list_committee_minutes to search them properly, with their case, board and decision.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint/idempotent/destructive=false and openWorld=false, so the safety profile is covered and the description does not need to restate it. The description does add real behavioral context beyond annotations, notably the gazette-feed caveat, refresh cadence, citation rules (cite rerank not relevance; cite display_title; title stays as printed), and pagination quirks. It stops short of describing rate limits or auth requirements, so a 3 is appropriate rather than a 4.

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

Conciseness3/5

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

The description is front-loaded and every section maps to a real decision, but it is long and heavily formatted for a tool description, with duplicated guidance between `q`, `number`, `min_rerank` and `min_similarity` in both prose and schema. It is dense rather than wasteful, but it is not tightly sized for its purpose.

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

Completeness5/5

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

With an output schema present and rich annotations, the description still covers the hard parts an agent must know: mode selection, number vs topic search, citation-score selection, committee-minute exclusion rationale, and the near-miss behavior. Nothing material for correct invocation is missing.

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?

Schema coverage is 100%, so the baseline is 3, and much of the description duplicates schema text (e.g. number matching, min_similarity vs min_rerank). It nonetheless adds cross-parameter semantics the schema cannot express — that setting `id` ignores every other filter, that omitting country_code is not the same as 'all', and that cursor paging with `q` continues only the keyword branch — which pushes it above baseline.

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 opening line names a specific resource (regulations/normativas) and explicitly enumerates the three modes (list, search, fetch by id), which is exactly the distinction an agent needs. It also qualifies the data source (official gazettes, refreshed daily) and contrasts itself with a compendium of law in force, so the scope is unambiguous against siblings like list_committee_minutes or get_document_text.

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

Usage Guidelines5/5

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

The description routes every common case: no id for list mode, id for full detail, `number` when the norm number is known, `q` when only the topic is known, and it names list_regulation_types / list_entities for ID discovery. It also gives explicit exclusions and alternatives — e.g. use list_committee_minutes for INVIMA board minutes — which is the strongest form of when/when-not guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources