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、特权或受保护内容
请遵守速率限制;客户端默认会对请求进行间隔
此工具用于研究公开可用的申报文件,不能替代官方访问程序
Related MCP server: @cyanheads/secedgar-mcp-server
在 Claude Desktop 中安装(最简单)
无需 Python、终端或 JSON。Claude Desktop 会为你安装服务器。
安装 Claude Desktop。
从 最新 GitHub Release 下载
ferc-elibrary.mcpb。双击该文件,或将其拖入 Claude Desktop → 设置 → 扩展。
点击 安装。除非你想把 PDF 放在其他位置,否则保持下载文件夹不变。
用自然语言向 Claude 提问,例如:
搜索 eLibrary 中过去一年关于 Ashokan 抽水蓄能项目的评论和异议。
调取 CP21-470 的案卷目录并列出相关申报文件。
下载 accession 20201119-5202 的公开 PDF。
首次启动可能需要一分钟左右,因为 Claude 会通过 uv 安装 Python。之后启动会很快。下载的文件位于 Downloads/ferc-elibrary(或你选择的文件夹)中。仅限公开文件。
如果尚未发布,维护者可以用以下命令构建同样的文件:
npx --yes @anthropic-ai/mcpb pack . dist/ferc-elibrary.mcpb然后通过电子邮件或 AirDrop 发送 dist/ferc-elibrary.mcpb。
要求
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)。
工具
Tool | 用途 |
| 按关键词、案卷编号、accession、文件类型、类别和行业搜索。仅限公开文件。有关日期窗口的选择方式,请参阅 日期过滤。 |
| 案卷目录:相关申报文件、申请人、accession 编号。有关它与 |
| 单个 accession( |
| 某个 accession 所附的文件(下载前调用)。 |
| 下载一个公开附件并返回提取出的纯文本(PDF/DOCX/text)。用于阅读或总结申报文件—— |
| 将公开的单个文件、单个 accession 的 zip 包或生成的 PDF 保存到 |
| 批量下载首选: 在单次请求中将跨多个 accession 的许多公开文件打包 Zip 并下载到 |
| 搜索一个术语或文件类型,然后按案卷对相关申报文件分组(上限为 10 个案卷 × 50 个文件)。可选的 |
特权、受保护和 CEII 文件将被拒绝。
日期过滤
日期默认值具有作用域感知能力,因为对指定案卷套用 60 天窗口会静默隐藏程序中的大部分内容:
调用方式 | 应用的窗口 |
|
| 无,整个程序 |
|
开放式查询,无日期 | 最近 60 天 |
|
任何显式的 | 按给定值 |
|
所有接受日期的工具——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,即使结果为空也会报告,因为在未被注意的默认值下出现空结果集是最容易误导的情形。只有 results_may_be_date_limited 为 false 时,才应将 total_hits 视为完整计数。
这三个工具都通过同一个 resolve_date_range 辅助函数解析其窗口,并通过 DateRangeResolution.as_envelope() 报告结果。注册表测试会遍历工具列表,如果任何接受 start_date 的工具缺少该 envelope 或 date_field 参数,测试就会失败,因此新加入的搜索类工具在添加当天就被覆盖。
date_field 选择日期范围基于哪个日期进行过滤,filed(默认)或 issued。做期限计算时请使用 issued:FPA 313(a) 复议以及大多数委员会设定的评论和合规期限从签发之日开始计算,而这两个日期会不一致。在 ER26-3176 中,accession 20260807-5037 的提交日期是 08/07,但签发日期是 08/06,因此按提交日期搜索 08/06 会漏掉它。两者都由 eLibrary 在服务端过滤,因此分页仍然精确。
案卷目录与搜索
get_docket 和 search_filings 涵盖相同的申报文件,但获取方式不同,而且这些差异会被明确报告,而不是留待用户自行发现:
每个申报文件一行。 eLibrary 按案卷关联返回一行,因此一个标题为
-000、-001和-002的诉状会出现三次,其totalHits也会计数三次。行按 accession 编号合并,每个关联都保留在docket_numbers中,count_basis报告distinct_accession。在 EL25-49 中,这就是 FERC 报告的 380 与你能实际检索到的 312 个申报文件之间的差异。分页在客户端进行。
numHits和pageNumber不能可靠地对目录进行切片——每页行数会超过请求的限制,且后面的页面会重叠——因此目录只获取一次,并在本地分页。两个工具的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 的空值哨兵0001-01-01,因此它显示为空字符串,而不是公元 1 年的日期。get_docket上的date_field="issued"通过搜索端点解析窗口,该端点带有真实的签发日期,并设置date_field_filtered_client_side: true。
密封对应版本
get_filing 和 list_files 会报告 has_nonpublic_counterpart,这是一个信号,表示同一个 accession 上很可能存在密封、受保护或 CEII 版本——也就是你需要依据 18 C.F.R. 388.113 申请访问权限的对象。该信号是根据申报者命名惯例推断出来的(文件名或描述以 PUBLIC 开头,或包含 REDACTED),因此 nonpublic_counterpart_basis 报告 file_naming_convention,以表明这是启发式而非权威性的。为避免误报,诸如 "Public Service Company" 之类的公用事业名称会被排除。绝不会返回任何受保护内容,而且该信号刻意不出现在 search_filings 的结果中。
搜索精度
eLibrary 将未加修饰的多词查询视为独立术语,这会埋没真正包含该短语的申报文件。有两个参数可以控制这一点:
match:phrase(默认)要求精确短语,all要求包含每个术语,any是 FERC 的宽松术语匹配。search_in:both(默认)搜索描述和全文文档文本,description仅匹配申报文件标题,full_text仅匹配文档正文。
在 2026 年的申报文件中搜索 shared facilities agreement:
|
| 命中数 |
|
| 5,627 |
|
| 324 |
|
| 65 |
当短语搜索仍然返回过多无关内容时,可以使用 search_in="description";全文匹配会找到附件深处任何顺带提及的内容。你自己编写的 eLibrary 语法(引号、AND、OR、NOT、NEAR)会原样转发。
下载格式
download_file 为单个 accession 接受一个 format 参数:
native(默认)保存由file_id标识的那个文件。zip打包该 accession 上的所有文件。pdf请求 eLibrary 生成该 accession 的合并 PDF。
对于多个文件或多个 accession,请改用 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 个文件 / 500 MB(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 魔数,因为 .docx 本身就是一个 ZIP)。单文件结果还会在实际写入的字节旁边报告来自 FERC 元数据的 expected_size,以及 size_matches_metadata 和 is_bundle,这样当你请求一个文件却收到一个 bundle 时,问题会显式可见,而不是悄然发生。在只有一个文件的 accession 上使用 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,而不是随附的虚拟环境(vendored virtualenv)。Claude Desktop 会在首次运行时下载 Python 和依赖项。CI 在每次推送时打包相同的文件,并将其附加到 GitHub Releases。
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)或你操作系统上对应的 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 应用,可能不会展开 ~,也不会继承你 shell 中的 PATH;请确保 uvx 位于应用可见的 PATH 中(例如在系统范围内安装 uv,或使用 uvx 的完整路径)。
完全退出并重新打开 Claude Desktop。在 设置 → 开发者 下确认服务器。
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示例提示词
在 eLibrary 中搜索过去一年关于 Ashokan 抽水蓄能项目的评论和反对意见。
拉取 CP21-470 的案卷表,并列出相关文件。
查找 2024 年 1 月电力行业发布的 Order/Opinion 文件,并收集相关的案卷文件。
下载 accession 20201119-5202 的公开 PDF。
使用 MCP Inspector 测试
在项目的克隆目录中:
npx @modelcontextprotocol/inspector uv run ferc-elibrary-mcp以 docket 为 P-15056-000、start_date / end_date 取值在 2020-11-19 附近,调用 search_filings,以确认能命中一条已知的公开记录。
测试
uv run pytest
uv run pytest -m live # optional smoke test against the live public API限制
仅限公开文档。不支持 FERC 登录、CEII、特权或受保护文件。
文件字节会写入磁盘,而不会通过 MCP 工具响应返回。
collect_related会限制它拉取的案卷和文件数量,因此宽泛的查询不会把数千份文件倾倒进上下文中。后端没有文档,且位于一个会间歇性返回 502/503/520 的代理之后。瞬时 5xx 响应会以退避方式重试最多三次。
对于某些格式错误的负载,FERC 会返回 HTTP 200,并带有
success: false和一段 .NET 异常字符串。这些会被作为错误抛出,而不是静默返回零条命中。
孤儿服务器进程
某些 MCP 客户端(尤其是 Claude Desktop)偶尔会在不到一秒内先后生成两个 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 toolscache_statusC
Report what the document store holds for a docket or accession.
| Name | Required | Description | Default |
|---|---|---|---|
| docket | No | ||
| accession | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| docket | No | ||
| file_ids | No | ||
| accession_numbers | No | ||
| organize_by_accession | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | native | |
| file_id | No | ||
| accession_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| end_date | No | ||
| date_field | No | filed | |
| sort_order | No | oldest_first | |
| start_date | No | ||
| subdockets | No | All | |
| docket_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | ||
| accession_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| accession_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | No | ||
| max_chars | No | ||
| accession_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| accession_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | ||
| char_end | No | ||
| filename | Yes | ||
| max_chars | No | ||
| char_start | No | ||
| accession_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| match | No | phrase | |
| query | No | ||
| docket | No | ||
| category | No | ||
| end_date | No | ||
| industry | No | ||
| search_in | No | both | |
| date_field | No | filed | |
| start_date | No | ||
| document_type | No | ||
| accession_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| filename | Yes | ||
| max_hits | No | ||
| accession_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| docket_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Browse and query the EIA API v2 — electricity, petroleum, natural gas, coal, forecasts via MCP.
EDGAR MCP — SEC EDGAR public APIs (free, no auth)
SEC MCP — SEC EDGAR public APIs (free, no auth)
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server providing read-only access to SEC EDGAR filings, allowing LLMs to look up companies, search filings, and retrieve securities offering data.31MIT
- AlicenseNot gradedqualityAmaintenanceQuery SEC EDGAR filings, XBRL financials, and company data through MCP.4399Apache 2.0
- AlicenseBqualityAmaintenanceEnables querying South Korean stock disclosures, financial statements, and shareholder reports via the OpenDART API from any MCP-compatible client.87MIT
- FlicenseBqualityAmaintenanceEnables searching, tagging, uploading, and reading documents in Paperless-NGX, with management of tags, correspondents, document types, and custom fields via MCP tools and resources.501
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