Skip to main content
Glama

CeylonCharts - Colombo Stocks Exchange (CSE) data for AI Agents

Server Details

A Model Context Protocol server exposing real-time and historical Colombo Stock Exchange (CSE) data to AI agents and LLM applications. Provides quotes and OHLCV price history, full financial statements (income, balance sheet, cash flow), pre-computed technicals (moving averages, RS ratings, volume signals), macroeconomic indicators, corporate actions, and rule-based screening across CSE stocks and sector indices, everything needed to build CSE-aware trading assistants, research tools, and market-analysis agents. This is the official MCP server of www.ceyloncharts.com

Ownership verified
Status
Healthy
Uptime
99.1% over 42 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 17 tools

Disambiguation4/5

Tools are generally well-differentiated by resource and action (e.g., get_announcements vs get_corporate_actions explicitly cross-reference each other, get_technicals vs get_ohlc_data are distinct). Minor overlap between get_indices/get_index_data and screen_indices, but descriptions clarify their purposes.

Naming Consistency5/5

Consistent verb_noun pattern throughout: get_*, list-style get_symbols/get_indices, and screen_* for screening tools. All snake_case, no mixed conventions.

Tool Count4/5

17 tools is slightly heavy but reasonable given the breadth of CSE data (OHLC, quotes, charts, indices, macro, financials, shareholders, screening). Each tool covers a distinct data domain; no obvious redundancy.

Completeness5/5

Covers the full CSE data surface: symbols, quotes, OHLC, charts, technicals, screening, indices, corporate actions, announcements, financial statements, shareholders, foreign holdings, macro, and market summary. No obvious gaps for the stated purpose.

Available Tools

17 tools
get_announcementsGet company announcementsA
Read-onlyIdempotent
Inspect

Get general CSE company disclosures for a symbol — board changes, AGM/EGM notices, listings, trading suspensions/resumptions, name changes, and other regulatory announcements. For dividends, rights issues, or share splits specifically, use get_corporate_actions instead — it has the parsed, structured detail (amounts, ratios, ex-dates) that this tool's raw announcement text does not. Returns CSV (date,type,description,pdf_url), or JSON candidates if the input is ambiguous.

NameRequiredDescriptionDefault
toNoEnd of the date range to filter by. Defaults to today when omitted.
fromNoStart of the date range to filter by. Defaults to 1 year before `to`, or 1 year before today if neither bound is given.
symbolYesA CSE ticker or the company name (e.g. "SAMP" or "Sampath Bank"). Typos are tolerated. If the input is ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely new behavioral facts: the CSV column shape (date,type,description,pdf_url) and the fallback to JSON candidate lists on ambiguous input. It does not mention pagination or result caps, but that is a minor gap.

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, front-loaded with purpose, then the exclusion/alternative, then the return shape. Every clause carries routing or format information; no filler.

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?

No output schema exists, and the description compensates by naming the return format and its columns plus the ambiguity fallback. Combined with fully documented parameters and safety annotations, an agent has everything needed to call this 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 100% and the schema already documents symbol typo tolerance, the candidate fallback, and the from/to defaulting rules. The description's mention of 'for a symbol' and the ambiguity behavior largely restates the schema, so the baseline 3 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?

States a specific verb+resource ('Get general CSE company disclosures for a symbol') and enumerates the covered disclosure types (board changes, AGM/EGM notices, listings, suspensions, name changes). It also names the sibling it is not (get_corporate_actions), so an agent can discriminate without opening either schema.

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

Usage Guidelines5/5

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

Explicitly routes dividends, rights issues, and share splits to get_corporate_actions and gives the reason (parsed structured detail vs raw text). It also tells the agent what to do when the symbol is ambiguous: surface candidates, ask the user, re-call.

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

get_chartGet candlestick chartA
Read-onlyIdempotent
Inspect

Render a candlestick + volume chart image (PNG) for a CSE symbol -- hand this to the user directly instead of describing price action from raw OHLC rows. EOD data only for now (daily/weekly/monthly bars, most recent bars periods) -- doesn't yet reflect today's live intraday movement. If the symbol is ambiguous, returns JSON candidates instead of an image.

NameRequiredDescriptionDefault
barsNoNumber of most-recent bars to render on the chart.
themeNoColor theme for the rendered chart image — pick "dark" to match a dark-mode UI.light
symbolYesA CSE ticker or company name (e.g. "SAMP" or "Sampath Bank"), typo-tolerant. An explicit instrument suffix (e.g. "SAMP.X0000") is respected; otherwise defaults to the voting-share instrument. If ambiguous, the response returns candidates instead of an image; ask the user to pick one and call again with the exact symbol.
intervalNoBar interval for the chart — "weekly"/"monthly" aggregate into coarser candles instead of daily bars.daily

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description adds genuinely new behavior: EOD-only data, no live intraday, and the dual return mode where an ambiguous symbol yields JSON candidates instead of an image. That is exactly the kind of non-obvious behavior an agent needs before calling.

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 tight sentences with zero filler, front-loading the core action and the hand-to-user instruction before the caveats. Every clause carries information the agent needs.

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

Completeness5/5

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

With no output schema, the description still tells the agent what comes back — a PNG image normally, or JSON candidates on ambiguity. Combined with the data-freshness caveat, nothing needed to call and interpret the result is missing.

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% and each of bars, theme, interval, and symbol is already documented in the schema. The description only reinforces what the schema says (most recent `bars` periods, daily/weekly/monthly intervals) without adding syntax or default details beyond it, so the baseline 3 applies.

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 a specific verb and resource — render a candlestick + volume chart image (PNG) for a CSE symbol — and immediately distinguishes itself from the raw-data sibling get_ohlc_data by saying to hand the image to the user rather than describe price action from OHLC rows. An agent can route to it without opening the schema.

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

Usage Guidelines5/5

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

Explicitly says to use this instead of describing raw OHLC rows, and states the constraint that it is EOD-only and does not reflect today's live intraday movement — a clear when-not condition. It also documents the fallback path for ambiguous symbols (ask the user to pick from candidates and call again).

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

get_corporate_actionsGet corporate actionsA
Read-onlyIdempotent
Inspect

Get a calendar of corporate actions (dividends, rights issues, share splits) — announcement details, not just a price-adjustment factor. This is the tool for dividends/rights/splits specifically; for other company disclosures (board changes, AGM/EGM notices, trading suspensions, etc.), use get_announcements instead. Omit all filters to browse every corporate action in the dataset, past and future, oldest first; pass from= to jump straight to upcoming ones, which is the most common need. Optionally scope to one company (matches every one of its share classes, not just one) and/or one kind. Returns CSV, one row per action. If the symbol is ambiguous, returns JSON candidates instead.

