Skip to main content
Glama
PowerLaw-Technology

ferc-elibrary-mcp

FERC eLibrary MCP

공개 FERC eLibrary를 검색하고, 도킷 시트를 확인하며, 공개 서류를 다운로드하기 위한 Model Context Protocol 서버 및 비동기 Python 라이브러리입니다. 모든 MCP 클라이언트(Claude Desktop, Cursor, Claude Code 등)에서 작동합니다.

고지 사항

FERC는 공식 eLibrary 개발자 API를 공개하지 않습니다. 이 프로젝트는 공개 웹사이트가 사용하는 것과 동일한 문서화되지 않은 JSON 백엔드(https://elibrary.ferc.gov/eLibrarywebapi/api/)와 통신합니다. 해당 인터페이스는 예고 없이 변경될 수 있습니다.

  • 공개 문서만 해당 — FERC 로그인, CEII, 특권(privileged) 또는 보호(protected) 콘텐츠는 포함하지 않음

  • 속도 제한에 주의하세요. 클라이언트는 기본적으로 요청 사이에 간격을 둡니다.

  • 공개적으로 이용 가능한 서류에 대한 조사 용도로 사용하세요. 공식 접근 절차를 대체하는 용도가 아닙니다.

Related MCP server: @cyanheads/secedgar-mcp-server

Claude Desktop 설치(가장 쉬움)

Python, 터미널, JSON이 필요하지 않습니다. Claude Desktop이 서버를 직접 설치합니다.

  1. Claude Desktop을 설치합니다.

  2. 최신 GitHub 릴리스에서 ferc-elibrary.mcpb를 다운로드합니다.

  3. 파일을 두 번 클릭하거나, Claude Desktop → 설정 → 확장 프로그램으로 끌어다 놓습니다.

  4. 설치를 클릭합니다. PDF를 다른 곳에 저장하려는 경우가 아니라면 다운로드 폴더를 그대로 둡니다.

  5. Claude에게 평이한 언어로 요청합니다. 예:

    • 지난 1년간 Ashokan 양수 저장 프로젝트에 대한 의견과 이의 제기를 eLibrary에서 검색해 줘.

    • CP21-470의 도킷 시트를 가져와서 관련 서류를 나열해 줘.

    • 접수번호 20201119-5202의 공개 PDF를 다운로드해 줘.

첫 번째 실행 시 Claude가 uv를 통해 Python을 설치하는 동안 1분 정도 걸릴 수 있습니다. 이후에는 빠르게 시작됩니다. 다운로드된 파일은 Downloads/ferc-elibrary(또는 선택한 폴더)에 저장됩니다. 공개 서류만 해당합니다.

릴리스가 아직 준비되지 않은 경우, 관리자가 다음 명령으로 동일한 파일을 만들 수 있습니다:

npx --yes @anthropic-ai/mcpb pack . dist/ferc-elibrary.mcpb

그런 다음 dist/ferc-elibrary.mcpb를 이메일 또는 AirDrop으로 보내세요.

요구 사항

  • Claude Desktop 확장 프로그램: 사용자 머신에 설치할 것 없음(Claude가 uv로 Python을 관리)

  • uvx / 라이브러리 / 기여자: Python 3.12+ 및 uv

설치

최종 사욕자(기타 MCP 클라이언트)

클론이 필욕하지 않습니다. 클라이언트는 git에서 uvx로 서버를 실횅합니다(MCP 클라이언트 설졍 참조). 저자소가 게시되면 OWNER를 GitHUB 소유자로 바꾸세요:

uvx --from git+https://github.com/OWNER/ferc-elibrary-mcp ferc-elibrary-mcp

기여자

git clone https://github.com/OWNER/ferc-elibrary-mcp
cd ferc-elibrary-mcp
uv sync

라이브러리 사욕법

ELibraryClient는 비동기 컨텍스트 관리자입니다. MCP 서버를 시작하지 않고 직접 코드에서 사용하세요:

import asyncio
from ferc_elibrary_mcp import ELibraryClient


async def main() -> None:
    async with ELibraryClient() as client:
        raw, summaries, dates = await client.search(
            query="shared facilities agreement",
            match="phrase",
        )
        print(raw.total_hits, dates.source, len(summaries))
        if summaries:
            filing = await client.get_filing(summaries[0].accession_number)
            print(filing.description, filing.url)


asyncio.run(main())

다운로드는 FERC_DOWNLOAD_DIR 아래에 저장됩니다(기본값 ~/Downloads/ferc-elibrary). 선택 사항: FERC_RATE_LIMIT_SECONDS 설졍(기본값 0.5).

도구

도구

용도

search_filings

키워드, 도킷, 접수번호, 문서 유형, 카테고리, 산업 검색. 공개 서류만 해당. 날짜 창이 선택되는 방식은 날짜 필터링 참조.

get_docket

도킷 시트: 관련 서류, 신청인, 접수번호. search_filings와의 차이는 도킷 시트 vs 검색 참조.

get_filing

단일 접수번호(YYYYMMDD-NNNN)의 메타데이터.

list_files

접수번호에 첨부된 파일(다운로드 전에 호출).

get_filing_text

공개 첨부 파일 하나를 다운로드하고 추출된 일반 텍스트를 반환(PDF/DOCX/text). 서류를 읽거나 요약하는 데 사용 — download_file은 로컬 경로만 기록.

download_file

공개 단일 파일, 접수번호당 zip, 또는 생성된 PDF를 FERC_DOWNLOAD_DIR 아래에 저장. 바이트를 반환하지 않음.

download_bundle

대량 다운로드에 권장: 여러 접수번호에 걸친 많은 공개 파일을 접수번호별 폴더로 구성하여 FERC_DOWNLOAD_DIR/bundles에 한 번의 요청으로 Zip & Download.

collect_related

용어 또는 문서 유형을 검색한 다음 관련 서류를 도킷별로 그룹화(최대 10개 도킷 × 50개 서류). 선택적 downloaddownload_bundle을 사용(최대 10개 파일).

특권(privileged), 보호(protected), CEII 문서는 거부됩니다.

날짜 필터링

날짜 기본값은 범위를 인식합니다. 이름이 지정된 도킷에 60일 창을 적용하면 절차의 대부분이 조용히 숨겨지기 때문입니다:

호출

적용 창

date_range_source

docket= 또는 accession_number=

없음, 전체 절차

none

날짜가 없는 개방형 질의

최근 60일

default_60_day

명시적 start_date/end_date가 있는 경우

지정된 값

explicit

날짜를 받는 모든 도구 — search_filings, collect_related, get_docket — 는 빈 결과에서도 date_range_applied, date_range_source, date_field_applied, results_may_be_date_limited, date_field_filtered_client_side를 보고합니다. 눈에 띄지 않는 기본값 아래에서 빈 집합이 나오는 경우가 가장 오해를 불러일으킬 수 있기 때문입니다. total_hitsresults_may_be_date_limited가 false인 경우에만 전체 개수로 취급하세요.

세 도구 모두 단일 resolve_date_range 헬퍼를 통해 창을 결정하고 DateRangeResolution.as_envelope()로 이를 보고합니다. 레지스트리 테스트가 도구 목록을 순회하며 start_date를 받는 도구가 envelope 또는 date_field 매개변수를 빠뜨리면 실패합니다. 따라서 검색 형태의 새 도구가 추가되는 날 바로 적용됩니다.

date_field는 범위가 필터링할 날짜를 선택하며, filed(기본값) 또는 issued입니다. 기한 계산에는 issued를 사용하세요. FPA 313(a) 재심리와 대부분의 위원회가 정한 의견 제출 및 준수 시한은 발행일부터 계산되며, 두 날짜는 차이가 있습니다. ER26-3176의 접수번호 20260807-5037은 08/07에 제출되었지만 08/06에 발행되었으므로, 08/06 기준 filed 날짜 검색은 이를 놓칩니다. 둘 다 eLibrary에서 서버 측으로 필터링되므로 페이지네이션은 정확합니다.

도킷 시트 vs 검색

get_docketsearch_filings는 동일한 서류를 다루지만 서로 다른 방식으로 접근하며, 그 차이는 사용자가 발견하도록 내버려 두지 않고 보고됩니다:

  • 서류당 한 행. eLibrary는 도킷 연결당 한 행을 반환하므로 -000, -001, -002에 기재된 탄원서는 세 번 도착하고 해당 totalHits도 세 번 계산합니다. 행은 접수번호를 기준으로 병합되고, 모든 연결은 docket_numbers에 보존되며, count_basisdistinct_accession을 보고합니다. EL25-49의 경우 이는 FERC가 보고한 380과 실제로 검색할 수 있는 312개의 서류 사이의 차이입니다.

  • 페이지네이션은 클라이언트 측에서 수행됩니다. numHitspageNumber는 시트를 안정적으로 자르지 못합니다. 페이지당 행 수가 요청한 한도를 초과하고 이후 페이지는 겹치기 때문입니다. 따라서 시트는 한 번 가져온 후 로컬에서 페이지로 나뉩니다. page는 두 도구 모두 1부터 시작하며, page=0은 1페이지로 처리됩니다.

  • 가용성. 시트에는 가용성 코드가 없으므로 get_docket은 이를 기준으로 필터링할 수 없고 availability_scope: "all"을 보고합니다. search_filings는 기본적으로 공개 전용입니다. 따라서 도킷 시트에는 검색에서 누락되는 몇 가지 특권 서류가 포함될 수 있습니다. EL25-49의 경우 312개 중 3개입니다.

  • 정렬. get_docket은 오래된 것부터(도킷 시트처럼 시간순), search_filings는 최신 것부터 반환합니다. 두 결과를 맞추려면 sort_order="newest_first"를 전달하세요.

  • 발행 날짜. 시트는 모든 issued_date를 .NET null 센티널 0001-01-01로 보고하므로, 서기 1년의 날짜가 아닌 빈 문자열로 표시됩니다. get_docket에서 date_field="issued"는 실제 발행 날짜를 담고 있는 검색 엔드포인트를 통해 창을 결정하고 date_field_filtered_client_side: true로 설정합니다.

봉인된 대응물

get_filinglist_fileshas_nonpublic_counterpart를 보고합니다. 이는 동일한 접수번호에 봉인(sealed), 보호(protected) 또는 CEII 버전이 존재할 가능성이 있음을 알리는 신호로, 18 C.F.R. 388.113에 따라 접근을 위해 신청할 대상입니다. 이는 제출자의 명명 규칙(파일 이름 또는 설명이 PUBLIC으로 시작하거나 REDACTED를 포함하는 경우)에서 추론되므로, nonpublic_counterpart_basisfile_naming_convention을 보고하여 이를 권위적인 것이 아닌 휴리스틱으로 표시합니다. "Public Service Company"와 같은 유틸리티 이름은 오탐지를 피하기 위해 제외됩니다. 보호된 콘텐츠는 절대 반환되지 않으며, 이 신호는 의도적으로 search_filings 결과에 포함되지 않습니다.

검색 정밀도

eLibrary는 따옴표 없이 입력된 다중 단어 질의를 독립적인 용어로 취급하므로, 실제로 그 구문을 포함하는 서류가 묻혀 버립니다. 다음 두 매개변수가 이를 제어합니다:

  • match: phrase(기본값)는 정확한 구문을 요구하고, all은 모든 용어를 요구하며, any는 FERC의 느슨한 용어 매칭입니다.

  • search_in: both(기본값)는 설명과 전체 문서 텍스트를 검색하고, description은 서류 제목만, full_text는 문서 본문만 일치시킵니다.

2026년 서류에서 shared facilities agreement을 검색한 결과:

match

search_in

조회 수

any

both

5,627

phrase

both

324

phrase

description

65

구문 검색이 여전히 너무 많은 노이즈를 반환하면 search_in="description"을 사용하세요. 전체 텍스트 매칭은 첨부 파일 내부 깊숙한 곳에서 지나가는 언급까지 찾아냅니다. 직접 작성한 eLibrary 구문(따옴표, AND, OR, NOT, NEAR)은 변경 없이 전달됩니다.

다운로드 형식

download_file단일 접수번호에 대해 format을 받습니다:

  • native(기본값)는 file_id로 식별된 하나의 파일을 저장합니다.

  • zip은 해당 접수번호의 모든 파일을 묶습니다.

  • pdf는 eLibrary에 접수번호의 결합 PDF 생성을 요청합니다.

많은 파일 또는 많은 접수번호의 경우 대신 download_bundle을 사용하세요. 이것은 eLibrary UI에서 초록색 zip 폴더를 채울 때 사용하는 것과 동일한 Zip & Download 엔드포인트를 호출합니다 — 파일 ID 목록이 포함된 HTTP 요청 하나로, N×(get_filing + 다운로드 + 속도 제한 대기)가 아니라. accession_numbers, file_ids, docket의 어떤 조합이든 전달하세요. 기본적으로 단순한 FERC 이름(20260716-5098_Agreement.pdf)은 폴더(20260716-5098/Agreement.pdf)로 재구성됩니다. 기본 상한은 파일 100개 / 500MB이며(FERC_MAX_BUNDLE_FILES, FERC_MAX_BUNDLE_BYTES), 매우 큰 아카이브에는 FERC_BUNDLE_TIMEOUT_SECONDS(기본값 300)를 높이세요.

collect_related(..., download=True)는 해당 대량 경로를 사용하고 아카이브를 가리키는 bundle 필드를 반환합니다.

eLibrary는 모든 다운로드를 application/octet-stream으로 표시하므로 실제 유형은 magic bytes와 파일 확장자에서 추론됩니다(OOXML 확장자가 ZIP magic보다 우선합니다. .docx 자체가 ZIP이기 때문입니다). 단일 파일 결과는 실제로 기록된 바이트와 함께 FERC 메타데이터의 expected_size를 보고하고, size_matches_metadatais_bundle도 보고하므로, 한 파일을 요청했는데 번들이 도착한 경우 조용히 넘어가지 않고 드러납니다. 파일이 하나인 접수번호에 format=zip을 사용하면 해당 파일로 풀리고 저장된 내용과 일치하도록 해당 필드가 업데이트됩니다.

Claude Desktop 번들 빌드

클론에서 Node.js 18+를 사용할 수 있는 상태로:

npx --yes @anthropic-ai/mcpb validate manifest.json
npx --yes @anthropic-ai/mcpb pack . dist/ferc-elibrary.mcpb

번들은 server.type = "uv"를 사용합니다. 소스와 pyproject.toml을 포함하며, 벤더링된 virtualenv는 아닙니다. Claude Desktop은 첫 실행 시 Python과 의존성을 다운로드합니다. CI는 푸시할 때마다 동일한 파일을 패킹하고 GitHub 릴리스에 첨부합니다.

MCP 클라이언트 설정

Claude Desktop 사용자는 원클릭 .mcpb 설치를 사용하는 것이 좋습니다. 아래 JSON은 Cursor, Claude Code 및 기타 클라이언트용입니다.

OWNER를 이 저장소의 GitHub 소유자로 바꾸세요. 모든 스니펫은 git에서 휴대 가능한 uvx를 사용합니다. 절대 머신 경로가 없습니다.

다운로드는 FERC_DOWNLOAD_DIR이 설정되지 않은 경우 기본적으로 ~/Downloads/ferc-elibrary에 저장됩니다. FERC_MCP_IDLE_TIMEOUT_SECONDS를 설정하면 버려진 stdio 인스턴스를 정리할 수 있습니다(고아 서버 프로세스 참조). 값을 생략하거나 0으로 설정하면 자체 종료되지 않습니다(기본값).

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS) 또는 해당 OS에 해당하는 Claude Desktop 구성에 추가하세요:

