Skip to main content
Glama
hasancagrigungor

kapmcp

kapmcp

Türkçe

kapmcp, Borsa İstanbul için KAP bildirimlerini ve Yahoo Finance piyasa verilerini MCP uyumlu uygulamalara sunan bir Python sunucusudur. Resmî MKK VYK API üzerinden şirket bilgilerini, bildirim içeriklerini, finansal raporları, ek belgeleri ve fon sicilini getirir. Yahoo Finance üzerinden fiyat, geçmiş fiyat, finansal tablo, oran, analist tahmini ve haber verilerine erişim sağlar.

25 salt okunur araç sunar. Verileri yapılandırılmış JSON olarak döndürür; finansal oranları, büyümeyi ve teknik göstergeleri tanımlı formüllerle hesaplar. Yatırım önerisi, sıralama veya fiyat tahmini üretmez. Yerel kullanım için stdio, uzak bağlantılar için Streamable HTTP destekler.

Kurulum ve çalıştırma

Python 3.10 veya üzeri gerekir:

pip install kap-mcp-server
kapmcp

kap-mcp komutu da aynı sunucuyu başlatır. Yahoo Finance araçları ek anahtar gerektirmez. KAP araçları için MKK tarafından sağlanan API anahtarı ve MKK tarafında IP yetkilendirmesi gerekir:

export KAP_API_KEY="MKK_API_ANAHTARINIZ"
kapmcp

Uzak bağlantı için:

kapmcp --transport streamable-http --port 8000 --stateless

Yerel uç nokta http://127.0.0.1:8000/mcp olur. Dış erişim için HTTPS ve uygun erişim denetimi sağlayan bir ters vekil kullanın.

MCP istemci ayarı

mcpServers yapılandırmasını destekleyen istemciler için:

{
  "mcpServers": {
    "kap": {
      "command": "kapmcp",
      "env": { "KAP_API_KEY": "MKK_API_ANAHTARINIZ" }
    }
  }
}

İstemci komutu bulamazsa command alanında sanal ortamınızdaki çalıştırılabilir dosyanın tam yolunu kullanın.

Neler yapabilir?

Alan

Araçlar

Durum ve kodlar

kap_status, get_reference_codes

Şirket bilgileri

search_companies, get_company

Bildirimler

search_disclosures, get_disclosure, search_disclosure_data, get_blocked_disclosures

Ek belgeler

get_disclosure_documents, get_document_text, search_documents

Finansallar

get_financials, get_metric_history, get_financial_ratios, get_growth, compare_financials

Hak kullanımları ve haberler

get_corporate_actions, get_company_news

Piyasa verileri

get_quote, get_price_history, get_market_overview, get_price_reaction, get_analyst_estimates

Zaman çizelgesi ve fonlar

get_company_timeline, search_funds

Örnek istekler: “THYAO'nun son bildirimlerini getir”, “ASELS'in sözleşme açıklamalarını bul”, “THYAO ve PGSUS gelirlerini karşılaştır”, “Bu bildirimin ekindeki kapasite bilgisini ara”.

Yapılandırma

Değişken

Açıklama / varsayılan

KAP_API_KEY

MKK API anahtarı; yalnızca KAP araçları için zorunlu

KAP_API_SECRET

MKK test geçidi için

KAP_TEST_MODE

1: test geçidini kullan

KAP_TIMEOUT

30 saniye

KAP_CACHE_TTL

600 saniye

KAP_MAX_CONCURRENCY

4 eşzamanlı KAP isteği

KAP_MAX_SCAN_PAGES

Çağrı başına en fazla 400 indeks penceresi

KAP_MAX_RESULT_CHARS

Araç sonucu için 60000 karakter sınırı

YAHOO_TIMEOUT

45 saniye

KAP_LOG_LEVEL

Günlük seviyesi; günlükler stderr'e yazılır

Sınırlar

KAP liste API'si indeks pencereleriyle çalışır. Tarih ve metin aramaları çok sayıda sayfa tarayabilir; scan_complete ve next_cursor alanlarıyla sonucun tamamlanıp tamamlanmadığını kontrol edin. Bildirim içeriğinde arama için query_scope="content" kullanılır.

Yahoo verilerinde eksik dönemler veya farklı raporlama para birimleri olabilir. Resmî KAP finansalları disclosure_id ile tek rapordan okunabilir; bankalar ve sigorta şirketleri için alan eşlemesi kısmi olabilir. Taranmış PDF'ler OCR olmadan metne dönüştürülemez. KAP hak kullanım tutarları bildirim gövdesinden ayrıştırılmaz; ilgili bildirimin bağlantısı döndürülür.

Geliştirme ve lisans

pip install -e ".[dev]"
pytest

MIT lisansı. Geliştirici: Çağrı Güngör. Kaynak kod.


Related MCP server: YFinance MCP Server

English

MCP server for Borsa İstanbul: official KAP disclosures (Kamuyu Aydınlatma Platformu, via the MKK VYK API) plus Yahoo Finance prices, normalised financial statements, ratios, analyst data and news. Works with compatible MCP clients over stdio or Streamable HTTP.

Design principle. The server is a data + deterministic-computation layer: it fetches, normalises, filters, paginates, computes ratios/growth and returns structured JSON with source / source_url on every result. It never interprets, ranks, recommends, forecasts or draws charts — that is the calling agent's job. There are no analyze_* / should_buy / draw_chart tools by design.

Install

pip install kap-mcp-server
kap-mcp                      # stdio
kap-mcp --transport streamable-http --port 8000 --stateless   # remote: http://host:8000/mcp

Python 3.10+. Yahoo tools work with no configuration. KAP tools need an MKK API key:

Variable

Description

KAP_API_KEY

API key issued by MKK (required for KAP tools; also whitelist your IP with MKK)

KAP_API_SECRET

Only for the MKK test gateway

KAP_TEST_MODE

1apigwdev.mkk.com.tr

KAP_TIMEOUT / KAP_CACHE_TTL / KAP_MAX_CONCURRENCY

30 s / 600 s / 4

KAP_MAX_SCAN_PAGES

Hard cap on 50-item index windows one call may scan (default 400)

KAP_MAX_RESULT_CHARS

Hard cap on a single tool result (default 60000; lists are truncated with a note)

YAHOO_TIMEOUT

45 s

KAP_LOG_LEVEL

Logs go to stderr only

Example stdio configuration for clients supporting mcpServers:

{ "mcpServers": { "kap": { "command": "/path/to/.venv/bin/kap-mcp", "env": { "KAP_API_KEY": "…" } } } }

ChatGPT / remote clients: run with --transport streamable-http behind HTTPS and add https://host/mcp.

Tools (25)

All tools are read-only (readOnlyHint), have titles, typed input schemas with enums, and output schemas.

Tool

What it returns

Reference

kap_status

Config + connectivity (KAP reachable? Yahoo reachable? limits)

get_reference_codes

