Skip to main content
Glama

SAHMK MCP Server

Official Source

官方发行渠道: 仅限 GitHub(sahmk-sa/sahmk-mcp)和 PyPI(sahmk-mcp)。请勿从第三方分支安装。

面向 SAHMK 的官方 SAHMK MCP 服务器——在 Cursor 和 Claude Desktop 等 AI 智能体中使用沙特市场数据。

该 MCP 为 AI 智能体提供一组精选的 Sahmk 工具,使助手能够用自然语言查询沙特市场。

工具

工具

用途

get_quote

单个股票标识符(symbol、名称或别名)的快照

get_quotes

在一次调用中比较多个股票标识符

companies_list

带分页的公司目录/代码发现

get_market_summary

TASINOMU 的摘要

get_market_movers

gainerslosersvolumevalue 排名的领涨/领跌股

get_sectors

板块表现快照

get_company

公司概况与基本面

get_financials

财务报表 (Starter 及以上套餐)

get_ratios

计算得出的财务比率 (Starter/Pro 功能有所不同)

compare_symbols

多代码标准化比率/指标比较 (Starter/Pro 限制有所不同)

get_dividends

股息历史与收益率数据 (Starter 及以上套餐)

get_depth

订单簿深度(买卖盘阶梯、价差、失衡) (受权限控制)

get_trades

近期实时成交记录/行情带 (Pro 及以上套餐)

get_events

AI 生成的股票事件摘要 (Pro 及以上套餐)

get_historical

历史 OHLCV 数据

Related MCP server: equivault-mcp

标识符优先约定

  • 报价工具的标准输入为 identifieridentifiers

  • 为兼容性考虑,仍接受旧版别名 symbolsymbols

  • 在提示词、工具调用和客户端模板中优先使用标准键名。

  • 标识符解析由后端/SDK 支持(名称、别名和代码);MCP 不维护自己的代码映射表。

何时使用 MCP 与 SDK

  • 在 Cursor 和 Claude Desktop 等工具中,将 MCP 用于交互式智能体工作流。

  • Python SDK 用于脚本、自动化、仪表盘、警报、回测和应用程序代码。

SDK 仓库:sahmk-sa/sahmk-python

获取你的 API 密钥

  1. sahmk.sa/developers 注册

  2. 前往 Dashboard → API Keys → Create Key

  3. 复制你的密钥(以 shmk_live_shmk_test_ 开头)

市场深度访问权限

get_depth 受权限控制。请从开发者仪表盘申请实时/深度访问权限:

申请实时访问权限

必需的环境变量

所有服务器运行(Claude Desktop、Cursor 和直接 CLI 使用)都需要 SAHMK_API_KEY
在 MCP 客户端的 env 配置中设置它,或在运行 sahmk-mcp 之前导出它。

可选:SAHMK_BASE_URL 可覆盖默认的公共开发者 API 主机。

API 主机

默认 REST 基础 URL 为 https://api.sahmk.sa/api/v1/(与 sahmk SDK 0.16.0 保持一致)。
https://app.sahmk.sa/api/v1/ 仍是完全受支持的兼容主机——如果需要,请设置 SAHMK_BASE_URL

export SAHMK_BASE_URL="https://app.sahmk.sa/api/v1"

路径结构不变(/api/v1//api/v2//ws/v1/)。门户/仪表盘路由(/api/developers/*)仍位于 app.sahmk.sa,本 MCP 不使用这些路由。

安装

pip install sahmk-mcp

需要 sahmk>=0.16.0 以保持当前 MCP-SDK 兼容性(默认主机 api.sahmk.sa、市场深度、实时成交和事件工具)。

安全

  • 通过环境变量(SAHMK_API_KEY)设置 API 密钥。

  • 切勿将密钥提交到源代码管理或在日志中分享。

  • 如密钥泄露,请立即从你的 Sahmk 仪表盘轮换密钥。

配置

Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "sahmk": {
      "command": "sahmk-mcp",
      "env": {
        "SAHMK_API_KEY": "your_api_key"
      }
    }
  }
}

可选的兼容主机覆盖(app.sahmk.sa 上的相同路径):

{
  "mcpServers": {
    "sahmk": {
      "command": "sahmk-mcp",
      "env": {
        "SAHMK_API_KEY": "your_api_key",
        "SAHMK_BASE_URL": "https://app.sahmk.sa/api/v1"
      }
    }
  }
}

Cursor

添加到 .cursor/mcp.json

{
  "mcpServers": {
    "sahmk": {
      "command": "sahmk-mcp",
      "env": {
        "SAHMK_API_KEY": "your_api_key"
      }
    }
  }
}

可选的兼容主机覆盖:

{
  "mcpServers": {
    "sahmk": {
      "command": "sahmk-mcp",
      "env": {
        "SAHMK_API_KEY": "your_api_key",
        "SAHMK_BASE_URL": "https://app.sahmk.sa/api/v1"
      }
    }
  }
}

直接运行

export SAHMK_API_KEY="your_api_key"
sahmk-mcp

