CeylonCharts
Server Details
Real-time and historical Colombo Stock Exchange (CSE) data for AI agents — quotes, OHLC, financials, technicals, macro indicators, and stock/index screening via MCP.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 13 tools
Every tool has a clearly distinct purpose: announcements and corporate actions are explicitly cross-referenced, index listing/data/screening are separated, and technicals time series vs. stock/index screeners are clearly differentiated. Agent selection should be straightforward.
The retrieval tools all follow a consistent get_<resource> pattern, and the two screening tools consistently use screen_<target>. No mixed casing or arbitrary verbs appear.
Thirteen tools is well-scoped for a market-data-focused server. Each tool covers a distinct retrieval or screening need without unnecessary bloat or missing core data access.
The surface covers symbols, OHLC, indices, index data, technicals, screening, financial statements, corporate actions, announcements, macro series, and market summaries. This represents a comprehensive read-only market data workflow with no obvious dead ends.
Available Tools
13 toolsget_announcementsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date in YYYY-MM-DD format. Defaults to today when omitted. | |
| from | No | Start date in YYYY-MM-DD format. Defaults to 1 year before `to` or today. | |
| symbol | Yes | A 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral context: the tool returns CSV with specific columns, returns JSON candidates for ambiguous input, and provides raw announcement text rather than parsed corporate-action details. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler. The core purpose and distinguishing detail are front-loaded, the alternative tool is named clearly, and the output format is stated compactly. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a single required parameter, this is complete: the schema fully documents parameters, annotations cover safety, and the description covers the return format, ambiguous-input behavior, and relationship to the closest sibling tool. No missing information would prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra semantic value for the symbol parameter by noting typos are tolerated and that ambiguous input returns candidates requiring the user to pick one, with instructions to call again with the exact symbol.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get general CSE company disclosures for a symbol' and enumerates concrete examples (board changes, AGM/EGM notices, listings, suspensions, name changes). It also explicitly distinguishes itself from get_corporate_actions, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: for dividends, rights issues, or share splits, use get_corporate_actions instead, with a reason (structured detail vs raw announcement text). It also explains what to do when the symbol input is ambiguous, covering both normal and edge-case usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_corporate_actionsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date in YYYY-MM-DD format (by effective/ex-date). Omit for no upper bound. | |
| from | No | Start date in YYYY-MM-DD format (by effective/ex-date). Omit for no lower bound. | |
| kind | No | Restrict to one kind of corporate action. | |
| limit | No | Max entries to return, oldest first. Default 50, max 500. | |
| offset | No | Skip this many of the earliest matching entries before taking `limit` — use to page further in. | |
| symbol | No | A 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds behavior beyond that: it returns 'announcement details, not just a price-adjustment factor', returns 'CSV, one row per action', and if the symbol is ambiguous, 'returns JSON candidates instead'. This clarifies return format and edge-case behavior without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, sibling distinction, then usage guidance, then return format and edge case. Every sentence contributes new information; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers return format (CSV, one row per action), ordering (oldest first), ambiguity handling (JSON candidates), and date-range semantics. Combined with the detailed input schema and annotations, the agent has everything needed to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (every parameter is described in the schema). The description adds extra practical meaning: e.g., 'pass from=<today> to jump straight to upcoming ones, which is the most common need' and 'matches every one of its share classes, not just one' for symbol, which go slightly beyond the schema text to help the agent choose values correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a calendar of corporate actions (dividends, rights issues, share splits)'. It explicitly names the types of actions and contrasts itself with the sibling get_announcements ('for other company disclosures... use get_announcements instead'), so the agent can immediately tell which tool fits the task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use vs alternative guidance: 'This is the tool for dividends/rights/splits specifically; for other company disclosures... use get_announcements instead.' It also provides concrete usage patterns: omit all filters to browse everything, pass from=<today> for upcoming actions, optionally scope to a company or kind. This leaves no ambiguity about when or how to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_statementARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | A 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. | |
| statement | Yes | Which statement to fetch. | |
| company_type | No | Most 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, and the description adds critical behavioral nuance: cash-flow figures are cumulative (year-to-date) while income-statement figures are per-quarter, with an explicit warning against diffing adjacent columns. It also discloses the company_type fallback behavior, entity-level scope, and the CSV/candidates return format—substantially more context than the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the main purpose, the second delivers a critical usage warning, and the third covers output format and ambiguity handling. Every sentence earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description precisely explains the return format, including the column structure and ambiguity fallback. It also covers quarterly granularity, entity-level scope, and company_type fallback logic, providing an agent with everything needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents symbol, statement, and company_type. The description adds some high-level context about statement types and output structure, but it does not add significant parameter-level meaning beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact verb ('Get'), resource (one financial statement), scope (CSE symbol), and granularity ('full line-item detail, one row per line item'). It explicitly names the three statement types, making it distinguishable from sibling data tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines the tool's domain (financial statements) and the type of data returned, giving sufficient context for when to use it. It does not explicitly name alternative tools or exclusions, but no sibling tool overlaps with this function, so clear context without exclusions is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_index_dataARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date in YYYY-MM-DD format | |
| from | No | Start date in YYYY-MM-DD format | |
| index | Yes | The 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds substantial behavioral value beyond annotations: the exact CSV column format, the dual-mode return behavior (data vs. JSON candidates), and the index-type-specific field population (headline indices populate OHLC, sub-indices populate sector metrics and leave high/low empty). This is rich, actionable behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and each subsequent sentence earns its place (return format, then index-type behavior). The CSV column enumeration is verbose but justified since there is no output schema to carry that information. Slightly dense but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description correctly shoulders the burden of explaining return values — it covers the CSV format, the candidate-response mode, and the field-population nuance between index types. Minor gaps exist (no date-range limits, no pagination), but for a historical data tool this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters thoroughly, including the ambiguity handling for 'index' and format details for from/to. The description reinforces the ambiguity concept but adds little parameter-specific meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get historical data for a CSE market/sector index') that clearly distinguishes it from siblings like get_indices (listing indices), get_ohlc_data (likely for individual securities), and screen_indices (screening). The resource and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description documents the ambiguity flow ('JSON candidates if the input is ambiguous') and the schema explicitly instructs the agent to ask the user to pick a candidate and call again with the exact symbol. This is clear contextual guidance, though it doesn't explicitly route the agent to alternatives (e.g., when to prefer get_ohlc_data over this tool).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indicesARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional search term to filter indices by name, e.g. "energy" or "banks". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the CSV return contract (symbol, name, index_code, index_name, is_main_index) and optional name filtering, which are useful behavioral details beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The description front-loads the core action and resource, then efficiently covers optional search behavior and the CSV output contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional parameter and no output schema, the description provides the essential invocation details: the resource scope, search behavior, and CSV columns. The only notable gap is sibling differentiation, which is captured under usage guidelines rather than missing invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full documentation for the query parameter with an example, and schema description coverage is 100%. The description repeats 'Optionally search by name' without adding new meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a concrete resource ('CSE market/sector indices') with examples like ASPI and S&P SL20. This makes it clearly distinct from sibling tools like get_index_data or screen_indices, which focus on data retrieval or screening.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as get_index_data or screen_indices. 'Optionally search by name' only clarifies the parameter's behavior, not the tool-selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_macro_dataARead-onlyInspect
Get macroeconomic data for a specific series. Returns CSV (date,value), or JSON candidates if the input is ambiguous.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date in YYYY-MM-DD format | |
| from | No | Start date in YYYY-MM-DD format | |
| series_id | Yes | The 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations: it discloses the return format (CSV with date/value) and the ambiguity fallback (JSON candidates). Since readOnlyHint=true already covers safety, the added details about output and disambiguation are meaningful and do not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that fronts the main action and immediately mentions the return format and ambiguity handling. There is no wasted wording or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with three params and no output schema, the description adequately explains what the tool returns (CSV or JSON candidates) and the special ambiguity case. It does not elaborate on optional date-range semantics, but these are covered by well-described schema fields, so the overall picture is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds little beyond the schema, as it repeats the ambiguity behavior already documented in the series_id parameter. It does not introduce new parameter meaning or clarify from/to usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and the resource 'macroeconomic data for a specific series', making the core purpose understandable. However, it does not differentiate from the sibling tool 'get_macro_series', which likely serves a similar or overlapping purpose, so it does not fully distinguish itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as get_macro_series. The mention of ambiguous input returning candidates hints at a disambiguation workflow, but it does not state conditions for choosing this tool over siblings or prerequisites beyond a series_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_macro_seriesARead-onlyInspect
List available macroeconomic series definitions. Optionally search by name. Returns CSV (id,name,description,frequency,unit,source).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional search term to filter series by name, e.g. "inflation" or "exchange rate". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description is not responsible for stating safety. It adds value by specifying the return format (CSV with fields id,name,description,frequency,unit,source) and the optional search behavior. This goes beyond the annotations and gives the agent a concrete expectation of the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The purpose is front-loaded, the search option is stated, and the return format is listed efficiently. Every sentence earns its place, and the structure is ideal for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool (one optional parameter, no output schema), the description covers the essential points: what it lists, the optional filter, and the exact CSV columns. The only minor gap is not explicitly stating that this returns definitions rather than actual data values, but the word 'definitions' makes that clear. Given the simple nature of the tool, this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the single parameter (query) at 100%, explaining its purpose and providing examples. The description repeats the optional-search notion but adds no additional meaning beyond the schema. Since the schema already handles parameter semantics well, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a clear resource ('macroeconomic series definitions'). It is clear what the tool does. However, it does not explicitly distinguish itself from the sibling tool get_macro_data, which likely retrieves actual data, leaving the differentiation to inference. A name reference would have made it fully unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives such as get_macro_data or get_indices. It only mentions an optional search by name, which is a usage detail but not a decision rule. The agent is left to infer that this lists definitions rather than data, and there is no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_summaryARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Reference 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. | |
| limit | No | Max entries per list (gainers, losers, volume, turnover, crossings, top/bottom sectors). Default 5, max 20. | |
| period | No | Summary window. | daily |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds valuable behavior beyond that: mid-period weekly/monthly summaries cover period-to-date (Monday–today example), the isPartialPeriod field explains which case applies, and the JSON-not-CSV note clarifies the response shape. This is exactly the kind of nuance an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler. The first sentence front-loads the purpose and contents, the second clarifies a subtle time-window behavior, and the third preempts a format misconception. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only aggregation tool with full schema coverage and clear annotations, the description covers the what (contents), when (daily/weekly/monthly), edge cases (mid-period), and response format (JSON). No output schema exists, but the description compensates by naming the key field (isPartialPeriod). Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the date reference semantics, limit default/max, and period enum. The description adds no new parameter-level meaning; it is consistent with the schema but does not go beyond it. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'Get' and the resource 'market-wide overview', and enumerates specific contents (top gainers/losers, volume/turnover/crossings, ASI/S&P SL20, sectors). This clearly distinguishes it from sibling tools like get_index_data (single index) or screen_stocks (screening), which an agent could otherwise confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is the market-wide snapshot tool, not a per-symbol or per-index tool. However, it does not explicitly say 'use this when X, not when Y' or name alternative tools. The 'not CSV' note addresses format, not usage, so a small gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ohlc_dataARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date in YYYY-MM-DD format | |
| from | No | Start date in YYYY-MM-DD format | |
| limit | No | Max trading days to return, most recent first (before reversing to chronological order). Default 50, max 500. | |
| offset | No | Skip this many of the most recent trading days before taking `limit` — use to page further back into history. | |
| symbol | Yes | A 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. | |
| interval | No | Data interval | daily |
| adjust_rights | No | Adjust historical prices for rights issues. Default false. | |
| adjust_splits | No | Adjust historical prices for stock splits and scrip/bonus share dividends. Default true. | |
| adjust_dividends | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial behavior beyond that: split adjustment by default (but not rights/dividends), 50-day default, paging disclosure, CSV return format preceded by resolution/corporate-action notes, and the JSON-candidates fallback for ambiguous input. This richly discloses behavior without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the purpose and packs in adjustment defaults, paging, return format, and disambiguation behavior. Nearly every clause earns its place for a tool of this complexity; it is only slightly long, which is justified by the behavioral richness it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly shoulders the burden of explaining the return format (CSV with date,open,high,low,close,volume), the note-preceded behavior, paging, adjustments, and ambiguous-input fallback. The schema covers parameters; the description covers everything else an agent needs to call and interpret the tool correctly. Complete for a tool this complex.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The schema already documents every parameter thoroughly, including the detailed symbol semantics and the when-to-enable guidance for adjust_dividends. The description adds a little framing ('clean price action', 'total-return series') and confirms defaults, but does not materially add meaning beyond the schema — the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Get OHLCV (open, high, low, close, volume) data for a CSE symbol.' It distinguishes itself from siblings like get_index_data, get_macro_data, and get_technicals by scoping to CSE symbols with OHLCV, and clarifies the exchange. The purpose is unambiguous and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: defaults to the most recent 50 trading days, explains how paging back via offset works, and describes the disambiguation flow (returns JSON candidates when ambiguous). It does not explicitly name sibling alternatives or state when NOT to use this tool, which keeps it from a 5, but the usage guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbolsARead-onlyInspect
List available CSE symbols with metadata. Optionally search by company name and/or sector. Returns CSV (symbol,name,sector,industry,is_active,last_updated).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional search term to filter companies by name, e.g. "bank" or "trust". | |
| sector | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds a useful behavioral detail: it returns CSV with a specific column set, and it indicates filters are optional. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences place the core action first and then list the return format. Every sentence adds value, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-filter list tool with no output schema, the description is complete: it states the resource, the optional filters, and the exact CSV columns. No required parameters or nested objects increase complexity, and annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with clear descriptions, so the baseline is 3. The phrase 'and/or' adds the minor insight that query and sector can be combined, but the description otherwise repeats schema content. No enums or nested objects require additional explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'List available CSE symbols with metadata.' This clearly distinguishes it from data-series siblings like get_ohlc_data, get_indices, and get_announcements. The optional search terms add useful filter context without creating ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or exclusions are given. The description only states what the tool does and that filters are optional, leaving an agent to infer when to choose get_symbols over screen_stocks or get_indices. This is effectively no guidance about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_technicalsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date in YYYY-MM-DD format | |
| from | No | Start date in YYYY-MM-DD format | |
| limit | No | Max trading days to return, most recent first (before reversing to chronological order). Default 50, max 500. | |
| offset | No | Skip this many of the most recent trading days before taking `limit` — use to page further back into history. | |
| symbol | Yes | A 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses several behavioral details: output format (CSV), row ordering (most recent last), default window (50 days), pagination via offset with a note about how to page further back, and the fallback to JSON candidates for ambiguous input. These are substantial and actionable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: it opens with the purpose, then covers return format, default behavior, pagination, and ambiguity handling in separate clauses. Every sentence adds value, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does a thorough job of setting expectations: CSV format, one row per day, most recent last, default limit, pagination mechanism, and ambiguity resolution. This is sufficient for an agent to invoke the tool correctly without further guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds practical context: the default of 50 trading days aligns with the limit default, and it explains how offset enables paging. It also clarifies the ordering (most recent last) which interacts with limit/offset. This goes slightly beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and a specific resource ('pre-computed daily technicals'), listing concrete components (moving averages, relative-strength rating, 52-week range, volume anomalies). It explicitly covers both CSE stocks and indices, calling itself 'one tool for both,' which distinguishes it from siblings like get_ohlc_data or 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the tool's coverage (stocks or indices) and that it returns technicals rather than raw data, which implies it is the right choice when those specific metrics are needed. However, it does not explicitly name alternative tools (e.g., get_ohlc_data for raw price data) or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_indicesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. Defaults to the latest available trading date. | |
| sort | No | Column to sort by. Default rs_rating. | |
| limit | No | Max results (default 20, max 100). | |
| order | No | Sort direction. Default desc. | |
| above_ema21 | No | Filter by price above/below its 21-day exponential moving average. | |
| above_ema50 | No | Filter by price above/below its 50-day exponential moving average. | |
| above_sma10 | No | Filter by price above/below its 10-day simple moving average. | |
| above_ema200 | No | Filter by price above/below its 200-day exponential moving average (long-term trend filter). | |
| rs_rating_max | No | Maximum relative-strength rating (1-99). | |
| rs_rating_min | No | Minimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders. | |
| change_pct_max | No | Maximum today's percent change. | |
| change_pct_min | No | Minimum today's percent change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds useful behavioral context: no 52-week-range or volume filtering because those are not tracked for indices, and the output is a CSV with one row per matching index. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first defines scope and criteria, the second states exclusions, the third gives use-case and sibling distinction, and the fourth states return format. It is concise, front-loaded, and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complex 12-parameter tool with no output schema, the description covers the essential context: what is screened, what filters exist and which do not, how it differs from related index tools, and what the return format is. The schema handles parameter-level details, so nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by framing the filter parameters as the same pre-computed technical criteria used by screen_stocks and explicitly noting what filters are absent. This helps the agent understand the parameter set's collective purpose, even though individual parameters are already well-described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Screen'), a specific resource ('CSE sector/headline indices'), and the core criteria (moving-average position, relative-strength rating). It also distinguishes itself from get_indices/get_index_data by contrasting screening with single-day performance, so an agent can tell exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('Use this to find which sectors are in a sustained uptrend/downtrend') and explicitly contrasts it with get_indices/get_index_data, which show a single day's performance. The reference to screen_stocks as the shared methodology further clarifies the filtering family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_stocksARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. Defaults to the latest available trading date. | |
| sort | No | Column to sort by. Default rs_rating. | |
| limit | No | Max results (default 20, max 100). | |
| order | No | Sort direction. Default desc. | |
| is_hv1 | No | Filter to stocks with the highest volume in the past 252 trading days. | |
| is_hve | No | Filter to stocks with the highest volume ever recorded today. | |
| sector | No | Optional substring filter against the company sector name, e.g. "bank" or "materials". | |
| is_hvytd | No | Filter to stocks with the highest volume year-to-date. | |
| is_52w_low | No | Filter to stocks at a 52-week low today. | |
| above_ema21 | No | Filter by price above/below its 21-day exponential moving average. | |
| above_ema50 | No | Filter by price above/below its 50-day exponential moving average. | |
| above_sma10 | No | Filter by price above/below its 10-day simple moving average. | |
| is_52w_high | No | Filter to stocks at a 52-week high today. | |
| above_ema200 | No | Filter by price above/below its 200-day exponential moving average (long-term trend filter). | |
| rs_rating_max | No | Maximum relative-strength rating (1-99). | |
| rs_rating_min | No | Minimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders. | |
| change_pct_max | No | Maximum today's percent change. | |
| change_pct_min | No | Minimum today's percent change. | |
| vol_vs_sma50_pct_max | No | Maximum volume-vs-50-day-average percent. | |
| vol_vs_sma50_pct_min | No | Minimum today's volume vs. its 50-day average volume, as a percent (e.g. 100 = 2x average). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses key behavioral semantics: every filter is optional and AND-combined, omitting a filter leaves it unconstrained, and the output is a CSV with one row per matching stock. This gives the agent practical expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then states filter semantics, gives three illustrative examples, and closes with the output format. Every sentence earns its place; the examples are dense but directly improve usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter, fully optional tool with no output schema, the description covers the essential missing context: filter combination logic, representative queries, and return format. Parameter-level details are already fully documented in the schema, so nothing critical is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value above the schema by explaining the AND-combination behavior and giving concrete filter combinations (above_ema50=true & above_ema200=true & rs_rating_min=80, is_52w_high=true, vol_vs_sma50_pct_min=100), which helps the agent compose valid queries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Screen CSE stocks by pre-computed technical criteria', naming the exact screening dimensions. It clearly distinguishes this from sibling tools like screen_indices and get_technicals by framing it as a multi-criteria stock screener that returns matching rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: it is for screening stocks by optional, AND-combined technical filters, with three concrete examples showing realistic use cases. It does not explicitly name alternatives or state when not to use it, so it falls short of a full 5, but the intended usage is unambiguous.
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.
13 tool updates
- First observed
get_announcements - First observed
get_corporate_actions - First observed
get_financial_statement - First observed
get_index_data - First observed
get_indices - First observed
get_macro_data - First observed
get_macro_series - First observed
get_market_summary - First observed
get_ohlc_data - First observed
get_symbols - First observed
get_technicals - First observed
screen_indices - First observed
screen_stocks
Related MCP Connectors
- mcpOAuthcom.twelvedata
Twelve Data MCP: real-time & historical market data (stocks, crypto, forex, etc).
US stock market data for AI agents: SEC filings, financials, insider trades, 13F, options, macro.
China A-share market data for research, backtesting and AI agents via MCP.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- AlicenseAqualityCmaintenanceProvides 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.2712 npm13ISC
- AlicenseAqualityCmaintenanceA 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.730 npm3ISC
- AlicenseAqualityDmaintenanceInstitutional-grade MCP server for the Colombo Stock Exchange. Features real-time market data, order flow pressure analysis, and AI-powered forensic fundamental screening.13MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.