docket-mcp
Click on "Install 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., "@docket-mcpWhat is in the BIS docket on AI reporting requirements and is it still open for comment?"
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.
docket-mcp
An MCP server for Regulations.gov. It gives an LLM agent read access to federal rulemaking: search dockets, fetch a docket's abstract and metadata, and list the documents filed in it. Built for agents that answer questions like "what is in the BIS docket on AI reporting requirements and is it still open for comment?"
Quickstart
You need a free Regulations.gov API key from api.data.gov. DEMO_KEY works for light use.
pip install git+https://github.com/ColtonShawProctor/docket-mcp
export REGULATIONS_GOV_API_KEY=your-key-here
docket-mcpClaude Code:
claude mcp add docket -e REGULATIONS_GOV_API_KEY=your-key-here -- docket-mcpClaude Desktop or Cursor (mcpServers in the client config):
{
"mcpServers": {
"docket": {
"command": "docket-mcp",
"env": { "REGULATIONS_GOV_API_KEY": "your-key-here" }
}
}
}Related MCP server: regulationsgov-mcp
Getting an API key
Request a free key at api.data.gov (the signup takes about a minute) and set it as REGULATIONS_GOV_API_KEY in your environment or in the MCP client config shown above.
If you skip this, DEMO_KEY works for a quick try, but it shares a low hourly limit with everyone else using it, so real use rate-limits fast. The server retries with backoff when that happens, but the honest fix is a personal key: same API, same data, a far higher limit. The fixtures in tests/ were recorded with DEMO_KEY, which is also why the tests never call the API at all.
Tools
This section is written for both humans and the models that call the tools. The short version a model needs: start with search_dockets, take an id from the results, and hand it to get_docket or list_documents. Never guess docket IDs. If every call fails, call ping and check api_key_configured.
ping
Health and configuration check. No network call. Returns the server version, the API base URL, and whether an API key is configured, plus the env var name to set if it is not.
search_dockets(query, page=1, page_size=20, agency_id=None)
Full-text search of dockets. Returns total, paging fields, and a dockets list of summaries: id, title, docket_type (Rulemaking or Nonrulemaking), agency_id, last_modified, and match_context, a plain-text snippet showing why the docket matched (the API's HTML highlighting is stripped before it reaches the model). agency_id filters to one agency, for example "EPA" or "BIS".
Real output, produced from a response recorded from the live API (trimmed):
{
"query": "artificial intelligence",
"total": 68,
"page": 1,
"page_size": 5,
"has_next_page": true,
"dockets": [
{
"id": "BIS-2024-0047",
"title": "Establishment of Reporting Requirements for the Development of Advanced Artificial Intelligence Models and Computing Clusters",
"docket_type": "Rulemaking",
"agency_id": "BIS",
"last_modified": "2024-10-22T15:46:37Z",
"match_context": "Data Collections regulations by establishing reporting requirements for the development of advanced artificial intelligence (AI) models [...]"
}
]
}get_docket(docket_id)
One docket's full detail: id, title, agency_id, docket_type, abstract (the docket's own summary of the rulemaking), keywords, rin (Regulation Identifier Number), and last_modified. An unknown ID is a clear not-found error carrying the API's message.
list_documents(docket_id, page=1, page_size=20)
The documents filed in a docket: id, title, document_type (Proposed Rule, Rule, Notice, Supporting & Related Material, and so on), posted_date, fr_doc_num (Federal Register document number), open_for_comment, comment_end_date, and withdrawn. A docket ID that matches nothing yields an empty list, not an error; that is the API's recorded behavior, not an assumption.
Errors a model may see
Malformed IDs (wrong characters, lookalike unicode, path separators) are rejected locally with a message showing the expected shape. No request is sent.
pagebeyond 20 orpage_sizeoutside 5 to 250 are the API's own limits, rejected locally with the limit in the message. Narrow the query instead of paging deeper.Rate limiting is retried automatically with backoff, honoring the server's
Retry-After. If the limit is still exceeded after retries, the error says the limit is hourly, so retrying immediately is pointless.
Data source notes
The upstream is the Regulations.gov v4 API. Keys are issued through api.data.gov and rate limits are hourly per key; DEMO_KEY has a much lower limit than a personal key. Search results are capped by the API at page 20, with up to 250 results per page. Transient gateway errors (500, 502, 503, 504) are retried with capped exponential backoff.
Testing
pytest runs 39 tests in well under a second and never touches the network. The fixtures in tests/fixtures/ are verbatim response bodies recorded from the live API on 2026-09-08, so the parsers are tested against actual field shapes rather than invented ones. The retry suite injects the sleep function and asserts exact request and delay sequences; reverting the retry loop turns five tests red, which was verified, not assumed.
pip install -e '.[dev]'
pytestLimitations
Read-only. No comment submission, and none planned.
No document full text yet.
get_document_text(PDF and HTML extraction) and a chunking tool for RAG consumers are the next milestone.No comment retrieval yet.
Search covers dockets only; the API's document and comment search endpoints are not exposed yet.
License
MIT.
Available Tools
4 toolsget_docketA
Fetch one docket's full detail from Regulations.gov by its exact ID.
Returns id, title, agency_id, docket_type, abstract (the docket's own summary of what the rulemaking does), keywords, rin (Regulation Identifier Number), and last_modified. Raises a not-found error for an ID that does not exist; get IDs from search_dockets rather than guessing them.
Args: docket_id: Exact docket ID, e.g. "BIS-2024-0047".
| Name | Required | Description | Default |
|---|---|---|---|
| docket_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does so well by listing the exact return fields and stating that a non-existent ID raises a not-found error. It omits minor details like authentication or rate limits, but for a single-fetch tool this is adequately transparent.
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 well structured: a front-loaded purpose sentence, a concise list of return fields and error behavior, then the single argument with an example. There is no filler and every sentence contributes actionable 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?
For a one-parameter read-only tool with no output schema and no annotations, this description is complete. It covers what the tool returns, the error case, where to get valid IDs, and what the argument should look like. Nothing essential is missing 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only the parameter name with no description, so the description must compensate entirely. It does: it defines docket_id as an exact ID, gives a concrete example ('BIS-2024-0047'), and tells the agent to obtain IDs from search_dockets rather than guessing. This is exemplary parameter guidance.
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 uses a specific verb ('Fetch'), a clear resource ('one docket's full detail'), and a source ('Regulations.gov'). It also distinguishes itself from search_dockets by requiring an exact ID and explicitly points to that sibling for finding IDs, making the tool's role 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?
The description gives clear usage context: use this tool when you have an exact docket ID and need full detail, and it explicitly tells the agent to get IDs from search_dockets rather than guessing. It does not explicitly discuss when to prefer list_documents, so it misses a full when-not comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsA
List the documents filed in one Regulations.gov docket.
Returns document summaries: id, title, document_type (Proposed Rule, Rule, Notice, Supporting & Related Material, ...), posted_date, fr_doc_num (Federal Register document number), open_for_comment, comment_end_date, and withdrawn. A docket ID that matches nothing yields an empty list, not an error.
Args: docket_id: Exact docket ID, e.g. "BIS-2024-0047". page: Result page, 1 to 20 (API limit). page_size: Results per page, 5 to 250.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| docket_id | Yes | ||
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does this well by disclosing the returned fields, the non-error empty-list behavior, and API page/page_size limits. It does not address authentication, rate limits, or side effects explicitly, although 'List' implies read-only operation.
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 front-loaded with the primary purpose, followed by a compact field list and a two-part Args section. Every sentence conveys necessary information; there is no filler or repetition of schema defaults.
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 simple list endpoint with no output schema or annotations, the description is complete: it defines inputs and constraints, states the return summary shape, and clarifies an important edge case. An agent can select and invoke the tool without needing additional context.
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%, so the description must explain all three parameters. It does: docket_id is 'Exact docket ID' with an example, page is limited to 1-20, and page_size is limited to 5-250. This fully compensates for the schema's lack of descriptions.
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 opens with a specific verb-resource pair: 'List the documents filed in one Regulations.gov docket.' It names the exact scope (one docket) and enumerates the returned document-summary fields, which clearly separates this from siblings such as search_dockets and get_docket.
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 clear context for use: when you already have an exact docket_id and need the list of documents within that docket. It also provides the expected empty-list behavior for unmatched IDs. However, it does not explicitly state when to prefer search_dockets or get_docket, so it earns 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingA
Report server health and configuration status without calling the API.
Use this first if other tools fail: it tells you whether an API key is configured at all, which is the most common failure cause.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral transparency burden. It discloses that the tool works 'without calling the API' and reveals the diagnostic purpose around API key configuration, which goes beyond mere name repetition and clarifies that this is a non-mutating health check.
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 two sentences with no wasted words. The core purpose is front-loaded in the first sentence, and the second sentence delivers actionable usage context. Every sentence 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?
For a zero-parameter diagnostic ping, the description is sufficient: it states what the tool does, when to use it, and a key behavioral trait (no API call). It does not describe the exact result contents, but given the tool's simplicity and lack of output schema, this is not a significant gap.
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 has zero parameters and the schema is complete by being empty, so the baseline is 4. The description does not need to explain parameters and does not introduce any confusion about inputs.
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 states a specific verb and resource: 'Report server health and configuration status.' It also distinguishes itself from the document/docket siblings by noting it works 'without calling the API' and by focusing on API key configuration, which is clearly unrelated to searching or retrieving dockets.
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 explicitly says 'Use this first if other tools fail' and explains why: it detects the most common failure cause, missing API key configuration. This is clear when-to-use guidance, though it does not explicitly state a when-not-to-use scenario or name a specific alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docketsA
Full-text search of federal rulemaking dockets on Regulations.gov.
Returns docket summaries: id, title, docket_type (Rulemaking or Nonrulemaking), agency_id, last_modified, and match_context (a plain-text snippet showing why the docket matched). Use the returned id with get_docket for the abstract or list_documents for its documents.
Args: query: Search terms, e.g. "artificial intelligence reporting". page: Result page, 1 to 20 (API limit; narrow the query instead of paging deeper). page_size: Results per page, 5 to 250. agency_id: Optional agency filter, e.g. "EPA" or "BIS".
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| query | Yes | ||
| agency_id | No | ||
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does a solid job: it discloses exact returned fields, explains match_context as a plain-text snippet, and exposes pagination limits plus API behavior. It does not discuss auth or error behavior, which is a minor omission for a search operation.
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 front-loaded with the purpose, followed by return semantics, downstream usage, and a compact Args list. Every sentence earns its place and no filler is present.
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?
Even with no output schema, the description explains the return values, field meanings, and includes usage examples. Given four parameters and no annotations, this is complete enough for an agent to select and invoke the tool.
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%, yet the Args section fully compensates by defining every parameter, including valid ranges for page and page_size, an example query, and example agency filters. This adds real meaning beyond the schema's types and defaults.
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 opening sentence names a specific verb ('Full-text search'), a specific resource ('federal rulemaking dockets on Regulations.gov'), and the response shape. It also orients the tool relative to siblings by noting the returned id feeds get_docket and list_documents.
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 clear downstream routing ('Use the returned id with get_docket for the abstract or list_documents for its documents') and practical search advice ('narrow the query instead of paging deeper'). It does not explicitly state when not to use this tool versus siblings, but the context is strong.
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.
4 tool updates
v0.1.0- First observed
get_docket - First observed
list_documents - First observed
ping - First observed
search_dockets
TDQS
Scored across 4 tools
Each tool has a distinct role: ping is health-only, search_dockets is the fuzzy query entry point, get_docket is exact-ID detail lookup, and list_documents returns child documents. The descriptions explicitly cross-reference IDs, so an agent should not confuse which tool to call.
The three data tools follow a clean verb_noun snake_case pattern: search_dockets, get_docket, list_documents. ping is a conventional health-check exception, but it is the only minor deviation and does not create confusion.
Four tools are well-scoped for a docket-browsing server: health check, search, detail lookup, and document listing. There is no redundancy, and the count fits comfortably within an appropriate MCP server size.
The core docket workflow is covered end-to-end: search dockets, fetch full docket details, and list the documents within a docket. The main gap is the absence of a per-document detail/search tool, so deeper document-level retrieval is not possible.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search and trace US federal rules across the Federal Register, eCFR, and Regulations.gov.
US Federal Register for AI agents: rules, notices, executive orders, agency lookup. No keys.
US Federal Register for AI agents: rules, notices, executive orders, agency lookup. No keys.
Search US grants + federal contracts (Grants.gov + SAM.gov) from any LLM.
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.1274MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables interaction with the Regulations.gov API to search federal rulemaking dockets, proposed and final rules, public comments, and comment periods. Supports tracking FAR/DFARS case histories and monitoring open comment periods across federal agencies with optional API key authentication for higher rate limits.-
- AlicenseNot gradedqualityCmaintenanceEnables access to federal regulatory dockets, documents, and public comments from Regulations.gov via tools like get_docket and get_comment.9MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying the US Federal Register API for federal register documents and data through natural language.6MIT