{
  "mcpServers": {
    "ferc-elibrary": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/OWNER/ferc-elibrary-mcp",
        "ferc-elibrary-mcp"
      ],
      "env": {
        "FERC_DOWNLOAD_DIR": "/Users/YOU/Downloads/ferc-elibrary",
        "FERC_MCP_IDLE_TIMEOUT_SECONDS": "14400"
      }
    }
  }
}

FERC_DOWNLOAD_DIR에는 절대 경로를 사용하세요(~는 직접 확장). Claude Desktop은 GUI 앱이므로 ~를 확장하지 않거나 셸 PATH를 상속하지 않을 수 있습니다. 앱이 볼 수 있는 PATH에 uvx가 있는지 확인하세요(예: uv를 시스템 전체에 설치하거나 uvx의 전체 경로로 래핑).

Claude Desktop을 완전히 종료하고 다시 여세요. Settings → Developer에서 서버를 확인하세요.

Cursor

프로젝트의 .cursor/mcp.json 또는 사용자 MCP 구성에 추가하세요:

{
  "mcpServers": {
    "ferc-elibrary": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/OWNER/ferc-elibrary-mcp",
        "ferc-elibrary-mcp"
      ],
      "env": {
        "FERC_DOWNLOAD_DIR": "/Users/YOU/Downloads/ferc-elibrary",
        "FERC_MCP_IDLE_TIMEOUT_SECONDS": "14400"
      }
    }
  }
}

