# `com.1102tools/federal-register-mcp` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/com.1102tools/federal-register-mcp
- JSON: https://anlyon.dev/api/v1/servers/com.1102tools/federal-register-mcp
- Version: 1.0.18 (active)
- Publisher: com.1102tools (domain proven to the MCP Registry)
- Runs: remote (streamable-http), local (pypi)
- Sign-in to list tools: none
- Repository: https://github.com/1102tools-dev/federal-contracting-mcps
- Metadata from the official MCP Registry, synced 2026-10-21T21:17:38.658Z

Title and description, as the publisher wrote them:

```untrusted-server-text
Federal Register
Federal Register proposed and final rules, notices, executive orders, and FAR cases. 8 tools.
```

Scanned 2026-10-21T21:18:16.691Z over streamable-http.

**8 tools: 1 change things and 7 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 0 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 1 | ask |
| Only reads | read | 7 | allow |

## Findings

- **info** Long descriptions in `search_documents` ([long-description](https://anlyon.dev/methodology#long-description))

```untrusted-server-text
The description is 3,582 characters long, over the 2,000 this check looks for.

description ends: "...reaches 5,000 documents; split the publication date range beyond that)."
```

- **warn** Annotations that disagree with the tool in `open_comment_periods` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "open_comment_periods" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "open_comment_periods" says "open": a word for a change.
```


## Changes things (1)

Creates or changes something that can be changed back. Claude Code: ask.

### `open_comment_periods`

- The name "open_comment_periods" says "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Find source-reported open comment periods, soonest indexed deadline first.

    Covers proposed rules, notices, AND final/interim rules that accept
    comments (dozens of RULE-type documents have open periods at any time).
    Queries for comment close date >= today, scans up to 500 matching
    documents oldest-published first (where the soonest deadlines live),
    sorts by close date, and returns the first `limit`.

    Source scope: total_open is the API's matching metadata count;
    scanned is how many this call examined. When total_open exceeds
    scanned, narrow with agencies/term for complete indexed coverage. A very
    recently published document with an unusually short comment window
    can fall outside the scan in that oversubscribed case.

    complete means the matching indexed records were scanned, not that every
    currently open opportunity or controlling deadline was verified. The API's
    comments_close_on metadata can disagree with DATES after an extension or
    reopening. Even a zero result needs docket/subject search_documents and
    get_document DATES/linked publication checks before ruling out comments.

    Default: searches all agencies. Pass agency slugs to narrow scope,
    e.g. ['defense-acquisition-regulations-system'] for DFARS or
    ['general-services-administration'] for GSA and GSAR.

    Parameters:
    - far_council: True for open FAR proposed rules and FAR information
      collections (documents filed jointly by DoD, GSA and NASA; there is no
      single FAR agency slug and the OFPP tag only appears from about
      mid-2025). Cannot be combined with agencies.
    - limit: max documents returned after sorting (default 50, max 100).
      Unfiltered dumps across all agencies can approach 200KB; several
      broad agencies together (e.g. DoD + GSA) can pass 100KB, so lower
      limit for those.
    
```

## Only reads (7)

Looks things up and changes nothing. Claude Code: allow.

### `far_case_history`

- The description's first verb is "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get all Federal Register documents for a FAR/DFARS case or FAC.

    Pass a docket ID like 'FAR Case 2023-008' (or a FAC number like
    'FAC 2025-06'). Runs BOTH a docket-id search and a quoted full-text
    search, then merges the two result sets (deduped by document number)
    in chronological order to show the full rulemaking progression:
    ANPRM -> proposed rule -> final rule -> corrections. The dual query
    matters: FAC introduction and companion documents often carry only
    internal docket numbers, so a docket-only search returns a partial set.

    Docket matching is token-based, not substring: 'FAR Case 2023' matches
    all 2023 cases (token '2023' matches '2023-008'), but a partial token
    like 'FAR Case 20' matches nothing. Be specific to avoid false positives.

    Each document carries matched_by: 'docket' or 'docket+text' when its
    docket ids name the case, 'text' when it only mentions the case in its
    text (regulatory agendas, related or companion cases, FAC
    introductions, public meetings). Read 'text' matches with care.

    Each underlying search returns at most 100 documents. truncated=True
    flags that one of the searches hit that cap (docket_matches and
    term_matches carry the API's full counts); narrow the docket_id if so.

    Minimum docket_id length is 3 characters to prevent token matches that
    return unrelated documents (e.g. 'x' matched 65 random dockets in 0.1.x).
    
```

### `get_document`

- The name "get_document" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get full details for a single Federal Register document by number.

    Returns all available fields including full text URLs, docket info,
    RIN details, page views, topics, corrections, and CFR references.

    Document numbers look like '2026-03065' (modern), 'E9-12940' or
    'X94-70302' (legacy pre-2011 archive), or 'C1-2026-01234' (corrections).
    
```

### `get_documents_batch`

- The name "get_documents_batch" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Fetch multiple documents in one call (up to ~20).

    Pass a list of document numbers. More efficient than individual calls.
    Always returns {count, results, [errors]}; errors.not_found lists any
    requested numbers the API could not locate. Results come back in the
    order requested. Image metadata (images, images_metadata) is left out
    to keep batches small; get_document returns it.
    
```

### `get_facet_counts`

- The name "get_facet_counts" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get document counts grouped by type, agency, topic, or time period.

    Accepts the same filter conditions as search_documents. Returns
    aggregated counts without individual document results.

    Facets: type, agency, topic (categorical) plus daily, weekly, monthly,
    quarterly, yearly (publication-date buckets, useful for trend lines).

    Useful for understanding the volume of rulemaking by agency, type, or
    over time within a date range before drilling into specific documents.

    presidential_document_type (executive_order, proclamation, memorandum,
    determination, notice, presidential_order, other) narrows to one kind
    of presidential document, e.g. executive orders per month.

    At least one filter (agencies, doc_types, term, pub_date_gte/lte, or
    cfr_title) is required. An unfiltered facet query returns the entire
    all-time aggregate.

    FAR Council counts: facets cannot express "filed by DoD AND GSA AND
    NASA", and no single agency slug covers FAR documents (OFPP only from
    about mid-2025; 'federal-acquisition-regulation-system' holds 2 documents
    ever). Count FAR rules with search_documents(far_council=True,
    doc_types=[...], pub_date_gte/lte=...) and read its count.
    
```

### `get_public_inspection`

- The name "get_public_inspection" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Get current public inspection documents (pre-publication).

    Public inspection documents are FR documents filed for publication but
    not yet published. Updated business days only.

    The current-PI endpoint does NOT support server-side filtering. This
    tool fetches all current PI documents and filters client-side by
    agency and/or keyword in the title.

    Useful for getting early notice of upcoming regulatory actions.

    Parameters:
    - agency_filter: case-insensitive substring match against agency slugs,
      names, and short names. Sub-agencies are included: PI documents list
      only the FILING sub-agency, so the filter is also matched against the
      Federal Register agency list and every agency below a matching one
      counts ('defense-department' or 'DOD' also returns Army, Navy, Air
      Force, Corps of Engineers and Defense Logistics Agency filings).
      filters_applied.includes_sub_agencies says whether that worked.
    - keyword_filter: substring match against document titles
    - limit: max documents returned after filtering (default 50, max 500).
      Unfiltered dumps can exceed 170KB; narrow with filters or raise the cap.
    
```

### `list_agencies`

- The name "list_agencies" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
List agencies with their IDs, names, slugs, and parent agencies.

    Use the 'slug' values with search_documents() and other tools.
    Common procurement slugs:
    - defense-department (DoD)
    - general-services-administration (GSA)
    - national-aeronautics-and-space-administration (NASA)
    - defense-acquisition-regulations-system (DARS/DFARS)
    - federal-procurement-policy-office (OFPP and the CAS Board)
    - small-business-administration (SBA)
    - veterans-affairs-department (VA)

    The FAR has no single slug. FAR rules and notices are filed jointly
    under DoD, GSA and NASA; OFPP was added only from about mid-2025, so
    the OFPP slug misses earlier FAR rules. The agency named 'Federal
    Acquisition Regulation System' (federal-acquisition-regulation-system)
    holds 2 documents ever; it carries a note in these results. For FAR
    documents use search_documents(far_council=True) or
    open_comment_periods(far_council=True).

    Parameters:
    - query: optional case-insensitive substring match against name, short_name,
      and slug. Recommended: narrow results before pulling full detail.
    - include_detail: if False (default), returns only id/name/short_name/slug/parent_id.
      If True, returns all fields (description, urls, etc.). The full dump is ~700KB.
    
```

### `search_documents`

- The name "search_documents" says "search": a word for reading.
- Findings: info long-description

Description, as the server wrote it:

```untrusted-server-text
Search Federal Register documents.

    The primary tool for finding proposed rules, final rules, notices,
    and presidential documents published in the Federal Register since 1994.

    Key parameters:
    - agencies: list of agency URL slugs (OR logic). Use list_agencies() to find slugs.
      Common: 'defense-department', 'general-services-administration',
      'small-business-administration', 'defense-acquisition-regulations-system'
      (DFARS), 'federal-procurement-policy-office' (OFPP and the CAS Board)
    - far_council: True for FAR rules, proposed rules and notices (the FAR
      Council's output). There is no single FAR agency slug: FAR documents
      are filed jointly under DoD, GSA and NASA, OFPP was added only from
      about mid-2025 (so the OFPP slug misses earlier FAR rules and adds CAS
      Board documents), and 'federal-acquisition-regulation-system' holds 2
      documents ever. far_council=True keeps documents filed by all three of
      DoD, GSA and NASA; count is exact when far_council.complete is true
      (narrow by date if not). Cannot be combined with agencies. For FAR
      clause changes only, cfr_title=48 + cfr_part='1-99' also works.
    - doc_types: PRORULE (proposed rule), RULE (final rule), NOTICE, PRESDOCU
    - term: full-text keyword search (strips stop words)
    - docket_id: docket identifier (token match). 'FAR Case 2023-008' = exact,
      'FAR Case 2023' = all 2023 cases; partial tokens like 'FAR Case 20'
      match nothing
    - regulation_id_number: RIN (precise match, e.g., '9000-AO56')
    - pub_date_gte/lte: publication date range (YYYY-MM-DD)
    - comment_date_gte/lte: comment close date range
    - effective_date_gte/lte: effective date range
    - correction: True finds only the Office of the Federal Register's own
      correction notices (C1- prefix documents). Agency-issued corrections
      ('Final rule; correction.', 'Correcting amendment.') are ordinary RULE
      documents and are not flagged: search doc_types=['RULE'] with
      term='correction' and check each document's action.
    - significant: True for EO 12866 significant rules only
    - cfr_title + cfr_part: documents affecting a CFR location, e.g.
      cfr_title=48, cfr_part='52' for FAR part 52 (part accepts ranges
      like '1-99'; cfr_part requires cfr_title)
    - presidential_document_type: executive_order, proclamation, memorandum,
      determination, notice, presidential_order, other. Use
      ['executive_order'] to count or list executive orders: doc_types=
      ['PRESDOCU'] alone also returns proclamations, memoranda and notices.
    - executive_order_number: one EO by number (e.g. 14275)
    - order: 'executive_order_number' sorts EOs by number (pair it with
      presidential_document_type=['executive_order'])

    Presidential documents carry executive_order_number, subtype (Executive
    Order, Proclamation, Memorandum, ...), signing_date and
    presidential_document_number; other documents omit those keys.

    Count caps at 10,000 for broad queries (count_capped=true says so); use
    get_facet_counts for the true number, or narrower date ranges.
    per_page capped at 100 to stay within MCP response size limits.

    Paging: the Federal Register serves only pages 1-50 of any search (a
    later page silently comes back as page 1), so page > 50 is refused.
    total_pages is the true page count; when it passes 50,
    max_reachable_page and paging_note say how to reach the rest (per_page=100
    reaches 5,000 documents; split the publication date range beyond that).
    
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `federal-register`:

```json
{
  "permissions": {
    "allow": [
      "mcp__federal-register__search_documents",
      "mcp__federal-register__get_document",
      "mcp__federal-register__get_documents_batch",
      "mcp__federal-register__get_facet_counts",
      "mcp__federal-register__get_public_inspection",
      "mcp__federal-register__list_agencies",
      "mcp__federal-register__far_case_history"
    ],
    "ask": [
      "mcp__federal-register__open_comment_periods"
    ],
    "deny": []
  }
}
```
