Finra

io.github.pipeworx-iov0.1.2更新于 Oct 1, 2026

FINRA short-sale data — Reg SHO daily short-sale VOLUME plus consolidated

已验证Streamable HTTP可网页运行FinanceData & Analytics

概览

AI 生成的概览

为助手提供美国股票的 FINRA Reg SHO 每日卖空成交量以及每两月一次的合并空头持仓数据。

功能
提供若干工具:查询某只股票某个交易日的卖空成交量、最多 30 个交易日的同一序列、某交易日按卖空比率排序的股票列表,以及按结算日统计的合并空头持仓。成交量数据汇总合并 NMS 的各报告机构,OTC 报告机构的成交量单独列出。代码大小写会被保留,以便优先股标记能准确对应到唯一证券。
适用场景
当需要美国股票的卖空成交量或空头持仓数据时使用,例如查看某只股票的每日卖空比率、比较不同结算日的空头持仓,或在某个交易日筛选卖空比例较高的股票。
运行要求
通过网关地址提供的远程 streamable HTTP 端点;首次调用无需账户或 API 密钥。也提供本地 stdio 版本,以 npm 包形式通过 npx 运行,需要 Node.js。需要能访问网关以及 FINRA 的 Query API。
安装前请注意
该服务无需密钥,但 README 指出无密钥不等于无限制,并指向许可条款部分。数据为只读,不涉及凭据、付款或写入操作。空头持仓每两月公布一次,因此最新记录常为一到两周前。连接单个 pack 端点还会列出约 30 个共享网关元工具,会占用上下文。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Finra,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "finra": {
      "type": "http",
      "url": "https://gateway.pipeworx.io/finra/mcp"
    }
  }
}

README

@pipeworx/finra

FINRA short-sale data for US equities — daily short-sale volume from the Reg SHO daily dataset, and bi-monthly consolidated short interest. Both come from the FINRA Query API's otcMarket dataset group.

Part of Pipeworx — an MCP gateway connecting AI agents to 1683+ live data sources.

The two are different measurements and are constantly confused. Short volume is how many shares traded short on a given day. Short interest is how many shares are currently sold short and not yet covered, reported twice a month by settlement date — that is the "% short / days-to-cover" figure investors quote.

Tools

ToolWhat it returns
short_volume_dailyOne symbol's short-sale volume for one trading day, summed across every consolidated-NMS reporting facility: short_volume, short_exempt_volume, total_volume, short_ratio, and the per-facility split.
short_volume_historyUp to 30 trading days of the same series for one symbol, ending at end_date. One upstream request, not one per day.
short_volume_topSymbols on one trading day ranked by short_ratio, with a min_total_volume filter to exclude thinly-traded micros. Scans the full published day (~12,300 symbols).
short_interestOne symbol's consolidated short interest by settlement date: open short position, change vs the prior settlement, days-to-cover, average daily volume, plus recent history.

Publishing lag on the Reg SHO data is typically T+1 or better — 2026-08-25's rows were queryable on 2026-08-25. Omit date/end_date and the pack probes back up to 7 days for the most recent day with published rows. Short interest settles bi-monthly, so the newest record is routinely a week or two old — that is the source's cadence, not staleness on our side.

Reporting facilities, and why the sum matters

regShoDaily returns one row per reporting facility per symbol per day. A symbol's real short volume is the sum of them:

FacilityMarket codeVenueIn consolidated NMS?
NQTRFQNasdaq TRF Carteretyes
NYTRFNNYSE TRFyes
NCTRFBNasdaq TRF Chicagoyes
ORFOOTC Reporting Facilityno — OTC / non-NMS securities

combined sums every non-ORF facility, which reproduces FINRA's own consolidated CNMS figure exactly. Verified 2026-08-25 against CNMSshvol20260821: GME on 2026-08-21 sums to short 1,335,397.220545 / exempt 1,355 / total 2,315,275.403735, byte-identical to that file's line (whose own market column reads B,Q,N), and market-wide the same day, 12,269 symbols summing to short 3,244,559,759 / total 6,564,367,888.

Until fleet #532 this pack read only the Nasdaq and NYSE TRFs and asserted current data lived "exclusively" there. It does not: omitting Nasdaq TRF Chicago undercounted short volume by 0.77% and total volume by 0.88% market-wide, every day, with a clean 200 and nothing in the response saying so — and far more on any symbol that trades disproportionately on that facility.

ORF is excluded on purpose, and is a different thing from a missing facility: it is a separate market, not a missing part of this one. A symbol with both gets its ORF volume listed under otc_reporting_facility rather than folded into the NMS total; a symbol with only ORF volume is returned with scope: "otc_reporting_facility" and a note, rather than a zero.

Symbol case is significant

A lowercase letter is FINRA's preferred-share marker. On 2026-08-21 BCpC (Bancorp preferred series C, 2,267 shares) and BCPC (Balchem common, 52,413) are two different securities in the same day's data, as are TpC and TPC.

The Query API's equal filter is case-insensitive, so asking for BCPC returns both. This pack therefore never upper-cases a symbol: it resolves to exactly one security, and if your input matches several it returns reason: "ambiguous_symbol" with the candidates rather than adding a preferred series into a common stock's total. When a near-miss symbol exists, it is named in also_reported so you can see it was left out.

Auth

Keyless. The upstream answers without a credential, and no _apiKey is accepted.

Keyless is not the same as unencumbered — see Licence below.

Licence and attribution