工具输入约束

  • get_market_summary.indexTASINOMU(接受 NOMUC 别名并会进行标准化)。

  • get_market_movers.typegainerslosersvolumevalue

  • get_market_movers.limit:1 到 50 的整数。

  • get_quote.identifier (首选):接受数字代码、阿拉伯语/英语公司名称或已知别名。

  • get_quote.symbol (旧版别名):为向后兼容而接受。

  • get_quotes.identifiers (首选):每个请求最多 50 个标识符。

  • get_quotes.symbols (旧版别名):为向后兼容而接受。

  • get_financials.symbol:优先使用精确的交易所代码;MCP 会尽可能尝试通过 SDK 对名称/别名进行标识符解析。

  • get_financials.periodget_financials.statement_period:如果同时提供,period 优先。

  • get_financials 支持可选的透传参数:typeperiodstatement_periodhistorymetricsresultinclude_partial

  • get_financials 响应以报表块为主,不包含 meta

  • get_ratios.symbol:优先使用精确的交易所代码;MCP 会尽可能尝试通过 SDK 对名称/别名进行标识符解析。

  • get_ratios.history:默认为 latest

  • get_ratios.period:默认为 annual

  • get_ratios.metrics:默认为 core

  • compare_symbols.symbols:代码列表(首选)或逗号分隔的字符串;MCP 会尽可能尝试通过 SDK 对名称/别名进行标识符解析。

  • compare_symbols.metrics:默认为 core

  • get_ratioscompare_symbols 仅包含最简 metaperiodmetricswarnings

  • 分析工具不暴露后端/内部字段,如 applied_profileplan 或来源诊断信息。

  • get_dividends.symbol:优先使用精确的交易所代码;MCP 会尽可能尝试通过 SDK 对名称/别名进行标识符解析。

  • get_depth.symbol:优先使用精确的交易所代码;MCP 会尽可能尝试通过 SDK 对名称/别名进行标识符解析。

  • get_depth.levels:可选的 1 到 20 整数(后端默认通常为 5;权限可能将上限设得低于请求值)。

  • get_trades.symbol:优先使用精确的交易所代码;MCP 会尽可能尝试通过 SDK 对名称/别名进行标识符解析。

  • get_trades.limit:可选的 1 到 200 整数(后端默认通常为 50;最新的在前)。

  • get_trades.events[].side:可选的成交方向,取值为 buysellnull 之一。

  • get_events.symbol:可选的精确交易所代码过滤器;省略则获取全市场近期事件。

  • get_events.limit:可选的 1 到 100 整数。

  • get_historical.symbol:优先使用精确的交易所代码;MCP 会尽可能尝试通过 SDK 对名称/别名进行标识符解析。

  • companies_list.marketTASINOMU(接受 NOMUC 别名并会进行标准化)。

  • companies_list.limit:大于 0 的整数。

  • companies_list.offset:大于或等于 0 的整数。

  • get_historical.interval1d1w1m30m60m

  • 存在歧义的标识符会引发 AMBIGUOUS_IDENTIFIER,并在可用时提供重试指引和候选列表。

  • 无效标识符和受套餐限制的请求会返回底层 API 错误。

工具调用示例

  • 公司目录搜索:companies_list(search="aramco")

  • 按市场别名标准化搜索公司目录:companies_list(search="acwa", market="NOMUC")

  • 公司目录分页:companies_list(search="bank", limit=50, offset=100)

  • 首选单报价调用:get_quote(identifier="أرامكو")

  • 旧版单报价调用:get_quote(symbol="2222")

  • 首选批量报价调用:get_quotes(identifiers=["سبكيم", "كيان"])

  • 旧版批量报价调用:get_quotes(symbols=["2222", "1120"])

  • 按精确代码获取财务报表:get_financials(symbol="1120")

  • 财务比率默认值:get_ratios(symbol="1120")

  • 财务比率高级用法:get_ratios(symbol="1120", history="5y", period="quarterly", metrics="extended")

  • 比较代码默认值:compare_symbols(symbols=["1120", "1180", "1010"])

  • 比较代码高级用法:compare_symbols(symbols=["1120", "1180", "1010", "2222"], metrics="extended")

  • 按精确代码获取股息:get_dividends(symbol="1120")

  • 按精确代码获取市场深度:get_depth(symbol="2222")

  • 带层级的市场深度:get_depth(symbol="2222", levels=10)

  • 按精确代码获取近期成交:get_trades(symbol="2222")

  • 带限制的近期成交:get_trades(symbol="2222", limit=20)

  • 成交事件方向是附加且可选的:每个 events[] 项可包含 side = buysellnull

  • 近期市场事件:get_events(limit=10)

  • 单个代码的事件:get_events(symbol="1120", limit=5)

  • 按精确代码获取历史数据:get_historical(symbol="1120", interval="1d")

  • 带显式每日日期范围参数的历史数据:get_historical(symbol="1120", from_date="2026-01-01", to_date="2026-03-31", interval="1d")

  • 按精确代码获取日内历史数据(受 API 密钥套餐限制):get_historical(symbol="1120", interval="60m")

  • 带显式日期范围参数的日内历史数据:get_historical(symbol="1120", from_date="2026-05-01", to_date="2026-05-31", interval="60m")

公司目录 / 代码发现

