Skip to main content
Glama

eCFR

Server Details

Electronic Code of Federal Regulations including FAR, DFARS, and agency supplements. 13 tools.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
1102tools-dev/federal-contracting-mcps
GitHub Stars
25
Server Listing
ecfr-mcp

TDQS

Score is being calculated.

Available Tools

13 tools
compare_versions
Read-only
Inspect

Compare the text of a CFR section at two different dates.

Useful for understanding what changed in a regulatory amendment. Returns
'changes' (each paragraph that was added, removed or changed, with its
before and after text; also heading, table and pending-amendment-link
changes), 'identical' when nothing differs, and the parsed text at both
dates side by side. When both texts together are too long to send, the
full texts are left out (texts_omitted) and 'changes' is kept.
changes_only=True leaves the full texts out every time: the short answer
to "what changed".

Dates must be in YYYY-MM-DD format. Historical snapshot availability
varies by title and section, including some dates before 2017. Use
get_version_history to discover dates. Both dates must not exceed the
title's up_to_date_as_of value.

This tool always returns the section-level XML parsed -- pass a small
section_id like '15.305', not a whole part. Whole-part comparisons can
exceed 100 KB per side.
ParametersJSON Schema
NameRequiredDescriptionDefault
chapterNo
date_afterYes
section_idYes
date_beforeYes
changes_onlyNo
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

find_far_definition
Read-only
Inspect

Find a term's definition in FAR 2.101, the FAR's main definitions section.

Returns each matching definition whole (the defining paragraph and every
sub-paragraph under it), first, marked kind='definition'. Matching
ignores case, hyphens, spacing, plurals, a trailing "means", and the
acronym 2.101 puts in a name, so 'service-disabled veteran-owned small
business concern', 'SDVOSB concern', 'COTS', 'commercial services' and
'contract means' all find their definitions. Other 2.101 paragraphs that
use the term (whole words only) follow as kind='mention', each naming
the definition it sits in.