Claude Code

프로젝트 범위(프로젝트 루트의 .mcp.json) 또는 사용자 범위(claude mcp add / ~/.claude.json):

{
  "mcpServers": {
    "ferc-elibrary": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/OWNER/ferc-elibrary-mcp",
        "ferc-elibrary-mcp"
      ],
      "env": {
        "FERC_DOWNLOAD_DIR": "${HOME}/Downloads/ferc-elibrary",
        "FERC_MCP_IDLE_TIMEOUT_SECONDS": "14400"
      }
    }
  }
}

또는 CLI를 통해:

claude mcp add --scope user ferc-elibrary -- \
  uvx --from git+https://github.com/OWNER/ferc-elibrary-mcp ferc-elibrary-mcp

예시 프롬프트

  • 지난 1년간 Ashokan 양수 저장 프로젝트에 대한 의견과 이의 제기를 eLibrary에서 검색합니다.

  • CP21-470의 docket 시트를 가져오고 관련 제출 문서를 나열합니다.

  • 2024년 1월의 전력 산업에서 Order/Opinion 발행을 찾고 관련 docket 제출 문서를 수집합니다.

  • accession 20201119-5202의 공개 PDF를 다운로드합니다.

MCP Inspector로 테스트

프로젝트 클론에서:

npx @modelcontextprotocol/inspector uv run ferc-elibrary-mcp