NameRequiredDescriptionDefault
toNoEnd date in YYYY-MM-DD format (by effective/ex-date). Omit for no upper bound.
fromNoStart date in YYYY-MM-DD format (by effective/ex-date). Omit for no lower bound.
kindNoRestrict the calendar to one kind of corporate action — split (a share split or consolidation), rights (a rights issue), or dividend.
limitNoMax entries to return, oldest first — use `offset` to page further in.
offsetNoSkip this many of the earliest matching entries before taking `limit` — use to page further in.
symbolNoA CSE ticker or company name (e.g. "SAMP" or "Sampath Bank"), typo-tolerant. Matches every share class of that company. Omit for a market-wide calendar. If ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, closed-world), and the description goes further by disclosing return format (CSV, one row per action), default ordering (oldest first), and the ambiguity fallback (JSON candidate list instead of data). The JSON-candidates behavior is a non-obvious failure mode an agent must handle, and it is stated clearly.

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?

Front-loaded with purpose and routing before defaults and return format; each sentence carries distinct information (boundary, default behavior, scoping, output shape). No filler or 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?

With no output schema, the description compensates by explaining the CSV row format and the JSON-candidates edge case. Combined with complete schema descriptions for all six optional parameters, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: that symbol matches every share class rather than one, and that an omitted symbol yields a market-wide calendar. It doesn't explain the limit/offset paging interaction beyond what the schema already says, keeping it just short of a 5.

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 a specific verb and resource ('Get a calendar of corporate actions') and enumerates the covered kinds (dividends, rights issues, share splits). It explicitly draws the boundary against the sibling get_announcements, so an agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Names the alternative tool (get_announcements) and the exact condition that selects it (board changes, AGM/EGM notices, trading suspensions). It also gives positive guidance on the most common call pattern (omit filters to browse all, or from=<today> for upcoming).

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

get_financial_statementGet financial statementA
Read-onlyIdempotent
Inspect

Get full line-item detail for one financial statement (income statement, balance sheet, or cash flow statement) for a CSE symbol — every quarter available, one row per line item. Cash-flow figures are cumulative (year-to-date) while income-statement figures are per-quarter — don't diff adjacent columns on the cash flow statement as if they were quarterly deltas. Returns CSV (label,canonical_key,), or JSON candidates if the input is ambiguous.

NameRequiredDescriptionDefault
symbolYesA CSE ticker or the company name (e.g. "SAMP" or "Sampath Bank"). Typos are tolerated. Statements are entity-level, so any instrument suffix given is ignored. If the input is ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.
statementYesWhich financial statement to fetch — "income" (income statement), "balance" (balance sheet), or "cashflow" (cash flow statement; its figures are cumulative year-to-date rather than per-quarter, as noted above).
company_typeNoMost companies only publish a "group" (consolidated) statement. Omit this to try group first and automatically fall back to "company" (standalone) if group is unavailable — the response says which one was actually served. Pass explicitly to force one variant only, with no fallback.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the readOnly/idempotent annotations: the cumulative year-to-date nature of cash-flow figures, the CSV return format with its column structure, and the candidate-list behavior on ambiguous input. These are non-obvious behavioral traits an agent would otherwise get wrong.

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

Conciseness4/5

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

Dense but front-loaded: the core purpose leads, followed by the critical interpretation caveat and the return-format note. Every sentence carries information, though the middle YTD warning is slightly clause-heavy.

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

Completeness5/5

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

With no output schema, the description compensates by describing the CSV column layout and the JSON candidate alternative. Combined with the fallback explanation and the statement-type semantics, an agent has everything needed to call and interpret this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by tying the 'cashflow' enum value to its cumulative interpretation and explaining the ambiguous-symbol candidate flow. It reinforces and clarifies parameter meaning rather than merely repeating it.

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 a specific verb and resource ('Get full line-item detail for one financial statement'), names the three statement types, and scopes it to a CSE symbol with one row per line item. This clearly separates it from siblings like get_quotes, get_ohlc_data, or get_market_summary.

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 when to use it — one statement for one symbol, all available quarters — and gives actionable guidance on interpreting cash-flow vs income-statement figures and on the ambiguity fallback. It does not explicitly name alternative tools, so it falls short of a 5.

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

get_foreign_holdingsGet foreign holdingsA
Read-onlyIdempotent
Inspect

Get the daily foreign-shareholding percentage series for a CSE symbol — how much of the free float is held by foreign investors, tracked day by day. This is instrument-specific (a voting share and its non-voting counterpart can carry different foreign-holding levels), so an explicit instrument suffix (e.g. "SAMP.X0000") is honored rather than overridden with the voting-share default. Returns CSV, most recent limit days by default (page further back with offset); pass from/to to scope a range. A pct of null means the source data was internally inconsistent for that day (a known data-quality issue), not a true zero. If the symbol is ambiguous, returns JSON candidates instead.

NameRequiredDescriptionDefault
toNoEnd date in YYYY-MM-DD format. Omit for no upper bound.
fromNoStart date in YYYY-MM-DD format. Omit for no lower bound.
limitNoMax days to return. Rows are selected most-recent-first internally, then returned in chronological order — use `offset` to page further back in history.
offsetNoSkip this many of the most recent matching days before taking `limit` — use to page further back in history.
symbolYesA CSE ticker or company name (e.g. "SAMP" or "Sampath Bank"), typo-tolerant. An explicit instrument suffix (e.g. "SAMP.X0000") is respected; otherwise defaults to the voting-share instrument. If ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.

TDQS

A3.9/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 goes further by disclosing the CSV return format, pagination behavior, the meaning of a null pct (a known data-quality issue, not a true zero), and the fallback to JSON candidates for ambiguous symbols. It does not cover auth needs or rate limits, but the added behavioral context is substantial.

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, front-loaded with the core purpose, and every sentence contributes distinct information: instrument specificity, CSV/pagination mechanics, null-data caveat, and ambiguous-symbol fallback. There is no redundant restatement of the name or schema fields.

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 no output schema, the description must explain return values; it does so adequately by stating the result is CSV with a pct series and describes pagination and ambiguous-symbol fallback. It does not enumerate all CSV columns, but the core data semantics are clear enough for an agent to interpret the output.

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 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the instrument-suffix behavior (voting vs non-voting shares) and the null pct semantics, which are not fully captured in the schema. It also reinforces the from/to, limit, and offset usage in a cohesive narrative.

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 and resource: 'Get the daily foreign-shareholding percentage series for a CSE symbol,' and clarifies the scope (how much of the free float is held by foreign investors, tracked day by day). It does not explicitly name or contrast with any sibling tool, but the resource is unique enough that an agent can distinguish it from get_top20_shareholders or get_quotes without opening other schemas.

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 gives practical guidance on how to use the tool (when to pass an instrument suffix, how to page with offset, how to scope with from/to), but it never states when to use this tool versus alternatives like get_top20_shareholders or get_quotes. Usage is implied by the purpose rather than explicitly contrasted with siblings.

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

