find_recent_changes
Identify CFR sections modified after a specific date to locate regulatory updates in the eCFR.
Instructions
Find CFR sections that have been modified since a given date.
Uses the search API with last_modified_on_or_after filter to find sections amended after the specified date. Returns section identifiers, headings, and excerpts.
since_date must be in YYYY-MM-DD format. Results are capped at 10,000 by the API. Use title/chapter/part filters to narrow if needed.
Common pattern: find FAR changes since a specific date to check for regulatory updates that might affect ongoing acquisitions.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| since_date | Yes | ||
| title | No | ||
| chapter | No | ||
| part | No | ||
| per_page | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- Handler function for the 'find_recent_changes' MCP tool. Validates inputs (since_date, title, chapter, part, per_page), then delegates to search_cfr() with query='*' and last_modified_after=since_date to find all sections modified since the given date.
@mcp.tool(annotations={"title": "Find Recent Changes", "readOnlyHint": True, "destructiveHint": False}) async def find_recent_changes( since_date: str, title: int = 48, chapter: Any = None, part: Any = None, per_page: int = 100, ) -> dict[str, Any]: """Find CFR sections that have been modified since a given date. Uses the search API with last_modified_on_or_after filter to find sections amended after the specified date. Returns section identifiers, headings, and excerpts. since_date must be in YYYY-MM-DD format. Results are capped at 10,000 by the API. Use title/chapter/part filters to narrow if needed. Common pattern: find FAR changes since a specific date to check for regulatory updates that might affect ongoing acquisitions. """ since_date = _validate_date_ymd(since_date, field="since_date") if since_date is None: raise ValueError("since_date is required (YYYY-MM-DD).") title = _validate_title_number(title, field="title") chapter = _validate_chapter(chapter, title_number=title) part = _coerce_cfr_str(part, field="part", strip_prefixes=True) per_page = _clamp(per_page, field="per_page", lo=1, hi=SEARCH_MAX_PER_PAGE) # Use a broad query that every section matches; eCFR requires a query term. return await search_cfr( query="*", title=title, chapter=chapter, part=part, current_only=True, last_modified_after=since_date, per_page=per_page, ) - servers/ecfr-mcp/src/ecfr_mcp/server.py:1129-1132 (registration)The @mcp.tool decorator registers 'find_recent_changes' as an MCP tool with the title 'Find Recent Changes'. Uses FastMCP (Python) framework.
} @mcp.tool(annotations={"title": "Find Recent Changes", "readOnlyHint": True, "destructiveHint": False})