Regulatory Intel MCP
Server Details
US Federal Register for AI agents: rules, notices, executive orders, agency lookup. No keys.
- Status
- Healthy
- Uptime
- 100.0% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- datakoot/regulatory-intel-mcp
- GitHub Stars
- 0
- Server Listing
- regulatory-intel-mcp
TDQS
Scored across 5 tools
agencies and document are clearly distinct, but executive_orders, recent_documents, and search_documents overlap substantially — EOs are presidential_documents in the Federal Register and recent_documents is essentially a date-sorted search, so an agent could plausibly route the same query to any of the three.
All names are snake_case and readable, but the convention is mixed: two are bare nouns (agencies, document) while three use search/list-style prefixes (search_documents, recent_documents, executive_orders). No predictable verb_noun pattern across the set.
Five tools is slightly thin but reasonable for a focused read-only Federal Register monitoring surface. Each tool earns its place, though the EO-specific tool is arguably redundant with the general search.
Good coverage of the read lifecycle: agency lookup, single-document detail, recent listing, keyword search, and EO search. Minor gap — no retrieval of comments/dockets or full document text beyond the abstract links, but core monitoring workflows are covered.
Available Tools
5 toolsagenciesAgenciesARead-onlyIdempotentInspect
Look up US federal agencies and their slugs (used to filter the other tools by issuing agency). Optionally pass a query to match by name, e.g. 'environmental' or 'defense'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Filter agencies whose name contains this text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| source | No | |
| agencies | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is fully covered without the description. The description adds the cross-tool context that slugs feed other tools' filters, which is useful, but says nothing about result size, ordering, or auth needs.
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 sentences, zero waste, with the primary purpose and the resource's role front-loaded before the optional parameter detail.
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 an output schema present and rich annotations, the description need not explain return values, and it correctly implies that omitting the query returns the full list. The only marginal gap is that it never states the default behavior explicitly.
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 100% for the single optional parameter, and the schema already states the substring-match semantics. The description's examples ('environmental', 'defense') illustrate but do not materially extend what the schema provides, so the baseline 3 applies.
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?
States a specific verb and resource ('Look up US federal agencies and their slugs') and clarifies the resource's role in the ecosystem as a filter key for other tools. None of the siblings (search_documents, document, recent_documents, executive_orders) is a reference-lookup tool, so the distinction is unambiguous.
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?
Explains the context of use ('used to filter the other tools by issuing agency') and how to narrow results with the optional query. It stops short of explicit when-not guidance or naming a sibling alternative, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
documentDocumentARead-onlyIdempotentInspect
Get full detail on a single Federal Register document by its document number (e.g. '2026-12811'): abstract, action, effective date, comment deadline, CFR references, citation, topics, agencies and links.
| Name | Required | Description | Default |
|---|---|---|---|
| document_number | Yes | Federal Register document number, e.g. 2026-17888. Get one from search_documents or recent_documents. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| type | No | |
| dates | No | |
| title | No | |
| action | No | |
| source | No | |
| topics | No | |
| pdf_url | No | |
| abstract | No | |
| agencies | No | |
| citation | No | |
| html_url | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| significant | No | |
| effective_on | No | |
| signing_date | No | |
| cfr_references | No | |
| document_number | No | |
| publication_date | No | |
| comments_close_on | No | |
| regulation_id_numbers | No | |
| executive_order_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety and repeatability profile is fully covered by structured data. The description adds only the scope of returned content, which is useful but is not behavior beyond the annotations; no auth, rate-limit, or error-context details are given.
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 front-loaded sentence with the identifier and its example stated up front, followed by an efficient field enumeration. The trailing field list is a little dense but every item is informative about the payload, so there is no real waste.
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 one-parameter lookup whose output schema already defines the return shape and whose annotations already define safety, the description is essentially complete: it identifies the resource, the key, and the payload breadth. The only shortfall is the absence of any pointer to sibling tools for obtaining the document number.
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?
With 100% schema description coverage on a single parameter, the schema already documents the document_number argument and its provenance. The description restates the example format ('2026-12811'), adding marginal formatting confirmation but no semantics beyond the 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 a specific verb and resource ('Get full detail on a single Federal Register document') and a precise lookup key with a concrete example ('2026-12811'). The singular, ID-driven lookup is plainly distinct from the search_documents/recent_documents siblings, and the enumerated field list (abstract, action, effective date, CFR references, agencies) confirms what 'full detail' means.
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 description gives no when-to-use or when-not-to-use guidance and never names the alternatives (search_documents, recent_documents) that would route the agent here. The only workflow hint ('Get one from search_documents or recent_documents') lives in the input schema, not the description, so the description itself carries no selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
executive_ordersExecutive OrdersARead-onlyIdempotentInspect
Search recent US presidential Executive Orders published in the Federal Register. Optionally filter by keyword and date. Returns EO number, signing/publication date, title and links.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Optional keyword to search within executive orders. | |
| since | No | Only EOs published on/after this date (YYYY-MM-DD). | |
| per_page | No | Results to return (default 10, max 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| source | No | |
| results | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| total_pages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds one genuine behavioral fact — that coverage is limited to 'recent' orders rather than the full historical archive — but the listed return fields are redundant given the output schema, and pagination/total-count behavior is unaddressed.
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?
Three short sentences, front-loaded with the core purpose and scoped immediately. The final return-fields sentence is largely redundant with the existing output schema, which is the only wasted content.
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 a rich annotation set, an output schema, and full parameter documentation, the description only needs to establish purpose and scope, which it does. The remaining gap is the lack of differentiation from overlapping siblings like search_documents, which would matter for correct tool selection.
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 100% and all three parameters (term, since, per_page) are fully documented in the schema, including the default and max for per_page. The description's 'filter by keyword and date' only restates what the schema already provides, so baseline 3 applies.
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?
States a specific verb and resource — searching recent US presidential Executive Orders in the Federal Register — which is clearly narrower than generic siblings like search_documents or recent_documents. However, it never explicitly contrasts itself with those siblings, so an agent must infer the distinction.
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?
Usage is implied by the phrase 'Search recent US presidential Executive Orders,' but there is no explicit when-to-use guidance, no mention of when to prefer search_documents or recent_documents, and no stated prerequisites. An agent can guess the intent but is not routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_documentsRecent DocumentsARead-onlyIdempotentInspect
List the most recent Federal Register documents, optionally filtered by type and issuing agency, over a look-back window. Use this to monitor newly published rules/notices from an agency.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look back this many days (default 7, max 90). | |
| type | No | Document type. One of: rule, proposed_rule, notice, presidential_document. | |
| agency | No | Agency slug (from the 'agencies' tool). | |
| per_page | No | Results to return (default 15, max 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| since | No | |
| source | No | |
| results | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| total_pages | No | |
| window_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so safety and mutability are fully covered by structured data. The description adds only the look-back-window behavior, which is already restated in the schema, and says nothing about pagination limits or result ordering nuances.
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 sentences, zero filler, with the core action and scope front-loaded before the use-case hint. Every clause earns its place.
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?
An output schema exists, so return formatting need not be explained, and annotations cover the safety profile. What remains thin is pagination behavior and result ordering, but for a simple filtered-list tool the description is close to complete.
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 100%, so all four parameters (days, type, agency, per_page) are already documented with defaults, max values, and an enum. The description's mention of type/agency filtering and the look-back window merely mirrors the schema rather than extending it (e.g., no guidance on agency slug format beyond a pointer to a sibling tool that the schema already provides).
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?
States a specific verb and resource ('List the most recent Federal Register documents') plus the scoping mechanism ('over a look-back window') and optional filters. The recency framing implicitly separates it from the sibling search_documents, so an agent can route between them without opening schemas.
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?
Gives a clear intended use case: monitoring newly published rules/notices from an agency. However, it never explicitly names search_documents as the alternative or states when to prefer full-text search over this recency listing, so the when-not guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentsSearch DocumentsARead-onlyIdempotentInspect
Search the US Federal Register for regulations and notices. Filter by keyword, document type (rule, proposed_rule, notice, presidential_document), issuing agency (slug from the agencies tool), and publication date. Returns matching documents with title, type, agencies, abstract and links. Great for 'what did agency X publish about topic Y'.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Keyword(s) to search, e.g. 'artificial intelligence', 'PFAS'. | |
| type | No | Restrict to one document type. | |
| since | No | Only documents published on/after this date (YYYY-MM-DD). | |
| until | No | Only documents published on/before this date (YYYY-MM-DD). | |
| agency | No | Agency slug (from the 'agencies' tool), e.g. 'environmental-protection-agency'. | |
| per_page | No | Results to return (default 10, max 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| source | No | |
| results | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| total_pages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, lowering the bar. The description adds the cross-tool dependency on 'agencies' for slugs and lists returned fields, but says nothing about ordering, pagination behavior beyond the schema's per_page, or total-count semantics, so the added behavioral value is modest.
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?
Three sentences, all front-loaded: purpose, filters, return shape, then a use-case hook. No sentence is filler and no critical detail is buried.
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 an output schema present, the description needn't detail return values, yet it still summarizes them helpfully. For a 6-parameter, zero-required, filtered search tool with rich annotations, the main gap is guidance on result ordering and when to choose sibling tools.
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 100%, so each parameter (term, type enum, since/until, agency, per_page) is already documented with formats and examples. The description largely restates those same filters rather than adding syntax or edge-case meaning, so the baseline 3 applies.
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 gives a specific verb (search) and resource (US Federal Register regulations and notices) plus the exact filter dimensions, so an agent can distinguish it from siblings like document, recent_documents, and executive_orders without opening a schema. The use-case framing ('what did agency X publish about topic Y') further pins down scope.
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?
It states clear usage context and an example question, and cross-references the 'agencies' tool for obtaining a valid agency slug, which is real routing guidance. It stops short of naming when to prefer recent_documents or executive_orders instead, so it lacks explicit exclusions/alternatives.
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.
5 tool updates
- Changed
agencies1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
document1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
executive_orders1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
recent_documents1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
search_documents1 field changed- added
Output schema / properties / provenanceAdded value: +{ + "description": "Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at.", + "properties": { + "may_be_cached": { + "type": "boolean" + }, + "publisher": { + "type": "string" + }, + "served_at": { + "format": "date-time", + "type": "string" + }, + "upstream": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
5 tool updates
- Changed
agencies1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "agencies": {}, + "count": {}, + "source": {} + }, + "type": "object" +}
- Changed
document1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "abstract": {}, + "action": {}, + "agencies": {}, + "cfr_references": {}, + "citation": {}, + "comments_close_on": {}, + "dates": {}, + "document_number": {}, + "effective_on": {}, + "executive_order_number": {}, + "html_url": {}, + "note": {}, + "pdf_url": {}, + "publication_date": {}, + "regulation_id_numbers": {}, + "significant": {}, + "signing_date": {}, + "source": {}, + "title": {}, + "topics": {}, + "type": {} + }, + "type": "object" +}
- Changed
executive_orders1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "count": {}, + "note": {}, + "results": {}, + "source": {}, + "total_pages": {} + }, + "type": "object" +}
- Changed
recent_documents1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "count": {}, + "note": {}, + "results": {}, + "since": {}, + "source": {}, + "total_pages": {}, + "window_days": {} + }, + "type": "object" +}
- Changed
search_documents1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "count": {}, + "note": {}, + "results": {}, + "source": {}, + "total_pages": {} + }, + "type": "object" +}
5 tool updates
- First observed
agencies - First observed
document - First observed
executive_orders - First observed
recent_documents - First observed
search_documents
Related MCP Connectors
US Federal Register for AI agents: rules, notices, executive orders, agency lookup. No keys.
Live US federal and state regulatory changes and grant programs for AI agents, with a citation to the official register on every result. Free tier, no account required.
Scrape Federal Register rules, proposed rules, notices and orders by agency or date. Pay per row.
Federal regulatory intelligence from the Federal Register: search rules and notices, track deadlines
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to search and retrieve executive orders, presidential documents, rules, and agency information from the Federal Register API through natural language queries.1228 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying the US Federal Register API for federal register documents and data through natural language.152 npmMIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that provides AI agents with access to U.S. Federal Register rules and Regulations.gov public comments, enabling searches, rule retrieval, and comment fetching.-
- AlicenseAqualityBmaintenanceEnables LLM agents to search Regulations.gov federal dockets, retrieve docket abstracts and metadata, and list rulemaking documents, giving read access to federal regulatory data.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.