在仅接受代码的工具之前,先使用 companies_list 以减少无效代码导致的 404。

  1. 按名称或代码片段发现候选:

    • companies_list(search="aramco")

    • companies_list(search="2222")

  2. 可选地按市场限定发现范围:

    • companies_list(search="acwa", market="NOMUC")NOMUC 会被标准化为 NOMU

  3. results 中选择一个代码,然后调用:

    • get_quote(identifier="<symbol>")

    • get_financials(symbol="<symbol>")

    • get_dividends(symbol="<symbol>")

    • get_historical(symbol="<symbol>")

  4. 对于分页循环,按 limit 递增 offset,直到达到 total

    • companies_list(search="bank", limit=100, offset=0)

    • companies_list(search="bank", limit=100, offset=100)

    • 继续直到 offset >= total

MCP 使用指引示例

  • 用户:"سعر الراجحي" -> 调用 get_quote(identifier="الراجحي")

  • 追问:"قوائم الشركة" -> 如果之前的结果包含 resolved_instrument.symbol = "1120",请复用它并调用 get_financials(symbol="1120")

示例提示词

  • "给我一份 TASI 摘要和市场情绪。"

  • "给我按涨幅排名的 TASI 市场领涨股。"

  • "给我按成交额排名的 NOMU 市场领涨/领跌股。"

  • "显示板块表现。"

  • "按价格变动和净流动性比较 سابك、سبكيم 和 2222。"

  • "显示今天的 NOMU 摘要。"

  • "获取 2222 的财务报表。"

  • "获取 2222 的股息。"

  • "显示 2222 的订单簿/市场深度。"

  • "显示 2222 的最新成交。"

  • "最新的股票事件是什么?"

  • "获取 1120 从 2026-01-01 到 2026-03-31 的 1d 历史数据。"

  • "告诉我关于 الراجحي 及其板块的信息。"

注意:get_financialsget_dividends 需要 Starter 或更高版本的 Sahmk API 访问权限。如果当前密钥不可用,MCP 将返回底层 API 错误。 注意:get_depth 受权限控制 — 申请访问权限get_tradesget_events 需要 Pro+。如果当前密钥不可用,MCP 会显示 API 错误。 注意:日内历史数据间隔(30m60m)可能受套餐限制。如果当前密钥不可用,MCP 会显示 API 错误(例如 403 PLAN_LIMIT)。

发布说明

  • 0.8.1:将最低 sahmk SDK 版本要求提升至 0.16.0

  • 0.8.0:为 get_trades 事件添加可选的 side 字段(buy/sell/null),并为省略该字段的负载提供向后兼容的输出。

  • 0.7.0:默认公共开发者 API 主机 → api.sahmk.sa(需要 sahmk>=0.15.0);仍可通过 SAHMK_BASE_URL 支持 app.sahmk.sa

  • 0.6.0:需要 sahmk>=0.14.0;新增 get_trades 以获取最近的实时成交记录(Pro+)。

  • 0.5.1:在 README 中记录市场深度权限申请链接。

  • 0.5.0:需要 sahmk>=0.13.0;新增 get_depth(订单簿深度)和 get_events(AI 事件摘要,Pro+)。

  • 0.4.7:从公共 get_financials 工具契约中移除 include_quality,在标识符冲突检查前规范化等效的阿拉伯-印度/ASCII 数字输入,并通过枚举选择器改进 Glama 表单用户体验,以提供稳定的比率/期间选项。

  • 0.4.6:为 get_company 和符号优先工具(get_financialsget_ratioscompare_symbolsget_dividendsget_historical)添加基于 SDK 的标识符回退,当名称/别名输入无法直接查找符号时使用。

  • 0.4.5:对齐到 sahmk>=0.11.0;将 get_historical.interval 的支持扩展到 30m/60m;记录日内套餐限制行为。

  • 0.4.4:文档:明确官方分发渠道(仅 GitHub + PyPI)

  • 0.4.3:对齐 MCP 输出契约:财务数据无 meta;分析数据的 meta 仅限于 periodmetricswarnings

  • 0.4.2:为分析功能添加 SDK 方法名兼容回退(get_ratios/ratioscompare_symbols/compare)。

  • 0.4.1:在包依赖和运行时版本检查中要求 sahmk>=0.9.1

  • 0.4.0:添加分析比率和比较工具;增强财务数据的可选参数。

许可证

MIT — 参见 LICENSE

Available Tools

15 tools
companies_listA

Discover listed companies and symbols. Use this first to find/validate symbols before quote/company calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (must be > 0).
marketNoOptional market filter: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized).
offsetNoPagination offset (must be >= 0).
searchNoOptional text search across symbol/company names for discovery.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states 'Discover listed companies and symbols' without mentioning pagination, filtering behavior, or response format, which is insufficient for a list tool with 4 optional parameters.

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

Conciseness5/5

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

Two sentences delivering purpose and usage guidance without redundancy. Front-loaded with key action and context.

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

Completeness3/5

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

Despite an output schema existing, the description lacks details on pagination and result structure. It provides minimal context for a tool with 4 optional parameters, but is not critically incomplete.

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

Parameters3/5

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

Schema coverage is 100% with parameter descriptions already present. The description adds no extra meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses specific verb 'Discover' and resource 'listed companies and symbols', clearly distinguishing from siblings like get_company (single company) and get_quote (price data).

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

