search_documents
Pack: federal-register · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)
No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/search_documents for the schema, then POST the same URL with its arguments for the data.
Search the US Federal Register by topic / keyword for proposed rules, final rules, notices, and presidential documents. Use this whenever the question mentions a SUBJECT (“EV tax credits”, “AI export controls”, “PFAS regulations”, “clean energy”, “ozempic labeling”, etc.) — recent_rules takes no topic filter and would return random unrelated rules. For a STRUCTURED count/list (“how many executive orders in 2026”, “list 2026 proclamations”), pass type:“presidential_document” plus presidential_document_type rather than relying on free-text query — a free-text search for “executive order” also matches documents that merely MENTION one, over- or under-counting the real set. To find or confirm ONE specific executive order by its number, pass executive_order_number instead — it scopes and filters for you, no type/presidential_document_type needed. Returns title, abstract, agency, publication date, links, and for presidential documents also executive_order_number, signing_date, and citation. The response always echoes filters_applied: a genuine zero still says exactly what was searched, so it is never a bare empty result. Examples: search_documents({query: “EV tax credit”, type: “rule”}), search_documents({type: “presidential_document”, presidential_document_type: “executive_order”, since: “2026-01-01”}), search_documents({executive_order_number: “14435”}), search_documents({query: “Strait of Hormuz”, since: “365d”}). Pass since to constrain to recent documents — without it the relevance ranker can return decade-old docs for sparse-term queries.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
query | string | no | Search keywords (e.g., “clean energy tax credit”). Optional if type/agency/since/presidential_document_type/executive_order_number already scope the search — forcing a free-text term onto a structured count/list question (e.g. “executive order”) distorts it, since the term index matches MENTIONS of a thing as well as the thing itself. |
type | string | no | Document type filter: “rule”, “proposed_rule”, “notice”, “presidential_document” — mapped internally to the Federal Register API’s own codes (RULE/PRORULE/NOTICE/PRESDOCU); an unrecognized value is refused rather than silently matching nothing. |
presidential_document_type | string | no | Only with type:“presidential_document” — narrows to one sub-type: “executive_order”, “proclamation”, “memorandum”, “determination”, “notice”, or “other”. This is the STRUCTURED way to count/list executive orders etc.; prefer it over a free-text query for “how many X” questions. |
executive_order_number | string | no | Look up ONE executive order by its number, e.g. “14435” or “EO 14435” — automatically scopes to type:“presidential_document” + presidential_document_type:“executive_order” and filters the result to an exact number match, so neither needs to be passed separately. Conflicts with an explicit type/presidential_document_type that names something other than presidential documents / executive orders. |
agency | string | no | Agency slug filter (e.g., “environmental-protection-agency”, “securities-and-exchange-commission”) |
since | string | no | Publication date floor. Accepts ISO date (“2025-01-01”) or shorthand (“30d”, “12m”, “365d”, “1y”). Recommended for any topical search to avoid stale results — the relevance ranker can surface 2004-2008 documents for queries with sparse hits. |
Example call
Arguments
{
"query": "clean energy tax credit"
}
curl
curl -X POST https://gateway.pipeworx.io/federal-register/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_documents","arguments":{"query":"clean energy tax credit"}}}'
TypeScript (@pipeworx/sdk)
import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();
const result = await pipeworx.call('search_documents', {
"query": "clean energy tax credit"
});
More examples
{
"query": "artificial intelligence",
"type": "proposed_rule",
"agency": "environmental-protection-agency"
}
{
"executive_order_number": "14435"
}
Response shape
Always returns: query, total, returned, documents
| Field | Type | Description |
|---|---|---|
query | string | The search query string |
total | number | Total count of matching documents |
returned | number | Number of documents returned in this response |
documents | array | Array of formatted Federal Register documents |
Full JSON Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query string"
},
"total": {
"type": "number",
"description": "Total count of matching documents"
},
"returned": {
"type": "number",
"description": "Number of documents returned in this response"
},
"documents": {
"type": "array",
"description": "Array of formatted Federal Register documents",
"items": {
"type": "object",
"properties": {
"document_number": {
"type": [
"string",
"null"
],
"description": "Federal Register document number"
},
"title": {
"type": [
"string",
"null"
],
"description": "Document title"
},
"type": {
"type": [
"string",
"null"
],
"description": "Document type (rule, notice, etc.)"
},
"abstract": {
"type": [
"string",
"null"
],
"description": "Document abstract or summary"
},
"citation": {
"type": [
"string",
"null"
],
"description": "Citation reference"
},
"publication_date": {
"type": [
"string",
"null"
],
"description": "Publication date (ISO format)"
},
"agencies": {
"type": "array",
"description": "List of responsible agencies",
"items": {
"type": "string"
}
},
"html_url": {
"type": [
"string",
"null"
],
"description": "URL to HTML version of document"
},
"pdf_url": {
"type": [
"string",
"null"
],
"description": "URL to PDF version of document"
},
"action": {
"type": [
"string",
"null"
],
"description": "Action description"
},
"dates": {
"type": [
"string",
"null"
],
"description": "Key dates related to document"
},
"docket_ids": {
"type": "array",
"description": "Associated docket identifiers",
"items": {
"type": "string"
}
},
"page_length": {
"type": [
"number",
"null"
],
"description": "Number of pages in document"
},
"significant": {
"type": [
"boolean",
"null"
],
"description": "Whether document is marked as significant"
}
}
}
}
},
"required": [
"query",
"total",
"returned",
"documents"
]
}
Connect
Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:
{
"mcpServers": {
"pipeworx": {
"url": "https://pipeworx.io/mcp"
}
}
}
Connect to just the federal-register pack
{
"mcpServers": {
"federal-register": {
"url": "https://gateway.pipeworx.io/federal-register/mcp"
}
}
}
See Getting Started for client-specific install steps.