get_index_dataGet index historyA
Read-onlyIdempotent
Inspect

Get historical data for a CSE market/sector index. Returns CSV (date,open,high,low,close,change,change_pct,sector_turnover,sector_volume,sector_trades,price_index,per,pbv,dy,companies_traded,companies_listed), or JSON candidates if the input is ambiguous. Headline indices (ASPI, S&P SL20) populate open/high/low/close; industry sub-indices instead populate sector_turnover/sector_volume/sector_trades and leave high/low empty.

NameRequiredDescriptionDefault
toNoUpper bound of the date range to fetch, in YYYY-MM-DD format. Omit for no upper bound (the most recent available date).
fromNoLower bound of the date range to fetch, in YYYY-MM-DD format. Omit for no lower bound (the earliest available date).
indexYesThe index symbol, name, or common abbreviation (e.g. "ASPI", "SNP20", "S&P SL20", "Energy", "Banks"). Typos are tolerated. If the input is ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses the exact return shape (CSV column list), the JSON-candidate fallback for ambiguous input, and the critical behavioral difference that headline indices (ASPI, S&P SL20) populate OHLC while industry sub-indices populate turnover/volume/trades and leave high/low empty.

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

Conciseness4/5

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

Three dense sentences, with the core purpose front-loaded before the return-format and index-type caveats. The CSV column enumeration is long but earns its place since no output schema exists; nothing is redundant.

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

Completeness5/5

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

With no output schema, the description is responsible for describing returns and it does so thoroughly, including the column set, the JSON candidate edge case, and the headline-vs-sub-index field divergence. An agent has everything needed to call it and interpret the result.

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% and the schema already documents 'from', 'to', and 'index' including format and ambiguity behavior. The description adds no parameter syntax or format detail beyond what the schema provides, so the baseline of 3 applies.

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 a specific verb and resource: 'Get historical data for a CSE market/sector index.' The word 'historical' distinguishes it from sibling tools like get_indices (current listings) and screen_indices, so an agent can route to it without opening schemas.

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 explains the ambiguity-recovery flow (ask the user to pick a candidate and call again), which is genuine usage guidance. However, it never states when to prefer this over get_indices, screen_indices, or get_ohlc_data, so the alternative-selection guidance is only implied.

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

get_indicesList market indicesA
Read-onlyIdempotent
Inspect

List CSE market/sector indices (ASPI, S&P SL20, and industry sub-indices). Optionally search by name. Returns CSV (symbol,name,index_code,index_name,is_main_index).

NameRequiredDescriptionDefault
queryNoOptional search term to filter indices by name, e.g. "energy" or "banks".

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safe-read profile is covered. The description adds genuinely new context by disclosing the return shape (CSV with symbol,name,index_code,index_name,is_main_index), which is valuable since no output schema exists.

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 tight sentences, zero padding, with the resource definition front-loaded ahead of the optional filter and the return format. Every clause carries information an agent can act on.

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 parameterless list tool with one optional filter, annotations covering safety and an inline statement of the returned columns, nothing further is needed for correct invocation. Absence of an output schema is fully compensated by the CSV column disclosure.

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% and the single optional parameter is fully documented, so the baseline is 3. The description's 'optionally search by name' restates what the schema already says without adding format or matching semantics.

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?

States a specific verb (List) and resource (CSE market/sector indices), and names concrete instances (ASPI, S&P SL20, industry sub-indices) so an agent knows exactly what is covered. It does not explicitly distinguish itself from the closest sibling get_index_data, which is the only gap keeping this below a 5.

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 says the query parameter is optional and used to search by name, which is implicit usage guidance for the one parameter. It never states when to use this list tool versus get_index_data or screen_indices, so the agent must infer the boundary between them.

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

get_macro_dataGet macroeconomic dataA
Read-onlyIdempotent
Inspect

Get macroeconomic data for a specific series. Returns CSV (date,value), or JSON candidates if the input is ambiguous.

NameRequiredDescriptionDefault
toNoUpper bound of the date range to filter by, in YYYY-MM-DD format. Omit for no upper bound (the latest available data point).
fromNoLower bound of the date range to filter by, in YYYY-MM-DD format. Omit for no lower bound (the earliest available data point).
series_idYesThe macro series identifier or its name (e.g. "inflation" or "CCPI_YOY"). Typos are tolerated. If the input is ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact series_id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes beyond them by disclosing the return format (CSV date,value) and the candidate-list fallback on ambiguous input. This is meaningful behavioral context the annotations do not provide.

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 tight sentences that lead with the core action and immediately cover the two possible response shapes. No filler, nothing redundant.

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 no output schema, the description usefully explains both possible return shapes (CSV data vs. JSON candidates), which is enough for correct invocation. It stops short of describing pagination or how large the returned CSV might be.

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 schema already documents series_id, from, and to thoroughly, including typo tolerance and the date format. The description adds nothing beyond what the schema states, so the baseline 3 applies.

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?

States a specific verb (Get) and resource (macroeconomic data) scoped to 'a specific series', which clearly separates it from sibling listing-style tools. However, it never names or contrasts with get_macro_series, the closest sibling, leaving the boundary between 'data' and 'series' to inference.

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 ambiguity flow ('ask the user to pick one and call again') gives implied operational guidance, but there is no explicit statement of when to use this tool versus get_macro_series, get_index_data, or other data endpoints. Usage is inferable but not stated.

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

get_macro_seriesList macroeconomic seriesA
Read-onlyIdempotent
Inspect

List available macroeconomic series definitions. Optionally search by name. Returns CSV (id,name,description,frequency,unit,source).

NameRequiredDescriptionDefault
queryNoOptional search term to filter series by name, e.g. "inflation" or "exchange rate".

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, so the safety profile is covered. The description adds genuinely new context by disclosing the return format (CSV with id,name,description,frequency,unit,source), which the annotations do not provide.

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 compact sentences with zero waste: action first, optional filter second, return shape last. Every clause 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 low-complexity, single-optional-param list tool with no output schema, the description covers action, filtering, and the return columns. It could be marginally stronger by routing to the data-fetch sibling, but nothing essential is missing.

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 single 'query' parameter is already fully documented with examples in the schema. The description's 'search by name' merely restates it without adding syntax or matching behavior, so the baseline 3 applies.

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?

