fcc-ecfs-mcp
Provides access to the FCC's Electronic Comment Filing System (ECFS) public API, enabling searches and retrieval of filings, proceedings, document metadata, non-docketed inboxes, and download plans for exhaustively paging large dockets.
Click on "Deploy 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., "@fcc-ecfs-mcpSearch for filings in docket 24-123"
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.
fcc-ecfs-mcp
An MCP server for the FCC's Electronic Comment Filing System (ECFS) public API. Implements every endpoint in ECFS's public OpenAPI spec — filings, a single filing, proceedings, a filing's documents, and non-docketed filing inboxes — plus an escape hatch for anything else. Lets an MCP client (Claude Desktop, Claude Code, etc.) search and fetch across all of them.
Tools
Tool | ECFS endpoint | Description |
|
| Search filings by free text, proceeding/docket number, filer name, submission type, or date received. |
|
| Fetch a single filing by its submission ID. |
|
| Search proceedings (dockets), e.g. by docket number. |
|
| Get date-bucketed queries safe for exhaustively paging a large docket (e.g. a heavily-commented NPRM) — plain offset/limit paging over a big result set can return duplicate or missing filings. |
|
| List a filing's document/attachment metadata (filename, page count, byte size, OCR status) by submission ID. Does not return file contents — ECFS's public API is metadata-only; the actual PDF is served from the (bot-protected) ECFS website. |
|
| List the available inboxes for non-docketed filings. |
| any | Escape hatch: call any ECFS path/query params not covered above. |
Related MCP server: mcp-fcc-ecfs
Setup
Option A: Claude Code plugin (recommended)
This repo is a Claude Code plugin — it bundles the MCP server and the slash commands
below into a single install, and works from any directory (no manual config editing,
no cd-ing into this repo first).
Get a free API key at https://www.fcc.gov/ecfs/help/public_api.
Install the plugin directly from this repo:
/plugin install Reid-n0rc/fcc-ecfs-mcpClaude Code will prompt for your FCC ECFS API key (stored securely, not pasted into a config file) and register both the
fcc-ecfsMCP server and the/fcc-ecfs:*slash commands automatically.
Option B: Manual MCP server config
For non-Claude-Code MCP clients (Claude Desktop, etc.), or if you'd rather manage the server yourself:
Install dependencies and build:
npm install npm run buildProvide the key via the
ECFS_API_KEYenvironment variable — never commit it or pass it as a tool argument. For local development, copy.env.exampleto.env(git-ignored) and fill it in.Add to your client's MCP config:
{ "mcpServers": { "fcc-ecfs": { "command": "node", "args": ["/absolute/path/to/fcc-ecfs-mcp/dist/index.js"], "env": { "ECFS_API_KEY": "your-api-key-here" } } } }Prefer sourcing
ECFS_API_KEYfrom your OS keychain or a secrets manager (e.g. 1Password,gpg-encrypted dotfiles) rather than pasting it into a config file where possible.
Slash commands
commands/ ships Claude Code slash commands that wrap the tools above. Installed as
a plugin, they're namespaced under fcc-ecfs:
Command | Description |
| General dispatcher — picks the right ECFS tool for the request. |
| Search filings by docket, filer, type, date, or text. |
| Look up a proceeding/docket by number or name. |
| Fetch a single filing by its submission ID. |
| List document/attachment metadata for one or more filings. |
| Get a download plan for exhaustively paging a large docket. |
Development
npm run dev # run the server directly with tsx
npm test # run the unit test suite (vitest)
npm run typecheck # type-check without emittingTo test the plugin locally before publishing a change, rebuild and point Claude Code at the working tree:
npm run build
claude --plugin-dir .Note that the plugin loader never runs npm run build on install — it only runs
npm ci to fetch dependencies. dist/ must be committed and up to date before pushing.
Known limitation: document/PDF content isn't fetchable
The ECFS public API (this server's only data source) is metadata-only. No endpoint
returns a document's file bytes or extracted text — not /filings, not /filing/{id},
and not /documents (see ecfs_search_documents's Document schema: it has fields like
file_name, page_count, byte_size, ocr_flag, and a location URL, but no text/content
field).
That location field (and the documents[].src field on a Filing) points at
https://www.fcc.gov/ecfs/document/{id_submission}/{n} — the ECFS website, a separate
system from the public API, sitting behind Akamai bot protection. Direct HTTP requests to
it — via curl, this server, or any other non-browser HTTP client — return 403 Forbidden regardless of headers (user-agent, Referer, Accept-Language, etc. make no
difference; the block operates below the HTTP layer, on the TLS/network fingerprint).
This project will not attempt to work around that protection — not via TLS-fingerprint impersonation, proxying, or other anti-bot-evasion tooling, even though it's technically possible and ECFS's underlying content is public. If you need a document's actual text:
Open the
location/srcURL in a real browser (a human doing this is exactly the traffic Akamai lets through).Automate a real, visible browser session (e.g. Claude Code's Chrome extension) rather than a bare HTTP client — the request then carries a browser's genuine fingerprint instead of one constructed to fake it.
Download the PDF yourself and read/summarize it locally.
Security notes
The API key is read only from
process.env.ECFS_API_KEY— it is never accepted as a tool input, so it cannot be echoed back into a model's context or transcript.Error messages and thrown errors redact the
api_keyquery parameter before they are ever logged or returned to a client. Response bodies are also scrubbed of the literal key value before being returned — some ECFS response types (e.g.type=downloadplan) echo the key back verbatim in generated URLs, so URL-only redaction isn't sufficient..envis git-ignored; only.env.example(no real key) is committed.
License
MIT
Available Tools
7 toolsecfs_get_download_planGet an ECFS download plan for a filings queryA
Get a download plan for a filings search — the same filters as ecfs_search_filings, but instead of a page of results, returns date_submission-range buckets each with a suggested_api_call safe to run to exhaustively page a large docket. Use this before ecfs_search_filings for dockets with thousands of filings (e.g. a heavily-commented NPRM): plain offset/limit paging over a large result set can return duplicate or missing filings, which the download plan's date-bucketed queries avoid.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search across filing content (e.g. commenter name, keywords). | |
| sort | No | Sort field and direction, e.g. 'date_disseminated,DESC'. | |
| filers_name | No | Filter by the filer's/commenter's name. | |
| proceedings_name | No | Docket / proceeding number to filter by, e.g. '17-108'. | |
| date_received_since | No | ISO date (YYYY-MM-DD); only return filings received on or after this date. | |
| date_received_until | No | ISO date (YYYY-MM-DD); only return filings received on or before this date. | |
| submissiontype_description | No | Filter by submission type, e.g. 'COMMENT', 'REPLY'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses that the result is date_bucket buckets each containing a suggested_api_call that is 'safe to run' and explains the problem it solves (duplicate/missing filings in large result sets). It doesn't cover all possible edge cases (e.g., rate limits, error handling), but gives solid behavioral context for a planning tool.
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 that pack purpose, usage, and outcome efficiently. It front-loads the core purpose and then explains when to use and why, with no redundant phrases or fluff.
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?
Given the 7 fully-documented parameters and no output schema, the description sufficiently outlines what the tool returns (buckets with suggested_api_call) and when to use it. It lacks details on potential errors or pagination behavior beyond the conceptual, but it is complete for an agent to decide when and how to invoke it.
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 schema has 100% coverage, so the baseline is 3. The description adds value by noting that this tool shares the same filters as ecfs_search_filings, implying parameter semantics are identical to that sibling, which is useful context beyond the individual field descriptions. However, it does not elaborate on any parameter details beyond the schema's own documentation.
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 clearly states the verb ('Get') and resource ('download plan for a filings search'), and explicitly contrasts it with the sibling ecfs_search_filings, distinguishing it as returning date-bucketed suggested API calls instead of a page of results. This makes its purpose unmistakable.
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 names when to use this tool ('before ecfs_search_filings for dockets with thousands of filings') and why (avoiding duplicate/missing filings from plain offset/limit paging), providing both positive and negative guidance by implication. It also names the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecfs_get_filingGet an ECFS filing by IDB
Fetch a single ECFS filing by its submission ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id_submission | Yes | The ECFS submission ID of the filing to fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. 'Fetch' implies a read-only operation and the ID parameter is clear, but there is no disclosure of response shape, error behavior, idempotency, or what happens when a filing is not found.
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?
A single front-loaded sentence with no filler; every word earns its place and the core action is stated first.
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 fetch tool the definition is nearly sufficient, but with no output schema and no annotations it does not explain what the returned filing contains or how failures are signaled, leaving a small but real gap for an agent.
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 coverage is 100% and id_submission is already documented as 'The ECFS submission ID of the filing to fetch.' The description's reference to submission ID adds no meaning beyond the schema, so the baseline 3 applies.
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'), names the resource ('ECFS filing'), and scopes it to a single item retrieved by submission ID. It is distinguishable from sibling search tools, though it does not explicitly name the alternative or contrast with ecfs_search_filings.
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 implies the tool is for retrieving exactly one filing when the submission ID is known, but it does not state when to prefer it over ecfs_search_filings or other siblings, nor does it mention exclusions or prerequisites beyond the required ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecfs_list_inboxesList ECFS non-docketed filing inboxesA
List the available inboxes for non-docketed filings in ECFS.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It does disclose the read-only, non-destructive nature of a listing operation, but it omits any mention of authentication, rate limits, or the structure of the returned data. This is minimal but acceptable for a simple list tool.
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 a single, front-loaded sentence with no filler words. It efficiently conveys the action and object without redundancy.
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?
The tool is simple with no parameters and no output schema. The description states what it returns (the list of inboxes), which is sufficient for an agent to understand the basic behavior. The lack of return format detail is a minor gap given the low complexity.
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, so the description need not elaborate on parameter usage. The baseline for zero parameters is 4, and no additional parameter context is required.
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 clearly states the action ('List') and the specific resource ('available inboxes for non-docketed filings in ECFS'). It distinguishes itself from sibling search/get tools by its listing nature, making its purpose 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 provides no guidance on when to use this tool versus the sibling tools, such as search_filings or get_filing. It doesn't mention preconditions, alternatives, or exclusions, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecfs_raw_requestRaw ECFS API requestA
Escape hatch for calling any ECFS public API path/query parameters not covered by the other tools. The api_key is added automatically; do not include it yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ECFS API path to call, relative to https://publicapi.fcc.gov/ecfs (e.g. '/filings', '/filings/{id}', '/proceedings'). Use this for endpoints or parameters not covered by the other tools. | |
| params | No | Query parameters to send, excluding api_key (added automatically). |
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 usefully discloses that the api_key is injected automatically and that the tool targets public ECFS API paths. However, it does not disclose response format, error behavior, rate limits, validation behavior, or what happens for invalid paths, leaving some important behavior unstated for a generic raw-request tool.
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 short sentences with no filler. It front-loads the core purpose ('escape hatch') and immediately provides the single most important invocation detail ('api_key is added automatically'), making it easy to parse and act on.
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 tool with only two parameters and 100% schema coverage, the description plus schema is largely sufficient: the path is required, params are optional, and authentication is handled. The absence of an output schema and the generic nature of a raw request mean a little more context about response handling could help, but the tool is not missing any essential call-related information.
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 coverage is 100%, and the schema already documents both 'path' and 'params' with clear meanings, including that 'params' should exclude api_key. The description mostly repeats this by saying the api_key is added automatically, adding little new semantic value beyond what the schema provides. The baseline 3 is appropriate because the schema does the heavy lifting.
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 clearly identifies the tool as an 'escape hatch' for calling 'any ECFS public API path/query parameters not covered by the other tools,' giving a specific verb and resource scope. It also differentiates itself from the sibling tools by explicitly targeting uncovered endpoints and parameters.
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 states when to use the tool: for endpoints or parameters 'not covered by the other tools,' which clearly routes an agent away from the specialized siblings. It also gives a practical prerequisite by noting the api_key is added automatically and should not be included. It does not explicitly enumerate the sibling alternatives, but the condition is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecfs_search_documentsList documents for an ECFS filingA
List the documents (attachments) associated with one or more ECFS filings, by submission ID. Returns document metadata (filename, page count, byte size, OCR status, and its viewer location) — not the document's file contents.
| Name | Required | Description | Default |
|---|---|---|---|
| id_submission | Yes | Submission ID(s) of the filing(s) to list documents for. Comma-separate multiple IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it returns metadata (filename, page count, byte size, OCR status, viewer location) and explicitly states it does not return file contents, which is helpful. However, it does not mention potential side effects, authentication requirements, rate limits, or any error behavior. The description is honest about its read-only nature but lacks depth on operational constraints.
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, both dense with information. It front-loads the core action and resource, then specifies the return type and its exclusion. No wasted words; every phrase contributes to understanding.
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 one-parameter tool with no output schema, the description covers the essential: what it does, what it returns, and what it does not return. It does not mention limitations like maximum number of IDs, pagination, or error handling, but given the low complexity, these are minor omissions. The description is sufficient for an agent to call the tool 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 schema already fully documents the single parameter (id_submission) with format (comma-separated) and purpose. The description adds context by saying 'one or more ECFS filings' and reiterates 'by submission ID', but this adds little beyond the schema. Since coverage is 100%, the description does not need to compensate, and the baseline of 3 is appropriate.
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 clearly states the action (list documents), the resource (attachments of ECFS filings), and the scope (by submission ID). It also explicitly differentiates from sibling tools by specifying that it returns metadata, not file contents, which aligns with the function name 'search_documents' and distinguishes it from tools like ecfs_get_filing or ecfs_search_filings.
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: use this when you have submission ID(s) and need document metadata. It does not explicitly name alternatives or state when not to use it, but the purpose is unambiguous given the sibling list. A small gap is the absence of explicit guidance on when to prefer ecfs_get_filing over this tool for a single filing's documents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecfs_search_filingsSearch ECFS filingsC
Search filings submitted to the FCC's Electronic Comment Filing System (ECFS). Filter by proceeding/docket number, filer name, submission type, and date received.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search across filing content (e.g. commenter name, keywords). | |
| sort | No | Sort field and direction, e.g. 'date_disseminated,DESC'. | |
| limit | No | Max results to return (API max is 100). Defaults to 25. | |
| offset | No | Pagination offset. Defaults to 0. | |
| filers_name | No | Filter by the filer's/commenter's name. | |
| proceedings_name | No | Docket / proceeding number to filter by, e.g. '17-108'. | |
| date_received_since | No | ISO date (YYYY-MM-DD); only return filings received on or after this date. | |
| date_received_until | No | ISO date (YYYY-MM-DD); only return filings received on or before this date. | |
| submissiontype_description | No | Filter by submission type, e.g. 'COMMENT', 'REPLY'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that it searches and filters; it does not describe what the response contains, whether results are paginated, how filters combine with free-text search, or any rate/limit behavior.
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 a single focused sentence that front-loads the core action and then summarizes the available filters. There is no redundant or filler content.
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?
With no output schema and no annotations, the description should provide more context about return values, pagination, or how this search relates to sibling tools. The current text is adequate as a label but incomplete for reliable tool selection and invocation.
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 100%, so the parameters are already well documented. The description adds a high-level summary of the filter options but no additional meaning beyond the schema, which aligns with the baseline of 3.
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 clearly states the action ('Search filings') and the resource (FCC ECFS filings), and it lists the key filter dimensions. However, it does not explicitly distinguish this tool from the sibling ecfs_search_documents, so the boundary between 'filings' and 'documents' is left implicit.
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 no guidance about when to use this tool versus alternatives such as ecfs_search_documents or ecfs_search_proceedings. It also does not mention any exclusions, prerequisites, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecfs_search_proceedingsSearch ECFS proceedingsA
Search proceedings (dockets) registered in the FCC ECFS system, e.g. by docket number.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Docket / proceeding number to filter by, e.g. '17-108'. | |
| limit | No | Max results to return. Defaults to 25. | |
| offset | No | Pagination offset. Defaults to 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Search', implying read-only behavior, but does not explicitly state that it returns a list, that it is safe, or any pagination behavior. The schema covers limit/offset, but the description adds no behavioral context beyond the verb.
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?
One sentence, no filler, front-loaded with the action. Efficient and appropriately sized.
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 search tool with no output schema and no annotations, the description is minimal. It tells the agent what it does but not what the response looks like or any special behavior. Since the schema covers parameters, it's adequate but could benefit from stating the return type or listing that it is a read operation.
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 100%, so baseline is 3. The description's 'e.g. by docket number' duplicates the schema's explanation of the 'name' parameter and adds no new meaning; limit and offset are not addressed in the description.
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 ('Search') and resource ('proceedings (dockets)') in the FCC ECFS system, with an example filter by docket number. The term 'proceedings' clearly distinguishes it from sibling tools like ecfs_search_filings and ecfs_search_documents, even though siblings aren't named explicitly.
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 implies usage for searching dockets/proceedings but provides no explicit guidance on when to use this tool versus the sibling search tools (e.g., search_filings, search_documents). No alternatives or exclusions are mentioned; the only hint is the docket-number example.
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.
7 tool updates
v0.3.0- First observed
ecfs_get_download_plan - First observed
ecfs_get_filing - First observed
ecfs_list_inboxes - First observed
ecfs_raw_request - First observed
ecfs_search_documents - First observed
ecfs_search_filings - First observed
ecfs_search_proceedings
TDQS
Scored across 7 tools
Each tool targets a distinct action and resource: searching filings, retrieving a filing, searching proceedings, planning exhaustive downloads, listing documents, listing inboxes, or making raw API calls. The only potentially overlapping pair (ecfs_search_filings vs ecfs_get_download_plan) is clearly differentiated by the download plan's explicit purpose of returning date-bucketed query plans rather than results.
All tool names share the consistent 'ecfs_' prefix followed by a clear verb_noun structure: search_filings, get_filing, search_proceedings, get_download_plan, search_documents, list_inboxes, raw_request. The verbs (search/get/list) are standard and applied appropriately to each operation, making the naming pattern predictable and easily parseable.
With exactly 7 tools, the server is compactly scoped to the FCC ECFS public API domain—covering the main search/retrieval workflows without unnecessary bloat. Each tool serves a clear purpose, and the addition of an escape hatch (ecfs_raw_request) keeps the surface lean while ensuring full API coverage.
The tool set covers the core workflows for the domain: searching and retrieving filings, exploring proceedings, managing large result sets with a download plan, listing document metadata, and accessing inboxes. The ecfs_raw_request tool acts as a catch-all for any uncovered API endpoints, so the surface has no obvious dead ends for public read-only ECFS queries.
Maintenance
Related MCP Connectors
EDGAR MCP — SEC EDGAR public APIs (free, no auth)
SEC MCP — SEC EDGAR public APIs (free, no auth)
EPA ECHO MCP — wraps EPA ECHO Web Services (free, no auth)
FCC public geo/census APIs (geo.fcc.gov) MCP.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceQuery SEC EDGAR filings, XBRL financials, and company data through MCP.698 npm10Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for searching and retrieving FCC ECFS filings, dockets, and proceedings via the public API.4 npmMIT
- AlicenseNot gradedqualityAmaintenanceSearch and trace US federal rules across the Federal Register (proposed/final rules and notices), the eCFR (codified, point-in-time CFR full text, locally mirrored), and Regulations.gov (rulemaking dockets and public comments) via MCP.98 npm1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables querying and exploring FCC Open Data datasets via Socrata SoQL, including dataset search, metadata retrieval, and data querying.3 npmMIT