ferc-elibrary-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FERC_ENABLE_OCR | No | Opt-in OCR for scanned PDFs (not yet implemented) | false |
| FERC_STORE_ROOT | No | Document store root (shared folder or S3 prefix) | ~/Downloads/ferc-elibrary |
| FERC_DOWNLOAD_DIR | No | Legacy alias for store root | ~/Downloads/ferc-elibrary |
| FERC_MCP_TRANSPORT | No | MCP transport (stdio now; http in Phase 3) | stdio |
| FERC_STORE_BACKEND | No | Store backend (local; s3 in Phase 2) | local |
| FERC_MAX_READ_CHARS | No | Per-call text cap for read_document | 25000 |
| FERC_RATE_LIMIT_RPS | No | Token-bucket requests per second | 0.5 |
| FERC_MAX_BUNDLE_BYTES | No | Maximum total bytes for download_bundle | 500 MB |
| FERC_MAX_BUNDLE_FILES | No | Maximum number of files for download_bundle | 100 |
| FERC_RATE_LIMIT_BURST | No | Burst capacity | 2 |
| FERC_BUNDLE_TIMEOUT_SECONDS | No | Timeout for very large archives in download_bundle | 300 |
| FERC_MCP_IDLE_TIMEOUT_SECONDS | No | Reap abandoned stdio instances after this many idle seconds; omit or use 0 to never self-terminate. | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_filingsA | Search public FERC eLibrary filings. Public documents only. Use for keyword/term search, docket prefix (CP, ER11-4046), accession numbers, or document types such as Order/Opinion, Comments/Protest, or Application/Petition/Request. Date defaulting: when docket or accession_number is supplied, no date filter is applied and the whole proceeding is searched. For an open-ended query with no dates, the last 60 days is used to keep the result set manageable. Every response reports date_range_applied, date_range_source (explicit/default_60_day/none), and results_may_be_date_limited, so check those before treating total_hits as a complete count. date_field selects which date start_date and end_date filter on. Use "issued" when computing deadlines: FPA 313(a) rehearing and most Commission-set comment and compliance clocks run from issuance, not from the filed date, and the two differ. Orders are generally best searched by issuance. match controls how a multi-word query is interpreted. "phrase" (default) requires the exact phrase and is what you want when looking for a named agreement or document. "all" requires every term anywhere. "any" is FERC's loose term matching, which returns high volume and low precision. search_in controls where the query is matched. "both" (default) covers descriptions and full document text. "description" is far more precise because it matches the filing title rather than any passing mention deep in an attachment. Use it when a phrase search still returns too much noise. You may also pass eLibrary syntax directly (quotes, AND, OR, NOT, NEAR); it is forwarded unchanged. |
| get_docketA | Return the docket sheet: related filings, applicants, and accession numbers. Docket numbers look like CP21-470, ER11-4046, or P-15056-000. Subdockets can be All or a comma-separated list such as 000,001. page is 1-indexed, matching search_filings. page=0 is accepted as page 1. One row per filing: eLibrary returns one row per docket association, so a pleading captioned to -000, -001 and -002 arrives three times. Rows are merged on accession number and every association is listed in docket_numbers, so total_hits counts filings you can actually retrieve. count_basis reports distinct_accession to make that explicit. Scope differs from search_filings in one way worth knowing: the docket sheet carries no availability code, so it cannot filter by availability and reports availability_scope "all". search_filings is public-only by default, so a docket sheet may list a few privileged filings that search omits. sort_order defaults to oldest_first, the chronological order of a docket sheet. search_filings returns newest first. Pass newest_first to match it. date_field and the date envelope behave as in search_filings. Since a docket number is always supplied, no 60-day default is ever applied here. An issued-date window is applied to rows after retrieval, reported via date_field_filtered_client_side. |
| get_filingA | Fetch metadata for one filing by accession number (YYYYMMDD-NNNN). has_nonpublic_counterpart signals that a sealed, protected, or CEII version likely exists on the same accession, which is what you would move for access to under 18 C.F.R. 388.113. It is inferred from filer naming convention ("PUBLIC" or "REDACTED" in a file name), so nonpublic_counterpart_basis reports it as file_naming_convention rather than authoritative metadata. No protected content is ever returned. |
| list_filesA | List files attached to an accession. Call this before download_file. See get_filing for what has_nonpublic_counterpart means. |
| get_filing_textA | Deprecated alias for bounded read_document. Returns at most max_chars of extracted text and reports total_chars when truncated. Prefer get_document_outline, search_within_document, and read_document for large filings. |
| read_documentA | Return bounded plain text from a cached filing attachment. Never returns the full document unless it fits within max_chars. Responses include total_chars, truncated, and next_char_start / next_page when clipped. |
| search_within_documentB | Search extracted text for a query and return passages with page/char offsets. |
| get_document_outlineB | Return PDF bookmarks or a heuristic section map for a stored filing. |
| sync_docketB | Incrementally fetch accessions missing from the document store for a docket. |
| cache_statusC | Report what the document store holds for a docket or accession. |
| download_fileA | Download a public eLibrary file to FERC_DOWNLOAD_DIR. Does not return file bytes. Privileged, protected, and CEII documents are refused. Call list_files first to pick a file_id. format=native saves that one original file and is the default. format=zip asks eLibrary for every file on the accession as one archive; if the accession has a single attachment, the archive is unwrapped to that file and content_type / is_bundle / expected_size describe the saved document. format=pdf asks eLibrary to generate a combined PDF of the whole accession. The result reports expected_size from FERC's metadata alongside the byte count actually written, plus size_matches_metadata and is_bundle, so a mismatch between the file you asked for and the artifact you got is visible. |
| download_bundleA | Zip many public files into one archive under FERC_DOWNLOAD_DIR/bundles. Prefer this over repeated download_file calls. eLibrary's Zip & Download accepts many file IDs in a single request (including across accessions), so one call replaces N metadata lookups + N downloads + N rate-limit waits. Provide any combination of accession_numbers (all public files on each),
file_ids (exact attachments), and/or docket (public files found via search
on that docket). Default organize_by_accession=true rewrites FERC's flat
Caps: 100 files and 500 MB by default (FERC_MAX_BUNDLE_FILES / FERC_MAX_BUNDLE_BYTES). Privileged, protected, and CEII accessions — and accessions absent from public search — are skipped and listed in skipped_accessions with a reason and category (restricted vs not_found). Does not return file bytes. |
| collect_relatedA | Search a term or document type, then list related filings by docket. Caps results at 10 dockets and 50 filings per docket, and reports dockets_capped plus filings_capped_per_docket so truncation is visible. If download is true, Zip & Downloads up to 10 public files from the search hits into one folderized archive (see download_bundle) rather than fetching each file individually. match, search_in, date_field, and the date-defaulting rules behave as in search_filings: supplying docket skips the 60-day default, and the response reports date_range_applied, date_range_source, and results_may_be_date_limited. Narrow the query before turning downloads on. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/PowerLaw-Technology/ferc-elibrary-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server