Usage Guidelines5/5

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

Explicitly instructs to 'Use this first to find/validate symbols before quote/company calls', providing clear when-to-use context and implicit exclusion of other tools.

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

compare_symbolsB

Compare multiple Saudi-listed companies using normalized financial ratios and key metrics. Starter supports up to 3 symbols; Pro supports up to 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricsNoMetrics profile, e.g. 'core' or 'extended'. Default 'core'.core
symbolsYesSymbols to compare as a list (preferred) or comma-separated string. Starter supports up to 3 symbols; Pro supports up to 10.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided; description does not mention read-only nature, data freshness, or error behavior. Only plan limits are mentioned, which is minimal behavioral context.

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

Conciseness5/5

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

Two sentences, efficient, no wasted words.

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

Completeness4/5

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

With output schema present, the description adequately covers purpose and parameter constraints. Could mention example or typical use case but is sufficient.

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

Parameters3/5

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

Schema covers both parameters fully. Description repeats plan limits already in schema but adds no new parameter meaning.

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

Purpose5/5

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

Clearly states the tool compares multiple Saudi-listed companies using normalized financial ratios. Mentions plan limitations, distinguishing it from single-company tools like get_ratios.

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

Usage Guidelines2/5

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

No explicit guidance on when to use vs alternatives. Does not compare with siblings like get_ratios or get_quotes.

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

get_companyA

Get a company profile for a Saudi stock, including sector, industry, fundamentals, valuation, technical indicators, and analyst consensus. Use this when the user asks about a company's profile, key metrics, or detailed information.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesStock identifier (symbol, Arabic/English name, or alias), e.g. '2222', 'أرامكو'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits like read-only nature, authentication requirements, or rate limits. The tool likely performs a safe read, but the description does not confirm this, leaving gaps.

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

Conciseness5/5

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

Two sentences with no unnecessary words: first describes output, second provides usage guidance. It is front-loaded and efficiently uses space.

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

Completeness4/5

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

An output schema exists (not shown), so return value documentation is covered. The description lists key data categories (sector, fundamentals, etc.), giving good context. Could optionally mention that it returns aggregate data, but overall complete.

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

Parameters3/5

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

The input schema has 100% coverage with a clear description for 'identifier' (symbol, name, alias). The tool description does not add extra parameter meaning beyond what the schema already provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool retrieves a company profile for a Saudi stock, listing included data types (sector, industry, fundamentals, etc.). It distinguishes itself from sibling tools like get_historical (historical data) or get_dividends (dividends only) by being comprehensive.

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

Usage Guidelines4/5

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

Explicitly directs when to use: 'when the user asks about a company's profile, key metrics, or detailed information.' While it doesn't list alternatives for specific queries (e.g., dividends), the sibling list helps agents infer.

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

get_depthA

Get market depth (order book) for a Saudi stock. Use this for bid/ask ladder, spread, imbalance, and liquidity at the top of book. Requires exact exchange symbol. Plan/entitlement-gated by the API.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelsNoOptional number of book levels to request (1-20). Backend default is 5; entitlement may return fewer levels than requested.
symbolYesRequires exact exchange symbol. If the user provides a company name, first use companies_list. If a previous tool result included resolved_instrument.symbol, reuse that symbol. Example: '2222'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that the tool is 'Plan/entitlement-gated by the API' and that the symbol must be exact, but it does not explicitly confirm the operation is read-only or describe error behavior. The entitlement gating adds some value beyond the schema, which only mentions level reduction, not overall access.

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

Conciseness5/5

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

The description is compact and front-loaded with the core purpose. Each sentence adds value: purpose, use case, prerequisite, and gating. No wasted words.

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

Completeness4/5

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

Given the output schema exists and both parameters are fully documented, the description covers the essential aspects: what it does, when to use it, and access restrictions. It does not address edge cases like symbol not found, but the schema's suggestion to use companies_list partially fills that gap. Overall, it is nearly complete for a 2-parameter read tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description repeats 'Requires exact exchange symbol' which is already in the schema, and does not add new meaning to either parameter. The levels parameter is adequately documented in the schema.

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

Purpose5/5

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

The description clearly states 'Get market depth (order book) for a Saudi stock', providing a specific verb and resource. It distinguishes itself from siblings like get_quote (price) and get_trades (trades) by focusing on the order book.

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

Usage Guidelines4/5

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

It explicitly says 'Use this for bid/ask ladder, spread, imbalance, and liquidity at the top of book' and mentions the prerequisite 'Requires exact exchange symbol'. It does not mention when not to use or name alternatives, but the guidance is clear and actionable.

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

get_dividendsA

Get company dividend history and yield data. Use this when the user asks for dividends or payout history. Requires exact exchange symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesRequires exact exchange symbol. If the user provides a company name, first use companies_list. If a previous tool result included resolved_instrument.symbol, reuse that symbol. Example: '1120'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only mentions the requirement for an exact exchange symbol, but omits other important aspects like data freshness, error handling, or output behavior.

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

Conciseness5/5

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

The description is two sentences with essential information, no wasted words. It is front-loaded with the purpose and usage guidance.

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