States a specific verb and resource ('List available macroeconomic series definitions'), and the word 'definitions' distinguishes it from the sibling get_macro_data, which presumably returns observations. It does not name that sibling explicitly, so differentiation is implicit rather than stated.

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?

'Optionally search by name' implies the filtering use case, but there is no explicit guidance on when to choose this over get_macro_data or other siblings. Usage is only weakly implied.

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

get_market_summaryGet market summaryA
Read-onlyIdempotent
Inspect

Get a daily/weekly/monthly market-wide overview: top gainers/losers, top by volume/turnover/crossings, ASI and S&P SL20 performance, and top/bottom performing sectors. A weekly or monthly summary requested mid-period covers what has happened so far (e.g. Monday through today for a weekly summary requested on a Wednesday), not a wait for the period to finish and not the prior complete period — the response's isPartialPeriod field says which case applies. Returns JSON (not CSV — this is a bundle of several small lists, not one table).

NameRequiredDescriptionDefault
dateNoReference date in YYYY-MM-DD format, defaults to the latest trading date. For weekly/monthly, this is any date within the period you want — e.g. a date last month for last month's summary.
limitNoMax entries to include in each list (gainers, losers, volume, turnover, crossings, top/bottom sectors).
periodNoWhich calendar window to summarize. A weekly/monthly request for a currently in-progress period returns data for what has happened so far rather than waiting for the period to finish — see `isPartialPeriod` in the response.daily

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds value beyond them by disclosing the return format (JSON, deliberately not CSV, and why) and by surfacing the isPartialPeriod response field that governs interpretation of weekly/monthly results. It does not mention rate limits or auth, keeping it short of a 5.

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

Conciseness4/5

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

Front-loaded with the resource and its contents, then the two disambiguating facts (partial-period semantics, JSON-not-CSV). Slightly redundant: the partial-period rule is repeated almost verbatim in the period parameter description, costing a little density but not clarity.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so: it names the response shape (a bundle of small lists), the format (JSON), and the key interpretive field (isPartialPeriod). Combined with full schema coverage and annotations, an agent has everything needed to call and interpret this 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 schema already documents date, limit, and period semantics, including the mid-period behavior for weekly/monthly. The description restates the period/partial-period interaction rather than adding syntax, bounds, or format details the schema lacks; 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?

States a specific verb ('Get') and resource ('market summary') and enumerates exactly what the bundle contains: top gainers/losers, volume/turnover/crossings, ASI and S&P SL20 performance, and sector performance. This clearly separates it from siblings like get_index_data (single index) and screen_stocks (filtering), so an agent can route without opening schemas.

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?

Gives clear context for the tricky case — a weekly/monthly summary requested mid-period covers the in-progress period, not the prior complete one — which is exactly the ambiguity an agent would otherwise guess wrong on. It stops short of naming alternatives (e.g. when to prefer get_index_data or screen_stocks instead), so it is clear context without explicit exclusions.

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

get_ohlc_dataGet OHLC price historyA
Read-onlyIdempotent
Inspect

Get OHLCV (open, high, low, close, volume) data for a CSE symbol. Prices are adjusted for splits by default (clean price action), but NOT for rights issues or dividends, unless requested. Defaults to the most recent 50 trading days; if more history is available the response says so and how to page further back with offset. Returns CSV (date,open,high,low,close,volume) preceded by a note if the symbol was resolved from a name/typo, if the company has other instruments, or if any corporate actions (splits/rights/dividends) fall within the requested range. If the input is ambiguous, returns JSON candidates instead.

NameRequiredDescriptionDefault
toNoEnd of an explicit date range to fetch, in YYYY-MM-DD format. Omit to default to the latest available trading day.
fromNoStart of an explicit date range to fetch, in YYYY-MM-DD format. Omit to use the default recent-trading-days window instead (see `limit`).
limitNoMax trading days to return. The most recent matching days are selected first and then reordered chronologically before being returned — use `offset` to page further back in history.
offsetNoSkip this many of the most recent trading days before taking `limit` — use to page further back into history.
symbolYesA CSE ticker (e.g. "SAMP" or "SAMP.N0000") or the company name (e.g. "Sampath Bank"). Typos are tolerated. A bare symbol or name defaults to the voting-shares instrument if the company has more than one listed instrument (voting/non-voting/rights/debentures/preferential) — the response notes the others if so. If the input is ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.
intervalNoBar size for the returned series — use "weekly" or "monthly" to aggregate into coarser bars instead of daily candles.daily
adjust_rightsNoAdjust historical prices for past rights issues falling within the range, producing continuous pre-/post-issue price action.
adjust_splitsNoAdjust historical prices for stock splits and scrip/bonus share dividends.
adjust_dividendsNoAdjust historical prices for cash dividends, producing a total-return series — turn this on when the user is asking about total return / performance rather than raw price action.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: default adjustment policy (splits on, rights/dividends off), the 50-day default and offset paging, CSV shape, note prefixes for name resolution / other instruments / corporate actions, and the JSON-candidates behavior on ambiguous input. That is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Front-loads purpose and defaults, then layers edge cases; nearly every clause carries information (adjustment policy, paging, ambiguous-input path). It is dense and somewhat clause-heavy, but not padded.

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

Completeness5/5

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

With no output schema, the description carries the return-format burden and does so fully: CSV columns, the leading note variants, and the JSON-candidates substitute response. Nothing an agent needs to call and interpret this tool 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 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema states only piecemeal: the default split-only adjustment posture and the interaction that offset + limit page backward through history. It stops short of adding format details beyond 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?

States a specific verb and resource ('Get OHLCV data for a CSE symbol') and immediately scopes it with adjustment semantics and the default window. An agent can separate this from get_quotes (snapshot) and get_chart (visual) without opening any schema.

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?

Gives real conditional guidance: adjust_dividends for total-return questions, offset for paging further back, and the ambiguity fallback ('ask the user to pick one'). It never names a sibling tool as the alternative for a competing task, so it stops short of a 5.

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

get_quotesGet live quotesA
Read-onlyIdempotent
Inspect

Get a live price snapshot for CSE stocks -- price, change, and change% for one or more symbols, or every CSE stock at once. During market hours (09:30-14:30 IST) this reflects the latest intraday tick; outside market hours it falls back to the last session's closing price. Returns CSV, one row per symbol. Unlike a single-symbol lookup, one bad entry in a batch does not fail the whole call -- a symbol that didn't resolve just comes back with empty price fields in that row, and a trailing note after the table lists which symbols were not found or ambiguous (with candidates for the ambiguous ones) -- call again with the exact symbol for any of those.

