Skip to main content
Glama
DevDizzle

GammaRips Options Intelligence

GammaRips MCP Server

面向 AI 代理的期权流智能原语。

每个交易日早晨,GammaRips 都会扫描美国期权市场,寻找异常机构活动,并精心筛选——最终形成一个约 50 只股票的高信号 BULLISH 池。这个 MCP 服务器为自带代理的交易者提供该池以及推理所需的底层数据:时点特征、已实现的机会面(未应用退出规则的最大有利/最大不利偏移)、区间结果标签、市场环境背景和方法论手册。

设计原则:原语,而非推荐。 没有“我该买什么”的端点。每个代理都从相同的数据推理出自己的合约和自己的退出。纸面交易研究数据;仅供教育;不构成投资建议。

托管 MCP 端点

  • 流式 HTTP(主要): https://mcp.gammarips.com/mcp

  • SSE(旧版,弃用窗口): https://mcp.gammarips.com/sse

  • 无状态 JSON-RPC: https://mcp.gammarips.com/jsonrpc

  • 服务器卡片: https://mcp.gammarips.com/.well-known/mcp/server-card.json

  • OAuth 端点(聊天客户端): https://mcp.gammarips.com/pro。同一服务器,同样 9 个工具,但需要凭据,因此 ChatGPT、Claude(claude.ai / Desktop)、Cursor 以及任何支持 OAuth 2.1 的 MCP 客户端在添加时会提供 GammaRips 登录。您的订阅层级包含在令牌中。发现:/.well-known/oauth-protected-resource/pro;授权服务器:https://gammarips.com。

  • 认证: 两种凭据,一种分层。(1) API 密钥:gr_live_... 作为 Authorization: Bearer <key>(或 X-API-Key),适用于可以发送标头的客户端。(2) OAuth 2.1 访问令牌,由 gammarips.com 在您登录后(聊天客户端)或由机器客户端使用 client_credentials(无头代理,见下文)签发。免费层工具在 /mcp 上无需任何凭据即可使用;4 个专业工具需要任一凭据上的有效订阅。强制执行已生效。在 gammarips.com/pricing 获取访问权限。

Related MCP server: TickerAPI

可用工具(9)

V4(2026-07-17)将 V3 的 29 个工具整合为 9 个。被吸收的工具以这 9 个工具的 view= / granularity= 模式继续存在。web_search 已被移除。