docket P-15056-0002020-11-19 전후의 start_date / end_datesearch_filings를 호출하여 알려진 공개 결과를 확인합니다.

테스트

uv run pytest
uv run pytest -m live   # optional smoke test against the live public API

제한 사항

  • 공개 문서만 가능합니다. FERC 로그인, CEII, 권한 필요 또는 보호된 파일은 불가능합니다.

  • 파일 바이트는 MCP 도구 응답으로 반환되지 않고 디스크에 기록됩니다.

  • collect_related는 가져올 docket 및 파일 수에 상한을 두므로 광범위한 쿼리가 수천 개의 제출 문서를 컨텍스트에 덤프하지 못합니다.

  • 백엔드는 문서화되지 않았으며 간헐적으로 502/503/520을 반환하는 프록시 뒤에 있습니다. 일시적인 5xx 응답은 백오프를 적용하여 최대 세 번 재시도됩니다.

  • FERC는 일부 잘못된 페이로드에 대해 success: false 및 .NET 예외 문자열과 함께 HTTP 200을 반환합니다. 이는 조용히 0건을 반환하는 대신 오류로 처리됩니다.

고아 서버 프로세스

일부 MCP 클라이언트(특히 Claude Desktop)는 때때로 1초 간격으로 두 개의 stdio 서버를 생성하고 그중 하나에만 통신합니다. 버려진 인스턴스에서 stdin을 닫지 않을 수 있으므로 해당 프로세스는 EOF를 결코 보지 못하고 영원히 유휴 상태로 남습니다. 실제로 하루에 한 쌍씩 누수되며, 오래된 인스턴스로 라우팅된 도구 호출은 실패하지 않고 클라이언트 자체 타임아웃까지 중단됩니다.