Completeness3/5

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

For a dividend history tool with an output schema present, the description is minimally adequate. It lacks details on return format, pagination, or date scope, but the presence of the output schema mitigates the need for some of that.

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

Parameters3/5

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

The input schema has 100% coverage with a detailed description for the 'symbol' parameter. The tool description adds no additional parameter semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get company dividend history and yield data', specifying the verb and resource. It distinguishes from sibling tools like get_quote and get_financials, which focus on other data.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this when the user asks for dividends or payout history', providing a clear when-to-use context. However, it does not mention when not to use or suggest alternatives.

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

get_eventsA

Get AI-generated stock event summaries (Pro+ plan). Use this for recent corporate/news-style events with type, importance, and sentiment. Optionally filter by exact exchange symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional max number of events to return (1-100). Backend default is typically 20.
symbolNoOptional exact exchange symbol filter. Omit for market-wide recent events. Example: '1120'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the burden for disclosure. It adds useful context: events are AI-generated, require Pro+ plan, and can be filtered by exchange symbol. This goes beyond a bare 'get events' but could still mention pagination or defaults; however, the essential behaviors are clear.

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

Conciseness5/5

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

Three concise sentences, front-loaded with the primary purpose. Each sentence earns its place: what it does, when to use, and how to filter. No redundancy or fluff.

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

Completeness4/5

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

Given the tool's simplicity (2 optional params, output schema present) and the sibling set, the description is nearly complete. It covers purpose, use case, and optional filtering. It could add an explicit alternative or exclusion, but the provided information is sufficient for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context for the symbol parameter by specifying 'exact exchange symbol' and explains that omitting it gives market-wide events. The limit parameter is left to the schema, but the description adequately supports the most common usage.

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

Purpose5/5

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

The description clearly states the tool retrieves 'AI-generated stock event summaries' with specific attributes (type, importance, sentiment). It distinguishes itself from sibling quote and market data tools by focusing on corporate/news events.

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

Usage Guidelines4/5

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

The description explicitly says to use it 'for recent corporate/news-style events' and notes the Pro+ plan requirement. It does not explicitly list excluded use cases or alternatives, but the context and sibling tool names make it evident when this tool is appropriate.

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

get_financialsB

Get company financial statements and key financial data. Use this for income statement, balance sheet, and cash flow requests. Requires exact exchange symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOptional financial view selector (e.g. statement family/profile returned by backend).
periodNoOptional period selector: annual, quarterly, or auto. If both period and statement_period are provided, period takes precedence.
resultNoOptional result shaping selector. Common values: series, latest, raw (backend-dependent).
symbolYesRequires exact exchange symbol. If the user provides a company name, first use companies_list. If a previous tool result included resolved_instrument.symbol, reuse that symbol. Example: '1120'.
historyNoOptional history window selector. Common values: latest, 1y, 3y, 5y, 10y, max (backend-dependent).
metricsNoOptional metrics profile selector. Common values: core, extended (backend-dependent).
include_partialNoOptionally include partial/incomplete statement periods when available.
statement_periodNoOptional explicit statement period selector (annual, quarterly, or auto). Ignored when period is provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only mentions the symbol requirement and implicitly that the tool is a read operation, but does not describe error handling, rate limits, or the nature of the response. The lack of detail on optional parameters' behavior (e.g., what happens if type or metrics are omitted) is a significant gap.

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

Conciseness4/5

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

The description is three sentences long and front-loaded with the core purpose. It is concise with no wasted words, but could benefit from additional structure (e.g., bullet points) to improve scanability.

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

Completeness3/5

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

While an output schema exists (reducing the need to describe return values), the tool has 8 parameters with many optional combinations. The description provides only high-level purpose, leaving the agent to infer when to use specific parameters. Given the tool's complexity, the description is marginally adequate but not fully complete.

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

Parameters3/5

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

The input schema has 100% description coverage, so the baseline is 3. The description adds minimal value beyond the schema, merely reinforcing that the symbol must be exact. It does not explain how the optional parameters (type, period, result, etc.) affect the output or provide context beyond their schema descriptions.

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

Purpose4/5

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

The description clearly states the tool retrieves financial statements (income, balance sheet, cash flow) and key financial data. It distinguishes itself from sibling tools like get_ratios and get_dividends by focusing on core statements, but does not explicitly contrast them, which prevents a perfect score.

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

Usage Guidelines4/5

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

The description specifies when to use this tool ('for income statement, balance sheet, and cash flow requests') and includes a key prerequisite ('Requires exact exchange symbol'). It also hints at fallback behavior (use companies_list for company names), but lacks explicit when-not-to-use guidance or alternatives.

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

get_historicalA

Get historical OHLCV price data for a Saudi stock over a date range. Use this when the user asks for past prices, price trends, or chart-style historical data.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesRequires exact exchange symbol. If the user provides a company name, first use companies_list. If a previous tool result included resolved_instrument.symbol, reuse that symbol. Example: '1120'.
to_dateNoEnd date in YYYY-MM-DD format (default: today)
intervalNo'1d' for daily, '1w' for weekly, '1m' for monthly, '30m' for 30-minute, or '60m' for 60-minute bars (default: '1d')
from_dateNoStart date in YYYY-MM-DD format (default: 30 days ago)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It describes the operation as data retrieval, implying read-only, but does not mention any behavioral aspects like authentication, rate limits, or error handling. This is adequate for a simple fetch operation, but lacks detail for full transparency.

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