NameRequiredDescriptionDefault
allNoReturn every CSE stock in one response. Mutually exclusive with `symbols`.
symbolsNoComma-separated CSE tickers or company names (e.g. "SAMP,JKH.N0000"), typo-tolerant, capped at 50 per call. Mutually exclusive with `all` — provide exactly one of the two; omit this and set `all=true` instead for every CSE stock.

TDQS

A4.4/5.0
Behavior5/5

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

Despite annotations already covering read/safe/idempotent, the description adds substantial behavioral context: market-hours intraday tick vs out-of-hours closing-price fallback, and the batch-tolerance behavior (a bad symbol yields empty price fields rather than failing the call). It even documents the trailing not-found/ambiguous note and the retry path — genuinely useful beyond the structured fields.

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

Conciseness4/5

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

Front-loaded with the core purpose, then market-hours nuance, then return format, then edge-case handling. It is dense but every sentence carries distinct information; the batch-error sentence is long but justified by the non-obvious behavior it discloses.

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

Completeness5/5

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

With no output schema, the description carries the return burden and does so: CSV format, one row per symbol, and the trailing note listing unresolved/ambiguous symbols. Combined with timing and error semantics, an agent has everything needed to call and interpret 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 description coverage is 100%, so both `all` and `symbols` are already fully documented including mutual exclusion and typo-tolerance. The description restates the one-vs-all usage but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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 a specific verb and resource ('Get a live price snapshot for CSE stocks') and names the exact fields returned (price, change, change%). It clearly reads as a current snapshot tool, distinguishing it from historical siblings like get_ohlc_data or get_chart.

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?

Explains the two usage modes ('one or more symbols, or every CSE stock at once') and gives the retry instruction for unresolved symbols. It stops short of explicitly naming sibling alternatives (e.g. get_ohlc_data for historical), so it is clear context without full exclusion guidance.

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

get_symbolsSearch Colombo Stock Exchange symbolsA
Read-onlyIdempotent
Inspect

List available CSE symbols with metadata. Optionally search by company name and/or sector. Returns CSV (symbol,name,sector,industry,is_active,last_updated).

NameRequiredDescriptionDefault
queryNoSearch term to filter companies by name, e.g. "bank" or "trust".
sectorNoSearch term to filter companies by sector, e.g. "bank" or "materials". Matches as a substring, not exact, since source sector names vary in formatting.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds little beyond that profile — it implies a full enumeration when no filters are given but does not state whether results are paginated or capped.

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 core purpose, then the optional filters, then the return shape. No filler or repetition.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the CSV columns (symbol,name,sector,industry,is_active,last_updated), which is the key missing structured information. Minor gaps remain around result size or completeness guarantees, but the definition is sufficient to invoke 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% and both parameters are documented there with examples and substring-match behavior, so the schema carries the load. The description only adds that both filters are optional, which is the baseline expectation.

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?

States a specific verb ('List') and resource ('available CSE symbols with metadata'), plus the return format. It is clearly the symbol-universe tool and not confusable with quote/chart siblings, though it never explicitly differentiates itself from the closer-sounding screen_stocks or screen_indices.

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?

'Optionally search by company name and/or sector' implies the filtering use case, which is adequate context. There is no explicit when-to-use/when-not guidance and no mention of alternative tools (e.g., screen_stocks) for broader screening.

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

get_technicalsGet technicalsA
Read-onlyIdempotent
Inspect

Get pre-computed daily technicals (moving averages, relative-strength rating, 52-week range, volume anomalies) for a CSE stock OR a sector/headline index (ASPI, S&P SL20, industry sub-indices) — one tool for both. Returns CSV, one row per trading day, most recent last. Defaults to the most recent 50 trading days; if more history is available the response says so and how to page further back with offset. If the input is ambiguous, returns JSON candidates instead.

NameRequiredDescriptionDefault
toNoUpper bound of the date range to search within for the most recent `limit` matching trading days. Omit for no upper bound (defaults to the latest available date).
fromNoLower bound of the date range to search within for the most recent `limit` matching trading days. Omit for no lower bound.
limitNoMax trading days to return. Rows are selected most-recent-first within the range before being reversed to chronological order — use `offset` to page further back in history.
offsetNoSkip this many of the most recent trading days before taking `limit` — use to page further back into history.
symbolYesA CSE ticker, company name, index symbol/name/abbreviation (e.g. "SAMP", "Sampath Bank", "ASPI", "Energy"), or a typo of any. If the input is ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description layers on non-obvious behavior: CSV output shape ('one row per trading day, most recent last'), the 50-day default, self-disclosure when more history exists, and JSON candidate fallback on ambiguity. That is exactly the extra context annotations cannot convey.

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

Conciseness4/5

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

The single dense paragraph is front-loaded with the core purpose and output format, then tacks on defaults and ambiguity handling. Nearly every clause carries information, though the symbol-vs-index and ambiguity points could be separated for faster scanning.

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

Completeness5/5

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

With no output schema, the description steps in to describe the return format, row ordering, default window, and the JSON-candidates alternative response, plus how to page. Nothing an agent needs to invoke it 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?

Schema coverage is 100%, so the baseline is 3, but the description adds end-to-end meaning: it ties limit/offset to chronological vs most-recent-first ordering and explains what happens when symbol resolution is ambiguous (candidates returned, re-call with exact symbol). This goes beyond the per-parameter text.

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 gives a specific verb and resource ('Get pre-computed daily technicals') and enumerates the payload (moving averages, relative-strength rating, 52-week range, volume anomalies). It also states the dual coverage (CSE stock OR sector/headline index), which separates it from raw-data siblings like get_ohlc_data and index-only siblings like get_index_data.

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

Usage Guidelines4/5

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

It clearly frames when the tool applies ('for a CSE stock OR a sector/headline index ... one tool for both') and explains paging ('how to page further back with offset') and the ambiguous-input fallback. It stops short of naming an explicit alternative for raw price history, so the routing guidance is strong but not exhaustive.

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

get_top20_shareholdersGet top shareholdersA
Read-onlyIdempotent
Inspect

Get the top-20 ranked shareholder list for a CSE company, as filed each quarter. Shareholders are entity-level (any instrument suffix given is ignored, same as get_financial_statement). Returns CSV (quarter,rank,name,shares,pct). By default only the latest quarter on record is returned — pass all=true to see every quarter (useful for spotting ownership changes over time), or quarter to see one specific historical snapshot. If the symbol is ambiguous, returns JSON candidates instead.