서버 자체에는 잘못이 없습니다. stdin EOF(종료 코드 0) 및 SIGTERM에서 깨끗하게 종료됩니다. 버려진 인스턴스는 아무도 듣고 있지 않다는 사실을 알아차릴 방법이 없습니다.

FERC_MCP_IDLE_TIMEOUT_SECONDS를 설정하면 해당 시간 동안 메시지를 받지 못한 인스턴스가 SIGTERM을 통해 스스로 종료됩니다. 요청이 있을 때마다 타이머가 재설정되므로 사용 중인 서버는 영향을 받지 않습니다. 완전히 버려진 인스턴스만 정리됩니다. 기본적으로 비활성화되어 있지만(0), 정상이지만 사용되지 않는 서버도 종료되고 복구는 클라이언트가 다시 생성하는 데 의존하게 되기 때문입니다. 위의 샘플 구성은 4시간으로 설정되어 있으며, 활성 세션의 어떤 간격보다 충분히 깁니다.

수동으로 잔여 프로세스를 확인하고 정리하려면:

ps -eo pid,etime,command | grep '[f]erc-elibrary-mcp'
kill -TERM <pid>   # they are idle, not wedged; no -9 needed

라이선스

MIT — LICENSE를 참조하세요.

Available Tools

13 tools
cache_statusC

Report what the document store holds for a docket or accession.

