sahmk-mcp
SAHMK MCP 서버
공식 배포: GitHub(
sahmk-sa/sahmk-mcp) 및 PyPI(sahmk-mcp)에서만 제공됩니다. 타사 포크에서 설치하지 마세요.
SAHMK용 공식 SAHMK MCP 서버 — Cursor 및 Claude Desktop과 같은 AI 에이전트에서 사우디 시장 데이터를 사용하세요.
이 MCP는 AI 에이전트를 위해 선별된 Sahmk 도구 세트를 노출하므로, 어시스턴트가 자연어로 사우디 시장을 조회할 수 있습니다.
도구
도구 | 용도 |
| 단일 주식 식별자(심볼, 이름 또는 별칭)에 대한 스냅샷 |
| 한 번의 호출로 여러 주식 식별자 비교 |
| 회사 디렉토리/심볼 검색(페이지네이션 포함) |
|
|
|
|
| 섹터 성과 스냅샷 |
| 회사 프로필 및 펀더멘털 |
| 재무제표 (Starter+ 요금제) |
| 계산된 재무 비율 (Starter/Pro 기능 상이) |
| 다중 심볼 정규화 비율/지표 비교 (Starter/Pro 한도 상이) |
| 배당 내역 및 수익률 데이터 (Starter+ 요금제) |
| 호가창 깊이(매수/매도 호가, 스프레드, 불균형) (권한 게이트 적용) |
| 최근 실시간 체결 내역/테이프 (Pro+ 요금제) |
| AI 생성 주식 이벤트 요약 (Pro+ 요금제) |
| 과거 OHLCV 데이터 |
Related MCP server: equivault-mcp
식별자 우선 계약
견적 도구의 정식 입력은
identifier및identifiers입니다.레거시 별칭
symbol및symbols는 호환성을 위해 계속 허용됩니다.프롬프트, 도구 호출 및 클라이언트 템플릿에서는 정식 키를 우선 사용하세요.
해석은 백엔드/SDK 기반입니다(이름, 별칭 및 심볼). MCP는 자체 심볼 맵을 유지하지 않습니다.
MCP vs SDK 사용 시점
MCP는 Cursor 및 Claude Desktop과 같은 도구에서 대화형 에이전트 워크플로에 사용하세요.
Python SDK는 스크립트, 자동화, 대시보드, 알림, 백테스트 및 애플리케이션 코드에 사용하세요.
SDK 저장소: sahmk-sa/sahmk-python
API 키 받기
sahmk.sa/developers에서 가입하세요.
대시보드 → API 키 → 키 생성으로 이동하세요.
키를 복사하세요(
shmk_live_또는shmk_test_로 시작).
시장 깊이 접근
get_depth는 권한 게이트가 적용됩니다. 개발자 대시보드에서 실시간/깊이 접근을 요청하세요:
필수 환경 변수
SAHMK_API_KEY는 모든 서버 실행(Claude Desktop, Cursor 및 직접 CLI 사용)에 필요합니다.
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현재 MCP-SDK 호환성(기본 호스트 api.sahmk.sa, 시장 깊이, 실시간 체결 및 이벤트 도구)을 위해 sahmk>=0.16.0이 필요합니다.
보안
API 키는 환경 변수(
SAHMK_API_KEY)로 설정하세요.키를 소스 제어에 커밋하거나 로그에 공유하지 마세요.
노출된 키는 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.index:TASI또는NOMU(NOMUC별칭은 허용되며 정규화됨).get_market_movers.type:gainers,losers,volume또는value.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.period및get_financials.statement_period: 둘 다 제공되면period가 우선합니다.get_financials는 선택적 전달 매개변수를 지원합니다:type,period,statement_period,history,metrics,result및include_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_ratios및compare_symbols는 최소meta만 포함합니다:period,metrics,warnings.분석 도구는
applied_profile,plan또는 소스 진단과 같은 백엔드/내부 필드를 노출하지 않습니다.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: 선택적 거래 측,buy,sell또는null중 하나.get_events.symbol: 선택적 정확한 거래소 심볼 필터. 생략하면 시장 전체 최근 이벤트.get_events.limit: 1~100 사이의 선택적 정수.get_historical.symbol: 정확한 거래소 심볼을 선호합니다. MCP는 가능한 경우 이름/별칭에 대해 SDK 기반 식별자 해석을 시도합니다.companies_list.market:TASI또는NOMU(NOMUC별칭은 허용되며 정규화됨).companies_list.limit: 0보다 큰 정수.companies_list.offset: 0보다 크거나 같은 정수.get_historical.interval:1d,1w,1m,30m또는60m.모호한 식별자는 사용 가능한 경우 후보와 재시도 안내와 함께
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=buy,sell또는null을 포함할 수 있습니다.최근 시장 이벤트:
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를 줄이세요.
이름 또는 심볼 조각으로 후보 검색:
companies_list(search="aramco")companies_list(search="2222")
선택적으로 시장별로 검색 범위 지정:
companies_list(search="acwa", market="NOMUC")(NOMUC는NOMU로 정규화됨)
results에서 심볼을 선택한 후 호출:get_quote(identifier="<symbol>")get_financials(symbol="<symbol>")get_dividends(symbol="<symbol>")get_historical(symbol="<symbol>")
페이지네이션 루프의 경우
total에 도달할 때까지offset을limit만큼 증가: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_financials 및 get_dividends는 Starter 이상에서 Sahmk API 액세스가 필요합니다. 현재 키에서 사용할 수 없는 경우 MCP는 기본 API 오류를 반환합니다.
참고: get_depth는 권한 게이트가 적용됩니다 — 액세스 요청. get_trades 및 get_events는 Pro+가 필요합니다. 현재 키에서 사용할 수 없는 경우 MCP는 API 오류를 표시합니다.
참고: 장중(intraday) 과거 구간(30m, 60m)은 플랜에 따라 제한될 수 있습니다. 현재 키에서 사용할 수 없는 경우 MCP는 API 오류(예: 403 PLAN_LIMIT)를 표시합니다.
릴리스 노트
0.8.1: 최소sahmkSDK 요구 사항을0.16.0으로 상향 조정.0.8.0:get_trades이벤트에 선택적side(buy/sell/null)를 추가하고, 이를 생략한 페이로드에 대해 하위 호환되는 출력을 제공.0.7.0: 기본 공개 개발자 API 호스트를api.sahmk.sa로 변경(sahmk>=0.15.0필요);app.sahmk.sa는SAHMK_BASE_URL을 통해 계속 지원.0.6.0:sahmk>=0.14.0필요; 최근 실시간 체결 내역(Pro+)을 위한get_trades추가.0.5.1: README에 market-depth 권한 요청 링크를 문서화.0.5.0:sahmk>=0.13.0필요;get_depth(호가창 래더) 및get_events(AI 이벤트 요약, Pro+) 추가.0.4.7: 공개get_financials도구 계약에서include_quality를 제거하고, 식별자 충돌 검사 전에 동등한 아랍-인도/ASCII 숫자 입력을 정규화하며, 안정적인 비율/기간 옵션을 위한 enum 선택기로 Glama 폼 UX를 개선.0.4.6: 이름/별칭 입력이 직접 심볼 조회에 실패할 때get_company및 심볼 우선 도구(get_financials,get_ratios,compare_symbols,get_dividends,get_historical)에 SDK 기반 식별자 폴백을 추가.0.4.5:sahmk>=0.11.0에 맞춤;get_historical.interval지원을30m/60m으로 확장; 장중(intraday) 플랜 제한 동작을 문서화.0.4.4: 문서: 공식 배포 채널(GitHub + PyPI만)을 명확히 함.0.4.3: MCP 출력 계약을 정렬: financialsmeta없음; analyticsmeta는period,metrics,warnings로 제한.0.4.2: analytics에 SDK 메서드 이름 호환성 폴백(get_ratios/ratios,compare_symbols/compare)을 추가.0.4.1: 패키지 종속성 및 런타임 버전 가드에서sahmk>=0.9.1을 요구.0.4.0: analytics 비율 및 비교 도구를 추가; financials 선택적 매개변수를 개선.
라이선스
MIT — LICENSE 참조
Available Tools
15 toolscompanies_listA
Discover listed companies and symbols. Use this first to find/validate symbols before quote/company calls.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (must be > 0). | |
| market | No | Optional market filter: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized). | |
| offset | No | Pagination offset (must be >= 0). | |
| search | No | Optional text search across symbol/company names for discovery. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | No | Metrics profile, e.g. 'core' or 'extended'. Default 'core'. | core |
| symbols | Yes | Symbols to compare as a list (preferred) or comma-separated string. Starter supports up to 3 symbols; Pro supports up to 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Stock identifier (symbol, Arabic/English name, or alias), e.g. '2222', 'أرامكو'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| levels | No | Optional number of book levels to request (1-20). Backend default is 5; entitlement may return fewer levels than requested. | |
| symbol | Yes | Requires 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Requires 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional max number of events to return (1-100). Backend default is typically 20. | |
| symbol | No | Optional exact exchange symbol filter. Omit for market-wide recent events. Example: '1120'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional financial view selector (e.g. statement family/profile returned by backend). | |
| period | No | Optional period selector: annual, quarterly, or auto. If both period and statement_period are provided, period takes precedence. | |
| result | No | Optional result shaping selector. Common values: series, latest, raw (backend-dependent). | |
| symbol | Yes | Requires 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'. | |
| history | No | Optional history window selector. Common values: latest, 1y, 3y, 5y, 10y, max (backend-dependent). | |
| metrics | No | Optional metrics profile selector. Common values: core, extended (backend-dependent). | |
| include_partial | No | Optionally include partial/incomplete statement periods when available. | |
| statement_period | No | Optional explicit statement period selector (annual, quarterly, or auto). Ignored when period is provided. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Requires 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_date | No | End date in YYYY-MM-DD format (default: today) | |
| interval | No | '1d' for daily, '1w' for weekly, '1m' for monthly, '30m' for 30-minute, or '60m' for 60-minute bars (default: '1d') | |
| from_date | No | Start date in YYYY-MM-DD format (default: 30 days ago) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Mover type: 'gainers', 'losers', 'volume', or 'value'. | |
| index | No | Optional market index: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized). | |
| limit | No | Optional number of results from 1 to 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Optional market index: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Legacy alias for identifier. Prefer 'identifier'. | |
| identifier | No | Stock identifier (preferred): symbol, Arabic/English name, or known alias, e.g. '2222', 'أرامكو', 'الراجحي'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | No | Legacy alias for identifiers. Prefer 'identifiers'. | |
| identifiers | No | List of stock identifiers (preferred): symbol, Arabic/English name, or alias, up to 50 (e.g. ['2222', 'سابك']). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Statement period for ratios. | annual |
| symbol | Yes | Requires 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'. | |
| history | No | History window for ratios. | latest |
| metrics | No | Metrics profile for ratios. | core |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Optional market index: 'TASI' or 'NOMU' (alias 'NOMUC' is accepted and normalized). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional max number of recent trade prints to return (1-200, newest first). Backend default is typically 50. | |
| symbol | Yes | Requires 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the 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.
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.
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.
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.
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.
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.
3 tool updates
v0.6.0- Added
get_depth - Added
get_events - Added
get_trades
2 tool updates
v0.4.6- Changed
get_financials8 fields changed- changed
Input schema / properties / history / descriptionPrevious value: -"Optional history window selector."New value: +"Optional history window selector. Common values: latest, 1y, 3y, 5y, 10y, max (backend-dependent)." - removed
Input schema / properties / include_qualityRemoved value: -{ - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optionally include quality indicators in response payload." -} - changed
Input schema / properties / metrics / descriptionPrevious value: -"Optional metrics profile selector."New value: +"Optional metrics profile selector. Common values: core, extended (backend-dependent)." - changed
Input schema / properties / period / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "annual", + "quarterly", + "auto" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / period / descriptionPrevious 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." - changed
Input schema / properties / result / descriptionPrevious value: -"Optional result shaping selector."New value: +"Optional result shaping selector. Common values: series, latest, raw (backend-dependent)." - changed
Input schema / properties / statement_period / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "annual", + "quarterly", + "auto" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / statement_period / descriptionPrevious 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."
- Changed
get_ratios6 fields changed- changed
Input schema / properties / history / descriptionPrevious value: -"History window for ratios. Default 'latest'."New value: +"History window for ratios." - added
Input schema / properties / history / enumAdded value: +[ + "latest", + "3y", + "5y", + "10y", + "max" +] - changed
Input schema / properties / metrics / descriptionPrevious value: -"Metrics profile, e.g. 'core' or 'extended'. Default 'core'."New value: +"Metrics profile for ratios." - added
Input schema / properties / metrics / enumAdded value: +[ + "core", + "extended" +] - changed
Input schema / properties / period / descriptionPrevious value: -"Statement period for ratios, e.g. 'annual' or 'quarterly'. Default 'annual'."New value: +"Statement period for ratios." - added
Input schema / properties / period / enumAdded value: +[ + "annual", + "quarterly" +]
12 tool updates
v0.4.5- First observed
companies_list - First observed
compare_symbols - First observed
get_company - First observed
get_dividends - First observed
get_financials - First observed
get_historical - First observed
get_market_movers - First observed
get_market_summary - First observed
get_quote - First observed
get_quotes - First observed
get_ratios - First observed
get_sectors
TDQS
Scored across 15 tools
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.
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.
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.
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
Related MCP Connectors
Official MCP server for subfeed.app — the cloud for agents. 15+ tools for AI agents to register, build, and deploy other agents. Zero human required. Start here: subfeed.app/skill.md
Official CoinMarketCap MCP server: real-time crypto prices, market cap, rankings and exchange data.
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Official MCP server for OmniDimension. Drive voice agents, dispatch calls, and run bulk campaigns.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn 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.1751PythonMIT

equivault-mcpofficial
AlicenseBqualityDmaintenanceOfficial 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.38191MIT- AlicenseAqualityCmaintenanceComprehensive MCP server for real-time stock, cryptocurrency, options, and fundamental analysis, including SEC filings and insider trading data.2633MIT
- AlicenseNot gradedqualityAmaintenanceOfficial 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.2MIT