NameRequiredDescriptionDefault
allNoReturn every quarter on record, oldest first, instead of just the latest.
symbolYesA CSE ticker or the company name (e.g. "SAMP" or "Sampath Bank"). Typos are tolerated. Shareholder data is entity-level, so any instrument suffix given is ignored. If ambiguous, the response returns candidates instead of data; ask the user to pick one and call again with the exact symbol.
quarterNoRestrict to one filed period, exactly as it appears in the response's meta.quarters list (e.g. "Mar 2025"). Takes precedence over `all`. Omit along with `all` to get just the latest quarter.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new behavior: exact return shape ('CSV (quarter,rank,name,shares,pct)'), that instrument suffixes are ignored, that `quarter` overrides `all`, and the non-obvious fallback of returning JSON candidates on ambiguity. These are traits an agent cannot infer from annotations or schema.

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

Conciseness4/5

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

Front-loaded with the core purpose and return shape before mode details, with no filler sentences. It is somewhat dense across several clauses, but every clause carries operational information.

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

Completeness5/5

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

With no output schema, the description steps in to specify the exact return columns and the JSON-candidates fallback, and it covers default scope, override precedence, and symbol matching. Nothing needed to invoke it correctly is missing.

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% and the schema itself already documents the `all` semantics, the `quarter` precedence over `all`, and the ambiguity behavior. The description largely restates those rules rather than adding format or syntax beyond them, so the baseline 3 applies.

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 a specific verb and resource ('Get the top-20 ranked shareholder list for a CSE company'), plus filing cadence and entity-level scoping. It explicitly cross-references get_financial_statement for the same entity-level semantics, letting an agent distinguish it from siblings without opening schemas.

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?

Gives clear default behavior (latest quarter only) and the conditions that select each alternative mode ('all=true to see every quarter', 'quarter to see one specific historical snapshot'). It also flags the ambiguous-symbol path. It stops short of naming sibling tools that are alternatives for adjacent questions (e.g., get_foreign_holdings), so no explicit when-not-to-use.

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

screen_indicesScreen indicesA
Read-onlyIdempotent
Inspect

Screen CSE sector/headline indices (ASPI, S&P SL20, and industry sub-indices) by the same pre-computed technical criteria as screen_stocks — moving-average position and relative-strength rating. There is no 52-week-range or volume filter here (those are not tracked for indices). Use this to find which sectors are in a sustained uptrend/downtrend, as distinct from get_indices/get_index_data which show a single day's performance. Returns CSV, one row per matching index.

NameRequiredDescriptionDefault
dateNoTrading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted.
sortNoColumn to sort by. Default rs_rating.
limitNoMax results to return; the underlying screener defaults to 20 when omitted.
orderNoSort direction. Default desc.
above_ema21NoWhen set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average.
above_ema50NoWhen set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average.
above_sma10NoWhen set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average.
above_ema200NoWhen set, filters to results whose price is currently above (true) or below (false) its 200-day exponential moving average — a long-term trend filter.
rs_rating_maxNoMaximum relative-strength rating (1-99 percentile rank vs. the whole market) to include.
rs_rating_minNoMinimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders.
change_pct_maxNoOnly include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move).
change_pct_minNoOnly include results whose today's percentage price change is at least this value (e.g. 5 for a +5% or greater move).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds real behavioral context beyond them: which criteria the screener evaluates, which screen_stocks filters are absent for indices, and the return shape ('Returns CSV, one row per matching index').

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, tightly front-loaded: purpose/scope first, exclusions and alternatives second, return format last. No filler or restated name/title, and each sentence carries distinct 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?

For a 12-parameter, all-optional screener with no output schema, the description covers scope, criteria, exclusions, sibling routing, and return format, and the schema carries the parameter detail. It slightly under-delivers on how the boolean MA filters combine with the RS/change ranges, but nothing essential is missing.

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 schema already documents all 12 parameters with formats, ranges, and examples; the baseline is 3. The description adds only a high-level mapping of the filter family (moving-average position, RS rating) and flags which filter dimensions do not exist, but no per-parameter syntax or interaction detail.

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

Purpose5/5

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

Opens with a specific verb+resource ('Screen CSE sector/headline indices'), names the concrete index families (ASPI, S&P SL20, industry sub-indices) and states the criteria used. It explicitly distinguishes itself from screen_stocks (same criteria) and from get_indices/get_index_data (single-day performance).

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?

States the use case directly ('find which sectors are in a sustained uptrend/downtrend') and names the alternative tools for the other use case (single-day performance via get_indices/get_index_data). It also gives an explicit exclusion: no 52-week-range or volume filter here.

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

screen_stocksScreen stocksA
Read-onlyIdempotent
Inspect

Screen CSE stocks by pre-computed technical criteria (moving-average position, relative-strength rating, 52-week range, unusual volume). Every filter is optional and AND-combined; omit a filter to not constrain on it. E.g. above_ema50=true & above_ema200=true & rs_rating_min=80 finds market-leading uptrends; is_52w_high=true finds stocks making new highs today; vol_vs_sma50_pct_min=100 finds unusual volume (trading at 2x+ its 50-day average). Returns CSV, one row per matching stock.

NameRequiredDescriptionDefault
dateNoTrading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted.
sortNoColumn to rank results by. Defaults to rs_rating (relative-strength rating) when omitted.
limitNoMax results to return; the underlying screener defaults to 20 when omitted.
orderNoSort direction. Default desc.
is_hv1NoFilter to stocks with the highest volume in the past 252 trading days.
is_hveNoFilter to stocks with the highest volume ever recorded today.
sectorNoOptional substring filter against the company sector name, e.g. "bank" or "materials".
is_hvytdNoFilter to stocks with the highest volume year-to-date.
is_52w_lowNoFilter to stocks at a 52-week low today.
above_ema21NoWhen set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average.
above_ema50NoWhen set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average.
above_sma10NoWhen set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average.
is_52w_highNoFilter to stocks at a 52-week high today.
above_ema200NoWhen set, filters to results whose price is currently above (true) or below (false) its 200-day exponential moving average — a long-term trend filter.
rs_rating_maxNoMaximum relative-strength rating (1-99 percentile rank vs. the whole market) to include.
rs_rating_minNoMinimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders.
change_pct_maxNoOnly include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move).
change_pct_minNoOnly include results whose today's percentage price change is at least this value (e.g. 5 for a +5% or greater move).
vol_vs_sma50_pct_maxNoMaximum volume-vs-50-day-average percent.
vol_vs_sma50_pct_minNoMinimum today's volume vs. its 50-day average volume, as a percent (e.g. 100 = 2x average).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds the return contract ('Returns CSV, one row per matching stock') and the optional-AND-filter semantics, which the annotations do not convey. It omits any note on rate limits, result caps, or screening-date behavior, keeping it from a 5.

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?