Conciseness5/5

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

Two sentences, no fluff, front-loaded with the core function and use case. Every sentence adds value.

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

Completeness5/5

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

With output schema present and good schema parameter descriptions, the tool description is complete. It explains what the tool does and when to use it effectively for a data retrieval tool.

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

Parameters3/5

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

All four parameters have descriptions in the input schema (100% coverage). The tool-level description does not add additional meaning beyond the schema, meeting the baseline. The schema descriptions are sufficiently detailed (format, defaults, example).

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

Purpose5/5

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

Description clearly states it gets historical OHLCV price data for a Saudi stock over a date range, and explicitly points to use cases like past prices, trends, or chart data. This distinguishes it from related tools like get_quote or get_financials.

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

Usage Guidelines4/5

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

Description explicitly says to use when user asks for past prices or chart data. It doesn't specify when not to use or name alternatives, but the context is clear given sibling tools like get_quote for current prices.

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

get_market_moversA

Get market movers in one curated endpoint. Use this for top gainers, top losers, highest volume leaders, or highest value leaders. Returns a stable schema: type, index, count, items.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesMover type: 'gainers', 'losers', 'volume', or 'value'.
indexNoOptional market index: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized).
limitNoOptional number of results from 1 to 50.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It notes the output schema is stable and lists fields, but does not mention read-only nature, authentication needs, or rate limits. Adequate but not exhaustive.

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

Conciseness5/5

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

The description is extremely concise: two sentences. The first sentence states the tool's purpose, the second provides usage guidance and output schema. No wasted words.

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

Completeness4/5

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

Given the presence of an output schema and 100% parameter coverage, the description is largely complete. It could optionally mention the default limit or index behavior, but the core information is present.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds no parameter information beyond what the schema already provides (e.g., types, index values). No extra semantics.

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

Purpose5/5

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

The description clearly states the tool retrieves market movers, a specific resource, and lists explicit use cases (top gainers, losers, volume, value leaders). It distinguishes itself from sibling tools which focus on individual symbols, sectors, or quotes.

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

Usage Guidelines5/5

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

The description explicitly says 'Use this for top gainers, top losers, highest volume leaders, or highest value leaders,' providing clear guidance on when to employ this tool versus siblings.

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

get_market_summaryA

Get the current Saudi market summary including TASI index level, change, market direction, and advancing/declining stock counts. Use this for questions about the overall market today.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoOptional market index: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool returns summary data but does not explicitly state it is a read-only operation or address any side effects. The behavior is implied but not fully transparent.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose and components, followed by a usage guide. No waste; every sentence earns its place.

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

Completeness4/5

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

The description is complete for a simple summary tool, covering input and output components. An output schema exists, so return values are documented elsewhere. Could mention data freshness (e.g., real-time) but is adequate.

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

Parameters3/5

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

Schema coverage is 100% and the schema already describes the optional 'index' parameter with valid values. The description adds no additional meaning beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'current Saudi market summary' with specific included components (TASI index level, change, direction, advancing/declining counts). It distinguishes from sibling tools like get_quote or get_company which focus on individual stocks.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this for questions about the overall market today', providing clear context. It does not mention when not to use or explicitly name alternatives, but the use case is clearly defined.

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

get_quoteA

Get a real-time quote for a Saudi stock. Use this when the user asks for the current price, change, bid/ask, or trading activity of one stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNoLegacy alias for identifier. Prefer 'identifier'.
identifierNoStock identifier (preferred): symbol, Arabic/English name, or known alias, e.g. '2222', 'أرامكو', 'الراجحي'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries full responsibility. It indicates a non-destructive read operation ('Get a real-time quote'), which is adequate, but it does not elaborate on any specific behavioral aspects such as data freshness or limitations.

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

Conciseness5/5

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

Two sentences with no unnecessary 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.

Completeness4/5

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

The description, combined with the existing output schema and sibling context, provides sufficient completeness for a simple one-stock quote tool. It could mention market hour restrictions, but it is not essential.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters having detailed descriptions. The tool description adds little beyond the schema, which is acceptable. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool gets a real-time quote for a Saudi stock and specifies the kind of information it returns (price, change, bid/ask, trading activity). It is sufficiently distinguishable from siblings like get_quotes (plural) and get_historical (time series).

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

Usage Guidelines4/5

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

Explicitly advises when to use: when user asks for current price, change, bid/ask, or trading activity of one stock. This provides clear context for selection among siblings, though it does not explicitly state when not to use.

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

get_quotesA

Get real-time quotes for multiple Saudi stocks in one call. Use this when the user wants to compare several stocks or asks for prices of more than one symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsNoLegacy alias for identifiers. Prefer 'identifiers'.
identifiersNoList of stock identifiers (preferred): symbol, Arabic/English name, or alias, up to 50 (e.g. ['2222', 'سابك']).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It only mentions 'real-time' and 'in one call', but lacks details on data freshness limits, error handling, or that it supports up to 50 identifiers. The description is insufficient given the absence of annotations.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the main purpose. Every word adds value, and there is no extraneous information.

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

