fiinquant-mcp
This server is a personal MCP wrapper around the FiinQuant/FiinQuantX SDK, providing 27 tools for Vietnamese stock market data, analysis, and financial research via Claude Desktop or Cursor.
Price & Market Data
Fetch OHLCV price history and latest stock prices (
fq_get_price_history,fq_get_stock_prices)Get realtime bid/ask order book snapshots (
fq_get_realtime_bid_ask)Retrieve market statistics: market cap, volume, value (
fq_get_market_statistics)
Market Overview & Index Tools
Market breadth: advancing/declining/unchanged counts (
fq_get_market_breadth)Index constituents (e.g., VN30 members) (
fq_get_index_constituents)Money flow contributions and top gainers/losers (
fq_get_money_flow_contribution)Index rebalance allocations for a given cash budget (
fq_get_rebalance)
Fundamental Data
Company basic info, ICB industry classification (
fq_get_basic_info,fq_get_icb_industries)Financial ratios (ROE, PE, etc.) by year/quarter (
fq_get_financial_ratios)Financial statements: income, balance sheet, cash flow (
fq_get_financial_statements)Point-in-time equity snapshots: PE/PB, market cap, liquidity, foreign room (
fq_get_equity_snapshot)Valuation timeseries for stock, index, or sector (
fq_get_valuation_timeseries)
Technical Analysis
Compute indicators: RSI, MACD, SMA, and more (
fq_get_technical_indicators)Detect candlestick/chart patterns: doji, engulfing, support/resistance (
fq_detect_pattern)Relative Rotation Graph (RRG) analysis vs. a benchmark (
fq_get_rrg_analysis)
Screening & Discovery
Screen stocks by indicators, sector, exchange, and sorting criteria (
fq_screen_stocks)Run custom FiinQuant analyses (
fq_run_custom_analysis)Search for available SDK methods/indicators (
fq_search_methods)Call any FiinQuantX method directly when no dedicated tool exists (
fq_call_method)
Ticker & Session Utilities
List tickers by market (HOSE/HNX/UPCOM) and get single ticker metadata (
fq_list_tickers,fq_ticker_info)Health check (
fq_ping), session/plan status (fq_session_status), and gateway operation catalog (fq_list_ops)Log issues locally to stderr via
report_issue(does not upload to admin)
Free Plan Limits: 1 connection, 90 req/min, 80 req/s, ≤33 realtime tickers, ≤31-day history depth, daily and lower timeframes.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fiinquant-mcpget latest stock prices for FPT and VNM"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fiinquant-mcp (personal)
Personal resilient MCP server wrapping the FiinQuant / FiinQuantX Python SDK for multiple clients over stdio:
Client | Config | Example name |
Codex CLI |
|
|
Grok CLI |
|
|
Cursor / Claude Desktop |
|
|
uvx | any stdio host | inject SDK via |
Not an official FiinGroup/FiinQuant product. Domain tool names match official FiinQuant MCP; personal extras keep the
fq_prefix.
Version: 0.3.1 · Tools: 27 (21 official + 6 extras)
AI-assisted install (Codex / Claude Code / Grok / Cursor)
User không cần đọc hết docs. Copy prompt trong:
→ dán vào agent → AI tự detect Python, pip install -e, đăng ký MCP (Codex/Grok/Claude/Cursor), smoke fq_ping / get_stock_prices.
Có bản full (chi tiết) và short (1 đoạn) trong file đó.
How it works
flowchart TB
subgraph Client["MCP Clients (stdio JSON-RPC)"]
A["Codex CLI · Grok CLI · Cursor · Claude Desktop"]
end
subgraph MCP["fiinquant-mcp process (stdio)"]
B["FastMCP tools<br/>27 tools · official names + fq_* extras"]
C["Gateway<br/>timeout · re-auth · rate limit · free-tier guards"]
D["Response envelope<br/>ok / code / data / meta · size budget"]
E["SdkClientAdapter<br/>FiinSession mapping"]
end
subgraph SDK["Local Python"]
F["FiinQuantX SDK<br/>private package"]
end
subgraph Cloud["FiinQuant cloud APIs"]
G["Trading data / fundamental / screening / …"]
end
A <-->|"JSON-RPC over stdio"| B
B --> C
C --> E
E --> F
F <-->|"HTTPS + account token"| G
C --> D
D --> B
B --> AData path: client → MCP tool → Gateway (reliability + free limits) → FiinQuantX → FiinQuant API → JSON envelope back to agent.
Auth: FIINQUANT_USERNAME / FIINQUANT_PASSWORD in MCP env (not browser OIDC like official remote MCP).
Related MCP server: Daito
Quick start
1. Shared prerequisites
# Same Python that will run the MCP (example: system 3.11)
python3 -m pip install FiinQuantX # or private wheel from portal
python3 -m pip install -e /path/to/fiinquant-python-mcp
python3 -c "import FiinQuantX, fiinquant_mcp; print('OK')"SDK is private — not always on public PyPI. One Python must have both FiinQuantX and fiinquant_mcp.
Sample configs live under config/:
File | Client |
Codex CLI | |
Grok CLI | |
Cursor / Claude Desktop | |
uvx isolated env | |
Generic JSON (uvx git) |
Naming tip: use fiinquant-sdk for this personal MCP. Keep fiinquant-local if you still run the official remote proxy (npx fiinquant-mcp-proxy).
2. Codex CLI
codex mcp add fiinquant-sdk \
--env FIINQUANT_USERNAME='your@email.com' \
--env FIINQUANT_PASSWORD='your_password' \
--env FIINQUANT_PLAN=free \
--env FIINQUANT_ENFORCE_PLAN_LIMITS=true \
-- /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 -m fiinquant_mcp
codex mcp list
# open a new Codex session and call tools (get_stock_prices, …)Or paste TOML from config/mcp.codex.example.toml into ~/.codex/config.toml.
[mcp_servers.fiinquant-sdk]
command = "/Library/Frameworks/Python.framework/Versions/3.11/bin/python3"
args = ["-m", "fiinquant_mcp"]
[mcp_servers.fiinquant-sdk.env]
FIINQUANT_USERNAME = "your@email.com"
FIINQUANT_PASSWORD = "your_password"
FIINQUANT_PLAN = "free"
FIINQUANT_ENFORCE_PLAN_LIMITS = "true"3. Grok CLI
# After pip install -e . on the same Python as FiinQuantX
# Edit ~/.grok/config.toml — see config/mcp.grok.example.toml
grok mcp doctor fiinquant# ~/.grok/config.toml
[mcp_servers.fiinquant]
command = "/Library/Frameworks/Python.framework/Versions/3.11/bin/python3"
args = ["-m", "fiinquant_mcp"]
enabled = true
startup_timeout_sec = 60
[mcp_servers.fiinquant.env]
FIINQUANT_USERNAME = "your@email.com"
FIINQUANT_PASSWORD = "your_password"
FIINQUANT_PLAN = "free"
FIINQUANT_ENFORCE_PLAN_LIMITS = "true"4. Cursor / Claude Desktop
Copy config/mcp.cursor.example.json into Cursor MCP settings or Claude claude_desktop_config.json (paths differ by OS). Point command at the Python that has both packages.
5. uvx (isolated env)
Only if you inject the private SDK wheel:
{
"mcpServers": {
"fiinquant-sdk": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/luongndcoder/fiinquant-python-mcp",
"--with", "/path/to/FiinQuantX.whl",
"fiinquant-mcp"
],
"env": {
"FIINQUANT_USERNAME": "your@email.com",
"FIINQUANT_PASSWORD": "your_password",
"FIINQUANT_PLAN": "free"
}
}
}
}Client comparison
flowchart LR
subgraph Hosts
CX[Codex CLI<br/>~/.codex/config.toml]
GX[Grok CLI<br/>~/.grok/config.toml]
CR[Cursor / Claude<br/>mcp.json]
end
subgraph Stdio
M["python -m fiinquant_mcp<br/>or uvx … fiinquant-mcp"]
end
CX --> M
GX --> M
CR --> M
M --> S[FiinQuantX + APIs]Codex | Grok | Cursor/Claude | |
Config file |
|
| JSON MCP settings |
CLI add |
|
| UI or JSON edit |
Suggested server name |
|
|
|
vs official proxy | Can coexist with | Independent | Independent |
Plans: free vs paid / higher tiers
MCP không khóa “free-only”. Cả 27 tool luôn được expose. Free chỉ là mặc định an toàn (local guards + API account chặn một phần). Gói cao hơn → cùng MCP, mở thêm data khi FiinQuant cấp permission.
Hai lớp độc lập:
Lớp | Ai kiểm soát | Free | Paid / gói cao |
Local guards (MCP Gateway) | Env | Siết history/rate/ticker | Nới hoặc tắt |
API permission (FiinQuant cloud) | Gói account trên FiinQuant | Nhiều endpoint 403 | Tool trước đó 403 → trả data |
Upgrade account FiinQuant + FIINQUANT_PLAN=paid → full surface dùng được (theo đúng quyền gói)Local guards
FIINQUANT_PLAN=free (default)
Limit | Value |
Connections | 1 session |
Requests / min · / s | 90 · 80 |
Realtime tickers / call | ≤ 33 |
History window | ≤ 31 days |
Intraday TF |
|
Over limit → JSON VALIDATION or RATE_LIMIT (process does not crash).
FIINQUANT_PLAN=paid (hoặc gói cao hơn)
# Codex / Grok env block
FIINQUANT_PLAN = "paid"
# optional: nới tay nếu gói cho phép
# FIINQUANT_MAX_HISTORY_DAYS = "365"
# FIINQUANT_MAX_REALTIME_TICKERS = "200"
# FIINQUANT_REQUESTS_PER_MINUTE = "600"
# FIINQUANT_REQUESTS_PER_SECOND = "200"
# hoặc giữ plan=free nhưng tắt local guard (cẩn thận quota):
# FIINQUANT_ENFORCE_PLAN_LIMITS = "false"paid nới default local caps (history dài hơn, rate/ticker cao hơn). Quyền API thật vẫn do gói FiinQuant quyết định — MCP không fake data.
Live suite (account free) — tool status
Tested end-to-end with FiinQuantX + free account (see plans/.../tool-test-report.json).
Status | Meaning | Count |
Works | Returns real data | 21 |
Blocked by free API | Tool runs; FiinQuant returns 403 / no permission | 6 |
Crash | — | 0 |
Works on free (typical):
get_stock_prices,fq_get_price_historyget_financial_ratios,get_financial_statementsget_valuation_timeseries,get_equity_snapshotget_rrg_analysis,get_rebalanceget_technical_indicators,detect_patternget_market_statistics, health/meta tools
Often 403 on free — expect data on higher plans:
Tool | Typical free error | After upgrade |
| ApiAccessFailed 403 | Company / ICB metadata |
| Screening API 403 | Filter ROE/PE/… |
| No permission MarketBreadth | Advance/decline |
| No permission MoneyFlow | Top gainers/losers flow |
| 403 | VN30 members, … |
Envelope when blocked (tool path still healthy):
{"ok": false, "code": "SDK_ERROR", "message": "…permission…", "hint": "…"}Checklist sau khi nâng gói FiinQuant:
Set
FIINQUANT_PLAN=paid(và/hoặc nớiFIINQUANT_MAX_*) trong env MCP.Restart client session (Codex / Grok / Cursor).
Gọi lại tool từng 403 (vd
screen_stocks,get_basic_info).Nếu vẫn 403 → gói account chưa mở đúng API (không phải MCP thiếu tool).
Response format
Success:
{"ok": true, "data": …, "meta": {"truncated": false, "row_count": 10}}Error (tool failure ≠ process die):
{"ok": false, "code": "TIMEOUT|AUTH|SDK_ERROR|VALIDATION|RATE_LIMIT|INTERNAL", "message": "…", "hint": "…"}tickers accepts ["FPT","VNM"] or "FPT,VNM".
Prompt guide (per tool)
Copy/adapt prompts for your agent. Prefer official tool names first.
Health & meta
Tool | When to use | Example prompt |
| Check MCP alive | “Ping FiinQuant MCP xem process còn sống không.” |
| Creds / plan / rate | “Kiểm tra session FiinQuant: đã login chưa, plan free limits thế nào.” |
| List gateway ops | “Liệt kê các op Gateway hỗ trợ.” |
| Local debug note | “Ghi issue local: tool X lỗi Y khi hỏi Z.” (chỉ log local, không gửi admin FiinQuant) |
| Discover SDK methods | “Search method FiinQuantX chứa Fetch.” |
| Escape hatch | “Dry-run call method_id=login với params {}.” |
Market / prices
Tool | When to use | Example prompt |
| Giá / OHLCV chính | “Lấy giá FPT 2 tuần gần nhất (Daily, adjusted).” · “OHLCV FPT và VNM từ 2026-07-01 đến 2026-07-15.” · “Giá VNINDEX tuần qua.” |
| OHLCV đơn giản start/end | “Price history VNM start=2026-07-01 end=2026-07-15.” |
| Stats (cap, foreign…) | “Market statistics FPT từ 2026-07-01 đến 2026-07-15, time_filter=Daily.” |
| Breadth index | “Market breadth VNINDEX.” (free: often no permission) |
| Thành phần chỉ số | “Lấy danh sách mã VN30.” (free: often 403) |
| Dòng tiền / đóng góp | “Top gainers đóng góp VNINDEX 1Day, limit 10.” (free: often no permission) |
| Bid/ask | “Bid/ask realtime FPT.” (SDK streaming; may return guidance note) |
Tips get_stock_prices:
Always pass
from_date+to_date(YYYY-MM-DD); free max span 31 days.frequency:Dailyor1m/5m/15m/1h/4h.Multiple tickers:
["FPT","VNM"].
Universe
Tool | When to use | Example prompt |
| Tên, sàn, ngành | “Basic info FPT, VNM.” (free: often 403) |
| ICB levels | “List ICB industries level=2.” |
| List theo sàn | “List tickers market=HOSE.” |
| 1 mã metadata | “Ticker info FPT.” (free: often 403) |
Fundamental
Tool | When to use | Example prompt |
| Chỉ số tài chính | “Financial ratios FPT years 2024 và 2025.” |
| BCTC | “Income statement FPT năm 2024 (consolidated).” · “Balance sheet FPT statement=balance_sheet years=[2024].” |
| Lịch sử định giá | “Valuation timeseries FPT scope=stock from 2026-06-15 to 2026-07-15.” |
| Snapshot gần đây | “Equity snapshot FPT metrics pe,pb.” |
statement values: income_statement · balance_sheet · cashflow · full · note
Screening & technical
Tool | When to use | Example prompt |
| Lọc cổ phiếu | “Screen HOSE: ROE > 15, limit 20.” (free: often 403) |
| RSI/MACD/… | “RSI 14 và MACD cho FPT, by=1d.” |
| Mẫu nến / pattern | “Detect doji trên FPT từ 2026-06-15 đến 2026-07-15.” |
| RRG vs benchmark | “RRG FPT,VNM vs VNINDEX 1 tháng gần nhất.” |
| Phân bổ theo rổ | “Rebalance VN30 với budget 1 tỷ VND.” |
| Custom / list | “List custom analyses available.” |
Screen filters example (JSON):
[{"indicator": "roe", "operator": "gt", "value": 15}]Pattern params example:
{"tickers": ["FPT"], "from_date": "2026-06-15", "to_date": "2026-07-15", "by": "1d"}Example agent workflows
A. Xem giá nhanh
Dùng get_stock_prices lấy OHLCV FPT 2 tuần gần nhất (Daily, adjusted).
Tóm tắt close đầu/cuối kỳ, % thay đổi, volume bất thường.B. Phân tích fundamental
1) get_financial_ratios FPT years 2024,2025
2) get_financial_statements FPT income_statement 2024
So sánh revenue / net profit / EPS.C. So sánh 2 mã + index
get_stock_prices tickers=[FPT,VNM,VNINDEX] from_date=… to_date=… (≤31 ngày free).
Bảng close theo ngày + nhận xét tương quan ngắn hạn.D. Khi tool 403
Nếu SDK_ERROR permission/403: báo user đây là hạn mức gói free FiinQuant,
không phải MCP die; gợi ý tool thay thế (vd giá thay vì screen).Environment
Variable | Default | Meaning |
| — | SDK username |
| — | SDK password |
|
|
|
|
| Local rate/history/ticker guards |
|
| Max date span |
|
| Cap per realtime-ish call |
|
| Local RPM |
|
| Local RPS |
|
| Per-call timeout |
|
| Response row budget |
|
| Response char budget |
Architecture vs official MCP
Official FiinQuant MCP | This MCP | |
Tool names |
| Same + |
Auth | Browser / OIDC remote | Local SDK user/pass |
Transport | Streamable HTTP | stdio |
Reliability | Vendor | Timeout, envelope, size budget, free guards |
| Admin upload | Local log only |
sequenceDiagram
participant U as User / Agent
participant C as MCP Client
participant M as fiinquant-mcp
participant G as Gateway
participant S as FiinQuantX
participant A as FiinQuant API
U->>C: "Giá FPT 2 tuần gần nhất"
C->>M: tools/call get_stock_prices
M->>G: call(op, tickers, from, to)
G->>G: free-tier check (≤31d, rate…)
G->>S: Fetch_Trading_Data(...)
S->>A: HTTPS
A-->>S: OHLCV
S-->>G: DataFrame
G-->>M: normalize + envelope
M-->>C: {"ok":true,"data":[...]}
C-->>U: Table / summaryDevelop
git clone https://github.com/luongndcoder/fiinquant-python-mcp.git
cd fiinquant-python-mcp
# Use a Python that already has FiinQuantX
pip install -e ".[dev]"
pytest -v
python -m fiinquant_mcp # stdio serverUnit tests mock the SDK boundary (no network). Live suite: plans/20260715-fiinquant-personal-mcp/tool-test-report.json.
License
MIT for this wrapper only. FiinQuant SDK and market data remain under FiinQuant terms of use. Do not commit credentials.
Available Tools
26 toolsfq_call_methodARead-onlyIdempotent
Call a FiinQuantX method by id when no domain tool fits.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| dry_run | No | ||
| method_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=true. Description adds no additional behavioral context beyond the catch-all usage hint.
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?
Single sentence front-loads purpose and usage. No wasted words.
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?
While the catch-all purpose is clear, the description lacks parameter explanations and further context for a generic tool with many siblings and three parameters.
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%. Description fails to explain what 'params' and 'dry_run' do, offering no compensation 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?
Description clearly states the verb 'Call' and resource 'a FiinQuantX method by id'. It also distinguishes from sibling tools with 'when no domain tool fits'.
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?
Explicitly states when to use this tool ('when no domain tool fits'), providing clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_detect_patternCRead-onlyIdempotent
Pattern detection (doji, engulfing, support/resistance, …).
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| pattern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior. The description adds examples of patterns but no further behavioral details (e.g., what happens if pattern not found, whether multiple patterns are returned).
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?
Single short phrase with no fluff, but could include more useful information without becoming verbose.
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?
With 2 parameters, an output schema, and siblings, the description is too sparse. It lacks details on return values, possible pattern list, or usage context, leaving the agent uninformed.
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 coverage is 0% so description carries burden. It only hints at pattern values via examples; the 'params' parameter is completely unexplained. No formal documentation of parameter meaning or expected format.
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 indicates the tool detects chart patterns, with examples (doji, engulfing). It distinguishes sufficiently from siblings like fq_get_technical_indicators, which focus on numeric indicators.
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?
No guidance on when to use this tool vs. alternatives (e.g., fq_get_technical_indicators for indicators, fq_run_custom_analysis for custom logic). No context about prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_basic_infoBRead-onlyIdempotent
Company name, exchange, sector, ICB classification.
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds that it returns the listed fields, which is consistent. No additional behavioral traits (e.g., data freshness, authentication) are disclosed, but the safety profile is covered by annotations.
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 that immediately conveys the tool's output. No extraneous words, and it is front-loaded with the key information, achieving maximum conciseness.
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 one simple parameter and an output schema, the description covers the output fields adequately but lacks parameter guidance. For a straightforward tool, this is acceptable but not complete—agents need to infer parameter usage from the name 'tickers' 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?
Schema description coverage is 0%, so the description must compensate for the parameter 'tickers'. It does not explain the format (e.g., comma-separated, single ticker, case sensitivity) or provide examples. The description focuses on output fields, leaving parameter meaning ambiguous.
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 lists the specific data fields returned (company name, exchange, sector, ICB classification) and the verb 'get' indicates retrieval. It distinguishes from siblings by specifying the exact fields, though it does not explicitly differentiate from similar tools like fq_ticker_info or fq_get_equity_snapshot.
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 when one needs the listed fields, but provides no explicit context on when to prefer this tool over siblings, no prerequisites, and no exclusions. Agents must infer usage from the field listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_equity_snapshotCRead-onlyIdempotent
Point-in-time snapshot (pe/pb, market_cap, liquidity, foreign room).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| metrics | No | ||
| tickers | Yes | ||
| as_of_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety and idempotency. The description adds no further behavioral traits (e.g., rate limits, data freshness), so it meets the baseline but adds no extra value.
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 very short (one sentence fragment) and front-loaded with key terms, but it is too terse and lacks structure. While no words are wasted, the brevity sacrifices informativeness, making it concise but not adequately helpful.
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?
Despite having an output schema (which reduces the need to explain return values), the tool has 5 parameters with no descriptions, and the description does not mention pagination (limit/offset) or date handling (as_of_date). The context is incomplete for the tool's complexity.
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 fails to explain the five parameters (limit, offset, metrics, tickers, as_of_date). It only hints at possible metric values (pe/pb, market_cap), leaving the agent to infer parameter usage, which is insufficient.
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 specifies the resource (equity snapshot) and lists example metrics (PE/PB, market cap, liquidity, foreign room), making the purpose clear. However, it does not contrast with sibling tools like fq_get_financial_ratios or fq_get_valuation_timeseries, so it could be more distinct.
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?
No usage guidance is provided. The description does not indicate when to use this tool versus alternatives (e.g., for historical data use fq_get_valuation_timeseries), leaving the agent without context for selecting among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_financial_ratiosCRead-onlyIdempotent
Financial ratios. years/quarters as CSV when needed.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | ||
| tickers | Yes | ||
| quarters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds minimal value by hinting at CSV parameter format for years/quarters, but does not explain behavior like data ranges or output structure.
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 extremely short (9 words), which is concise but lacks essential information. It is not unnecessarily verbose, but sacrifices clarity for brevity.
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 (3 parameters, 1 required, output schema exists, many siblings), the description fails to provide sufficient context. It does not explain what financial ratios are returned, how to interpret results, or how this tool fits with others like fq_get_basic_info or fq_get_financial_statements.
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?
With 0% schema description coverage, the description must compensate but only mentions 'years/quarters as CSV when needed'. It does not explain the meaning of parameters like 'tickers' or 'quarters', nor their expected format beyond CSV. The 'years' and 'quarters' parameters are not distinguished.
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 'Financial ratios' merely restates the tool name, lacking a specific verb or action. It does not clarify what the tool does (e.g., retrieve, calculate) or distinguish it from siblings like fq_get_financial_statements or fq_get_valuation_timeseries.
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?
No guidance is provided on when to use this tool versus alternatives. The context of financial ratio retrieval compared to other financial data tools is entirely absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_financial_statementsCRead-onlyIdempotent
BCTC: income_statement | balance_sheet | cashflow | full | note.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | ||
| audited | No | ||
| tickers | Yes | ||
| quarters | No | ||
| statement | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds no extra behavioral context, but also does not contradict annotations.
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?
Very short (7 words) but at the expense of clarity. The cryptic 'BCTC:' prefix and lack of parameter context reduce effectiveness despite conciseness.
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?
With 5 parameters and 0% schema coverage, the description is insufficient. It only addresses one parameter partially and omits usage patterns, output behavior, and parameter interactions. The presence of an output schema slightly mitigates completeness but does not compensate for missing parameter documentation.
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 has 0% description coverage. The description lists possible values for the 'statement' parameter (income_statement, balance_sheet, cashflow, full, note), which is helpful. However, it does not explain other parameters like years, audited, tickers, quarters, leaving significant gaps.
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 starts with an acronym 'BCTC:' which is not explained, then lists statement types. It fails to clearly state that the tool retrieves financial statements for given tickers. The purpose is only vaguely inferred from the tool name.
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?
No guidance on when to use this tool versus siblings like fq_get_financial_ratios or fq_get_equity_snapshot. No context about prerequisites or suitable use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_icb_industriesCRead-onlyIdempotent
ICB industry list by level.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe, idempotent operation. The description adds no behavioral context beyond the annotations, such as how the level parameter affects behavior or what the output contains.
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 extremely concise (5 words), but it sacrifices informativeness. It fails to provide enough detail to justify its brevity; a slightly longer description with key details would be more appropriate.
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 has an output schema, the description could rely on that for return structure. However, it omits any explanation of what ICB is, the intended use of the level parameter, and how this tool fits among siblings. The description is insufficient even with annotations present.
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. 'By level' hints that the level parameter influences the industry listing, but it does not explain valid values, the meaning of the default (2), or how the output changes based on this parameter.
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 'ICB industry list by level' indicates the tool retrieves a list of ICB industries, possibly filtered by level. However, it does not explicitly state the verb (e.g., 'get' or 'list'), and it fails to differentiate this tool from siblings like fq_list_tickers or fq_list_ops, which also return lists.
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?
No usage guidance is provided. There is no indication of when to use this tool versus alternatives, nor any mention of prerequisites, typical use cases, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_index_constituentsBRead-onlyIdempotent
Members of an index basket (e.g. VN30).
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint true and destructiveHint false, so the safety profile is clear. The description adds no extra behavioral context beyond stating the function, which is adequate but not enhancing.
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?
Very concise, single sentence. No filler. Could include more detail without compromising brevity, but as is, it is efficient.
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 simplicity (1 required param, output schema present), the description is minimally complete. It conveys the core function but lacks usage hints or parameter details that would help an agent select and invoke correctly.
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 partially compensates by mentioning 'index basket' and giving an example ('VN30'), implying the 'index' parameter expects an index code. However, it does not specify accepted formats or list possible values.
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 clearly states the tool retrieves members of an index basket, with an example ('VN30'). The purpose is evident, though it lacks an explicit verb like 'get' or 'retrieve'.
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?
No guidance on when to use this tool versus alternatives such as fq_get_basic_info or fq_get_equity_snapshot. No context on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_market_breadthCRead-onlyIdempotent
Index breadth: advancing / declining / unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | VNINDEX | |
| to_date | No | ||
| from_date | No | ||
| time_filter | No | Daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, which fully cover safety and idempotency. The description adds no additional behavioral context but does not contradict annotations.
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 short sentence, which is concise but overly minimal. It lacks structure and does not earn its place by providing sufficient information beyond the name.
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?
With four unannotated parameters and no output schema details visible in the description, the description is incomplete. It omits critical context about date ranges, index selection, and time filtering.
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?
Zero of the four parameters (index, to_date, from_date, time_filter) are explained in the description. Schema coverage is 0%, and the description provides no hints about parameter meaning or usage.
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 tool returns index breadth data (advancing/declining/unchanged). The verb 'get' is implied by the tool name, and the resource 'market breadth' is specific. However, it does not explicitly differentiate from siblings like fq_get_market_statistics.
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?
No guidance on when to use this tool versus alternatives (e.g., fq_get_market_statistics). No context on typical usage scenarios or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_market_statisticsBRead-onlyIdempotent
Market stats (market_cap, volume/value). Prefer fq_get_stock_prices for OHLCV.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | ||
| tickers | Yes | ||
| to_date | No | ||
| from_date | No | ||
| time_filter | No | Daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows the tool is safe and idempotent. The description adds minimal behavioral context beyond listing the kind of data returned (market_cap, volume/value). No conflicts with annotations.
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 consists of two short sentences, directly stating the tool's purpose and a key usage recommendation. There is no unnecessary text, and the most critical information is front-loaded.
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?
Despite having an output schema, the description fails to explain the 5 parameters despite 0% schema coverage. The tool's purpose and sibling distinction are covered, but parameter documentation is missing, making the description incomplete for an agent to use effectively.
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%, meaning none of the 5 parameters have descriptions in the schema. The description adds no parameter-level information, leaving the agent to infer meaning from names alone (e.g., 'metric', 'time_filter'). This is insufficient for correct invocation.
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 that the tool retrieves market statistics (market_cap, volume/value) and distinguishes it from fq_get_stock_prices for OHLCV data. However, it does not explicitly state that the tool lists or retrieves this data, relying on the tool name for the verb.
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 advises preferring fq_get_stock_prices for OHLCV data, indicating an alternative. It implies this tool is for market stats, but does not provide explicit when-to-use or when-not-to-use guidance beyond this single recommendation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_money_flow_contributionCRead-onlyIdempotent
Money-flow / index contribution ranking (topGainers, topLosers).
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| limit | No | ||
| tickers | No | ||
| to_date | No | ||
| direction | No | ||
| from_date | No | ||
| contribution_day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint (false), so the safety profile is clear. The description adds minimal behavioral context beyond mentioning topGainers/topLosers, but does not describe sorting, default behavior, or response details.
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, which is concise but overly brief. It lacks structure and does not front-load critical information. More detail is expected given the tool's complexity (7 parameters).
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 description is incomplete for a tool with 7 parameters and 0% schema coverage. It fails to explain what the output contains (despite having an output schema) or how parameters like 'index', 'tickers', and date ranges affect results. The user is left guessing.
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?
With 0% schema description coverage, the description should compensate by explaining parameters. It only hints at the 'direction' parameter via 'topGainers, topLosers' but leaves other 6 parameters (index, limit, tickers, to_date, from_date, contribution_day) completely unexplained.
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 tool provides a ranking of money-flow/index contribution, specifying top gainers and top losers. This distinguishes it from sibling tools like fq_get_market_statistics or fq_get_index_constituents, though the term 'contribution' is not further explained.
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?
No guidance is provided on when to use this tool versus alternatives such as fq_get_market_breadth or fq_get_equity_snapshot. There is no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_price_historyBRead-onlyIdempotent
OHLCV convenience (tickers CSV, start/end YYYY-MM-DD).
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| tickers | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool is clearly a safe read operation. The description adds 'convenience' indicating simplification but adds no further behavioral context beyond annotations.
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 concise sentence with front-loaded key information (OHLCV). However, it could be slightly clearer without adding length.
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?
With an output schema present (not shown), return values need not be detailed. However, the description is minimal and does not fully cover the tool's scope given 0% schema coverage and many siblings. More context would improve completeness.
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 has 0% description coverage, but the description adds meaning: 'tickers CSV' implies comma-separated format, and 'start/end YYYY-MM-DD' specifies date format. This partially compensates for the missing schema descriptions.
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 mentions 'OHLCV' and 'tickers CSV, start/end YYYY-MM-DD', which implies fetching historical price data, but it is vague and does not clearly state the tool's function or differentiate it from siblings like fq_get_stock_prices.
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 provides no guidance on when to use this tool versus alternatives. With many sibling tools (e.g., fq_get_stock_prices, fq_get_technical_indicators), the lack of context makes selection difficult.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_realtime_bid_askARead-onlyIdempotent
Realtime bid/ask snapshot (may be empty outside market hours).
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | Yes | ||
| max_realtime_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds value by disclosing that results may be empty outside market hours, which is a behavioral trait not captured by annotations.
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, concise sentence that front-loads the core purpose. It is efficient but could be slightly expanded to include parameter hints without losing conciseness.
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 low complexity (2 params, no nested objects) and presence of an output schema, the description covers the main behavioral aspect (realtime snapshot, empty outside hours). However, the lack of parameter context makes it somewhat incomplete.
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 provides no explanation of the parameters 'tickers' or 'max_realtime_events'. The description must compensate but fails to do so, leaving the agent without guidance on how to set these fields.
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 tool provides a 'Realtime bid/ask snapshot', which is a specific verb and resource. This distinguishes it from siblings like fq_get_equity_snapshot or fq_get_stock_prices, which offer different data.
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 includes a key usage hint: 'may be empty outside market hours', which implies when to use (during market hours). However, it does not explicitly state when not to use or mention alternative tools for other use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_rebalanceBRead-onlyIdempotent
Index rebalance allocation for a cash budget.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | VN30 | |
| budget | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat safety traits. However, the description adds no additional behavioral context (e.g., side effects, authorization needs) beyond what annotations provide. Score 3 is appropriate as annotations lower the burden.
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 extraneous text. It is front-loaded and efficient. However, it could be slightly expanded to improve clarity without losing conciseness.
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 has only two parameters and an output schema (not shown), the description is minimally adequate. It covers the basic what and why, but lacks details on output or edge cases. For a tool of this simplicity, a score of 3 reflects acceptable but not thorough completeness.
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?
With 0% schema description coverage, the description partially compensates by implying the 'index' parameter is an index code and 'budget' is a cash amount. However, it does not specify valid formats, units, or constraints. The parameter names are self-explanatory, but more detail would improve clarity.
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 'Index rebalance allocation for a cash budget' clearly indicates the tool computes rebalance allocations given an index and a cash budget. It distinguishes itself from sibling tools focused on other financial data or actions, though could add specificity about the output.
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?
No guidance is provided on when to use this tool versus alternatives. For instance, it doesn't mention that it should be used for portfolio rebalancing calculations or when to prefer other tools like fq_get_basic_info. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_rrg_analysisCRead-onlyIdempotent
Relative Rotation Graph vs benchmark.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| tickers | Yes | ||
| benchmark | No | VNINDEX |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safety (readOnlyHint, idempotentHint, not destructive). The description does not add any behavioral context beyond what annotations provide.
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 extremely short (8 words), which seems concise but results in under-specification. Important details are missing.
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 low schema coverage and no parameter explanations, the description is insufficient for an agent to correctly use the tool. Output schema existence does not compensate for missing input documentation.
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 does not explain any of the three parameters (tickers, benchmark, params). The agent receives no guidance on input meaning.
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 mentions 'Relative Rotation Graph vs benchmark,' which hints at the tool's purpose but lacks a clear verb (e.g., 'get', 'generate'). It is too brief to fully convey what the tool does.
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?
No guidance on when to use this tool versus siblings like fq_get_technical_indicators or fq_get_valuation_timeseries. The description does not provide selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_stock_pricesCRead-onlyIdempotent
Primary price tool: latest trade and/or OHLCV for stocks/indexes.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | ||
| tickers | Yes | ||
| to_date | No | ||
| adjusted | No | ||
| frequency | No | Daily | |
| from_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the description's burden is lower. The description adds that it returns 'latest trade and/or OHLCV', but it does not explain behavioral details like the effect of the 'adjusted' parameter, date range constraints, or how 'latest' interacts with 'from_date' and 'to_date', which are significant gaps.
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, making it highly concise and front-loaded with key information ('Primary price tool'). However, it uses informal phrasing ('and/or') and could be better structured to include parameter hints without sacrificing brevity.
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?
With 6 parameters and an output schema, the description must provide enough context for correct invocation. It fails to explain how to retrieve historical data versus latest, the meaning of 'frequency' and 'adjusted', or the format of tickers. The description is too sparse to be complete.
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%, meaning the description must compensate by explaining parameters. It does not describe any of the 6 parameters (tickers, latest, from_date, to_date, frequency, adjusted). The brief mention of 'latest trade and/or OHLCV' hints at the 'latest' boolean but is insufficient for correct usage. This is a critical failure.
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 retrieves latest trade and/or OHLCV data for stocks/indexes, and brands itself as the 'primary price tool', which distinguishes it from siblings like fq_get_price_history and fq_get_equity_snapshot. However, the phrase 'and/or' introduces ambiguity, and it does not explicitly differentiate from related tools.
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 provides no explicit guidance on when to use this tool versus alternatives. It only calls itself the 'primary price tool', which is vague, and there is no mention of when not to use it or which sibling tools might be better suited for specific scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_technical_indicatorsCRead-onlyIdempotent
TA indicators. indicators JSON e.g. [{"name":"rsi","window":14}].
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | 1d | |
| lasted | No | ||
| period | No | ||
| tickers | Yes | ||
| adjusted | No | ||
| indicators | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds no additional behavioral context such as data freshness, rate limits, or authentication needs.
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 very short but not overly verbose. However, it lacks structure; a single line and an example do not effectively communicate the tool's usage.
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 has 6 parameters and an output schema, the description is insufficient. It fails to specify supported indicators, parameter constraints, or required information, leaving the agent underinformed.
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%. The description only explains the 'indicators' parameter with an example, leaving five other parameters (by, lasted, period, tickers, adjusted) completely unexplained.
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 states 'TA indicators' and provides an example, indicating it returns technical indicators. However, it is vague and does not clearly specify the verb or resource, nor does it differentiate from sibling tools like fq_get_price_history.
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?
No guidance is given on when to use this tool versus alternatives like fq_get_price_history or fq_get_basic_info. The description lacks any context about prerequisites or use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_get_valuation_timeseriesCRead-onlyIdempotent
Valuation history; scope=stock|index|sector.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| scope | Yes | ||
| tickers | No | ||
| to_date | No | ||
| from_date | No | ||
| sector_level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds no additional behavioral context (e.g., data freshness, rate limits, or pagination), which is expected beyond annotations.
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 single sentence is too brief, sacrificing essential details for brevity. It omits parameter explanations and return value semantics, making it under-specified rather than efficiently concise.
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 complexity (6 parameters, output schema exists) and low schema coverage, the description is incomplete. It fails to specify what valuation history contains, date handling, or how scope interacts with other parameters. The output schema exists but is not referenced.
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?
With 0% schema description coverage, the description must explain parameters. It only mentions 'scope=stock|index|sector', leaving the five other parameters (index, tickers, to_date, from_date, sector_level) completely unexplained. This is insufficient for correct invocation.
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 'Valuation history; scope=stock|index|sector' clearly indicates the tool returns valuation data and identifies three scope categories. However, it does not differentiate this tool from siblings like fq_get_financial_ratios or fq_get_basic_info, which also provide historical financial data.
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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or typical scenarios, leaving the agent to infer usage solely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_list_opsARead-onlyIdempotent
List logical Gateway operations this MCP can dispatch.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds minimal extra behavioral context, confirming it is a read-only listing operation, which is consistent with annotations.
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 unnecessary words, fully front-loading the purpose.
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 no parameters, full annotations, and an existing output schema, the description sufficiently explains the tool's function without missing critical 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?
No parameters exist, and schema description coverage is 100%. The description adds no parameter details but none are needed; baseline 4 for zero-parameter tools is appropriate.
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 'List', the resource 'logical Gateway operations', and the scope 'this MCP can dispatch'. It distinguishes from sibling tools like fq_search_methods and fq_call_method by focusing on available dispatchable operations.
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 discovering available operations but does not provide explicit guidance on when to use this tool versus alternatives or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_list_tickersARead-onlyIdempotent
List tickers (optional market filter HOSE/HNX/UPCOM).
| Name | Required | Description | Default |
|---|---|---|---|
| market | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is clear. Description adds the optional market filter but no further behavioral details (e.g., output format, pagination).
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?
Single sentence with no redundancy. Every word is necessary and front-loaded with the core action.
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 simple list tool with rich annotations and an output schema, the description is nearly sufficient. Could mention that it returns ticker symbols, but the output schema likely covers that.
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 coverage is 0%, so description must compensate. It adds the market filter values (HOSE/HNX/UPCOM) and clarifies it's optional, which adds meaningful context beyond the schema.
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?
Clearly states the verb 'list' and resource 'tickers', with optional market filter. Distinguishes from siblings like fq_ticker_info which focuses on individual ticker details.
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?
Implied usage for listing tickers with an optional market filter, but no explicit guidance on when to use this vs. alternatives like fq_ticker_info or fq_get_stock_prices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_pingARead-onlyIdempotent
Health check for the personal FiinQuant MCP process (no credentials required).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that no credentials are required, which is useful context. However, it does not elaborate on behavioral aspects such as latency, error behavior, or what happens if the process is unhealthy, so the added value beyond annotations is moderate.
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 concise sentence with no extraneous information. It is front-loaded with the purpose and key attribute, making it easy to parse.
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 simplicity (no parameters, clear annotations, and an output schema), the description is complete. It states the purpose and a critical usage condition (no credentials needed), which is sufficient for an agent to understand and invoke the tool correctly.
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 tool has zero parameters, so schema coverage is 100% and the description cannot add meaning beyond that. According to guidelines, baseline is 4 for 0 parameters, and no further information is needed.
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 health check for the FiinQuant MCP process, using a specific verb and resource. It distinguishes itself from sibling tools which are all data queries or operations, making its purpose 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 notes 'no credentials required,' implying safe usage without authentication, but does not explicitly state when to use this tool versus alternatives or provide any exclusion criteria. Usage is implied as a preliminary check, but not detailed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_run_custom_analysisARead-onlyIdempotent
Run FiinQuant custom analysis; omit analysis_id to list available.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| analysis_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint as false, covering safety. The description adds the context of listing vs running, but no further behavioral traits beyond what annotations already imply.
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 that is front-loaded with the action, concise, and contains no redundant words.
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?
With an output schema present, the description does not need to detail return values. It covers the two modes of operation (list and run) adequately, though the 'params' parameter could use more explanation.
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 the behavior of analysis_id (omit to list) but does not explain the 'params' parameter at all, leaving its purpose unclear.
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 tool runs a FiinQuant custom analysis and distinguishes from sibling tools that retrieve specific data. The verb 'run' is specific and the resource 'custom analysis' is clearly identified.
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 provides explicit guidance: 'omit analysis_id to list available' tells the agent when to use the tool for listing vs running. However, it does not mention alternatives or when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_screen_stocksCRead-onlyIdempotent
Stock screening. filters is JSON array string of indicator rules.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | ||
| filters | No | ||
| sectors | No | ||
| sort_by | No | ||
| exchanges | No | ||
| sort_order | No | ||
| screener_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds no behavioral context beyond what annotations provide, such as side effects, rate limits, or output characteristics.
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 short (two sentences) but lacks structure. It frontloads the main purpose but omits important details. Not overly verbose, but could be more organized with parameter descriptions.
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 has 8 parameters and an output schema, the description is incomplete. It does not explain the screening logic, how filters work, what the output contains, or how to use parameters like sectors, exchanges, etc. Annotations cover safety but not functional completeness.
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 description should compensate. It only mentions that 'filters is JSON array string of indicator rules', but there are 7 other parameters (limit, fields, sectors, etc.) with no explanation. This is insufficient for an 8-param tool.
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 states 'Stock screening' which gives a general idea but lacks specificity about what the tool returns or how screening works. It distinguishes from siblings only by the screen concept, but doesn't differentiate clearly.
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?
No guidance on when to use this tool versus alternatives. No exclusions, prerequisites, or context provided. The description does not help the agent decide when to invoke screening over other data retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_search_methodsBRead-onlyIdempotent
Discover FiinQuantX methods / screening indicators.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | quick | |
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool as read-only, non-destructive, idempotent, and open-world. The description adds no further behavioral context beyond stating the discovery purpose, which is consistent but does not supplement 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loading the purpose efficiently. However, it could be slightly more informative without becoming verbose.
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 existence of an output schema, the description does not need to explain return values. However, with three parameters left undocumented and no usage context, the description feels incomplete for a search tool, though minimally adequate.
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, and the tool description does not explain any of the three parameters (mode, limit, query). The description adds no meaning beyond what the schema provides, leaving parameters fully 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 clearly states the tool discovers FiinQuantX methods and screening indicators. It uses a specific verb 'Discover' and identifies the resource. However, it does not distinguish from sibling tools like fq_screen_stocks, which serves a similar discovery function.
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 provides no guidance on when to use this tool versus alternatives. No context about prerequisites, typical use cases, or exclusions is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_session_statusARead-onlyIdempotent
Show credentials/session status and supported Gateway ops.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds context about what 'status' includes (credentials/session and supported ops) but does not elaborate on behavioral aspects like caching or authentication requirements.
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?
A single, clear sentence with no extraneous words. The description is front-loaded and efficient.
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 simple, parameterless tool with an output schema, the description covers the key outputs (status and supported ops). It could mention expected behavior after a timeout, but overall is sufficient.
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?
No parameters exist, and schema coverage is 100%. The description does not need to add parameter details, and the baseline score of 4 is appropriate.
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 tool shows credentials/session status and supported Gateway operations. It distinguishes itself from sibling tools, which focus on fetching financial data or executing actions.
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?
No guidance on when to use this tool versus alternatives. It does not mention prerequisites or typical usage patterns, such as checking session health before other calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fq_ticker_infoCRead-onlyIdempotent
Basic metadata for one ticker.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds no further behavioral context (e.g., error handling, data freshness). Bar lowered by annotations but description still adds minimal value.
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?
Extremely short (3 words), which is efficient but lacks any elaboration. While not verbose, it could be more informative without significant bloat.
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 is simple, has an output schema, and strong annotations, the bare description might be adequate. However, for a tool with many similar siblings, more context about what 'basic metadata' includes would improve completeness.
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 description must add meaning. It says 'for one ticker' which loosely implies the `ticker` parameter identifies the subject, but this is obvious from the param name. No details on ticker format, validation, or range are provided.
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 'Basic metadata for one ticker' identifies the resource (ticker) and scope (single), but lacks an action verb (e.g., 'get', 'retrieve'). It distinguishes from `fq_list_tickers` (multiple tickers) but overlaps with `fq_get_basic_info`, so clarity is moderate.
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?
No guidance when to use this tool versus alternatives like `fq_get_basic_info` or `fq_get_equity_snapshot`. No when-not, prerequisites, or exclusions are mentioned.
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. Dates show when Glama detected each change.
26 tool updates
v0.2.1- First observed
fq_call_method - First observed
fq_detect_pattern - First observed
fq_get_basic_info - First observed
fq_get_equity_snapshot - First observed
fq_get_financial_ratios - First observed
fq_get_financial_statements - First observed
fq_get_icb_industries - First observed
fq_get_index_constituents - First observed
fq_get_market_breadth - First observed
fq_get_market_statistics - First observed
fq_get_money_flow_contribution - First observed
fq_get_price_history - First observed
fq_get_realtime_bid_ask - First observed
fq_get_rebalance - First observed
fq_get_rrg_analysis - First observed
fq_get_stock_prices - First observed
fq_get_technical_indicators - First observed
fq_get_valuation_timeseries - First observed
fq_list_ops - First observed
fq_list_tickers - First observed
fq_ping - First observed
fq_run_custom_analysis - First observed
fq_screen_stocks - First observed
fq_search_methods - First observed
fq_session_status - First observed
fq_ticker_info
TDQS
Some tools have overlapping purposes, such as fq_get_stock_prices and fq_get_price_history both providing OHLCV data, and fq_ticker_info and fq_get_basic_info both offering basic metadata. These overlaps could cause misselection by an agent.
All tools follow the consistent 'fq_verb_noun' pattern, using verbs like get, list, search, and screen. The naming is predictable and uniform across the entire set.
26 tools is appropriate for a comprehensive financial data API covering company info, prices, technical analysis, screening, market statistics, and more. The scope is well-balanced without being excessive.
The tool surface covers a wide range of financial data needs including basic info, price history, technical indicators, screening, market breadth, index constituents, and valuations. The inclusion of fq_call_method for custom methods further fills potential gaps.
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
Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.
The financial MCP for AI agents - 90+ financial tables, SEC filings, signals, alt-data.
Finnhub MCP — wraps Finnhub Stock API (finnhub.io)
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server providing comprehensive access to Finnhub financial market data API for AI assistants like Claude Desktop.1510MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for screening Indian stocks and mutual funds by wrapping screener.in and Morningstar India, enabling fundamental queries from Claude or Cursor.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes Finviz stock screening, fundamentals, news, and market data as tools for MCP clients like Claude Code and Claude Desktop.MIT
- AlicenseAqualityBmaintenanceModel Context Protocol (MCP) server for StoQuant that gives Claude and any MCP-compatible agent direct, read-only access to StoQuant's quant signals, ML predictions, screening, ownership, and macro data.4913MIT
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/luongndcoder/fiinquant-python-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server