ParametersJSON Schema
NameRequiredDescriptionDefault
docketNo
accessionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only inspection via 'Report', but does not state whether it mutates anything, whether both parameters may be supplied together, what happens when both are null, or what 'holds' concretely means (e.g., existence, metadata, document segments).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, and the core idea is front-loaded. It is efficient, though brevity comes at the cost of missing operational context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists so return-value details need not be in the description, the tool is underspecified for a user trying to call it correctly. Key invocation constraints—parameter optionality, exclusivity, and what a cache status report actually contains—are absent, making this incomplete for reliable tool selection and use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare schema. It adds only the relationship 'docket or accession', but does not explain the expected identifier formats, whether at least one is required, whether they are exclusive, or what each parameter affects in the report.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific action ('Report') and a specific resource ('what the document store holds for a docket or accession'), which distinguishes it as a cache-status inspection tool among siblings like get_docket and sync_docket. It does not explicitly name a sibling alternative, but the purpose is not tautological or vague.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives such as get_docket, sync_docket, or list_files. The intended use case (checking cached holdings before fetching or syncing) is only weakly implied, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 accession_filename members into accession/filename folders.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
docketNo
file_idsNo
accession_numbersNo
organize_by_accessionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden, and it does so thoroughly: it discloses filesystem side effects (writing under FERC_DOWNLOAD_DIR/bundles), default folder reorganization, file/size caps, the skipping behavior for restricted/not-found accessions with reasons and categories, and the fact that it does not return file bytes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence adds value: purpose, alternative comparison, parameter semantics, caps, skip behavior, and the no-bytes return caveat. It is front-loaded with the core purpose before diving into details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four optional parameters, no annotations, and no schema descriptions, the description covers all necessary operational context: selection semantics, side effects, limits, failure handling, and return caveats. The presence of an output schema means return-field detail is not required in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description compensates by explaining each parameter: accession_numbers select all public files on each accession, file_ids target exact attachments, docket selects public files via search, and organize_by_accession controls folder structure with a clear default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Zip many public files into one archive under FERC_DOWNLOAD_DIR/bundles.' It also explicitly differentiates itself from the sibling tool download_file by saying 'Prefer this over repeated download_file calls,' making the tool's distinct role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use this tool ('Prefer this over repeated download_file calls') and enumerates valid input combinations. It does not explicitly spell out exclusions like 'use download_file for a single file or restricted accessions,' but the restricted/not-found skipping behavior implies those cases are not this tool's purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNonative
file_idNo
accession_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden and does so admirably. It discloses the side effect of saving to FERC_DOWNLOAD_DIR, states that file bytes are not returned, explains refused document types, and reveals how format choices change the saved artifact and result metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed yet tightly organized, with each paragraph serving a distinct purpose: primary action, key caveats, format semantics, and result interpretation. No sentence feels redundant or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers prerequisites, refusals, format variants, side effects, return-value semantics, and mismatch detection. The presence of an output schema reduces the need to describe return fields, yet the description still adds useful interpretive context about size_matches_metadata and is_bundle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It thoroughly explains the format enum values, their defaults, and their behavioral differences, and it explains file_id's role via the list_files prerequisite. accession_number is not explicitly explained, though the tool name and context make it reasonably inferable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Download a public eLibrary file to FERC_DOWNLOAD_DIR.' It clearly distinguishes this tool from siblings by focusing on a single file download and by describing the non-return of file bytes, making its role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit operational guidance: call list_files first to pick a file_id, and it warns that privileged/protected/CEII documents are refused. It does not explicitly compare against the sibling download_bundle, so the choice between this tool and that alternative is somewhat left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
end_dateNo
date_fieldNofiled
sort_orderNooldest_first
start_dateNo
subdocketsNoAll
docket_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so exceptionally. It discloses row duplication and merging by accession number, total_hits semantics, count_basis=distinct_accession, availability_scope='all', the absence of a 60-day default, client-side date filtering, and page=0 handling. This is far more transparent than most tool descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place. It is organized into logical chunks: core purpose, docket/subdocket format, pagination, row-merging behavior, comparison to search_filings, sort order, and date behavior. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not explain return values. It covers edge cases (page=0, subdocket lists, multi-docket filings, privileged filings, client-side date filtering) and differentiates behavior from a key sibling. An agent has enough to call this tool correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains docket_number format, subdockets values, page indexing, sort_order meaning and default, and date_field/envelope behavior. The only notable omission is the limit parameter, which is left to inference, but the overall parameter guidance is strong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Return the docket sheet: related filings, applicants, and accession numbers.' It also gives concrete docket number examples and clearly differentiates itself from search_filings by scope and behavior. An agent can confidently identify this tool as the one that retrieves a docket sheet by docket number.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly contrasts get_docket with search_filings: availability handling, sort order defaults, and date-field behavior. It implies the primary use case is when you have a docket number. It does not include an explicit 'use this when / use search_filings when' rule, but the comparisons provide strong routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_outlineB

Return PDF bookmarks or a heuristic section map for a stored filing.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes
accession_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It does convey the key fallback behavior: return PDF bookmarks if available, otherwise a heuristic section map. It does not, however, state side effects, error conditions, or whether the operation is read-only, though 'Return' implies non-mutating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and output type, and no filler. This is as concise as possible while still conveying the tool's core behavior and fallback.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The presence of an output schema covers return-value details, and the two required parameters are simple strings. Still, the description lacks parameter semantics and usage guidance, so the definition is only minimally complete for an agent choosing among siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to explain what accession_number and filename mean, but it does not. The phrase 'stored filing' offers only weak context; the parameter names themselves are doing the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description names a specific verb ('Return') and a precise resource: 'PDF bookmarks or a heuristic section map for a stored filing.' This makes the output clear and distinguishes the tool from siblings like get_filing_text or read_document, which return content rather than a document outline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description gives no explicit when-to-use advice and does not mention any sibling alternative, so an agent must infer from the tool name and output type when to select it over get_filing_text or search_within_document. There are no exclusion conditions or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accession_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It discloses a meaningful behavioral limitation ('No protected content is ever returned') and explains that has_nonpublic_counterpart is inferred from filer naming conventions rather than authoritative metadata, which is important for interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and every sentence adds value: the first states what the tool does, the second explains the nonpublic_counterpart semantics, and the third explicitly reassures about protected content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single required parameter, an output schema, and one key behavioral caveat, the description is largely complete. It explains the non-authoritative nature of an important field. It could be more complete by explicitly naming get_filing_text as the tool for content, but that is not essential for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only declares accession_number as a string with no description, giving 0% schema coverage. The description compensates by providing the exact expected format ('YYYYMMDD-NNNN'), which is crucial for calling the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Fetch'), the resource ('metadata for one filing'), and the key identifier ('accession number (YYYYMMDD-NNNN)'). This distinguishes it from sibling tools like get_filing_text by emphasizing 'metadata' rather than content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving metadata for a single filing and explicitly notes when a nonpublic counterpart would be relevant (moving for access under 18 C.F.R. 388.113). However, it does not explicitly contrast with search_filings or get_filing_text, leaving some routing decisions to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idNo
max_charsNo
accession_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the truncation behavior ('at most max_chars', 'reports total_chars when truncated') and the deprecated status, which is meaningful behavioral context. It does not mention side effects or permissions, but the read-only nature is clear enough for a deprecated text-retrieval alias.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the deprecation and core behavior, then provides routing guidance to alternatives. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return-value details are not required. The description covers deprecation, truncation, and alternative tools well, but incomplete parameter semantics for file_id and accession_number prevent full completeness. It is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It only explains max_chars; the meanings of accession_number and file_id, and their relationship, are left undocumented. This is a notable gap for an agent trying to call the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a deprecated alias for read_document and specifies the exact behavior: 'Returns at most max_chars of extracted text.' It names the resource (filing text), the operation (bounded read), and distinguishes itself from siblings by framing it as deprecated and bounded.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly steers agents away from this tool for large filings by recommending get_document_outline, search_within_document, and read_document. However, it does not clearly describe when this tool should still be used, only implies it may be acceptable for smaller bounded reads.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesA

List files attached to an accession. Call this before download_file.

See get_filing for what has_nonpublic_counterpart means.

ParametersJSON Schema
NameRequiredDescriptionDefault
accession_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden of behavioral disclosure. It reveals the operation is a listing action and hints at has_nonpublic_counterpart semantics only via cross-reference, but it does not state whether the call is read-only, what metadata is returned, or whether pagination or limits apply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two short sentences with no filler. The first sentence states the action, and the second efficiently redirects to get_filing for a relevant term instead of duplicating context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter listing tool with an output schema available, the description covers the core action and workflow ordering. It is close to sufficient, though it would benefit from a brief note on expected file metadata or read-only behavior since annotations are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no description for accession_number (0% coverage), and the description only ties it to 'an accession' and the download workflow. This adds some meaning beyond the bare parameter name, but it does not specify the expected format or how to obtain the accession number.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a concrete resource ('files attached to an accession'), making the tool's function immediately clear. It also differentiates from download_file by positioning itself as the step before downloading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Call this before download_file,' which gives clear sequencing guidance. It also points to get_filing for understanding has_nonpublic_counterpart. It does not fully enumerate when not to use other sibling tools, so it stops short of a complete routing guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNo
char_endNo
filenameYes
max_charsNo
char_startNo
accession_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the truncation behavior, the guarantee that the full document is never returned unless it fits within max_chars, and the response metadata (total_chars, truncated, next_char_start/next_page) when clipped. This is strong, concrete behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly scoped sentences with the primary action front-loaded. Every sentence earns its place: the return type and source, the critical size limitation, and the response navigation contract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return-value details, and the description provides solid behavioral context. However, the 6-parameter schema has zero description coverage and the description compensates only for max_chars, so an agent still lacks sufficient guidance on pagination/range parameters and how this tool compares to siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, and the description only adds meaning for max_chars. It does not explain pages, char_start, char_end, accession_number, or filename, leaving key range-selection and document-identification semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Return bounded plain text from a cached filing attachment,' which names a specific verb, resource, and scope. The 'Never returns the full document' constraint clearly differentiates it from sibling tools like get_filing_text, which likely returns complete document text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: use this when you need bounded plain text from a cached filing attachment. However, it does not explicitly name alternatives or state when not to use this tool, so the agent must infer routing decisions from sibling names and the bounded-text behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
matchNophrase
queryNo
docketNo
categoryNo
end_dateNo
industryNo
search_inNoboth
date_fieldNofiled
start_dateNo
document_typeNo
accession_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and meets it well. It reveals the default 60-day window for open-ended queries, the no-date-filter behavior when docket or accession_number is supplied, and the presence of response flags like date_range_applied and results_may_be_date_limited. It also discloses nuanced behaviors around date_field and match modes that an agent would otherwise have to discover by trial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with a clear opening and topic-focused paragraphs, each sentence adds useful information. The opening repeats 'public' twice ('public FERC eLibrary filings' and 'Public documents only'), which is minor redundancy; otherwise it is appropriately dense for a 13-parameter search tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex search tool with no annotations, this description is unusually complete: it covers search scope, date defaults, parameter behavior, and response caveats. An output schema exists to define the return shape, so the description provides enough context for correct invocation without missing essential operational details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does. It explains docket, accession_number, date_field, match, search_in, and document_type with examples and usage guidance. Only page, limit, category, and industry are not directly addressed, but the most consequential parameters are richly specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Search public FERC eLibrary filings.' It also scopes the tool with 'Public documents only' and lists concrete supported query keys (keywords, docket prefix, accession numbers, document types), making it clearly distinguishable from siblings like get_filing or list_files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context on how to search: which fields to use, date defaulting behavior, and trade-offs between match and search_in modes. It stops short of explicitly saying when not to use this tool versus a sibling like get_filing, so it lacks explicit when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_within_documentB