Completeness3/5

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

An output schema exists, so return values need not be explained. However, the description omits key practical details like the maximum number of symbols (50) and potential differences between the two parameter options. It is adequate but not thorough.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents both parameters. The description adds no extra meaning beyond what the schema provides; it does not explain the distinction between 'identifiers' and 'symbols' or the accepted formats.

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

Purpose5/5

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

The description clearly states the tool gets real-time quotes for multiple Saudi stocks, with a specific verb and resource. It implicitly distinguishes from 'get_quote' (single) and other sibling tools by emphasizing batch retrieval.

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

Usage Guidelines4/5

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

The second sentence explicitly tells when to use it: 'when the user wants to compare several stocks or asks for prices of more than one symbol.' It provides clear context, though it doesn't mention explicit alternatives or when not to use.

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

get_ratiosA

Get calculated financial ratios for one Saudi-listed company. Starter returns latest annual core ratios; Pro supports history, quarterly, and extended metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoStatement period for ratios.annual
symbolYesRequires exact exchange symbol. If the user provides a company name, first use companies_list. If a previous tool result included resolved_instrument.symbol, reuse that symbol. Example: '1120'.
historyNoHistory window for ratios.latest
metricsNoMetrics profile for ratios.core

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries full burden for behavioral disclosure. It reveals tier-based limitations (Starter vs Pro), which parameters (history, period, metrics) are affected, and the scope of data (latest vs history, core vs extended). This is useful beyond the schema.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence states the primary purpose, and the second adds tier differentiation. Front-loaded and efficient.

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

Completeness4/5

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

Given the presence of an output schema (not shown) which likely details the return structure, the description adequately covers the tool's purpose, scope, and tier constraints. Could mention that specific ratio types are not listed, but the schema handles that.

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

Parameters3/5

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

Schema coverage is 100% with enums and descriptions for all four parameters. The description adds tier context but does not repeat or enhance param details. Baseline 3 is appropriate as the schema already does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool gets calculated financial ratios for one Saudi-listed company, specifying the region and constraint to a single company. It distinguishes between Starter and Pro tiers, indicating the scope of data available.

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

Usage Guidelines3/5

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

The description provides context about Starter vs Pro capabilities but does not explicitly guide when to use this tool over siblings like get_financials or get_historical. Usage is implied but not differentiated from alternatives.

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

get_sectorsA

Get sector performance for the Saudi market. Use this when the user asks for sector-level market moves or a sector snapshot. Returns a stable schema: index, count, items.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoOptional market index: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry full behavioral transparency. It mentions 'Returns a stable schema: index, count, items' and explains the normalization of 'NOMUC' alias, adding some context. However, it does not disclose whether the operation is read-only, what happens on errors, or describe the return structure in detail.

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

Conciseness5/5

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

The description is three sentences long, front-loading the purpose and usage. Every sentence adds value: the first states purpose, the second gives usage guidance, the third describes the return schema. No wasted words.

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

Completeness4/5

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

Given the tool has only one optional parameter and an output schema (mentioned but not detailed), the description provides adequate context. However, it could briefly explain what 'index, count, items' represent to improve completeness for an agent.

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

Parameters4/5

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

All parameters are documented in the schema (100% coverage). The description adds extra context beyond the schema, such as the normalization of 'NOMUC' to 'NOMU' and the stable return schema structure. This enhances understanding of parameter behavior.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get sector performance for the Saudi market.' It identifies the specific resource (sector performance) and action (get), distinguishing it from sibling tools like get_market_summary or get_market_movers which deal with broader market data.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this when the user asks for sector-level market moves or a sector snapshot,' providing clear context for when to invoke this tool. While it does not list exclusions or alternatives, the guidance is sufficient for a straightforward tool.

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

get_tradesA

Get recent live trade prints for a Saudi stock (Pro+ plan). Use this for the trade tape: individual executions with price, quantity, value, and a short summary of recent activity. Requires exact exchange symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional max number of recent trade prints to return (1-200, newest first). Backend default is typically 50.
symbolYesRequires exact exchange symbol. If the user provides a company name, first use companies_list. If a previous tool result included resolved_instrument.symbol, reuse that symbol. Example: '2222'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosing behavioral traits. It discloses an access restriction ('Pro+ plan'), the real-time nature ('live'), and a critical input constraint ('exact exchange symbol'). While it doesn't address rate limits or error handling, these are less critical for a read-only trade tape tool, and the description offers meaningful context beyond the schema.

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

Conciseness5/5

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

The description is three direct sentences, front-loaded with the primary purpose and immediately followed by use-case and constraint. Every sentence earns its place, with no filler or repetition.

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

Completeness4/5

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

The description covers the essential context: purpose, target audience (Saudi stocks), plan requirement, output composition (individual executions and summary), and a key usage prerequisite. An output schema exists, so detailed return fields are documented elsewhere. Minor gaps include no mention of rate limits or potential errors, but overall the description is sufficient for tool selection.

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

Parameters3/5

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