Code tables: disclosure/member/fund types, action types, field & ratio names, MKK fault codes (also resource kap://reference/codes)

Companies (KAP)

search_companies

Ticker or name (Turkish-insensitive) → company_id, tickers, member type, KAP URL

get_company

Profile from KAP: sector, market (e.g. YILDIZ PAZAR), index memberships (BIST 30/100/…), paid-in capital & registered ceiling, ISINs, direct/indirect shareholders with %, free float, board, executives, subsidiaries, auditor, registry/tax ids, website. Empty KAP fields are null + not_available. Optional Yahoo profile/holders.

Disclosures (KAP)

search_disclosures

One search tool: tickers / company_id / keywords / type / class / date range / since_id / cursor / order / include_details. query_scope="metadata" matches sender name + KAP template name (e.g. New Business Relation, Valuation Report); "content" also matches subject/summary via detail calls. Reports scan_complete, next_cursor, scanned index range.

get_disclosure

Normalised metadata + body as plain text + structured data flattened to path: value (format: summary / text / full)

search_disclosure_data

Find fields inside a filing's structured data; for financial statements returns XBRL facts by Turkish label (hasılatRevenue with CURR/PREV/CURR3/PREV3 values)

get_blocked_disclosures

Withdrawn disclosures and reasons

Documents (KAP attachments, in memory only)

get_disclosure_documents

Attachment metadata (attachment_id, name, source_url)

get_document_text

PDF/HTML/text extraction with page selection; binary/scanned → text: null + reason

search_documents

Snippets with page numbers for a query across a disclosure's attachments

Financials (Yahoo, normalised; deterministic maths)

get_financials

One schema for income / balance / cash flow (revenue, gross_profit, operating_profit, ebitda, net_income, total_assets, current_assets, cash, total_liabilities, current_liabilities, financial_debt, equity, cash-flow lines …) with source line per field and reporting currency. ticker → Yahoo time series; disclosure_id → the official KAP filing parsed from its XBRL data (current quarter, YTD and prior-year comparatives, source: kap)

get_metric_history

Chart-ready series, oldest first: {series:[{period:"2025Q1", revenue:…}]}

get_financial_ratios

Margins, current/cash ratio, D/E, financial D/E, net debt(/EBITDA), interest coverage, ROA, ROE (TTM), asset turnover, equity ratio — formula stated per item; missing input → value: null, reason

get_growth

YoY / QoQ rows: current/previous period & value, absolute and percentage change (ticker series or a KAP disclosure_id)

compare_financials

Metrics and ratios for several tickers in one call, same order as requested, no ranking

Corporate actions

get_corporate_actions

Yahoo ex-dates/amounts + KAP CA disclosures classified by a fixed title keyword table; optional KAP process statuses

News (Yahoo)

get_company_news

Ticker or keyword; title, publisher, published_at, url, summary — no sentiment

Market data (Yahoo)

get_quote

Batch quotes; bad symbols return an error entry

get_price_history

OHLCV + summary (return, drawdown, volatility) + optional SMA/EMA/RSI/MACD/Bollinger/ATR

get_market_overview

BIST 100/30, banks, USD/TRY, EUR/TRY, gold, Brent, S&P, DAX, VIX

get_price_reaction

Returns/volume around a date or a disclosure_id, excess return vs BIST 100

get_analyst_estimates

Third-party consensus as published (counts, targets, earnings date)

Timeline

get_company_timeline

KAP disclosures (typed by KAP metadata) + corporate actions + news, newest first, each with source_url

Funds (KAP registry)

search_funds

Filter/search funds or fetch one by fund_id

Example flows

  • "THYAO'nun son 3 aylık açıklamaları" → search_disclosures(tickers=["THYAO"], start_date="2026-06-21", include_details=true)

  • "ASELS'in sözleşme açıklamaları" → search_disclosures(tickers=["ASELS"], query="sözleşme", query_scope="content")

  • "Bedelsiz sermaye artırımı açıklamaları" → search_disclosures(query="bedelsiz", disclosure_type="CA")

  • "2026Q2 net kâr, YoY" → get_growth(ticker="THYAO", metric="net_income", periods=1)

  • "THYAO vs PGSUS" → compare_financials(tickers=["THYAO","PGSUS"], metrics=["revenue","net_margin","roe"])

  • "Rapor ekinde kapasite ne diyor?" → get_disclosure_documents(id)search_documents(disclosure_id=id, query="kapasite")

  • Monitoring → store last_disclosure_id, poll search_disclosures(since_id=…, order="asc")

Honest limitations

  • KAP list API pages by index only (50 per call, no date/keyword filter). Date and keyword queries scan index windows; every response reports scan_complete, pages_scanned and next_cursor. Long company histories need either many pages or an archive (planned, see docs/ROADMAP.md).

  • The list service's title is the sender's name, not the subject. Cheap keyword search therefore matches the company name and KAP's template codes (sub_report_ids, e.g. oda-12000_New-Business-Relation); subject/summary matching needs query_scope="content" (one detail call per scanned item).

  • Financial time series come from Yahoo Finance (may be USD for some BIST names — currency is always returned; small caps can be missing). The official KAP filing is parsed exactly from its XBRL data for one report at a time (get_financials(disclosure_id=…)); building a multi-year series from KAP alone means locating each FR id by scanning, which the archive planned in docs/ROADMAP.md will make cheap. Banks/insurers use other templates and map partially.

  • The MKK gateway answers empty filtered windows and unknown ids with HTTP 400 + ER005 "Bildirim bulunamadı"; the server treats these as empty/not-found, not as authentication failures. Attachments arrive as a Java-serialised byte[] and are unwrapped transparently.

  • Corporate-action amounts inside KAP bodies are not parsed; the tool returns the disclosure id/URL to read.

  • Yahoo news is English-centric. No semantic search in v1 (title keyword + document snippet search instead).

Security

Designed for remote deployment: no file-system writes, no shell, no arbitrary URL fetching. Attachments are fetched only by KAP-issued id through the authenticated client, size-capped (40 MB) and processed in memory. User input never builds URL paths unchecked. Every result is size-bounded; every scan is page-bounded.

Development

uv pip install -e ".[dev]"
pytest          # 37 tests: pure computations, KAP client (respx), end-to-end tools via in-process MCP client

MIT

Available Tools

25 tools
compare_financialsCompare financialsA
Read-onlyIdempotent

Side-by-side values of metrics and ratios for several companies in one call. Rows are returned in the order given, with currency per company — no ranking or judgement.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo'2026Q2' or '2025'; default latest available per company
metricsYesNormalised fields and/or ratio names, e.g. ['revenue','net_income','roe','net_margin']
tickersYese.g. ['THYAO','PGSUS']
frequencyNoquarterly

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?

The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description does not need to restate safety. It adds behavioral context by noting 'Rows are returned in the order given, with currency per company — no ranking or judgement.' This clarifies output ordering and the lack of derived ranking, which is valuable beyond the annotations. This is a good complement to annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and a clear behavioral note about ordering and currency. Every word adds value; there is no fluff or repetition. This is a model of conciseness.

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 complexity is moderate (4 params, output schema present, annotations cover safety), the description is largely complete. It covers purpose, ordering, and lack of ranking. The only minor gap is the lack of explicit mention of currency handling details (e.g., currency codes) and whether metrics are normalized across companies, which might be inferred from the schema example. But with an output schema present, this is sufficient.

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 description coverage is 75%, covering the key parameters (metrics, tickers, period, frequency) with examples. The description adds the concept of 'side-by-side' and the ordering constraint, but does not elaborate on parameter formats beyond the schema. Since the schema already does heavy lifting, a 4 is appropriate—it adds some value without being redundant.

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

Purpose5/5

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

The description states the tool does side-by-side comparison of metrics and ratios for multiple companies in a single call, which is precise and clearly distinguishes it from related tools like get_financials or get_metric_history that handle individual companies or histories. The explicit mention of 'several companies' removes ambiguity about its scope.

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 implies usage for multi-company comparisons, but does not explicitly state when to use this tool versus alternatives like get_financials or get_metric_history. It does mention no ranking or judgement, but lacks clear exclusions or guidance on when to prefer siblings. Given the large sibling list, a brief note on alternatives would help.

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

get_analyst_estimatesAnalyst estimatesA
Read-onlyIdempotent

Third-party analyst consensus as published on Yahoo Finance: buy/hold/sell counts, mean/ high/low targets, next earnings date, recent rating changes. Reported as data; the server issues no target or recommendation of its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesBIST ticker

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds that the server issues no recommendation of its own and that data is third-party, providing extra behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is two concise sentences that front-load the core purpose and then add a clarifying nuance. No wasted words, and it is well-structured for quick parsing.

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

Completeness5/5

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

The tool has an output schema, and the description lists the key data points it returns. The single parameter is clearly defined, and the purpose is fully covered. Nothing essential is missing for an agent to invoke it correctly.

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 schema covers 100% of parameters, with the only parameter 'ticker' described as 'BIST ticker'. The description does not add further parameter details, so it provides no additional value beyond the schema, warranting the baseline score of 3.

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 third-party analyst consensus from Yahoo Finance, listing specific data points (buy/hold/sell counts, targets, earnings date, rating changes). This is specific and distinct from sibling tools like get_quote or get_financials, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description gives clear context that this provides analyst consensus data, which implies usage when such data is needed. It does not explicitly mention alternatives or when not to use it, but the specialization is evident from the description and name, so it earns a 4 rather than a 5.

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

get_blocked_disclosuresBlocked disclosuresA
Read-onlyIdempotent

Disclosures KAP has withdrawn from public access (e.g. under KVKK) with the stated reason. Explains 'not found' results for specific ids.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about the data being withdrawn under KVKK and that it explains 'not found' results, but it does not disclose details like whether the list is exhaustive, pagination, or how the stated reason is formatted.

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 short sentences with no filler. The core purpose is front-loaded, and the second sentence adds a valuable use case ('Explains not found results for specific ids') without redundancy.

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

Completeness4/5

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

For a zero-parameter read-only tool with an output schema present, the description is largely complete. It explains what the tool returns and why it exists. It could be slightly stronger by noting whether the result is a full list or a lookup, but the output schema likely covers return structure.

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?

The tool has zero parameters, so the schema provides no parameter semantics to cover. The description adds meaning by explaining what the returned data represents (withdrawn disclosures with stated reasons), which is the only semantic context needed for a no-parameter tool.

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 states a specific verb ('withdrawn from public access') and resource ('Disclosures KAP has withdrawn'), and adds the purpose of explaining 'not found' results for specific ids. It is clear about what the tool returns, though it doesn't explicitly differentiate from siblings like get_disclosure or search_disclosures.

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 implies when to use this tool: when a disclosure id appears 'not found' or when checking blocked/withdrawn disclosures. However, it does not explicitly state when not to use it or name alternative tools, leaving the agent to infer the usage context from the sibling list.

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

get_companyCompany profileA
Read-onlyIdempotent

Company profile from KAP: name, tickers, member type, paid-in/registered capital, ISINs, plus shareholders / board / subsidiaries / sector / market / indices when KAP's memberDetail payload contains them (sections KAP does not provide are returned as null with a not_available note, never invented). Optionally adds Yahoo profile and holders.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerNoBIST ticker, e.g. THYAO
company_idNoKAP member id (from search_companies)
include_market_profileNoAdd Yahoo sector/industry/description and holder breakdown

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

The description discloses important behavioral detail: KAP-absent sections are returned as null with a `not_available` note and are 'never invented.' It also mentions the optional Yahoo profile/holders addition. This goes beyond the readOnly/idempotent annotations, with no contradiction.

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 filler. The first sentence front-loads the resource and its core contents, while the second covers the optional enrichment. The dense list is justified.

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 a rich output schema, 100% parameter coverage, and annotations declaring read-only/idempotent behavior, the description completes the picture by explaining null/missing-data semantics and provenance. The need to provide either ticker or company_id is inferable from the schema.

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 adds little parameter-level meaning beyond the schema; the 'Yahoo profile and holders' phrase mirrors include_market_profile, and nothing is missing.

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 names a concrete resource ('Company profile from KAP') and enumerates its contents: name, tickers, capital, ISINs, shareholders, board, etc. This is clear but does not explicitly differentiate from sibling tools like search_companies or get_quote.

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?

There is no explicit when-to-use or alternative guidance. The phrase 'Company profile from KAP' implies the use case, and the schema adds that company_id comes from search_companies, but the description itself leaves sibling selection to inference.

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

get_company_newsCompany newsA
Read-onlyIdempotent

News from Yahoo Finance's news module for a ticker or keyword: title, publisher, published_at, url, summary, source. No sentiment or interpretation is added. Coverage is mostly English wire/press; for Turkish primary sources use search_disclosures.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNonews
limitNo
queryNoFree-text search instead of a ticker (English works best, e.g. 'Turkish Airlines')
tickerNoBIST ticker (mapped to .IS) or any Yahoo symbol
end_dateNo
start_dateNoYYYY-MM-DD; filters on published_at

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?

Annotations already declare read-only and non-destructive. The description adds that no sentiment/interpretation is added and that coverage is limited to English wire/press, which is useful context beyond annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, then coverage and alternative. No redundancy; every word contributes.

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 output schema and annotations, description covers main usage and limitations. Lacks details on pagination or default behavior, but those are inferable from the schema (tab enum, limit min/max). Adequate for an agent to call correctly.

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 50%; description mentions 'ticker or keyword' which clarifies query/ticker usage, but does not explain tab, limit, end_date, or start_date beyond what schema provides. Some compensation exists but not complete for the half of parameters lacking schema descriptions.

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?

States it retrieves news from Yahoo Finance's news module for a ticker or keyword, listing specific fields (title, publisher, published_at, url, summary, source). It also names an alternative for Turkish sources, distinguishing it from search_disclosures.

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 notes coverage is mostly English wire/press and directs Turkish primary sources to search_disclosures, providing a clear when-not and alternative. This helps the agent choose the right tool without opening schemas.

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

get_company_timelineCompany timelineA
Read-onlyIdempotent

Chronological events for a company (newest first): KAP disclosures typed by KAP's own metadata (disclosure_type/class, subject), corporate actions (Yahoo ex-dates/splits) and Yahoo news. Each event has date, type, title, ids and source_url. No classification or summarisation beyond KAP's fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tickerYesBIST ticker
end_dateNo
max_pagesNoKAP scan cap (default 120)
start_dateNoYYYY-MM-DD; default 90 days ago
event_typesNoDefault: all
disclosure_typeNoRestrict KAP items to one type

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?

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds behavioral details beyond that: ordering ('newest first'), the specific fields in each event (date, type, title, ids, source_url), and a limitation ('No classification or summarisation beyond KAP's fields'). This gives agents a clearer expectation of what the tool does and does not do, exceeding the annotation baseline.

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 no redundancy. The primary purpose is front-loaded ('Chronological events for a company'), followed by a concise list of sources and event structure. Every word contributes to understanding, making it efficient and well-structured.

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 tool has 7 parameters and an output schema, so the return format is presumably defined elsewhere. The description covers the key aspects: the sources, the event fields, and the limitation on classification. It does not explicitly explain pagination or default date ranges, but those are hinted at via schema defaults and descriptions. Given the complexity, the description is adequate but could mention default behavior or pagination to be 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?

Schema coverage is 71%, with descriptions for ticker, start_date, max_pages, event_types, and disclosure_type, but not for limit or end_date. The description indirectly clarifies the meaning of event_types by listing the categories (disclosure, corporate_action, news) and mentions date filtering through 'chronological events', but it does not add details for limit or end_date. Since most parameters are already documented, the description adds marginal value beyond the schema, warranting a baseline 3.

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 returns 'Chronological events for a company (newest first)' and enumerates the event sources (KAP disclosures, corporate actions, Yahoo news). This distinguishes it from sibling tools like get_corporate_actions or get_company_news, which focus on single event types. The specific verb 'get' plus resource 'timeline' is unambiguous.

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 implies that this tool aggregates multiple event types into a unified timeline, contrasting with siblings that cover individual categories. However, it does not explicitly state when to prefer this over alternatives (e.g., 'if you need only corporate actions, use get_corporate_actions'). The context is clear but lacks explicit exclusions, so a 4 is appropriate.

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

get_corporate_actionsCorporate actionsA
Read-onlyIdempotent

Dividends, bonus/rights issues, capital changes, buybacks and general meetings for a company. Yahoo supplies exact ex-dates and per-share cash amounts; KAP supplies the disclosures, classified by a fixed title keyword table (type 'other' when unmatched). Amounts inside KAP bodies are not parsed — read the referenced disclosure. Optionally returns KAP process statuses for given reference ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
typesNoFilter: dividend, capital_increase, capital_decrease, bonus_issue, rights_issue, share_buyback, general_meeting, split
tickerYesBIST ticker
end_dateNoYYYY-MM-DD
max_pagesNo
start_dateNoYYYY-MM-DD
include_kapNoScan KAP disclosures (needs KAP key; bounded by max_pages)
process_ref_idsNoKAP corporate-action process reference ids to get their status

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, the description adds valuable behavioral detail: Yahoo supplies exact ex-dates and cash amounts, KAP disclosures are classified via a keyword table with an 'other' fallback, KAP body amounts are not parsed, and callers should read the referenced disclosure. It also discloses optional process-status returns.

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

Conciseness5/5

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

The description is compact, front-loaded with the core purpose, and every sentence earns its place: source distinction, classification behavior, KAP parsing limitation, and optional status output. No filler or redundant restatement of the tool name.

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

Completeness5/5

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

Given the annotations, output schema, and reasonably strong parameter descriptions, the description covers the important non-obvious context: source-specific accuracy, KAP classification limitations, the need to read referenced disclosures, and optional process status retrieval. Nothing critical about how to use the tool correctly is missing.

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?

Most parameters are already documented in the schema (ticker, dates, limit, include_kap, process_ref_ids), so the description does not need to repeat them. It adds meaning where the schema is thinner: process_ref_ids maps to 'optionally returns KAP process statuses', and the 'other' type is explained as the unmatched-keyword fallback.

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 names a specific resource (corporate actions for a company) and enumerates the event categories covered: dividends, bonus/rights issues, capital changes, buybacks, and general meetings. It also distinguishes the two data sources, Yahoo and KAP, making the tool's scope clear relative to nearby disclosure/quote tools.

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 implies when the tool is appropriate—when a caller needs corporate-action events for a single BIST ticker—and explains Yahoo vs. KAP behavior. However, it never explicitly names alternatives or gives when-not-to-use guidance, such as directing reference-id status lookups to kap_status instead.

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

get_disclosureGet disclosureA
Read-onlyIdempotent

One disclosure with normalised metadata (company, ticker, published_at, subject, summary, fiscal period, related tickers, attachments with ids, source_url) and, by default, the body as plain text plus structured data flattened to 'path: value' lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNosummary = metadata only; text = + body as plain text and flattened data; full = + raw KAP payloadtext
max_charsNo
disclosure_idYesKAP disclosure index
sub_report_listNoComma-separated sub-report ids (financial reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, establishing the operation is safe. The description adds value by detailing what the response includes (normalized metadata, plain text body, flattened structured data) and the default behavior. It does not contradict annotations and provides useful context about output structure.

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

Conciseness5/5

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

The description is a single, information-dense sentence that front-loads the core purpose ('One disclosure') followed by specific metadata fields. Every element contributes meaning; there is no redundant or filler content. It is concise while being thorough.

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 an output schema exists, the description need not explain return values in detail. It covers the key aspects: normalized metadata, body content, and flattening behavior. It does not mention edge cases like truncation or error handling, but these are likely covered by the schema and annotations. Overall, it is complete enough for an agent to call correctly with moderate confidence.

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 75% with three of four parameters having descriptions. The description lists metadata fields but does not directly elaborate on parameter semantics beyond what the schema already provides. It adds marginal value, such as clarifying that 'text' is the default format and that data is flattened, but this is mostly covered by the schema's enum 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 a single disclosure with normalized metadata and body content. It distinguishes the singular nature ('One disclosure') from search-based siblings, but does not explicitly name alternative tools like search_disclosures. The purpose is specific and actionable.

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 implies usage when a specific disclosure_id is known, reinforced by the required parameter. However, it does not explicitly state when to prefer this tool over search_disclosure_data or other document retrieval tools, nor does it provide exclusions. The guidance is implied rather than explicit.

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

get_disclosure_documentsDisclosure documentsA
Read-onlyIdempotent

List a disclosure's attachments (PDF/XLSX/…) with attachment_id, name and source_url. Pass an id to get_document_text or search_documents to read it.

ParametersJSON Schema
NameRequiredDescriptionDefault
disclosure_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the return fields and the fact that it lists attachments, which is useful context but does not disclose edge cases (e.g., no attachments, invalid disclosure_id) or pagination behavior. With annotations covering safety, this is adequate but not exceptional.

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 no fluff. The core purpose is front-loaded, and the next-step guidance is a natural extension. 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?

Given the presence of an output schema (which likely documents the return structure), the description need not detail return values. For a simple list tool with one parameter, it covers the main workflow and return fields. It does not explain how to find disclosure_id, but that is a minor omission given the tool's simplicity and the availability of related sibling tools like get_disclosure.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the single parameter disclosure_id. It does not explain what disclosure_id is, how to obtain it, or its format beyond the schema's integer type. The phrase 'Pass an id' refers to attachment_id, not disclosure_id, so no guidance is given for the actual parameter. This is a significant gap for a low-coverage 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 states a specific verb ('List'), a resource ('a disclosure's attachments'), and the exact fields returned ('attachment_id', name, source_url'). It clearly distinguishes this tool from siblings like get_disclosure or search_disclosures by focusing on attachments.

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 provides clear next-step guidance ('Pass an id to get_document_text or search_documents to read it'), indicating the workflow after listing. It does not explicitly name alternatives or exclusions, but the purpose is specific enough that an agent can infer when to use it.

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

get_document_textDocument textA
Read-onlyIdempotent

Extract text from a PDF/HTML/text attachment (in memory; nothing is stored). Binary formats (xlsx, zip) and scanned PDFs return text: null with a reason. Prefer search_documents to pull only the relevant part of long reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNoPDF page selection like '1-3,7' (1-based). Default: all pages, subject to max_chars.
max_charsNo
attachment_idYesFrom get_disclosure_documents / get_disclosure attachments

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: 'in memory; nothing is stored' and the specific failure mode of returning `text: null` with a reason for unsupported formats. This goes beyond the annotations and helps set expectations for the agent.

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 sentences, each earning its place: the first states the core function and memory behavior, the second covers failure modes, and the third routes to the preferred alternative. The most important scoping information is front-loaded, and there is no redundant filler.

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 read-only extraction tool: it covers supported formats, failure modes, and the alternative for long documents. The output schema exists, so return values need not be explained. A minor gap is that it doesn't mention pagination or the max_chars limit explicitly, but the schema already documents those, so the description is sufficiently complete.

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 description coverage is 67%, with attachment_id and pages already described in the schema. The description adds meaning by explaining the overall extraction behavior and the `text: null` return for unsupported formats, which indirectly clarifies the role of the parameters. It doesn't repeat schema details, and the remaining max_chars parameter is self-explanatory with its default and bounds 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 states a specific verb ('Extract text') and resource ('PDF/HTML/text attachment'), and explicitly distinguishes itself from search_documents by noting the alternative pulls only relevant parts of long reports. It also clarifies what it is not for (binary formats, scanned PDFs), making the tool's purpose unmistakable.

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 to prefer search_documents when only a relevant part of a long report is needed, providing a clear alternative and condition. It also warns that binary formats and scanned PDFs will not work, which helps an agent decide when to use this tool versus another.

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

get_financial_ratiosFinancial ratiosA
Read-onlyIdempotent

Deterministic ratios with the formula stated per item: margins, current/cash ratio, debt-to-equity, financial debt-to-equity, net debt (/EBITDA), interest coverage, ROA, ROE, asset turnover, equity ratio. Flow-based ratios on quarterly data use trailing-12-month sums. A ratio whose inputs are missing returns value null with a reason — never a guess.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo'2026Q2' or '2025'; default latest (for a KAP filing: the cumulative current period)
ratiosNoSubset; default all
tickerNoBIST ticker (Yahoo statements)
frequencyNoquarterly
disclosure_idNoKAP FR disclosure id to compute ratios on the official filing (TTM-based ratios need 4 quarters and are reported as unavailable)
include_market_multiplesNoAdd P/E, P/B, EV/EBITDA, dividend yield, market cap from Yahoo quote data

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

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

The description discloses key behaviors beyond the annotations: determinism, the TTM summation rule for flow-based ratios on quarterly data, and the explicit 'null with a reason, never a guess' policy for missing inputs. These are valuable operational details not present in the schema or 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 sentences with no fluff. The core purpose and ratio list are front-loaded, followed by the key behavioral nuance. Every sentence carries essential information.

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 an output schema present and annotations covering safety, the description addresses the most important behavioral nuance (missing inputs) and the TTM rule. It does not explain interaction between ticker and disclosure_id, but that is a minor omission given the schema descriptions.

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 high (83%), so the baseline is 3. The description adds context about the ratios list and the TTM behavior that relates to period and frequency, but it does not explain each parameter beyond what the schema already provides. It adds marginal value without compensating for any gaps.

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 computes deterministic financial ratios and enumerates the specific ratio families (margins, liquidity, leverage, etc.). It distinguishes the tool from raw financial data tools like get_financials, though it does not explicitly name a sibling alternative.

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 usage context such as the trailing-12-month behavior for quarterly flow ratios and the null-with-reason behavior for missing inputs. However, it does not explicitly guide when to choose this tool over related tools like get_financials or get_metric_history, leaving that to the agent.

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

get_financialsFinancial statements (normalised)A
Read-onlyIdempotent

Income statement, balance sheet and cash flow in one normalised schema (revenue, gross_profit, operating_profit, ebitda, net_income, total_assets, cash, financial_debt, equity, operating/investing/financing cash flow …) with the source line/taxonomy name per field and the reporting currency. Two sources: ticker → Yahoo Finance time series (several periods); disclosure_id → the official KAP filing (source: kap, exact figures, labels '(3M)' quarter vs '(YTD)' cumulative). Find FR ids with search_disclosures(tickers=[…], disclosure_type='FR').

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoSubset of normalised fields; default all (see get_reference_codes.financial_fields)
tickerNoBIST ticker, e.g. THYAO — time series from Yahoo Finance
periodsNo
frequencyNoYahoo series onlyquarterly
disclosure_idNoA KAP financial-report (FR) disclosure id — the official filing parsed from KAP's XBRL data (current period + prior-year comparatives)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond annotations: it states that each field includes source line/taxonomy name, reporting currency, and that KAP filings provide exact figures with quarter vs. cumulative labels. This helps set expectations about data provenance and format without contradicting annotations.

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

Conciseness5/5

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

The description is dense but every part earns its place: what is returned, key fields, source metadata, the two invocation modes, and how to find FR ids. Even though it is a single paragraph, it avoids fluff and front-loads the core purpose before source-specific details.

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

Completeness5/5

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

Given the tool's complexity (two data sources, many selectable fields, an output schema, and rich annotations), the description is thorough enough for an agent to decide when to call it and how to construct a valid request. The only minor omission is explicit comparison to get_financial_ratios, but that is not necessary for correct invocation.

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?

With 80% schema coverage, the schema already documents most parameters. The description adds meaning beyond that by explaining the two mutually relevant parameter families (ticker vs. disclosure_id), the source difference, and the field source/taxonomy metadata. It also directs the agent to search_disclosures for constructing valid disclosure_id values.

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

Purpose5/5

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

The description clearly identifies what the tool returns: income statement, balance sheet, and cash flow data in one normalized schema, with a concrete list of fields. It also distinguishes the two data sources (ticker vs. disclosure_id), which helps differentiate usage from related sibling tools like get_financial_ratios or compare_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?

The description explicitly explains the two invocation modes: ticker for Yahoo Finance time series and disclosure_id for official KAP filings. It also points the agent to search_disclosures with a specific pattern to find FR ids, giving clear contextual guidance. It stops short of naming alternatives to avoid, but the source-selection guidance is strong.

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

get_growthGrowth (YoY / QoQ)A
Read-onlyIdempotent

Period-over-period change of one metric: current/previous period and value, absolute and percentage change (relative to |previous|, so loss→profit swings are signed correctly). Computed here, not by the model.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYese.g. revenue, net_income, equity
tickerNoBIST ticker (Yahoo series)
periodsNoHow many current periods to compute
frequencyNoquarterly
comparisonNoauto = yoy (same quarter last year / previous year)auto
disclosure_idNoKAP FR disclosure id: YoY of the filing's current period vs its prior-year comparative

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds useful computation semantics: growth is relative to the absolute value of the previous period, so loss-to-profit swings are signed correctly. This goes beyond the schema and is valuable for interpreting results correctly. No contradiction with annotations.

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

Conciseness5/5

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

The description is two tight sentences, with the core computation stated first and the important sign-handling caveat immediately appended. Every sentence earns its place and no filler is present.

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 robust annotations, high schema coverage, and an output schema, the description adds the main missing behavioral nuance, the sign convention, and clarifies that the tool is the authoritative computed source. The main gap is the absence of explicit guidance on selecting this tool over sibling metrics tools, but the core invocation information 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 description coverage is 83%, so parameters are mostly self-documenting. The description adds no parameter-specific guidance beyond emphasizing one metric, leaving metric, ticker, periods, frequency, comparison, and disclosure_id semantics to the schema. This meets the baseline but does not exceed it.

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

Purpose4/5

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

The description clearly identifies a specific operation: computing period-over-period change for one metric, including current/previous values, absolute and percentage change. It does not explicitly name sibling tools, but the one-metric scope and the computed-here-not-by-the-model line help distinguish it from raw financials, history, and multi-metric comparison tools.

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?

Computed here, not by the model implies the agent should call this tool rather than calculate growth itself, and one metric suggests it is aimed at single-series growth rather than multi-metric comparisons. However, it provides no explicit contrast with get_financials, get_metric_history, or compare_financials, nor any when-not-to-use conditions.

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

get_market_overviewMarket overviewA
Read-onlyIdempotent

Snapshot of BIST 100/30, bank index, USD/TRY, EUR/TRY, gold, Brent, S&P 500, DAX and VIX (last, change %, 52-week range). Source: Yahoo Finance.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the source (Yahoo Finance) and the snapshot nature, which is useful context. It doesn't disclose staleness, update frequency, or whether values are delayed, but with annotations carrying the safety burden, a 3 is appropriate.

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 waste. The instrument list is front-loaded, the data fields are specified, and the source is given. 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?

For a zero-parameter read-only snapshot tool with an output schema present, the description is nearly complete. It states the instruments, fields, and source. The only minor gap is not describing update frequency or data delay, but the output schema likely covers return structure, and annotations cover safety.

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?

The tool has zero parameters, so the schema provides no parameter semantics. The description compensates by specifying exactly what data is returned (instruments and fields), which is the only semantic content an agent needs. Baseline 4 for zero-parameter tools is correct.

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 names a specific resource (market overview) and enumerates exactly which instruments are included (BIST 100/30, bank index, USD/TRY, EUR/TRY, gold, Brent, S&P 500, DAX, VIX) plus the data fields (last, change %, 52-week range). This is a clear, specific verb+resource statement that distinguishes it from sibling tools like get_quote or get_price_history.

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

Usage Guidelines4/5

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

The description implies a snapshot/overview use case and the source (Yahoo Finance) is stated. It doesn't explicitly say when to use this over get_quote or get_price_history, but the zero-parameter snapshot nature and the explicit instrument list make the context clear enough for an agent to select it appropriately.

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

get_metric_historyMetric history (chart-ready)A
Read-onlyIdempotent

Time series of normalised financial metrics, oldest first, ready for tables and charts: {series: [{period: '2025Q1', revenue: …, net_income: …}]}. No charts are produced here.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesBIST ticker
metricsYese.g. ['revenue','net_income']
periodsNo
frequencyNoquarterly

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the agent knows this is a safe, non-destructive read. The description adds that data is normalized and chart-ready, which is useful context, but does not explain further behavior like normalization specifics or response volume. With annotations covering the safety profile, a 3 is appropriate.

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 concise, two sentences, with a clear example of the output format. It is front-loaded with the main purpose and adds the clarifying note that no charts are produced. No wasted words.

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?

Given the tool's moderate complexity (4 params, 2 required, output schema present), the description is adequate for basic usage but does not specify normalization basis, time range defaults, or how to interpret the data. The sibling tools like get_financials suggest overlap, so more usage guidance would improve completeness.

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 only 50%, but the description shows the exact output shape, which implicitly clarifies what the 'metrics' parameter should contain (keys in the response). It doesn't explain 'periods' or 'frequency' beyond schema, but the response example and metric names give enough guidance.

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 states a specific resource (time series of normalized financial metrics) and indicates it is chart-ready, distinguishing output format. It doesn't explicitly name a sibling to differentiate from, but the context and wording make its purpose clear.

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?

Implied usage: for retrieving metric history in a structured format. It does not explicitly state when to use this instead of get_financials or compare_financials, but the chart-ready emphasis hints at use cases. No explicit exclusions.

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

get_price_historyPrice historyA
Read-onlyIdempotent

OHLCV candles with a computed summary (return, high/low, max drawdown, annualised volatility, average volume) and optional standard technical indicators — all numeric, chart-ready, no interpretation.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoYYYY-MM-DD, exclusive
startNoYYYY-MM-DD
periodNoLookback (ignored when start is given)6mo
symbolYese.g. THYAO, XU100, USDTRY
intervalNoIntraday intervals only cover recent weeks1d
max_rowsNo
include_indicatorsNoAdd SMA/EMA/RSI/MACD/Bollinger/ATR series and latest values

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?

Annotations already declare read-only, open-world, idempotent, and non-destructive behavior. The description adds useful context by stating the output is entirely numeric and uninterpreted, and by listing the computed summary fields. This goes beyond the annotations without contradicting them.

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 entire description is one compact sentence that front-loads the core resource (OHLCV candles), includes the important computed fields, and closes with a differentiating constraint ('no interpretation'). Every part adds value and there is no filler.

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 a 7-parameter tool with 86% schema coverage, rich annotations, and an output schema, the description does not need to spell out every field or return structure. It successfully frames what the tool returns and its limitations, leaving only minor gaps like explicit sibling differentiation.

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 high at 86%, so the schema already documents most parameters well. The description adds meaning by connecting 'optional standard technical indicators' to include_indicators and clarifying the output is chart-ready, but it does not need to compensate much for undocumented parameters.

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

Purpose5/5

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

The description clearly identifies the tool as returning OHLCV candles with computed summary statistics and optional technical indicators. It distinguishes this from analytical or interpretation tools by explicitly stating 'chart-ready, no interpretation', and from related siblings like get_quote which presumably provides current 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 Guidelines3/5

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

The description implies usage through the phrase 'chart-ready, no interpretation', suggesting it should be used when raw price history is wanted rather than interpreted analysis. However, it does not explicitly name alternative siblings or state when not to use them, so usage guidance remains implicit rather than explicit.

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

get_price_reactionPrice reaction around an eventA
Read-onlyIdempotent

Daily closes, returns and volume around an event date, plus excess return versus BIST 100. Pure arithmetic on price data; whether the move was 'caused' by the event is not asserted.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNoBIST ticker; required unless disclosure_id is given
days_afterNo
event_dateNoYYYY-MM-DD; required unless disclosure_id is given
days_beforeNo
disclosure_idNoUse a KAP disclosure as the event: ticker and time are read from it (after-close publications map to the next session)

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?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it clarifies that the computation is 'pure arithmetic on price data' and explicitly disclaims causal interpretation. It also discloses the after-close publication mapping behavior in the disclosure_id parameter description, which is a non-obvious behavioral 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 two sentences with zero waste. The first sentence front-loads the core output and scope, and the second sentence adds a crucial caveat about causation. Every word 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 tool has an output schema, so return values need not be described in detail. The description covers the core data, the event/disclosure input modes, and the non-causal nature of the computation. The only minor gap is that it does not explicitly state when to prefer this over get_price_history or get_company_timeline, but the event-centric framing and disclosure_id parameter make the use case clear enough.

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 description coverage is 60%, and the description adds value by explaining the event-date/disclosure_id duality and the after-close mapping behavior. The main description also clarifies that the output includes excess return versus BIST 100, which gives meaning to the tool's purpose. However, days_before and days_after semantics are only partially explained by the schema defaults and bounds, and the description does not elaborate on them further.

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

Purpose5/5

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

The description states a specific verb ('get') and resource ('price reaction around an event date'), and enumerates the exact data returned: daily closes, returns, volume, and excess return versus BIST 100. It also distinguishes itself from a causal analysis tool by explicitly disclaiming causation, which helps an agent understand what this tool is not.

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 clearly implies when to use this tool: when an agent needs price/volume behavior around an event date or disclosure, and it explicitly notes the tool does not assert causation, which is a useful exclusion. It does not name sibling alternatives like get_price_history or get_company_timeline, but the event-centric framing and the disclosure_id parameter provide enough context for an agent to select it.

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

get_quoteQuotesA
Read-onlyIdempotent

Latest price data per symbol: last, previous close, change %, day and 52-week range, volume vs 3-month average, market cap, currency. Bad symbols return an error entry without failing the batch. Source: Yahoo Finance (delayed for BIST).

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesBIST tickers (THYAO), indices (XU100), FX (USDTRY), commodities (GOLD, BRENT) or full Yahoo symbols

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral context beyond those: bad symbols return an error entry without failing the whole batch, and Yahoo data is delayed for BIST. This is valuable but does not cover broader failure modes or rate limits.

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?

Every sentence earns its place: the first defines the payload and output fields, the second covers error isolation, and the third notes the source and BIST delay. There is no filler, and the core purpose is front-loaded.

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

Completeness5/5

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

Given the single well-documented parameter, rich annotations, and an output schema, the description covers the essential remaining context: batch error behavior and source latency. Nothing critical is missing for an agent to invoke this tool correctly.

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 symbol parameter is already well documented with accepted formats like THYAO, XU100, USDTRY, and GOLD. The tool description only reconfirms that data is per symbol and adds no new parameter-level semantics, making the baseline 3 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 identifies a read-only quote retrieval action with a specific resource (latest price data per symbol) and enumerates the exact fields returned. The 'per symbol' batch framing and field list distinguish it from time-series or market-overview siblings like get_price_history and get_market_overview.

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 implies usage for current snapshot quotes and lists supported symbol categories, but it never explicitly says when to use this tool versus alternatives or when not to use it. Agents must infer that historical price data belongs to get_price_history.

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

get_reference_codesReference codesA
Read-onlyIdempotent

Code tables used across tools: disclosure types/classes, member types, fund states/types, corporate-action types/statuses, normalised financial field names, ratio names, gateway fault codes. No network call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds the valuable detail 'No network call', which is a behavioral trait not captured by annotations, and lists the content domains. It does not describe return format, but the presence of an output schema mitigates that need.

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 a single sentence that is front-loaded with the primary purpose ('Code tables used across tools') followed by a concise enumeration of content areas and the key behavioral note about no network call. Every element earns its place with no redundancy.

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

Completeness5/5

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

Given that there are no parameters, an output schema exists, and annotations cover safety and idempotency, the description is complete enough. It specifies what code tables are included and that no network call is made, which is sufficient for an agent to understand when and how to invoke it.

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?

There are zero parameters, so schema coverage is trivially 100%. With no parameters to explain, the description adds no parameter-specific semantics, but it also doesn't need to. The baseline for 0 parameters is 4, and the description appropriately focuses on content rather than parameters.

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: it provides code tables used across tools, listing specific categories like disclosure types, member types, and financial field names. This is a specific verb-less but informative description that distinguishes it from sibling data-retrieval tools, which all focus on specific entities or operations.

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 implies its use case (reference/code lookup) but does not explicitly state when to use it vs alternatives, nor does it mention any exclusions. It says 'used across tools', which suggests it's a support resource, but there's no direct guidance on when an agent should call it.

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

kap_statusServer statusA
Read-onlyIdempotent

Configuration and connectivity check. Call first when other tools fail to tell a configuration problem (missing key, IP whitelist) from a data problem.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the diagnostic behavior (checking config/connectivity) but doesn't detail what specific checks are performed or what the output contains. With annotations covering safety, a 3 is appropriate.

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 purpose is stated first, followed by actionable usage guidance. 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?

For a zero-parameter diagnostic tool with an output schema and strong annotations, the description is nearly complete. It could mention what kind of output to expect (e.g., status fields, error codes), but the output schema likely covers that. The usage guidance is strong enough to make the tool safely invocable.

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?

The tool has zero parameters, so the schema provides no parameter semantics. The description compensates by explaining the tool's purpose and when to call it, which is sufficient for a no-argument diagnostic tool. Baseline 4 for zero params 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 performs a configuration and connectivity check, and it distinguishes itself from data tools by framing it as a diagnostic step. It could be more explicit about what 'status' returns, but the verb 'check' and resource 'configuration and connectivity' are specific enough.

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 gives explicit guidance: 'Call first when other tools fail' and explains the diagnostic purpose—distinguishing configuration problems from data problems. This is strong usage guidance that tells the agent when to use it and what it helps determine.

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

search_companiesSearch companiesA
Read-onlyIdempotent

Find KAP members (companies, funds' founders, brokers…) by ticker or name and get their company_id, which other KAP tools take. Exact ticker matches rank first. Use when the user names a company; use get_company for the full profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoTicker (THYAO) or part of the name, Turkish-insensitive. Omit to list by member_type.
offsetNo
member_typeNoFilter by KAP member type; IGS = listed companies

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

The annotations already cover readOnly, idempotent, openWorld, and non-destructive behavior. The description adds useful extra behavior: exact ticker matches rank first, and the returned company_id is consumed by other KAP tools. This goes beyond the structured annotations without contradicting them.

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 short sentences, front-loaded with the main purpose, then the output value, then the routing guidance. There is no filler or repetition of schema details.

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

Completeness5/5

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

The tool has an output schema, strong annotations, and a description that explains purpose, usage conditions, result ranking, output relevance, and an alternative. Nothing an agent needs to decide whether to call this tool or how to use it effectively is missing.

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 50%, so the description does not fully carry the load, but it reinforces query semantics ('by ticker or name') and adds the ordering behavior ('Exact ticker matches rank first'). The remaining limit and offset parameters are self-explanatory with defaults in the schema, so the description does not need to add much.

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 a specific verb ('Find'), names the resource ('KAP members'), and states the searchable fields ('ticker or name') and the key output ('company_id'). It clearly distinguishes itself from get_company by noting that get_company is for the full profile.

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?

It gives an explicit trigger condition: 'Use when the user names a company.' It also names the main alternative, get_company, and the condition that redirects the agent elsewhere, which is exactly the kind of routing guidance needed.

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

search_disclosure_dataSearch disclosure data fieldsA
Read-onlyIdempotent

Find matching fields inside a disclosure's structured data (financial statement line items, form fields) and return path/value pairs. Turkish-insensitive. Use to pull single figures from an official KAP financial report or form without reading the whole body.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesField name or value to find, e.g. 'net dönem karı', 'hasılat', 'kar payı'
disclosure_idYes
sub_report_listNo

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?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavior beyond annotations: 'Turkish-insensitive' (a search behavior) and 'return path/value pairs' (output format). It also implies efficiency ('without reading the whole body'). No contradiction with annotations.

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

Conciseness5/5

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

The description is two sentences with no fluff. The core function is stated first, followed by a concise usage directive. It is front-loaded with the most important information and each sentence contributes value.

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 that an output schema exists (per context signals) and annotations cover safety and idempotency, the description is largely sufficient. It clarifies the purpose, use case, and a key behavioral trait (Turkish-insensitivity). The only missing detail is behavior regarding 'sub_report_list' and what defines a 'match' (exact vs fuzzy), but these are minor gaps for a search tool. Overall, an agent can confidently call this 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 coverage is only 25% (only 'query' has a description). The description implicitly covers disclosure_id ('disclosure's structured data'), and the schema's query description gives examples. However, the description does not explain the 'limit' or 'sub_report_list' parameters, which are not described in the schema. Given low schema coverage, the description should compensate more, but for a search tool the parameters are fairly self-explanatory (limit is a count, sub_report_list likely filters sub-reports). 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 states a specific verb ('Find'), resource ('matching fields inside a disclosure's structured data'), and specifies the domain (financial statement line items, form fields). It also notes the return type ('path/value pairs') and a key feature ('Turkish-insensitive'). This distinguishes it from sibling tools like search_documents (which likely searches full text across documents) and get_financials (which may return entire financial statements).

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 tells agents when to use it: 'Use to pull single figures from an official KAP financial report or form without reading the whole body.' This implies it is preferred over get_document_text when a specific figure is needed. It does not explicitly name alternatives or exclusions, but the use case is clear enough for an agent to select it.

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

search_disclosuresSearch disclosuresA
Read-onlyIdempotent

Search KAP disclosures by company, keywords, type/template and date range, newest first, with cursor paging. Covers: latest disclosures, a company's disclosures over a period, everything since an id (monitoring), topic hunts like 'sözleşme' or 'bedelsiz' across companies (use query_scope='content' for subject/summary matching). The KAP API only pages by index, so wide ranges scan many windows: check scan_complete; if false, continue with cursor or raise max_pages. Items carry disclosure_id, templates (KAP's topic template codes), ticker, company name and source_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
orderNodesc = newest firstdesc
queryNoKeywords (any word matches, Turkish-insensitive). With query_scope='metadata' they match the sender name and the disclosure template name (e.g. 'New Business Relation', 'Valuation Report'); with 'content' also the subject/summary of every scanned item (one KAP call per item, slower).
cursorNo`next_cursor` from a previous call to continue paging
tickersNoRestrict to these BIST tickers (e.g. ['THYAO','PGSUS'])
end_dateNoYYYY-MM-DD (inclusive)
since_idNoOnly disclosures newer than this id (polling). Overrides dates.
max_pagesNoCap on 50-item index windows scanned (default 40, server max applies). Company/keyword filters on long ranges need more.
company_idNoRestrict to one KAP member id
start_dateNoYYYY-MM-DD (inclusive). Resolved to an index via binary search.
query_scopeNoWhere keywords are matched; see `query`metadata
disclosure_typeNoFR financial report, ODA material event, DG other, DUY regulator, FON fund, CA corporate action
include_detailsNoAlso fetch published_at, subject, summary, attachments per item (one KAP call each)
disclosure_classNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses non-obvious behavior: the KAP API pages by index, wide ranges require checking scan_complete, and callers must continue with cursor or raise max_pages. It also explains the difference between metadata and content scanning and notes the per-item cost of content matching, which is valuable operational 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?

Three sentences deliver a dense but efficient overview: core search capability, use cases, and a crucial paging caveat. Every sentence earns its place, and the main purpose is front-loaded before operational details.

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

Completeness5/5

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

For a 14-parameter tool, the description is remarkably complete alongside the rich schema and output schema. It covers what the tool searches, key use cases, paging behavior, performance caveats, and the shape of returned items, so an agent has enough context to invoke and interpret results correctly.

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 86%, so parameter semantics are already well documented. The description adds little beyond the schema: query_scope='content' is already explained in the query parameter, and since_id is already described as polling in the schema. It does not materially deepen parameter understanding, so the baseline 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 names a specific verb and resource—'Search KAP disclosures'—and immediately enumerates the filter dimensions and supported use cases. Its scope is precise enough to distinguish it from sibling tools like get_disclosure or search_documents, and the mention of monitoring by since_id and content-scoped keyword hunts gives it a clear identity.

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 lists when the tool is appropriate: latest disclosures, a company's disclosures over a period, monitoring via since_id, and cross-company topic searches. It does not name alternatives or exclusions, but the use-case coverage 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.

search_documentsSearch documentsA
Read-onlyIdempotent

Find passages inside disclosure attachments and return short snippets with page numbers and source_url instead of whole documents. Use for 'what does the report say about X'.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWords to find (any word matches; Turkish-insensitive)
max_resultsNo
attachment_idNo…or a single attachment
context_charsNoSnippet length around each match
disclosure_idNoSearch all attachments of this disclosure

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds useful behavioral context by promising snippets with page numbers and source_url instead of whole documents, which shapes agent expectations about the granularity of the result.

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 short sentences accomplish a lot: the first explains functionality and output format, the second gives a concrete use case. There is no filler or repetition of schema or annotation details.

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 rich annotations, an output schema, and a well-documented input schema covering 80% of parameters, the description only needs to explain the tool's purpose and distinguishing behavior. It does, so nothing essential is missing for correct invocation.

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 80%, so the schema already documents most parameters including query, attachment_id, context_chars, and disclosure_id. The description adds no parameter-level semantics beyond the schema, so the 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 names a specific action ('Find passages') and a specific resource ('disclosure attachments'), and it clearly defines the return shape: short snippets with page numbers and source_url instead of whole documents. This strongly distinguishes it from sibling tools that return whole documents or broader disclosure search results.

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

Usage Guidelines4/5

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

The description gives a clear use case ('what does the report say about X') and implies it is the passage-level search tool, not a document-download tool. It does not explicitly name alternatives or state when not to use it, but the context is strong enough for an agent to route correctly.

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

search_fundsSearch fundsA
Read-onlyIdempotent

Investment funds registered on KAP (identity, type, class, state, founder, KAP URL), or one fund's full detail when fund_id is given. Prices/returns are not in KAP — this is the registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoSubstring on fund name / code / founder (Turkish-insensitive)
offsetNo
fund_idNoReturn the detail record of one fund instead of a list
fund_typeNoe.g. ['EYF','BYF'] — see get_reference_codes.fund_types
fund_classNo
fund_stateNoY active, N passive, T liquidation

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?

Annotations already cover safety (readOnly, idempotent, non-destructive) and open-world. The description adds behavioral nuance: it clarifies that the tool returns registry metadata only, and that passing fund_id switches to a detail record. This goes beyond the annotations without contradicting them.

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 filler. The main purpose is front-loaded, and the exclusion of prices/returns is delivered as a concise clarification. Every word 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?

For a 7-parameter tool with an output schema and strong annotations, the description covers the essential distinctions (list vs. detail, registry vs. pricing). It doesn't explain pagination or fund_class semantics, but those are either self-evident or defined in the schema. Overall, an agent can call this correctly with the given information.

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 57% – moderate. Several parameters (query, fund_id, fund_type, fund_state) have descriptions, but limit, offset, and fund_class do not. The tool description does not elaborate on any parameter, but the mention of 'type, class, state' hints at what fund_type and fund_class filter on. This adds a little context but does not fully compensate for the gaps.

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 searches investment funds registered on KAP, lists the key fields (identity, type, class, state, founder, KAP URL), and distinguishes the list vs. detail behavior via fund_id. It also explicitly excludes prices/returns, which disambiguates it from price-focused sibling tools.

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

Usage Guidelines4/5

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

The description gives a clear context (registry data) and an implicit exclusion (prices/returns not here), which steers the agent away from using this tool for financial data. However, it does not name specific alternative tools (e.g., get_quote, get_price_history), so it stops short of explicit when-not guidance.

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. 25 tool updatesv0.2.0
    • First observedcompare_financials
    • First observedget_analyst_estimates
    • First observedget_blocked_disclosures
    • First observedget_company
    • First observedget_company_news
    • First observedget_company_timeline
    • First observedget_corporate_actions
    • First observedget_disclosure
    • First observedget_disclosure_documents
    • First observedget_document_text
    • First observedget_financial_ratios
    • First observedget_financials
    • First observedget_growth
    • First observedget_market_overview
    • First observedget_metric_history
    • First observedget_price_history
    • First observedget_price_reaction
    • First observedget_quote
    • First observedget_reference_codes
    • First observedkap_status
    • First observedsearch_companies
    • First observedsearch_disclosure_data
    • First observedsearch_disclosures
    • First observedsearch_documents
    • First observedsearch_funds

TDQS

A4/5.0

Scored across 25 tools

Disambiguation4/5

Each tool has a clearly described output, and the disclosure/document/financial families are carefully separated by function. However, tools like get_financials, get_metric_history, and get_growth are close enough that an agent may need to read descriptions carefully before choosing.

Naming Consistency4/5

Nearly every tool follows a clean get_ or search_ verb_noun pattern, making the API predictable. The only real outlier is kap_status, which breaks the verb_noun convention and prevents a perfect score.

Tool Count4/5

25 tools is at the high end, but the server covers KAP disclosures, companies, funds, financials, corporate actions, price data, news, and analyst estimates, so most tools earn their place. It is a large surface, but not bloated for the breadth of the domain.

Completeness4/5

The read-only KAP and market-data domain is very well covered: disclosures, attachments, structured fields, financial statements, ratios, growth, price history, corporate actions, news, timeline, funds, and reference data are all present. Minor gaps remain around binary attachments and fund performance data, but these are documented and usually workaroundable.

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    Enables querying real-time and historical financial market data for stocks, options, forex, and crypto, including quotes, trades, technical indicators, and reference data through a set of MCP tools.
    71
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server that provides seamless access to Yahoo Finance stock market data, enabling retrieval of real-time quotes, historical data, charts, financial summaries, and market searches.
    35 npm
    ISC
  • A
    license
    A
    quality
    D
    maintenance
    Provides structured financial market data (stocks, ETFs, mutual funds, fundamentals, market indicators) to AI systems via MCP, enabling natural language access to financial datasets with both hosted and local deployment options.
    31
    6 npm
    ISC
  • A
    license
    B
    quality
    B
    maintenance
    MCP server that syncs and queries comprehensive stock data (quotes, financials, dividends, analyst forecasts, options, news) from Yahoo Finance and Investing.com into an external MySQL database.
    27
    160 npm
    MIT