When 2.101 doesn't define the term, the tool searches the rest of the
FAR (chapter 1), then the DFARS (chapter 2), for "<term>" means and
returns where it is defined, with the definition text, under
defined_elsewhere (for example 19.001 and 52.219-14 for 'similarly
situated entity'; 204.7301 for 'covered defense information'), plus
did_you_mean suggestions from 2.101.

term must be at least 3 characters. max_matches caps the number of
matches returned (default 20, max 100); definitions are never cut, and
truncated says whether mentions were left out.
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
termYes
max_matchesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

find_recent_changes
Read-only
Inspect

Find CFR sections changed since a given date, removals included.

Built on eCFR's version history: every version issued on or after
since_date, newest first. Each change says whether the section was
amended, removed (change='removed'), or re-issued with no text change
(substantive=false). 'summary' counts each kind. A section changed
twice appears twice.

since_date must be in YYYY-MM-DD format. Filter with title (default 48),
chapter (Title 48: 1 = FAR, 2 = DFARS, 99 = CAS) or part. per_page
(default 100, max 5000) and page step through long lists; total_pages
says how many pages there are.

Common pattern: find FAR changes since a specific date to check for
regulatory updates that might affect ongoing acquisitions.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
partNo
titleNo
chapterNo
per_pageNo
since_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

get_ancestry
Read-only
Inspect

Get the breadcrumb hierarchy path for a section, part, or appendix.

Returns ancestors from title down to the target node: title > chapter >
subchapter > part > subpart > section. Useful for understanding where
a section sits in the CFR hierarchy and what regulation it belongs to.

part/subpart/section/appendix accept int or string. The answer says
which date it describes.
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
partNo
sectionNo
subpartNo
appendixNo
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

get_cfr_content
Read-only
Inspect

Get the full text of a CFR section, subpart, part, or appendix.

This is the primary workhorse for reading regulatory text. Returns
parsed clean text by default: heading, paragraphs and citations, plus
tables, notes, examples, images, pending_amendments and editorial_notes
when present. Tables, notes and examples are numbered, and a marker like
"[See table 1: ...]" sits in the paragraphs where each appears. [fn N]
marks a footnote reference. pending_amendments means eCFR links a
published amendment that may not be in effect yet. A subpart, part or
appendix request returns one object per section under 'sections', each
with its own section number and heading. Set raw_xml=True to get the
original XML instead.

Answers longer than about 60,000 characters come in pages: the reply
says page and total_pages, and page=2 (and so on) returns the rest.

Specify the narrowest scope possible to keep responses manageable:
- section='15.305' for a single FAR section
- subpart='15.3' for a subpart
- part='15' for an entire part (can be large)
- chapter='1' for an entire chapter (often >1 MB, avoid)
- appendix='Appendix A to Chapter 2' (with chapter='2') for a DFARS appendix

Date auto-resolves to the latest available if not provided. Do NOT use
today's date directly -- eCFR lags 1-2 business days and today often 404s.

Title 48 = FAR/DFARS. Chapter 1 = FAR (Parts 1-99), Chapter 2 = DFARS
(Parts 200-299). Other chapters = agency FAR supplements (GSAR, VAAR,
HSAR, etc.).

For DFARS clauses, use chapter='2' (e.g., section='252.227-7014').

part/subpart/section accept int or string. Common prefix mistakes like
section='FAR 15.305' or '48 CFR 15.305' are stripped automatically, and
trailing paragraph cites like section='15.305(a)(2)' resolve to the base
section '15.305'.
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
pageNo
partNo
chapterNo
raw_xmlNo
sectionNo
subpartNo
appendixNo
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

get_cfr_structure
Read-only
Inspect

Get the hierarchical table of contents for a CFR title or subset.

Returns a nested tree of titles, chapters, parts, subparts, and sections
with identifiers, descriptions, and byte sizes, plus the date it
describes.

IMPORTANT: Does NOT support section-level filtering (returns 400).
Use part or subpart, then walk the children to find sections.

Common patterns:
- part='15' for FAR Part 15 structure
- subpart='15.3' for just that subpart's sections
- chapter='1', depth=2 for the FAR's subchapters and parts only
- appendix='Appendix A to Part 200' with part='200' (title 2) for one appendix

depth keeps that many levels below the node asked for (part='19',
depth=1 gives Part 19's subparts); deeper levels are replaced by
'children_omitted' (how many there were). For the sections of one part,
list_sections_in_part is shorter. A tree too large
to send at once (a whole chapter is about 1 MB) is cut to the deepest
depth that fits, and 'note' says so.

subchapter needs chapter in Title 48 (each chapter has its own
subchapter A, B, ...). part/subpart/chapter/appendix accept int or string.
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
partNo
depthNo
chapterNo
subpartNo
appendixNo
subchapterNo
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

get_corrections
Read-only
Inspect

Get editorial corrections for a CFR title, newest first.

Returns corrections with CFR references, corrective actions, error
dates, and FR citations, sorted by the date the error was corrected,
newest first. Useful for checking whether a section's current text has
been corrected since its last amendment.

section (e.g. '52.204-21'), part (e.g. '52') or chapter (e.g. '2' for
the DFARS) keeps only corrections that touch it. since_year keeps corrections with year >= since_year.
limit caps how many are returned (default 50, max 1000); truncated
says whether older ones were left out. Title 48 has ~280 corrections
since 2005.
ParametersJSON Schema
NameRequiredDescriptionDefault
partNo
limitNo
chapterNo
sectionNo
since_yearNo
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

get_latest_date
Read-only
Inspect

Get the most recent available date for a CFR title.

CRITICAL: eCFR lags 1-2 business days behind the Federal Register.
Using today's date on versioner endpoints causes 404 errors. Call this
first to get the safe date, then pass it to other tools.

Default title 48 = Federal Acquisition Regulations System (FAR, DFARS,
and all agency supplements). Other common titles: 2 (Grants/Agreements),
5 (Administrative Personnel), 29 (Labor), 41 (Public Contracts).

Raises ValueError for titles 1-50 that are reserved (no content).
ParametersJSON Schema
NameRequiredDescriptionDefault
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

get_version_history
Read-only
Inspect

Get the version history of a CFR section, subpart, or part.

Returns content_versions (each with date, amendment_date, issue_date,
identifier, name, substantive and removed), every version eCFR lists:
all of eCFR's pages are read, so Part 52's 2,264 versions are all
there. Versions are grouped by section, oldest first.

since_date/until_date (YYYY-MM-DD) keep versions dated in that range.
per_page (default 200, max 1000) and page step through long histories;
total_count and total_pages say how many there are.

'substantive' is eCFR's flag: true when the version's text differs from
the one before, including editorial edits such as citation fixes and
the "Link to an amendment published at ..." notice eCFR adds when a
rule is published; false when re-issued with no text change. To see
what actually changed, use compare_versions on the dates.

'removed' true means the section was removed on that date.

Version metadata and text snapshots may include dates before 2017.
Availability varies by title and section. Use the returned history
dates for reads or comparisons; a missing old snapshot produces an
availability error. A 2017-01-01 baseline often means unchanged since
before 2017.

part/subpart/section accept int or string.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
partNo
sectionNo
subpartNo
per_pageNo
since_dateNo
until_dateNo
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

list_agencies
Read-only
Inspect

List all agencies with their CFR title and chapter references.

Returns agency names, slugs, and which CFR titles/chapters they own.
Useful for finding which chapter corresponds to an agency's FAR supplement.

summary_only (default True) strips the `children` and most of
`cfr_references` to keep the response compact (~20 KB vs ~100 KB).
References owned by child agencies are merged into the parent row, so
chapter lookups like DFARS (chapter 2, on a DoD child agency) still work
in summary mode. Set False for the full raw payload including children.
ParametersJSON Schema
NameRequiredDescriptionDefault
summary_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

list_sections_in_part
Read-only
Inspect

List all sections and appendices in a CFR part with their headings.

Returns 'sections' in order, each {identifier, heading}, with
type='appendix' on appendices (2 CFR 200's Appendix I-XII, for example)
and reserved=true on reserved sections, plus 'subparts' (each with its
heading, section_count and first and last section). Useful for seeing
the scope of a part before reading specific sections.

The part number alone is enough: chapter is optional (Title 48 parts
are unique: 52 = FAR, 252 = DFARS, 552 = GSAR) and the answer reports
the chapter the part is in. subpart (e.g. '52.2') lists one subpart.
A list too long to send at once (FAR Part 52 has 680 entries) comes in
pages: page and total_pages say where you are; page=2 gets the rest.
detail=True adds eCFR's label, size and received_on for each entry
(received_on is when eCFR processed the text, not when it was amended;
get_version_history has amendment dates).

part_number accepts int or string.
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
pageNo
detailNo
chapterNo
subpartNo
part_numberYes
title_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

lookup_far_clause
Read-only
Inspect

Convenience tool: look up the current text of a FAR, DFARS or FAR supplement section or clause.

Pass a section identifier like '15.305', '52.212-4', '2.101',
'DFARS 252.204-7012' or '552.238-81'. The chapter comes from the number
(52.x = FAR, 252.x = DFARS, 552.x = GSAR, 852.x = VAAR, 1852.x = NFS,
3052.x = HSAR), so chapter is optional. Prefixes like 'FAR', 'DFARS',
'§' and '48 CFR', en dashes, and trailing paragraph cites such as
'(d)(11)(xviii)' are handled.

Auto-resolves the latest available date. Returns parsed clean text
with heading, paragraphs and citations, plus tables, notes (such as
drafting notes, which are not clause text), examples, images and
pending_amendments when present; see get_cfr_content. A clause longer
than about 60,000 characters comes in pages: use page=2 and so on.

Common FAR sections: 2.101 (Definitions), 9.104-1 (Responsibility),
15.305 (Proposal Evaluation), 19.502-2 (Small Business Set-Asides),
52.212-4 (Commercial Terms), 52.212-5 (Required Commercial Terms).
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
pageNo
chapterNo
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

search_cfr
Read-only
Inspect

Full-text search across the Code of Federal Regulations.

Returns matching sections with excerpts, headings, scores, and hierarchy.

current_only=True (default) returns only text in effect now. eCFR's own
"current" index still lists some superseded and removed versions, so
each hit is checked against the section's version history: older
copies of a section are dropped, and hits whose text has since been
replaced or removed are dropped and listed under current_check
('superseded' with the current version's date, 'removed' with the
removal date). Up to 10 parts per page are checked; any hit not
checked is marked. current_only=False returns every historical
version, so a section amended 5 times appears 5 times.

Search caps at 10,000 total results. Use hierarchy filters (title,
chapter, part) to narrow if you hit the cap. chapter/part/subpart/section
filters need a title; without one, title 48 is assumed (title_assumed
says so). Labels like 'FAR Part 15', 'Subpart 15.3' or '§ 52.212-5' are
read as 15, 15.3 and 52.212-5. Most titles other than 48 number chapters
in Roman numerals (2 CFR chapter 'II').

order controls result ordering: 'relevance' (default), 'newest_first',
'oldest_first', 'hierarchy', or 'citations'.

agency_slugs filters to one or more agencies (single slug string or a
list, e.g. 'defense-acquisition-regulations-system'). Use list_agencies()
to find slugs.

last_modified_after/before use YYYY-MM-DD format and filter by the
date sections were last amended. Useful for finding recent regulatory changes.

per_page accepts 1 to 5000 (default 20); paginate with page for more.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
partNo
orderNo
queryYes
titleNo
chapterNo
sectionNo
subpartNo
per_pageNo
agency_slugsNo
current_onlyNo
last_modified_afterNo
last_modified_beforeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updates
    • First observedcompare_versions
    • First observedfind_far_definition
    • First observedfind_recent_changes
    • First observedget_ancestry
    • First observedget_cfr_content
    • First observedget_cfr_structure
    • First observedget_corrections
    • First observedget_latest_date
    • First observedget_version_history
    • First observedlist_agencies
    • First observedlist_sections_in_part
    • First observedlookup_far_clause
    • First observedsearch_cfr

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching, browsing, and retrieving current US Code of Federal Regulations text—including full-text search across all 50 titles, title structures, and exact section or part wording—via the official eCFR API.
    22 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables searching and reading the US Code of Federal Regulations through tools that return excerpts, full text, legal citations, and linked source URLs, with read-only, stateless access.
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    The most comprehensive keyless federal-data MCP server. 36 tools for SAM.gov + USAspending + Federal Register + eCFR + Grants.gov. No API key, no registration, no signup. Works in Claude Desktop, Claude Code, Codex CLI, Cursor, Continue, Gemini CLI, and any MCP-aware host.
    153
    163 npm
    13
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    A production-quality MCP server that exposes the official eCFR API as structured tools for AI-driven contract compliance, enabling retrieval of relevant Code of Federal Regulations by clauses extracted from contracts.
    8
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.