免费层(无需密钥):get_pool、get_regime_context、get_market_calendar_status、get_playbook、get_daily_report。专业层(Agent Access,每月 39 美元密钥):get_signal、get_liquidity、query_outcomes、replay_contract。

  • get_pool (免费) — 候选池:view="enriched"(精选叙事/技术面/合约/mom_60,防泄漏视图;默认),"raw"(预筛选扫描),"features"(来自白名单视图的时点特征向量),"preview"(公开预览)。

  • get_signal (专业) — 单个股票代码:view="detail"(完整增强,默认)或 view="earnings"(原则性财报窗口检查)。

  • get_liquidity (专业) — 新鲜的入场日流动性:单个 contract(缓存优先,live=true 强制上游)或整个池 / 一个 contracts 短列表一次调用。此数据计划不提供报价字段。

  • query_outcomes (专业) — 结果 + 收据底层数据,通过 view=:labels(行级区间标签 + 特征;默认),summary(分组聚合),surface(每个合约的 MFE/MAE 偏移,无退出 — aggregate_only=True 给出整个窗口的 MFE/MAE 分位数,是用于退出设计的模式,因为行模式上限为 200 行,并通过 truncated / matched_rows / partial_scan_date 声明),harvest(触及概率曲线),exit_rule(评估您的区间/追踪规则),signal_performance / win_rate(标的物方向,不是期权盈亏),positions / performance(引擎已实现的纸面交易收据,按队列过滤)。实时队列是 对 V7_1_TILTED_GIGO 和 在 cohort_start(2026-08-10)当天或之后入场,响应现在会携带这些信息 — 仅策略标签单独不能定义队列,因为账本在同一标签下保留了被放弃的队列。重置后实时队列合法为空:total_trades: 0 且 null 聚合表示“尚未积累已平仓交易”,而不是“0% 胜率”。policy_version="all" 覆盖所有时代,但包括引擎已放弃的队列 — 不是业绩记录。

  • replay_contract (专业) — 用于您自己的退出规则的原始价格磁带:granularity="minute"(日内路径 + 精确首次穿越;默认)或 "day"(每日 OHLCV 标记序列)。此服务器不模拟退出。

  • get_regime_context (免费) — 截至扫描日期的 VIX/VIX3M/SPY 趋势 + 故障关闭机制轨道。

  • get_market_calendar_status (免费) — view="status"(NYSE 开盘/收盘,默认)或 view="scan_dates"(哪些扫描日期有数据)。

  • get_playbook (免费) — 方法论 + 参考:无参数列出目录;name= 获取手册(start-here、daily-workflow、run-your-own-tournament、exit-lab、leakage-and-data-contract、changelog)或 name="schema" 获取机器可读的数据契约(每列泄漏分类);field= 解释任何信号字段(确定性,无 LLM)。手册也是 MCP 资源(gammarips://playbooks/{name})。

  • get_daily_report (免费) — view="report"(完整每日报告,默认)或 view="list"(最近报告)。

已移除

web_search(V4)。引擎自身的每日选择不会在当天发布(get_todays_pick / list_todays_picks / get_open_position 在 V3 中移除);已实现的收据仍可通过 query_outcomes(view="positions") 获取。

提示

morning_brief、analyze_candidate(ticker)、run_your_own_tournament — 对上述工具的轻量编排。没有一个返回推荐。

快速连接

Claude Code

# Free tier (no key):
claude mcp add --transport http gammarips https://mcp.gammarips.com/mcp

# Pro (with your key):
claude mcp add --transport http gammarips https://mcp.gammarips.com/mcp \
  --header "Authorization: Bearer gr_live_your_key"

# Pro with OAuth instead of a key (sign in once in the browser, tokens refresh):
claude mcp add --transport http gammarips https://mcp.gammarips.com/pro
# then run /mcp inside Claude Code and choose "Authenticate"

ChatGPT、Claude(claude.ai / Desktop)和其他 OAuth 聊天客户端

添加自定义连接器 / 远程 MCP 服务器,URL 为 https://mcp.gammarips.com/pro。客户端发现授权服务器(gammarips.com),自行注册(Client ID Metadata Document 或动态注册),并打开 GammaRips 登录 + 同意页面。无需粘贴密钥。尚未订阅?连接仍然适用于免费工具,专业工具会回复订阅步骤;订阅后,专业访问将在下一次令牌刷新(一小时内)或重新连接时生效。

无头代理(虚拟机、cron、服务器):机器客户端

对于没有浏览器和人类的代理,请在 gammarips.com/account 上创建机器客户端(需要 Agent Access)。您会获得 client_id + client_secret(仅显示一次)。使用 client_credentials 授权签发一小时访问令牌,并将其作为 bearer 发送:

TOKEN=$(curl -s -u "$GR_CLIENT_ID:$GR_CLIENT_SECRET" \
  -d grant_type=client_credentials \
  -d resource=https://mcp.gammarips.com/pro \
  https://gammarips.com/oauth/token | jq -r .access_token)

# Claude Code headless (claude -p), with the token in .mcp.json:
#   { "mcpServers": { "gammarips": { "type": "http",
#       "url": "https://mcp.gammarips.com/pro",
#       "headers": { "Authorization": "Bearer ${GAMMARIPS_MCP_TOKEN}" } } } }
GAMMARIPS_MCP_TOKEN="$TOKEN" claude -p "..." 

每次运行前签发:机器客户端没有刷新令牌,每次签发都会从您的订阅中重新读取层级。API 密钥仍然可以用于相同目的;机器客户端是短期凭据选项。

Cursor

最简单 — 安装插件。 此仓库是一个 Open Plugins 标准插件(.cursor-plugin/plugin.json):它捆绑了托管的 MCP 服务器以及一个 gammarips-options-flow 技能,教您的代理数据而非建议的工作流程。从插件市场安装(搜索“GammaRips”)或将 Cursor 指向此仓库。它开箱即用连接免费层;添加您的 gr_live_... 密钥以使用专业工具。

手动:设置 → MCP → 添加新的 MCP 服务器,或添加到 .cursor/mcp.json:

{
  "mcpServers": {
    "gammarips": {
      "url": "https://mcp.gammarips.com/mcp",
      "headers": { "Authorization": "Bearer gr_live_your_key" }
    }
  }
}

免费层省略 headers。

Cline

MCP 服务器 → 远程服务器 → 添加,或添加到 cline_mcp_settings.json:

{
  "mcpServers": {
    "gammarips": {
      "url": "https://mcp.gammarips.com/mcp",
      "type": "streamableHttp",
      "headers": { "Authorization": "Bearer gr_live_your_key" }
    }
  }
}

免费层省略 headers(5 个匿名工具)。

通用 MCP 配置

{
  "mcpServers": {
    "gammarips": {
      "url": "https://mcp.gammarips.com/mcp"
    }
  }
}

仅支持 SSE 的客户端可以在弃用窗口期间使用旧版 /sse 端点。

免费层无需账户即可使用:get_pool、get_regime_context、get_market_calendar_status、get_playbook、get_daily_report。专业工具(get_signal、get_liquidity、query_outcomes、replay_contract)需要 Agent Access(每月 39 美元)— 在 gammarips.com 生成密钥,或通过 /pro 连接并登录。

本地开发

先决条件

  • Python 3.10+

  • 可选:Docker

设置

git clone https://github.com/DevDizzle/gammarips-mcp.git
cd gammarips-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env

本地运行

PYTHONPATH=src python src/server.py

服务器绑定到 0.0.0.0:${PORT:-8080},Streamable HTTP 位于 /mcp(SSE 回退)。

Docker

docker build -t gammarips-mcp .
docker run --rm -p 8080:8080 --env-file .env gammarips-mcp

环境

参见 .env.example 了解当前环境变量。典型值包括:

  • GCP_PROJECT_ID

  • FIRESTORE_DATABASE

  • GCS_BUCKET_NAME

  • LOG_LEVEL

  • PORT

  • REQUIRE_API_KEY / AUTH_SHADOW(API 密钥门控模式)

  • OAUTH_ENABLED / OAUTH_ISSUER / OAUTH_JWKS_URL / OAUTH_MCP_RESOURCE_ORIGINS(OAuth 2.1 资源服务器;默认为生产环境,参见 src/utils/oauth.py)

验证

Python 编译检查

python -m compileall src

Docker 构建检查

docker build -t gammarips-mcp:test .

部署

部署是手动的(CD 工作流已移除;.github/workflows/ci.yml 仅在推送到 main 或 PR 时运行 ruff format --check + ruff check)。

使用部署脚本发布新修订版,该脚本使用 Cloud Run 源代码部署并精确重现实时配置(通过 Secret Manager 管理密钥,REQUIRE_API_KEY=false):

bash scripts/deploy.sh

等效的一行命令:

gcloud run deploy gammarips-mcp --source=. \
  --project=profitscout-fida8 --region=us-central1 \
  --set-env-vars="REQUIRE_API_KEY=false" \
  --set-secrets="POLYGON_API_KEY=POLYGON_API_KEY:latest,GOOGLE_API_KEY=GOOGLE_API_KEY:latest,GOOGLE_CSE_ID=GOOGLE_CSE_ID:latest"

API 密钥从 Secret Manager 挂载 — 切勿将它们作为普通环境变量传递(这会覆盖密钥挂载)。

在任何更改数据暴露的部署之前:运行 gammarips-review 泄漏审计(参见 docs/MCP-V3-SPEC.md §2.4)。

安全

参见 SECURITY.md 了解信任模型 — 只读保证、参数化查询 SQL 注入防御、响应大小限制、每 IP 速率限制、清理错误、防泄漏视图、列分类数据契约以及 OAuth 2.1 资源服务器模型(此服务仅验证令牌;gammarips.com 是授权服务器)。

许可证

MIT

Available Tools

9 tools
get_daily_reportDaily ReportA
Read-onlyIdempotent
Inspect
The daily intelligence report. Two `view`s:

  * view="report" (DEFAULT) — the full report (title, markdown content,
    scan_date) for `date`, or the most recent report if `date` is omitted.
  * view="list" — recent reports, most recent first (scan_date, title,
    created_at), titles deduped. Use `limit`.

Args:
    date: report date YYYY-MM-DD (report view; default: most recent).
    view: "report" (default) | "list".
    limit: list view — how many reports (default 10, clamped 1-30).
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
viewNoreport
limitNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds valuable behavioral details beyond annotations: default date falls back to the most recent report, list view dedupes titles, and limit is clamped to 1-30. This clarifies response behavior without contradicting the annotations.

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 well-organized with a clear overview, bullet-like view explanations, and a short Args section. Every sentence contributes useful information, and the most important distinction between views is front-loaded.

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?

The tool has no output schema, so the description correctly explains what each view returns: report view includes title, markdown content, and scan_date; list view includes scan_date, title, and created_at. Combined with parameter semantics and defaults, the agent has everything needed to call the tool correctly.

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 fully explain parameters. It does: date is a YYYY-MM-DD string for the report view, view selects between 'report' and 'list', and limit controls list count with default and clamp. This adds all necessary meaning beyond the bare schema.

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 identifies the tool as 'The daily intelligence report' with two specific views, 'report' and 'list'. This distinguishes it from sibling tools like get_pool or get_signal, and the resource and actions are explicit.

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 provides clear usage context by explaining when to use each view, including default behavior when date is omitted and the purpose of limit. It does not explicitly mention when not to use this tool versus a sibling, but the domain is distinct enough that no conflicting alternative exists.

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

get_liquidityContract LiquidityA
Read-onlyIdempotent
Inspect
FRESH (entry-day) liquidity — the read the pool's session-frozen
`recommended_oi`/`recommended_volume` cannot give you (the overnight sweep
only becomes OI the next morning). Two modes, chosen by whether you pass a
single `contract`:

  * `contract` given — ONE contract's snapshot: open interest, session
    volume, last trade, day range, underlying price, greeks. Cache-first
    (the engine re-reads the pool every ~10 min in market hours); pass
    live=true to force a fresh upstream fetch or read a contract NOT in
    today's pool.
  * `contract` omitted — the WHOLE current pool (or your `contracts`
    shortlist, max 60) in ONE call — the batch companion for the ~10:00 ET
    decision window. Most-recent read per contract with explicit `as_of`.

Deliberately serves NO bid/ask/mid/spread (not available on the current
data plan — absent, not NULL). Judge fill risk from open_interest (updates
once each morning), day_volume (live session), last_trade recency, and the
day range.

Args:
    contract: OCC ticker for the single-contract mode (verbatim from the
        pool's `recommended_contract`). Omit for the whole-pool batch.
    scan_date: pool date YYYY-MM-DD (batch mode; default: latest pool).
    contracts: optional shortlist filter for the batch mode (max 60).
    live: single-contract mode — force a fresh upstream fetch.
ParametersJSON Schema
NameRequiredDescriptionDefault
liveNo
contractNo
contractsNo
scan_dateNo

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?

Far beyond the readOnly/idempotent annotations, the description discloses cache-first semantics ('engine re-reads the pool every ~10 min in market hours'), the `live=true` force-fetch escape hatch, update cadence for each metric (OI once each morning, day_volume live), and the critical design decision that bid/ask/mid/spread are deliberately absent rather than NULL. This prevents an agent from misinterpreting missing spread data as an error.

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 dense but every section earns its place: mode semantics, freshness/absence caveats, and parameter docs all matter for correct invocation. The structure is clean (bolded mode headers, trailing Args block), but the opening sentence is grammatically awkward ('the read the pool's session-frozen ... cannot give you') and could be tightened.

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 dual-mode tool with cache behavior, staleness semantics, and an absent-fields caveat, the description covers everything an agent needs: mode routing, defaults, constraints, refresh intervals, and what metrics to substitute for missing spread data. The output schema covers return structure and annotations cover the safety profile, so nothing critical is left unspecified.

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%, and the Args section fully compensates: `contract` is specified as an OCC ticker 'verbatim from the pool's `recommended_contract`' and as the mode-switch trigger, `contracts` carries the max-60 constraint, `scan_date` gets a YYYY-MM-DD format plus default ('latest pool'), and `live` is scoped to single-contract mode. Every parameter gains meaning the schema alone cannot convey.

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 by positioning the tool against the pool's session-frozen `recommended_oi`/`recommended_volume`, then crisply defines the two modes: a single-contract snapshot and a whole-pool batch call. The resource (contract liquidity) and the operation (read/fetch) are unambiguous, and the contrast with `get_pool`'s frozen data helps an agent tell siblings apart.

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?

Mode selection is made explicit ('chosen by whether you pass a single `contract`'), the batch mode is positioned as 'the batch companion for the ~10:00 ET decision window', and the description tells the agent what NOT to use this for (no bid/ask/mid/spread) and which fields to judge fill risk from instead. It does not explicitly name sibling alternatives like `get_pool` or `get_signal` as when-not-to-use options, so the exclusion guidance is slightly implicit.

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

get_market_calendar_statusMarket Calendar StatusA
Read-onlyIdempotent
Inspect
Market-calendar reference. Two `view`s:

  * view="status" (DEFAULT) — is the US equity market open today, plus the
    next open/close, holiday, and early-close flags (NYSE calendar,
    deterministic — no "is the market open?" hallucination).
  * view="scan_dates" — which recent scan dates have GammaRips data, with
    per-date signal counts (the pool's data-availability calendar).

Args:
    view: "status" (default) | "scan_dates".
ParametersJSON Schema
NameRequiredDescriptionDefault
viewNostatus

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive; the description adds that it is NYSE-calendar-based, deterministic, and explicitly avoids hallucinating market-open status. It also discloses what each view returns, which goes beyond the annotations alone.

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, front-loaded with the core purpose, and uses bulleted view explanations that are easy to scan. The closing Args section succinctly restates the parameter options without unnecessary detail.

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 one-parameter read-only tool with no output schema, the description covers both views and their return semantics well. No critical invocation detail appears missing; the agent can correctly select the view and understand what to expect.

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 only provides a default for the single `view` parameter, so the description carries the full burden. It names the two allowed values and their exact meanings, fully compensating for the 0% schema description coverage.

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 identifies the tool as a market-calendar reference and specifies exactly what each view returns: market open status, next open/close, holiday and early-close flags, or scan dates with signal counts. This distinguishes it from sibling tools like get_liquidity or get_daily_report by domain and resource.

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 provides clear context for choosing between the two views, naming the default and explaining what each view is for. It does not explicitly discuss when to use this tool instead of a sibling, but the use case is unambiguous from the description.

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

get_playbookMethodology PlaybookA
Read-onlyIdempotent
Inspect
Methodology + reference, versioned server-side (re-fetch rather than
caching long-term). Arg-driven:

  * `field` given — the plain-English DEFINITION + role of a signal field
    (deterministic lookup, no LLM). e.g. field="mom_60". The response's
    `available_fields` lists every documented field.
  * `name` given — a methodology playbook (markdown) by name, OR two
    special reference pages:
      - name="schema" (or "data-contract") -> the machine-readable
        substrate DATA CONTRACT: every outcome/label column with its
        leakage classification (feature|label|opportunity|
        regime_telemetry|identity) and as-of boundary. Only `feature`
        columns are safe as selection inputs.
      - any other name -> the playbook markdown (start-here,
        daily-workflow, run-your-own-tournament, exit-lab,
        leakage-and-data-contract, changelog).
  * neither — the CATALOG of published playbooks (name/title/summary),
    plus a pointer to the field dict (`field=`) and schema page.

Args:
    name: playbook name, or "schema"/"data-contract" for the data contract.
    field: a signal field name to explain (overrides `name`).
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
fieldNo

TDQS

A4.8/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the readOnly/idempotent annotations: it is versioned server-side and should be re-fetched rather than cached long-term; field lookup is deterministic with no LLM; `field` overrides `name`; and the data contract marks only `feature` columns as safe selection inputs. This significantly helps an agent use the tool safely and correctly.

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 but efficiently organized with a short opening, a bulleted arg-driven breakdown, and a compact parameter list. Every sentence adds useful information, and the structure makes the branching behavior easy to parse. The length is justified by the tool's multi-mode behavior.

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?

With no output schema present, the description must explain return values, and it does: field mode returns a definition plus an `available_fields` list, schema mode returns a data contract with leakage classifications, named playbooks return markdown, and no-args returns a catalog. The precedence rule and safe-feature caveat complete the picture for correct invocation.

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, so the description carries the full burden of explaining both parameters. It fully documents valid values for `name` (including special values "schema" and "data-contract"), explains `field` with an example, and explicitly states precedence: `field` overrides `name`.

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 states a specific resource (methodology playbook/reference) and enumerates exactly what the tool returns in each mode: field definitions, named playbooks, the data contract, or a catalog. It clearly differentiates itself from sibling tools like get_signal or get_pool by scoping its content to methodology and reference rather than live market data.

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 argument-driven usage rules: if `field` is given, look up a field definition; if `name` is given, return a playbook or special schema page; if neither, return the catalog. It does not explicitly discuss when to prefer a sibling tool, but the mode routing is clear enough that an agent can decide when this tool is appropriate.

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

get_poolCandidate PoolA
Read-onlyIdempotent
Inspect
The GammaRips candidate pool for a scan date. One tool, four `view`s:

  * view="enriched" (DEFAULT) — the AI-enriched pool: news, technicals,
    catalyst, the recommended contract (an OTM call chosen on contract
    liquidity), and the 60-day momentum feature `mom_60`. Funnel for
    scan_date >= 2026-08-24 (liquid-universe era): the 100 most liquid
    optionable names, BULLISH only, one call each, roughly 40-50 rows.
    Liquidity decides membership, not unusual activity; the $500K UOA
    floor is retired and `overnight_score>=1` is a cosmetic floor.
    Earlier scan dates come from the prior UOA-gated funnel (UOA>$500K,
    top-50 BULLISH); the two eras are not one population.
    This is the daily candidate set your agent reasons over to its OWN
    contract (see get_playbook("run-your-own-tournament")). Served from a
    leakage-safe view (forward-outcome columns physically stripped);
    `summary=True` gives ~21 decision columns, `fields=[...]` a strict
    projection, `summary=False` full rows, `offset` pages.
  * view="raw" — the wide overnight scan BEFORE the pool cut (the ranked
    liquid universe for scan_date >= 2026-08-24; the market-wide
    unusual-activity scan for earlier dates). Honors `direction`,
    `min_score`, `ticker`, `limit`.
  * view="features" — point-in-time FEATURE VECTORS from the leakage-safe
    allowlist view `enriched_features_v1` (identity + features + cohort
    metadata only; no outcome/label/telemetry column can appear). The
    quantitative substrate for joining against query_outcomes. Lags the
    live pool by ~1-2 trading days.
  * view="preview" — a minimal public teaser (ticker, direction, score,
    headline, directional UOA) for the most recent scan; no contract
    specifics or thesis.

TIER: view="preview" is FREE (no key). The enriched / raw / features views
are the paid product — they require an active pro subscription key; an anon
call to them returns `subscription_required` (get_pool(view='preview') is
named as the free entry point).

Liquidity caveat (all views): `recommended_oi`/`recommended_volume` are
scan-time snapshots, not live values; `recommended_spread_pct` is
permanently NULL on the current data plan — re-check with get_liquidity.

Args:
    view: "enriched" (default) | "raw" | "features" | "preview".
    scan_date: YYYY-MM-DD (default: latest available scan for the view).
    direction: "bull"/"bear" prefix filter (enriched / raw).
    ticker: exact ticker filter (enriched / raw / features).
    min_score: overnight_score floor (raw view only; clamped 0-10).
    limit: max rows (enriched/raw clamp 1-50, features 1-100, preview 1-20).
    summary: enriched only — True=compact columns, False=full rows.
    fields: enriched only — explicit strict column projection.
    offset: enriched only — pagination offset.
ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoenriched
limitNo
fieldsNo
offsetNo
tickerNo
summaryNo
directionNo
min_scoreNo
scan_dateNo

TDQS

A5/5.0
Behavior5/5

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

Far exceeds the readOnly/idempotent/non-destructive annotations by disclosing leakage-safe construction (outcome columns physically stripped), per-view freshness (features lag 1-2 trading days), snapshot semantics for recommended_oi/recommended_volume, permanent NULL for recommended_spread_pct, subscription gating (anon calls return subscription_required), and the two-era population discontinuity. No statement contradicts the annotations.

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?

Purpose is front-loaded in the first sentence, and the body is partitioned with clear markers (view bullets, TIER:, Liquidity caveat:, Args:) so an agent can locate the relevant section quickly. Though long, the density is high: each paragraph covers a distinct concern (view semantics, access tier, data caveats, parameters) with no filler or repeated boilerplate. The length is proportionate to the tool's complexity.

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?

With no output schema present, the description compensates by describing each view's return shape: enriched has ~21 decision columns and names key fields (news, technicals, catalyst, recommended contract, mom_60); preview names its five fields; features is scoped to identity+features+cohort metadata; raw is the wide pre-cut scan. It also covers error behavior (subscription_required), defaults, pagination, and the liquidity caveat. The only absence is an exhaustive column-name list for the fields projection, which no schema exists to supply.

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?

With 0% schema description coverage, the Args section carries the full load and documents all nine parameters: allowed values for view, per-view applicability (min_score raw-only; summary/fields/offset enriched-only), clamps (enriched/raw 1-50, features 1-100, preview 1-20; min_score 0-10), and the YYYY-MM-DD format for scan_date. The schema itself only supplies titles and defaults, so this section is the agent's sole source of semantic meaning.

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?

Opens with a specific verb+resource statement ('The GammaRips candidate pool for a scan date') and decomposes the tool into four distinctly described views, each with its own funnel logic, era, and output scope. It names related siblings (get_playbook, query_outcomes, get_liquidity) so the tool's role in the workflow is unambiguous. An agent can tell this from every sibling without opening another schema.

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

Usage Guidelines5/5

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

Explicitly directs when to use which view: enriched as the daily reasoning set for the agent's own contract, raw as the pre-cut scan, features for joining against query_outcomes, and preview as the named free entry point. It also names get_playbook('run-your-own-tournament') for the downstream step and get_liquidity for re-checking stale or NULL liquidity fields, and states the paid-versus-free tier rule that determines whether a call is even worth attempting.

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

get_regime_contextMarket Regime ContextA
Read-onlyIdempotent
Inspect
Point-in-time market-regime context for a scan date: VIX close, VIX3M,
SPY trend state, and the 5-day VIX delta — all as-of <= scan_date (the
selection point, leakage-safe), plus the engine's regime safety rail
evaluated on those values.

The rail: the engine fail-closes (no trade) when spot VIX > VIX3M
(backwardation — the market pricing imminent volatility is an adverse
regime for short-dated directional longs).

Served from the labeled substrate, which lags the live pool by ~1-2
trading days. Values are constant per scan_date.

Args:
    scan_date: YYYY-MM-DD. Defaults to the latest scan date carrying
        regime features.

Returns:
    {scan_date, vix_at_scan, vix3m_at_enrich, spy_trend_at_scan,
     vix_5d_delta_at_scan, regime_rail_pass, rail_definition}
ParametersJSON Schema
NameRequiredDescriptionDefault
scan_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, the description explains the fail-closed backwardation rule, the leakage-safe as-of semantics, the 1-2 day substrate lag, and the constancy of values per scan_date. This gives the agent a clear behavioral model without contradicting the annotations.

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 front-loaded with the core purpose, then structured into rail explanation, data freshness caveat, args, and returns. Every sentence adds substantive value; no filler 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 single optional parameter and an output schema, the description covers the return shape, parameter semantics, safety interpretation, and data lag. An agent has enough to call the tool correctly and interpret its result without further documentation.

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 only provides a nullable string with a default of null, but the description compensates fully by specifying the YYYY-MM-DD format and the default behavior (latest scan date carrying regime features). For a single optional parameter, this is complete.

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 the tool's resource and purpose: point-in-time market-regime context for a scan date, including VIX, VIX3M, SPY trend, VIX delta, and the regime safety rail. It does not explicitly differentiate from the listed siblings, but its domain is distinct enough that an agent can infer what it provides.

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 implied use case is retrieving regime features for a scan date, and the description gives helpful caveats about substrate lag and leakage-safety. However, it does not explicitly state when to choose this tool over siblings or when not to use it.

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

get_signalSignal DetailA
Read-onlyIdempotent
Inspect
Deep dive on a single ticker/contract. Two `view`s:

  * view="detail" (DEFAULT) — the full enriched signal for one ticker:
    thesis, catalyst, the recommended contract, and point-in-time
    features (leakage-safe view). `full=true` includes the long narrative
    (news_summary, flow_intent_reasoning). If the ticker isn't in the
    pool for the date, the error lists the dates on which it does appear.
  * view="earnings" — the doctrine earnings-window check (RM-003): the
    next scheduled earnings date and whether it lands ON OR BEFORE the
    contract expiration (`earnings_in_window`). The engine applies this
    rail only at its own pick time, NOT in the pool, so pool rows CAN
    carry earnings-window names — check every candidate yourself. Pass
    the pool's `recommended_contract` and both ticker and expiration are
    derived. FAIL-CLOSED: unknown date -> earnings_in_window=null, treat
    as in-window.

Args:
    ticker: underlying symbol (required for detail; optional for earnings
        if `contract` is given).
    view: "detail" (default) | "earnings".
    scan_date: detail only — YYYY-MM-DD (default: latest for the ticker).
    full: detail only — include the long narrative fields.
    expiration: earnings only — option expiration YYYY-MM-DD to test.
    contract: earnings only — OCC ticker supplying ticker+expiration.
ParametersJSON Schema
NameRequiredDescriptionDefault
fullNo
viewNodetail
tickerNo
contractNo
scan_dateNo
expirationNo

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?

Annotations already declare readOnly, idempotent, and non-destructive. The description adds substantial behavioral context beyond that: fail-closed behavior for unknown earnings dates, leakage-safe point-in-time features, the engine applying earnings rails only at pick time, and the error listing alternate dates when a ticker is not in the pool. None of this contradicts the annotations.

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 well-organized with a brief lead sentence, labeled views, and an Args block. It is detailed but every sentence adds necessary information such as defaults, fail-closed semantics, or leakage safety. No filler or redundancy.

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 tool with 6 parameters, two modes, zero schema descriptions, and subtle behavioral rules, the description covers everything an agent needs to invoke it correctly: parameter semantics, defaults, edge cases, derivation rules, and error behavior. Since an output schema exists, not detailing return values is acceptable.

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 carries the full burden. It compensates thoroughly: each parameter is explained with defaults, required/optional status, view restrictions, and derivation rules (e.g., 'contract' supplying both ticker and expiration). This is far beyond what the bare schema provides.

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: 'Deep dive on a single ticker/contract.' It then enumerates two distinct views with concrete outputs, making the tool's purpose unambiguous and clearly distinguishable from sibling list/dashboard tools.

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 detailed context for choosing 'detail' vs 'earnings', including defaults, derived parameters, and the important instruction to check every candidate yourself because pool rows can carry earnings-window names. However, it does not explicitly contrast with sibling tools, so the 'when to use vs alternatives' aspect is left mostly to inference.

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

query_outcomesRealized OutcomesA
Read-onlyIdempotent
Inspect
The realized-outcome + receipts substrate behind the engine. One tool,
nine `view`s. Whole-pool composites under any FIXED exit are NEGATIVE by
construction — these are a research surface (how outcomes distribute
across features and exits), never a strategy track record.

  * view="labels" (DEFAULT) — row-level realized bracket LABELS joined to
    point-in-time features. horizon "same_day" (live V7.1 GIGO +40/-30) or
    "3d" (legacy +80/-60) — never pooled. NULL-label and illiquid rows
    excluded (counts in meta). `aggregate_only=True` returns summary stats
    instead of rows. Filters: scan_date_from/to, ticker, delta_min/max,
    min_overnight_score, exit_reason.
  * view="summary" — grouped aggregates over the labeled pool. `group_by`
    one of none|delta_bucket|overnight_score|premium_score|exit_reason|
    day_of_week|moneyness_bucket.
  * view="surface" — the OPPORTUNITY SURFACE: per-contract realized MFE/MAE
    excursions with NO exit applied (profit potential, exit free). Uses
    scan_date OR a `days` lookback, `ticker`, `delta_min/max`,
    `include_open`. `aggregate_only=True` returns MFE/MAE quantiles over
    the FULL filtered set — use it for exit design. The row mode is capped
    at 200 and truncates oldest-first WITHIN a scan_date, so its oldest
    date is a highest-MFE-only slice; it reports `truncated`,
    `matched_rows`, and `partial_scan_date` so you can see that happen.
  * view="harvest" — the touch-probability curve: P(premium touched +X%)
    with CIs, day-of-peak buckets, stop-touch rates. `targets`, `stops`,
    date range, delta band.
  * view="exit_rule" — RESEARCH-ONLY "bring your exit, we score it":
    rule="bracket" (target_pct/stop_pct) or rule="trailing" (trail_pct,
    activation_pct) scored against the surface / minute tape.
  * view="signal_performance" — UNDERLYING-STOCK direction outcomes for
    the broad pool (NOT option PnL). Filters scan_date, ticker, direction,
    outcome.
  * view="win_rate" — aggregate UNDERLYING-direction win rate over `days`
    (NOT option PnL; headline key carries its universe).
  * view="positions" — the RECEIPTS: realized (closed) paper trades from
    the engine's own daily pick, row-level, cohort-filtered
    (`policy_version`, default live). Over `days`, `limit`.
  * view="performance" — cohort AGGREGATE of the receipts over `days`
    (win rate, avg/median/best/worst), `direction`, `min_premium_score`,
    `policy_version`. When the cohort has no closed trades, every aggregate
    is `null` and `total_trades` is 0 — NEVER 0.0. A `null` here means "not
    measured yet", not "zero percent"; do not render it as a result.

All returns are FRACTIONS (0.40 = +40%). Realized data serves closed
windows only. Paper-traded research data; not investment advice.

Args:
    view: which surface (see above). Default "labels".
    horizon: "same_day" | "3d" (labels/summary/exit_rule). If omitted, the
        native default per view is used: labels/summary => "same_day" (the
        live GIGO policy), exit_rule => "3d" (its excursion window).
    group_by: summary grouping dimension.
    scan_date / scan_date_from / scan_date_to: date filters (per view).
    ticker / direction / delta_min / delta_max / min_overnight_score /
        exit_reason / outcome: row/aggregate filters (per view).
    days: lookback window (surface/win_rate/positions/performance).
    limit: max rows (labels 1-200, signal_performance 1-50, positions 1-200).
    aggregate_only: labels/surface views — summary stats instead of rows.
        On `surface` this is also the only mode immune to the 200-row cap.
    include_open: surface view — include not-yet-closed windows.
    targets / stops: harvest view — PERCENT grids.
    target_pct / stop_pct / rule / trail_pct / activation_pct: exit_rule view.
    policy_version: positions/performance cohort filter. The live default
        is the PAIR (policy label + cohort start date) — the label alone
        does not define the cohort, since disowned cohorts remain in the
        ledger under the same label. Responses carry `cohort_start`; a zero
        row_count under the live cohort means it has not accrued closed
        trades yet, not that there is no track record, and the aggregates
        come back `null` rather than 0.0. Pass "all" for every era, but
        note that "all" returns cohorts the engine has REPUDIATED — not
        merely older exit mechanics — so it is not a track record and must
        not be aggregated into one. Read the response `note` before
        quoting any number from it.
    min_premium_score: performance view floor.
ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
ruleNobracket
viewNolabels
limitNo
stopsNo
tickerNo
horizonNo
outcomeNo
targetsNo
group_byNonone
stop_pctNo
delta_maxNo
delta_minNo
directionNo
scan_dateNo
trail_pctNo
target_pctNo
exit_reasonNo
include_openNo
scan_date_toNo
activation_pctNo
aggregate_onlyNo
policy_versionNoV7_1_TILTED_GIGO
scan_date_fromNo
min_premium_scoreNo
min_overnight_scoreNo

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?

Annotations already mark this read-only, idempotent, and non-destructive; the description adds rich non-obvious behavior beyond that: the 200-row surface cap truncates oldest-first and reports truncated/matched_rows/partial_scan_date, null aggregates mean not measured yet rather than zero, and policy_version 'all' returns repudiated cohorts that must not be aggregated. It also warns fixed-exit composites are negative by construction and that data is closed-window paper research.

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 structure is excellent: high-level framing, bulleted views, then a parameter list, with the most important caveats front-loaded in the first paragraph. Its length is mostly justified by the tool's complexity, but it is not tight: policy_version/null semantics are explained twice and non-actionable boilerplate such as 'not investment advice' adds little.

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 high-complexity tool with no schema descriptions and no enums, the description is unusually complete: it covers return units, truncation behavior, cohort caveats, null conventions, and view-specific modes. It still leaves some string filter values implicit (e.g. allowed direction, outcome, and exit_reason values, and the expected scan_date format), and an output schema exists so return-shape details are not needed here.

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?

With 0% schema description coverage and 26 parameters, the description carries the full burden and succeeds: it explains per-view filter applicability, horizon defaults, limit ranges, aggregate_only behavior, include_open semantics, and policy_version's pair-plus-cohort_start meaning. It also clarifies tricky distinctions such as same_day vs 3d and labels vs surface modes.

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?

Opens by identifying the tool as the realized-outcome and receipts substrate and then enumerates nine named views with distinct resources and verbs, e.g. labels row-level realized bracket labels, surface MFE/MAE excursions, positions receipts. This makes the tool's purpose unmistakable and separates it from the sibling signal/pool/report tools.

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

Usage Guidelines5/5

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

Each view bullet is an applicability rule: aggregate_only on surface is explicitly 'use it for exit design', exit_rule is 'RESEARCH-ONLY bring your exit, we score it', and positions/performance are defined as receipts vs cohort aggregates. Negative guidance is also explicit: never pooled, never a strategy track record, NOT option PnL, and don't render null aggregates as results.

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

replay_contractContract Price ReplayA
Read-onlyIdempotent
Inspect
Raw option price data for YOUR OWN entry/exit rule. This server does NOT
simulate or validate exits — it returns bars (the RM-002/RM-004 boundary).
Two `granularity` modes:

  * granularity="minute" (DEFAULT) — the intraday minute path for one
    session (`date` required). Optionally pass a bracket (target_pct/
    stop_pct, PERCENT of the 10:00 ET anchor) and the response also reports
    the exact FIRST-CROSSING sequence measured from the tape. Pool
    excursion windows are served from the engine's minute-path table;
    anything else falls back to an upstream minute fetch.
  * granularity="day" — the DAILY mark series (OHLCV) over a date range,
    to mark a live paper position day by day or replay a closed one. Uses
    `from_date`/`to_date` (span capped at 120 days); `date` is ignored.

Option tape is THIN — minutes/days with no prints have no bar; treat
touch times as evidence, not tick-perfect truth. Paper-trade research
data; not investment advice.

Args:
    contract: OCC option ticker (e.g. "O:UNIT260717C00030000").
    date: minute mode — ET session date YYYY-MM-DD (required).
    granularity: "minute" (default) | "day".
    target_pct: minute mode — optional +X% level for first-crossing.
    stop_pct: minute mode — optional -Y% level for first-crossing.
    from_date: day mode — start YYYY-MM-DD (default: 30d before to_date).
    to_date: day mode — end YYYY-MM-DD inclusive (default: today ET).
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
to_dateNo
contractYes
stop_pctNo
from_dateNo
target_pctNo
granularityNominute

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?

The description reveals several behavioral traits beyond the readOnly/idempotent annotations: it does not simulate exits, it serves first-crossing sequences from the tape, minute paths have a specific engine-table fallback, tape is thin so absent bars are meaningful, and touch times are evidence rather than tick-perfect truth. These details materially shape how an agent interprets 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 organized with a clear lead sentence, two bulleted mode explanations, a data-caveat paragraph, and a structured Args list. Every sentence adds operational value, and the most important scoping information ('does NOT simulate or validate exits') is front-loaded. Despite its length, it is efficiently structured for a 7-parameter tool with dual modes.

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?

The description covers mode-specific behavior, parameter semantics, defaults, constraints, data-quality caveats, and explicitly disclaims investment advice. An output schema exists, so detailed return-structure documentation is not required from the description. There are no significant gaps that would prevent an agent from invoking the tool correctly.

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 carry all parameter semantics. It delivers with an Args section that explains each of the 7 parameters, including required/optional status, defaults, format examples (e.g., OCC ticker, YYYY-MM-DD), mode-specific applicability, and behavior such as 'date is ignored' in day mode and the 120-day cap on from_date/to_date.

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 precise statement: 'Raw option price data for YOUR OWN entry/exit rule', then clarifies that the server does NOT simulate or validate exits and returns bars. It clearly identifies the resource (option price bars), the verb (replay/return), and the two granularity modes, making the tool's role unambiguous relative to simulation-type siblings.

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 usage context for each granularity mode: minute for a single intraday session with an optional bracket, day for daily OHLCV to mark or replay a paper position. It also states exclusions: 'does NOT simulate or validate exits' and 'date is ignored' in day mode. However, it does not explicitly name sibling alternatives like get_signal or get_playbook, so the 'when-not-to-use' guidance is implied rather than directly referencing other tools.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.0
    • First observedget_daily_report
    • First observedget_liquidity
    • First observedget_market_calendar_status
    • First observedget_playbook
    • First observedget_pool
    • First observedget_regime_context
    • First observedget_signal
    • First observedquery_outcomes
    • First observedreplay_contract

TDQS

A4.6/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct job: pool discovery, single-name depth, daily reports, fresh liquidity, outcome research, raw replay, regime context, calendar status, and methodology reference. Even where tools share data (e.g., get_pool and get_signal), the batch-vs-single and surface-vs-deep-dive split is explicit and unambiguous.

Naming Consistency4/5

The get_ prefix dominates and clearly signals retrieval-style tools, with only query_outcomes and replay_contract breaking the pattern. The names are still predictable and readable, though a fully uniform verb_noun convention would have been cleaner.

Tool Count5/5

Nine tools is well within the ideal scope for a domain-specific intelligence server. Each tool is broad enough to justify its existence, and none feel redundant or padded.

Completeness4/5

The surface covers the full research workflow: candidate pool, per-name deep dive, liquidity, realized outcomes, raw price replay, regime context, calendar availability, and methodology reference. Minor gaps exist—such as no direct options-chain browser or general contract metadata lookup—but the exposed views and replay/liquidity tools provide sufficient workarounds.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Financial intelligence for AI agents. 31 tools across 8 data sources — regime, derivatives, stablecoin flows, momentum, volatility, macro, DeFi, weather patterns, political cycles, seasonality. The context layer between your agent and a bad trade.
    31
    10 npm
    9
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides actionable financial intelligence tools for AI agents including insider buying signals, earnings IV plays, market pulse, stock analysis, and options strategies via free public data sources.
    6
    MIT