Search extracted text for a query and return passages with page/char offsets.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
filenameYes
max_hitsNo
accession_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses the core read-only search behavior and the output shape, but it does not mention side effects, extraction prerequisites, pagination, max_hits behavior, or edge cases. It is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with a leading verb and no filler. Every phrase adds meaning: the search action, the input type (extracted text), and the output (passages with offsets).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has four parameters with no schema descriptions and no annotations, so more context is required. The output schema covers the return shape, but the missing parameter semantics and lack of usage guidance leave the description incomplete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only clarifies 'query' by referring to it as a query. It does not explain accession_number, filename, or max_hits, leaving the agent to guess why both identifiers are required and how max_hits limits results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb ('Search'), a resource ('extracted text'), and an explicit output ('passages with page/char offsets'). This makes it clear what the tool does and distinguishes it from siblings like get_filing_text and read_document, which return full text rather than matched passages with offsets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to prefer this tool over alternatives. It does not mention that it is for searching within a single document rather than across filings, and it does not contrast with siblings such as search_filings, get_filing_text, or read_document.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_docketB

Incrementally fetch accessions missing from the document store for a docket.

ParametersJSON Schema
NameRequiredDescriptionDefault
docket_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It mentions 'incrementally' and the scope 'missing from the document store,' but it does not state whether the tool writes to or mutates the document store, whether it is idempotent, or whether it may be a long-running operation. The wording is ambiguous about side effects, which is a significant gap for a tool named 'sync_docket.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of twelve words, front-loaded with the verb and object. Every word contributes meaning: 'incrementally' clarifies scope, 'missing from the document store' specifies the target set, and 'for a docket' ties it to the parameter. There is no redundant language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return values need not be explained. However, the absence of annotations and the terse description leave important operational context untold: whether the tool mutates the document store, what 'accessions' means in this domain, how 'incrementally' is determined, and whether a prior cache or docket fetch is required. An agent could not fully assess side effects or prerequisites from this description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required parameter (docket_number) with zero description coverage. The tool description's 'for a docket' implicitly identifies docket_number as the target docket, adding some contextual meaning. However, it does not specify the expected format, example values, or any constraints, so it only partially compensates for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('fetch') and a precise resource ('accessions missing from the document store for a docket'). It clearly communicates an incremental sync operation, which is distinct from the other listed tools like get_docket or get_filing. It does not explicitly name sibling alternatives, so it stops short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'incrementally fetch accessions missing' implies a backfill/sync scenario, giving some sense of when to use this tool. However, it does not explicitly state when to prefer this tool over alternatives such as get_docket or cache_status, nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation4/5

Most tools target distinct levels of the eLibrary: search, docket metadata, accession metadata, attachment listing, downloads, and document text. The deprecated get_filing_text alias overlaps with read_document and could be confused with get_filing, and collect_related combines search and docket listing, but the descriptions clarify the intended boundaries.

Naming Consistency4/5

Almost every tool follows a verb_noun snake_case pattern such as search_filings, get_docket, and download_file. cache_status breaks the verb pattern, collect_related uses an adjective-like object, and get_filing_text is a stale alias, so the naming is mostly but not fully consistent.

Tool Count4/5

13 tools is within the well-scoped range and covers search, metadata access, file listing, downloads, bundle downloads, document text analysis, and cache management. The deprecated get_filing_text alias and the more internal cache_status/sync_docket tools add slight weight, but the set does not feel bloated.

Completeness5/5

The tools cover the public-filing lifecycle end to end: docket and accession search, metadata retrieval, file listing, single and bundle download, extracted-text reading, within-document search, outlines, and cache synchronization. No obvious operations are missing for the stated FERC eLibrary retrieval domain.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server providing read-only access to SEC EDGAR filings, allowing LLMs to look up companies, search filings, and retrieve securities offering data.
    3
    1
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables querying South Korean stock disclosures, financial statements, and shareholder reports via the OpenDART API from any MCP-compatible client.
    87
    MIT
  • F
    license
    B
    quality
    A
    maintenance
    Enables searching, tagging, uploading, and reading documents in Paperless-NGX, with management of tags, correspondents, document types, and custom fields via MCP tools and resources.
    50
    1

Latest Blog Posts

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