The input schema descriptions already provide full coverage for both parameters, including the exact-symbol requirement and an example ('2222'). The main description repeats 'Requires exact exchange symbol' but does not add new semantic meaning beyond the schema. Therefore, it does not elevate above the baseline.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb ('Get') and resource ('recent live trade prints for a Saudi stock'), and elaborates with 'trade tape: individual executions with price, quantity, value'. This distinguishes it from sibling tools like get_quote, which provides a single price snapshot, and get_depth, which might show order book depth.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this for the trade tape', providing clear context for when to invoke this tool. It also highlights a key prerequisite ('Requires exact exchange symbol'), guiding the agent to resolve user-provided company names first. However, it does not mention alternatives or exclude cases where other tools would be more appropriate.

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

Tool Schema Changelog

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

  1. 3 tool updatesv0.6.0
    • Addedget_depth
    • Addedget_events
    • Addedget_trades
  2. 2 tool updatesv0.4.6
    • Changedget_financials8 fields changed
      • changedInput schema / properties / history / description
        Previous value: -"Optional history window selector."New value: +"Optional history window selector. Common values: latest, 1y, 3y, 5y, 10y, max (backend-dependent)."
      • removedInput schema / properties / include_quality
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Optionally include quality indicators in response payload."
        -}
      • changedInput schema / properties / metrics / description
        Previous value: -"Optional metrics profile selector."New value: +"Optional metrics profile selector. Common values: core, extended (backend-dependent)."
      • changedInput schema / properties / period / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "annual",
        +      "quarterly",
        +      "auto"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / period / description
        Previous value: -"Optional period selector. If both period and statement_period are provided, period takes precedence."New value: +"Optional period selector: annual, quarterly, or auto. If both period and statement_period are provided, period takes precedence."
      • changedInput schema / properties / result / description
        Previous value: -"Optional result shaping selector."New value: +"Optional result shaping selector. Common values: series, latest, raw (backend-dependent)."
      • changedInput schema / properties / statement_period / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "annual",
        +      "quarterly",
        +      "auto"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / statement_period / description
        Previous value: -"Optional explicit statement period selector. Ignored when period is provided."New value: +"Optional explicit statement period selector (annual, quarterly, or auto). Ignored when period is provided."
    • Changedget_ratios6 fields changed
      • changedInput schema / properties / history / description
        Previous value: -"History window for ratios. Default 'latest'."New value: +"History window for ratios."
      • addedInput schema / properties / history / enum
        Added value: +[
        +  "latest",
        +  "3y",
        +  "5y",
        +  "10y",
        +  "max"
        +]
      • changedInput schema / properties / metrics / description
        Previous value: -"Metrics profile, e.g. 'core' or 'extended'. Default 'core'."New value: +"Metrics profile for ratios."
      • addedInput schema / properties / metrics / enum
        Added value: +[
        +  "core",
        +  "extended"
        +]
      • changedInput schema / properties / period / description
        Previous value: -"Statement period for ratios, e.g. 'annual' or 'quarterly'. Default 'annual'."New value: +"Statement period for ratios."
      • addedInput schema / properties / period / enum
        Added value: +[
        +  "annual",
        +  "quarterly"
        +]
  3. 12 tool updatesv0.4.5
    • First observedcompanies_list
    • First observedcompare_symbols
    • First observedget_company
    • First observedget_dividends
    • First observedget_financials
    • First observedget_historical
    • First observedget_market_movers
    • First observedget_market_summary
    • First observedget_quote
    • First observedget_quotes
    • First observedget_ratios
    • First observedget_sectors

TDQS

A3.9/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have clearly distinct purposes, with clear separation between quotes, market-level data, company fundamentals, ratios, and market depth. Minor overlap exists between get_company, get_financials, and get_ratios, but descriptions generally guide selection well.

Naming Consistency4/5

The dominant pattern is get_<resource>, which is consistent and predictable. compare_symbols and companies_list break the pattern but are still readable and clear enough to not cause confusion.

Tool Count5/5

At 15 tools, the set is well-scoped for a market-data server. Each tool covers a distinct data area such as quotes, movers, sectors, company profiles, financials, depth, trades, and historical data, so every tool earns its place.

Completeness5/5

The tool surface is comprehensive for read-only Saudi market data, covering discovery via companies_list, real-time quotes, market summaries, movers, sectors, company details, financials, ratios, dividends, order book depth, trades, events, and historical data. No major dead ends are apparent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that provides comprehensive financial insights and analysis by leveraging real-time market data, news, and advanced analytics for stocks, options, financial statements, and economic indicators.
    17
    51
    Python
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Official MCP server for EquiVault — AI-powered equity research for Claude. 38 tools covering company fundamentals, financials, ratios, screening, peer comparison, investment narrative, signals intelligence, alerts, briefs, portfolio analytics, insider transactions, and earnings quality. Tier-aware with upgrade prompts. Install: npx equivault-mcp.
    38
    19
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Comprehensive MCP server for real-time stock, cryptocurrency, options, and fundamental analysis, including SEC filings and insider trading data.
    26
    33
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Official MCP server for the FinancialReports API. Provides direct access to regulatory filings, financial data, and corporate information from listed companies worldwide via 15 curated tools.
    2
    MIT