All four tools read the otcMarket dataset group at api.finra.org, covered by FINRA's Specific Terms for Equity Data, section 2.3. Two conditions bind us and are not optional:

  • Attribution. FINRA must be clearly identified as the owner and source of the data and of anything derived from it. Every response from this pack therefore carries a leading attribution string, attached centrally in callTool so a new tool or a new early-return cannot ship unattributed by omission. It leads the object so a model synthesizing an answer reads it first, and it survives into ask_pipeworx answers because the answer path passes a pack's structuredContent through verbatim.
  • No incremental fee. We may not charge for the data. The whole pack is therefore zero-rated at the gateway (zeroRated: true on its MCP_PACKS entry): zero credits on every tier including paid, no monthly-volume slot consumed, not counted as a billable lookup inside an answer, and quoted as zero in the pre-call cost disclosure. Responses carry _meta.cost.zero_rated: true. A metered version of any of these tools would be a licence breach, not a pricing choice — do not remove the flag.

End users may not redistribute the data further and are limited to non-commercial personal or professional use; that condition is stated in the attribution string and in section 6 of the published terms at https://pipeworx.io/terms.

Do not reintroduce a cdn.finra.org fetch, for a fallback or for freshness. The Reg SHO daily files published there are a different distribution, outside the Specific Terms; the general FINRA.org Terms of Use that govern them instead are stricter — non-commercial use only, no redistribution without prior written consent, no bulk copying of the website, no creating a database from it, and an explicit bar on use "in conjunction with any machine learning, neural network, deep learning, predictive analytics or other artificial intelligence computer or software program", which is what every caller of this gateway is. Both routes carried 2026-08-21 on 2026-08-25, so there is no freshness trade to make.

Background: fleet #531 and #532, and the licence analysis in docs/finance-data-ingest-plan.md.

Data sources

  • Reg SHO daily short-sale volume — POST https://api.finra.org/data/group/otcMarket/name/regShoDaily
  • Consolidated short interest — POST https://api.finra.org/data/group/otcMarket/name/consolidatedShortInterest
  • Field names and types — GET https://api.finra.org/metadata/group/otcMarket/name/regShoDaily
  • Catalog: https://www.finra.org/finra-data/browse-catalog/short-sale-volume-daily

Upstream quirks worth knowing if you touch this pack: send Accept: application/json or FINRA returns CSV; limit is capped server-side at 5,000 and the true match count is in the record-total response header; a query matching nothing answers 204 with an empty body, not [], so a naive res.json() throws a parse error that reads like a pack bug when it means "no data for that day"; and sorting is rejected unless the partition key (tradeReportDate) is pinned with an equal filter, so there is no "latest date" query — the pack probes backwards instead.

Quick Start

Add to your MCP client (Claude Desktop, Cursor, Windsurf, etc.):

json
{  "mcpServers": {    "finra": {      "url": "https://gateway.pipeworx.io/finra/mcp"    }  }}

What this endpoint actually serves

tools/list at https://gateway.pipeworx.io/finra/mcp returns the tools in the table above plus the shared Pipeworx meta-tools — ask_pipeworx, discover_tools, search_within, remember/recall and the rest of the gateway-wide set. So the tool count you see is larger than this table: a single-pack endpoint currently lists roughly 30 shared tools alongside the pack's own. The connection's initialize response states its exact scope, and is the authoritative answer for a given day.

This is deliberate, not multiplexing by accident. The meta-tools are what let a scoped connection answer a question this pack does not cover — via ask_pipeworx, which routes across the whole catalog — without you adding a second MCP server. There is currently no way to mount a pack endpoint without them; if the extra schemas cost you more context than the routing is worth, connect to the full gateway once rather than to several pack endpoints.

Or connect to the full Pipeworx gateway to get every pack's tools listed directly, instead of just this one's:

json
{  "mcpServers": {    "pipeworx": {      "url": "https://gateway.pipeworx.io/mcp"    }  }}

Both URLs reach the same gateway and the same 1683+ data sources. The only difference is which pack's tools are listed directly; ask_pipeworx reaches all of them from either one.

No MCP client? Call it over HTTP

bash
curl -X POST https://gateway.pipeworx.io/v1/tools/short_volume_daily \  -H 'Content-Type: application/json' \  -d '{"symbol":"AAPL"}'

No account needed for the first calls. Inspect any tool: GET https://gateway.pipeworx.io/v1/tools/short_volume_daily. Find one: POST https://gateway.pipeworx.io/v1/tools/search_packs with {"query":"..."}.

Standalone (no gateway account)

This package also runs as a local stdio MCP server — no Pipeworx account, no gateway round-trip:

json
{  "mcpServers": {    "finra": {      "command": "npx",      "args": ["-y", "@pipeworx/mcp-finra"]    }  }}

Or run it directly to confirm it starts:

bash
npx -y @pipeworx/mcp-finra

It speaks MCP over stdin/stdout and answers initialize/tools/list/tools/call for only this pack's tools — none of the shared meta-tools the gateway connection above adds. Same source, same tools, no ask_pipeworx routing.

Using with ask_pipeworx

Instead of calling tools directly, you can ask questions in plain English — this works on the pack endpoint above as well as on the full gateway:

ask_pipeworx({ question: "your question about Finra data" })

The gateway picks the right tool and fills the arguments automatically.

More

License

MIT

来源:README.md,提交 aebbc25

工具

0
工具元数据尚未被收录。

版本历史

3
  1. v0.1.2最新Sep 26, 2026
  2. v0.1.1Sep 25, 2026
  3. v0.1.0Sep 16, 2026