Four sentences, front-loaded with purpose, then combinatorics, then compact worked examples, then the return format. No filler and every sentence carries distinct information.

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 20-parameter screening tool with no output schema, the description covers purpose, filter semantics, examples, and the CSV return shape, while the schema fully documents each parameter and its defaults. Nothing an agent needs to invoke it 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?

Schema description coverage is 100%, so baseline is 3, but the description adds value beyond the schema: it explains filter-combination semantics (optional, AND-combined) and gives concrete examples with expected interpretations (above_ema50 & above_ema200 & rs_rating_min=80 = market-leading uptrends; vol_vs_sma50_pct_min=100 = 2x average volume).

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 a specific verb+resource+domain ('Screen CSE stocks by pre-computed technical criteria') and enumerates the criterion families (MA position, RS rating, 52-week range, unusual volume). This clearly distinguishes it from siblings like get_technicals (single-symbol) and screen_indices (indices rather than stocks).

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

Usage Guidelines4/5

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

Explicitly explains the combinatorics ('every filter is optional and AND-combined; omit a filter to not constrain on it') and gives three worked filter combinations showing intended usage. It does not name a sibling alternative or state when NOT to use this tool (e.g., versus get_technicals for a single symbol), so it stops short of a 5.

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. 14 tool updates
    • Changedget_announcements2 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"Start date in YYYY-MM-DD format. Defaults to 1 year before `to` or today."New value: +"Start of the date range to filter by. Defaults to 1 year before `to`, or 1 year before today if neither bound is given."
      • changedInput schema / properties / to / description
        Previous value: -"End date in YYYY-MM-DD format. Defaults to today when omitted."New value: +"End of the date range to filter by. Defaults to today when omitted."
    • Changedget_chart3 fields changed
      • changedInput schema / properties / bars / description
        Previous value: -"Number of most-recent bars to show. Default 90, max 250."New value: +"Number of most-recent bars to render on the chart."
      • changedInput schema / properties / interval / description
        Previous value: -"Bar interval. Default daily."New value: +"Bar interval for the chart — \"weekly\"/\"monthly\" aggregate into coarser candles instead of daily bars."
      • changedInput schema / properties / theme / description
        Previous value: -"Chart color theme. Default light."New value: +"Color theme for the rendered chart image — pick \"dark\" to match a dark-mode UI."
    • Changedget_corporate_actions2 fields changed
      • changedInput schema / properties / kind / description
        Previous value: -"Restrict to one kind of corporate action."New value: +"Restrict the calendar to one kind of corporate action — split (a share split or consolidation), rights (a rights issue), or dividend."
      • changedInput schema / properties / limit / description
        Previous value: -"Max entries to return, oldest first. Default 50, max 500."New value: +"Max entries to return, oldest first — use `offset` to page further in."
    • Changedget_financial_statement1 field changed
      • changedInput schema / properties / statement / description
        Previous value: -"Which statement to fetch."New value: +"Which financial statement to fetch — \"income\" (income statement), \"balance\" (balance sheet), or \"cashflow\" (cash flow statement; its figures are cumulative year-to-date rather than per-quarter, as noted above)."
    • Changedget_foreign_holdings1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max days to return, most recent first internally but returned chronologically. Default 50, max 500."New value: +"Max days to return. Rows are selected most-recent-first internally, then returned in chronological order — use `offset` to page further back in history."
    • Changedget_index_data2 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"Start date in YYYY-MM-DD format"New value: +"Lower bound of the date range to fetch, in YYYY-MM-DD format. Omit for no lower bound (the earliest available date)."
      • changedInput schema / properties / to / description
        Previous value: -"End date in YYYY-MM-DD format"New value: +"Upper bound of the date range to fetch, in YYYY-MM-DD format. Omit for no upper bound (the most recent available date)."
    • Changedget_macro_data2 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"Start date in YYYY-MM-DD format"New value: +"Lower bound of the date range to filter by, in YYYY-MM-DD format. Omit for no lower bound (the earliest available data point)."
      • changedInput schema / properties / to / description
        Previous value: -"End date in YYYY-MM-DD format"New value: +"Upper bound of the date range to filter by, in YYYY-MM-DD format. Omit for no upper bound (the latest available data point)."
    • Changedget_market_summary2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max entries per list (gainers, losers, volume, turnover, crossings, top/bottom sectors). Default 5, max 20."New value: +"Max entries to include in each list (gainers, losers, volume, turnover, crossings, top/bottom sectors)."
      • changedInput schema / properties / period / description
        Previous value: -"Summary window."New value: +"Which calendar window to summarize. A weekly/monthly request for a currently in-progress period returns data for what has happened so far rather than waiting for the period to finish — see `isPartialPeriod` in the response."
    • Changedget_ohlc_data7 fields changed
      • changedInput schema / properties / adjust_dividends / description
        Previous value: -"Adjust historical prices for cash dividends, producing a total-return series. Default false — turn this on when the user is asking about total return / performance rather than raw price action."New value: +"Adjust historical prices for cash dividends, producing a total-return series — turn this on when the user is asking about total return / performance rather than raw price action."
      • changedInput schema / properties / adjust_rights / description
        Previous value: -"Adjust historical prices for rights issues. Default false."New value: +"Adjust historical prices for past rights issues falling within the range, producing continuous pre-/post-issue price action."
      • changedInput schema / properties / adjust_splits / description
        Previous value: -"Adjust historical prices for stock splits and scrip/bonus share dividends. Default true."New value: +"Adjust historical prices for stock splits and scrip/bonus share dividends."
      • changedInput schema / properties / from / description
        Previous value: -"Start date in YYYY-MM-DD format"New value: +"Start of an explicit date range to fetch, in YYYY-MM-DD format. Omit to use the default recent-trading-days window instead (see `limit`)."
      • changedInput schema / properties / interval / description
        Previous value: -"Data interval"New value: +"Bar size for the returned series — use \"weekly\" or \"monthly\" to aggregate into coarser bars instead of daily candles."
      • changedInput schema / properties / limit / description
        Previous value: -"Max trading days to return, most recent first (before reversing to chronological order). Default 50, max 500."New value: +"Max trading days to return. The most recent matching days are selected first and then reordered chronologically before being returned — use `offset` to page further back in history."
      • changedInput schema / properties / to / description
        Previous value: -"End date in YYYY-MM-DD format"New value: +"End of an explicit date range to fetch, in YYYY-MM-DD format. Omit to default to the latest available trading day."
    • Changedget_quotes1 field changed
      • changedInput schema / properties / symbols / description
        Previous value: -"Comma-separated CSE tickers or company names (e.g. \"SAMP,JKH.N0000\"), typo-tolerant, up to 50. Omit and set `all=true` instead for every CSE stock. Exactly one of `symbols`/`all` is required."New value: +"Comma-separated CSE tickers or company names (e.g. \"SAMP,JKH.N0000\"), typo-tolerant, capped at 50 per call. Mutually exclusive with `all` — provide exactly one of the two; omit this and set `all=true` instead for every CSE stock."
    • Changedget_symbols2 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"Optional search term to filter companies by name, e.g. \"bank\" or \"trust\"."New value: +"Search term to filter companies by name, e.g. \"bank\" or \"trust\"."
      • changedInput schema / properties / sector / description
        Previous value: -"Optional search term to filter companies by sector, e.g. \"bank\" or \"materials\". Matches as a substring, not exact, since source sector names vary in formatting."New value: +"Search term to filter companies by sector, e.g. \"bank\" or \"materials\". Matches as a substring, not exact, since source sector names vary in formatting."
    • Changedget_technicals3 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"Start date in YYYY-MM-DD format"New value: +"Lower bound of the date range to search within for the most recent `limit` matching trading days. Omit for no lower bound."
      • changedInput schema / properties / limit / description
        Previous value: -"Max trading days to return, most recent first (before reversing to chronological order). Default 50, max 500."New value: +"Max trading days to return. Rows are selected most-recent-first within the range before being reversed to chronological order — use `offset` to page further back in history."
      • changedInput schema / properties / to / description
        Previous value: -"End date in YYYY-MM-DD format"New value: +"Upper bound of the date range to search within for the most recent `limit` matching trading days. Omit for no upper bound (defaults to the latest available date)."
    • Changedscreen_indices9 fields changed
      • changedInput schema / properties / above_ema200 / description
        Previous value: -"Filter by price above/below its 200-day exponential moving average (long-term trend filter)."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 200-day exponential moving average — a long-term trend filter."
      • changedInput schema / properties / above_ema21 / description
        Previous value: -"Filter by price above/below its 21-day exponential moving average."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average."
      • changedInput schema / properties / above_ema50 / description
        Previous value: -"Filter by price above/below its 50-day exponential moving average."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average."
      • changedInput schema / properties / above_sma10 / description
        Previous value: -"Filter by price above/below its 10-day simple moving average."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average."
      • changedInput schema / properties / change_pct_max / description
        Previous value: -"Maximum today's percent change."New value: +"Only include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move)."
      • changedInput schema / properties / change_pct_min / description
        Previous value: -"Minimum today's percent change."New value: +"Only include results whose today's percentage price change is at least this value (e.g. 5 for a +5% or greater move)."
      • changedInput schema / properties / date / description
        Previous value: -"YYYY-MM-DD. Defaults to the latest available trading date."New value: +"Trading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default 20, max 100)."New value: +"Max results to return; the underlying screener defaults to 20 when omitted."
      • changedInput schema / properties / rs_rating_max / description
        Previous value: -"Maximum relative-strength rating (1-99)."New value: +"Maximum relative-strength rating (1-99 percentile rank vs. the whole market) to include."
    • Changedscreen_stocks10 fields changed
      • changedInput schema / properties / above_ema200 / description
        Previous value: -"Filter by price above/below its 200-day exponential moving average (long-term trend filter)."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 200-day exponential moving average — a long-term trend filter."
      • changedInput schema / properties / above_ema21 / description
        Previous value: -"Filter by price above/below its 21-day exponential moving average."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average."
      • changedInput schema / properties / above_ema50 / description
        Previous value: -"Filter by price above/below its 50-day exponential moving average."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average."
      • changedInput schema / properties / above_sma10 / description
        Previous value: -"Filter by price above/below its 10-day simple moving average."New value: +"When set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average."
      • changedInput schema / properties / change_pct_max / description
        Previous value: -"Maximum today's percent change."New value: +"Only include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move)."
      • changedInput schema / properties / change_pct_min / description
        Previous value: -"Minimum today's percent change."New value: +"Only include results whose today's percentage price change is at least this value (e.g. 5 for a +5% or greater move)."
      • changedInput schema / properties / date / description
        Previous value: -"YYYY-MM-DD. Defaults to the latest available trading date."New value: +"Trading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default 20, max 100)."New value: +"Max results to return; the underlying screener defaults to 20 when omitted."
      • changedInput schema / properties / rs_rating_max / description
        Previous value: -"Maximum relative-strength rating (1-99)."New value: +"Maximum relative-strength rating (1-99 percentile rank vs. the whole market) to include."
      • changedInput schema / properties / sort / description
        Previous value: -"Column to sort by. Default rs_rating."New value: +"Column to rank results by. Defaults to rs_rating (relative-strength rating) when omitted."
  2. 2 tool updates
    • Addedget_chart
    • Addedget_quotes
  3. 2 tool updates
    • Addedget_foreign_holdings
    • Addedget_top20_shareholders
  4. 13 tool updates
    • First observedget_announcements
    • First observedget_corporate_actions
    • First observedget_financial_statement
    • First observedget_index_data
    • First observedget_indices
    • First observedget_macro_data
    • First observedget_macro_series
    • First observedget_market_summary
    • First observedget_ohlc_data
    • First observedget_symbols
    • First observedget_technicals
    • First observedscreen_indices
    • First observedscreen_stocks

Publisher details

Operator
Creon Solutions Pvt. Ltd. · Publisher source
Vendor relationship
Not applicable
Trust center
Not available
Restrictions
Not applicable

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server for the Colombo Stock Exchange that enables users to search listed companies, fetch stock quotes, and retrieve real-time market snapshots. It provides a structured interface for AI tools to access CSE data, including top gainers, losers, and index summaries.
    7
    15 npm
    3
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying real-time and historical Colombo Stock Exchange data, including prices, sectors, top movers, and technical indicators like RSI and MACD, for AI-assisted market analysis.
    1
    -
  • A
    license
    A
    quality
    D
    maintenance
    MCP server that provides access to SiftingIO market data, including live prices, SEC filings, OHLCV bars, 13F holdings, market status, and economic calendar tools for AI assistants.
    36
    13 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides real-time stock market data and company search functionality for the Colombo Stock Exchange (CSE). It enables AI assistants to retrieve current prices, change percentages, and ticker information for Sri Lankan listed companies.
    7
    6 npm
    13
    ISC
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources