Colombo Stock Exchange (CSE) market data for AI agents: live quotes and candlestick charts, historical OHLCV price history, financial statements, foreign-shareholding and top-20 shareholder data, corporate announcements and actions, market/sector indices, pre-computed technicals, a stock/index screener, market summaries, and macroeconomic indicators.
Colombo Stock Exchange (CSE) market data for AI agents: live quotes and candlestick charts, historical OHLCV price history, financial statements, foreign-shareholding and top-20 shareholder data, corporate announcements and actions, market/sector indices, pre-computed technicals, a stock/index screener, market summaries, and macroeconomic indicators.
Colombo Stock Exchange (CSE) data only — no other exchange is covered. Resolve a company with get_symbols first if unsure of its exact ticker; every other tool also accepts a bare ticker or company name directly (typos tolerated) and will return disambiguation candidates instead of data if the match is ambiguous, or a resolution note if it guessed a name/typo or defaulted to the voting-shares instrument for a company with multiple listed instruments. Use get_quotes for a live intraday price snapshot, get_ohlc_data for historical price series, get_chart for a rendered candlestick+volume image, get_financial_statement for detailed financials, and get_technicals / screen_stocks / screen_indices for pre-computed indicators and screening — prefer these over deriving the same metrics from raw OHLC data.
Protocol
Pass100/10020 / 20 pts
Connection, authentication, and protocol compatibility.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
List available CSE symbols with metadata. Optionally search by company name and/or sector. Returns CSV (symbol,name,sector,industry,is_active,last_updated).
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
query
Search term to filter companies by name, e.g. "bank" or "trust".
Clear enough to supply this argument.
sector
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.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_symbols",
"title": "Search Colombo Stock Exchange symbols",
"description": "List available CSE symbols with metadata. Optionally search by company name and/or sector. Returns CSV (symbol,name,sector,industry,is_active,last_updated).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string",
"description": "Search term to filter companies by name, e.g. \"bank\" or \"trust\"."
},
"sector": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
symbol
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.
Clear enough to supply this argument.
from
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`).
Clear enough to supply this argument.
to
End of an explicit date range to fetch, in YYYY-MM-DD format. Omit to default to the latest available trading day.
Clear enough to supply this argument.
interval
Bar size for the returned series — use "weekly" or "monthly" to aggregate into coarser bars instead of daily candles.
Clear enough to supply this argument.
adjust_splits
Adjust historical prices for stock splits and scrip/bonus share dividends.
Clear enough to supply this argument.
adjust_rights
Adjust historical prices for past rights issues falling within the range, producing continuous pre-/post-issue price action.
Clear enough to supply this argument.
adjust_dividends
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.
Clear enough to supply this argument.
limit
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.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
Skip this many of the most recent trading days before taking `limit` — use to page further back into history.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_ohlc_data",
"title": "Get OHLC price history",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol"
],
"properties": {
"to": {
"type": "string",
"description": "End of an explicit date range to fetch, in YYYY-MM-DD format. Omit to default to the latest available trading day."
},
"from": {
"type": "string",
"description": "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`)."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 500,
"description": "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.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Skip this many of the most recent trading days before taking `limit` — use to page further back into history."
},
"symbol": {
"type": "string",
"description": "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": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string",
"default": "daily",
"description": "Bar size for the returned series — use \"weekly\" or \"monthly\" to aggregate into coarser bars instead of daily candles."
},
"adjust_rights": {
"type": "boolean",
"default": false,
"description": "Adjust historical prices for past rights issues falling within the range, producing continuous pre-/post-issue price action."
},
"adjust_splits": {
"type": "boolean",
"default": true,
"description": "Adjust historical prices for stock splits and scrip/bonus share dividends."
},
"adjust_dividends": {
"type": "boolean",
"default": false,
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
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,<one column per fiscal period>), or JSON candidates if the input is ambiguous.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
Input documentation gives an agent enough context to populate the arguments.
symbol
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.
Clear enough to supply this argument.
statement
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).
Clear enough to supply this argument.
company_type
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.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_financial_statement",
"title": "Get financial statement",
"description": "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,<one column per fiscal period>), or JSON candidates if the input is ambiguous.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol",
"statement"
],
"properties": {
"symbol": {
"type": "string",
"description": "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": {
"enum": [
"income",
"balance",
"cashflow"
],
"type": "string",
"description": "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)."
},
"company_type": {
"enum": [
"group",
"company"
],
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
symbol
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.
Clear enough to supply this argument.
from
Start of the date range to filter by. Defaults to 1 year before `to`, or 1 year before today if neither bound is given.
Clear enough to supply this argument.
to
End of the date range to filter by. Defaults to today when omitted.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_announcements",
"title": "Get company announcements",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol"
],
"properties": {
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End of the date range to filter by. Defaults to today when omitted."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start of the date range to filter by. Defaults to 1 year before `to`, or 1 year before today if neither bound is given."
},
"symbol": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Get macroeconomic data for a specific series. Returns CSV (date,value), or JSON candidates if the input is ambiguous.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
series_id
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.
Clear enough to supply this argument.
from
Lower bound of the date range to filter by, in YYYY-MM-DD format. Omit for no lower bound (the earliest available data point).
Clear enough to supply this argument.
to
Upper bound of the date range to filter by, in YYYY-MM-DD format. Omit for no upper bound (the latest available data point).
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_macro_data",
"title": "Get macroeconomic data",
"description": "Get macroeconomic data for a specific series. Returns CSV (date,value), or JSON candidates if the input is ambiguous.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"series_id"
],
"properties": {
"to": {
"type": "string",
"description": "Upper bound of the date range to filter by, in YYYY-MM-DD format. Omit for no upper bound (the latest available data point)."
},
"from": {
"type": "string",
"description": "Lower bound of the date range to filter by, in YYYY-MM-DD format. Omit for no lower bound (the earliest available data point)."
},
"series_id": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
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).
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
query
Optional search term to filter indices by name, e.g. "energy" or "banks".
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
index
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.
Clear enough to supply this argument.
from
Lower bound of the date range to fetch, in YYYY-MM-DD format. Omit for no lower bound (the earliest available date).
Clear enough to supply this argument.
to
Upper bound of the date range to fetch, in YYYY-MM-DD format. Omit for no upper bound (the most recent available date).
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_index_data",
"title": "Get index history",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"index"
],
"properties": {
"to": {
"type": "string",
"description": "Upper bound of the date range to fetch, in YYYY-MM-DD format. Omit for no upper bound (the most recent available date)."
},
"from": {
"type": "string",
"description": "Lower bound of the date range to fetch, in YYYY-MM-DD format. Omit for no lower bound (the earliest available date)."
},
"index": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
above_sma10
When set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average.
Clear enough to supply this argument.
above_ema21
When set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average.
Clear enough to supply this argument.
above_ema50
When set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average.
Clear enough to supply this argument.
above_ema200
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.
Clear enough to supply this argument.
rs_rating_min
Minimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders.
Clear enough to supply this argument.
rs_rating_max
Maximum relative-strength rating (1-99 percentile rank vs. the whole market) to include.
Clear enough to supply this argument.
change_pct_min
Only include results whose today's percentage price change is at least this value (e.g. 5 for a +5% or greater move).
Clear enough to supply this argument.
change_pct_max
Only include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move).
Clear enough to supply this argument.
date
Trading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted.
Clear enough to supply this argument.
sort
Column to rank results by. Defaults to rs_rating (relative-strength rating) when omitted.
Clear enough to supply this argument.
order
Sort direction. Default desc.
Clear enough to supply this argument.
limit
Max results to return; the underlying screener defaults to 20 when omitted.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
is_52w_high
Filter to stocks at a 52-week high today.
Clear enough to supply this argument.
is_52w_low
Filter to stocks at a 52-week low today.
Clear enough to supply this argument.
is_hve
Filter to stocks with the highest volume ever recorded today.
Clear enough to supply this argument.
is_hv1
Filter to stocks with the highest volume in the past 252 trading days.
Clear enough to supply this argument.
is_hvytd
Filter to stocks with the highest volume year-to-date.
Clear enough to supply this argument.
vol_vs_sma50_pct_min
Minimum today's volume vs. its 50-day average volume, as a percent (e.g. 100 = 2x average).
Clear enough to supply this argument.
vol_vs_sma50_pct_max
Maximum volume-vs-50-day-average percent.
Clear enough to supply this argument.
sector
Optional substring filter against the company sector name, e.g. "bank" or "materials".
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "screen_stocks",
"title": "Screen stocks",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"description": "Trading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted."
},
"sort": {
"enum": [
"rs_rating",
"change_pct",
"vol_vs_sma50_pct",
"close"
],
"type": "string",
"description": "Column to rank results by. Defaults to rs_rating (relative-strength rating) when omitted."
},
"limit": {
"type": "integer",
"maximum": 100,
"description": "Max results to return; the underlying screener defaults to 20 when omitted.",
"exclusiveMinimum": 0
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction. Default desc."
},
"is_hv1": {
"type": "boolean",
"description": "Filter to stocks with the highest volume in the past 252 trading days."
},
"is_hve": {
"type": "boolean",
"description": "Filter to stocks with the highest volume ever recorded today."
},
"sector": {
"type": "string",
"description": "Optional substring filter against the company sector name, e.g. \"bank\" or \"materials\"."
},
"is_hvytd": {
"type": "boolean",
"description": "Filter to stocks with the highest volume year-to-date."
},
"is_52w_low": {
"type": "boolean",
"description": "Filter to stocks at a 52-week low today."
},
"above_ema21": {
"type": "boolean",
"description": "When set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average."
},
"above_ema50": {
"type": "boolean",
"description": "When set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average."
},
"above_sma10": {
"type": "boolean",
"description": "When set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average."
},
"is_52w_high": {
"type": "boolean",
"description": "Filter to stocks at a 52-week high today."
},
"above_ema200": {
"type": "boolean",
"description": "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."
},
"rs_rating_max": {
"type": "number",
"description": "Maximum relative-strength rating (1-99 percentile rank vs. the whole market) to include."
},
"rs_rating_min": {
"type": "number",
"description": "Minimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders."
},
"change_pct_max": {
"type": "number",
"description": "Only include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move)."
},
"change_pct_min": {
"type": "number",
"description": "Only 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_max": {
"type": "number",
"description": "Maximum volume-vs-50-day-average percent."
},
"vol_vs_sma50_pct_min": {
"type": "number",
"description": "Minimum today's volume vs. its 50-day average volume, as a percent (e.g. 100 = 2x average)."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
above_sma10
When set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average.
Clear enough to supply this argument.
above_ema21
When set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
above_ema50
When set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average.
Clear enough to supply this argument.
above_ema200
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.
Clear enough to supply this argument.
rs_rating_min
Minimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders.
Clear enough to supply this argument.
rs_rating_max
Maximum relative-strength rating (1-99 percentile rank vs. the whole market) to include.
Clear enough to supply this argument.
change_pct_min
Only include results whose today's percentage price change is at least this value (e.g. 5 for a +5% or greater move).
Clear enough to supply this argument.
change_pct_max
Only include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move).
Clear enough to supply this argument.
date
Trading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted.
Clear enough to supply this argument.
sort
Column to sort by. Default rs_rating.
Clear enough to supply this argument.
order
Sort direction. Default desc.
Clear enough to supply this argument.
limit
Max results to return; the underlying screener defaults to 20 when omitted.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "screen_indices",
"title": "Screen indices",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"description": "Trading date to evaluate the screen as of, in YYYY-MM-DD format. Defaults to the latest available trading date when omitted."
},
"sort": {
"enum": [
"rs_rating",
"change_pct",
"close"
],
"type": "string",
"description": "Column to sort by. Default rs_rating."
},
"limit": {
"type": "integer",
"maximum": 100,
"description": "Max results to return; the underlying screener defaults to 20 when omitted.",
"exclusiveMinimum": 0
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction. Default desc."
},
"above_ema21": {
"type": "boolean",
"description": "When set, filters to results whose price is currently above (true) or below (false) its 21-day exponential moving average."
},
"above_ema50": {
"type": "boolean",
"description": "When set, filters to results whose price is currently above (true) or below (false) its 50-day exponential moving average."
},
"above_sma10": {
"type": "boolean",
"description": "When set, filters to results whose price is currently above (true) or below (false) its 10-day simple moving average."
},
"above_ema200": {
"type": "boolean",
"description": "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."
},
"rs_rating_max": {
"type": "number",
"description": "Maximum relative-strength rating (1-99 percentile rank vs. the whole market) to include."
},
"rs_rating_min": {
"type": "number",
"description": "Minimum relative-strength rating (1-99 percentile rank vs. the whole market). E.g. 80+ for market leaders."
},
"change_pct_max": {
"type": "number",
"description": "Only include results whose today's percentage price change is at most this value (e.g. -5 for a -5% or worse move)."
},
"change_pct_min": {
"type": "number",
"description": "Only include results whose today's percentage price change is at least this value (e.g. 5 for a +5% or greater move)."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
symbol
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.
Clear enough to supply this argument.
from
Lower bound of the date range to search within for the most recent `limit` matching trading days. Omit for no lower bound.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
to
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).
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
limit
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.
Clear enough to supply this argument.
offset
Skip this many of the most recent trading days before taking `limit` — use to page further back into history.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_technicals",
"title": "Get technicals",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol"
],
"properties": {
"to": {
"type": "string",
"description": "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)."
},
"from": {
"type": "string",
"description": "Lower bound of the date range to search within for the most recent `limit` matching trading days. Omit for no lower bound."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 500,
"description": "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.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Skip this many of the most recent trading days before taking `limit` — use to page further back into history."
},
"symbol": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
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).
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
period
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.
Clear enough to supply this argument.
date
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.
Clear enough to supply this argument.
limit
Max entries to include in each list (gainers, losers, volume, turnover, crossings, top/bottom sectors).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_market_summary",
"title": "Get market summary",
"description": "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).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"description": "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": {
"type": "integer",
"default": 5,
"maximum": 20,
"description": "Max entries to include in each list (gainers, losers, volume, turnover, crossings, top/bottom sectors).",
"exclusiveMinimum": 0
},
"period": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string",
"default": "daily",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
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=<today> 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.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
symbol
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.
Clear enough to supply this argument.
kind
Restrict the calendar to one kind of corporate action — split (a share split or consolidation), rights (a rights issue), or dividend.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
from
Start date in YYYY-MM-DD format (by effective/ex-date). Omit for no lower bound.
Clear enough to supply this argument.
to
End date in YYYY-MM-DD format (by effective/ex-date). Omit for no upper bound.
Clear enough to supply this argument.
limit
Max entries to return, oldest first — use `offset` to page further in.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
Skip this many of the earliest matching entries before taking `limit` — use to page further in.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_corporate_actions",
"title": "Get corporate actions",
"description": "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=<today> 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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "End date in YYYY-MM-DD format (by effective/ex-date). Omit for no upper bound."
},
"from": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (by effective/ex-date). Omit for no lower bound."
},
"kind": {
"enum": [
"split",
"rights",
"dividend"
],
"type": "string",
"description": "Restrict the calendar to one kind of corporate action — split (a share split or consolidation), rights (a rights issue), or dividend."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 500,
"description": "Max entries to return, oldest first — use `offset` to page further in.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Skip this many of the earliest matching entries before taking `limit` — use to page further in."
},
"symbol": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
symbol
A 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.
Clear enough to supply this argument.
from
Start date in YYYY-MM-DD format. Omit for no lower bound.
Clear enough to supply this argument.
to
End date in YYYY-MM-DD format. Omit for no upper bound.
Clear enough to supply this argument.
limit
Max days to return. Rows are selected most-recent-first internally, then returned in chronological order — use `offset` to page further back in history.
Clear enough to supply this argument.
offset
Skip this many of the most recent matching days before taking `limit` — use to page further back in history.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_foreign_holdings",
"title": "Get foreign holdings",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol"
],
"properties": {
"to": {
"type": "string",
"description": "End date in YYYY-MM-DD format. Omit for no upper bound."
},
"from": {
"type": "string",
"description": "Start date in YYYY-MM-DD format. Omit for no lower bound."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 500,
"description": "Max days to return. Rows are selected most-recent-first internally, then returned in chronological order — use `offset` to page further back in history.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Skip this many of the most recent matching days before taking `limit` — use to page further back in history."
},
"symbol": {
"type": "string",
"description": "A 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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
symbol
A 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.
Clear enough to supply this argument.
quarter
Restrict 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.
Clear enough to supply this argument.
all
Return every quarter on record, oldest first, instead of just the latest.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_top20_shareholders",
"title": "Get top shareholders",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol"
],
"properties": {
"all": {
"type": "boolean",
"description": "Return every quarter on record, oldest first, instead of just the latest."
},
"symbol": {
"type": "string",
"description": "A 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."
},
"quarter": {
"type": "string",
"description": "Restrict 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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
symbols
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.
Clear enough to supply this argument.
all
Return every CSE stock in one response. Mutually exclusive with `symbols`.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_quotes",
"title": "Get live quotes",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"all": {
"type": "boolean",
"description": "Return every CSE stock in one response. Mutually exclusive with `symbols`."
},
"symbols": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
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.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
symbol
A 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.
Clear enough to supply this argument.
interval
Bar interval for the chart — "weekly"/"monthly" aggregate into coarser candles instead of daily bars.
Clear enough to supply this argument.
bars
Number of most-recent bars to render on the chart.
Clear enough to supply this argument.
theme
Color theme for the rendered chart image — pick "dark" to match a dark-mode UI.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_chart",
"title": "Get candlestick chart",
"description": "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.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol"
],
"properties": {
"bars": {
"type": "integer",
"default": 90,
"maximum": 250,
"description": "Number of most-recent bars to render on the chart.",
"exclusiveMinimum": 0
},
"theme": {
"enum": [
"light",
"dark"
],
"type": "string",
"default": "light",
"description": "Color theme for the rendered chart image — pick \"dark\" to match a dark-mode UI."
},
"symbol": {
"type": "string",
"description": "A 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."
},
"interval": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string",
"default": "daily",
"description": "Bar interval for the chart — \"weekly\"/\"monthly\" aggregate into coarser candles instead of daily bars."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Get OHLC price historyGet OHLCV (open, high, low, close, volume) data for a CSE symbol.
03Get market summaryGet a daily/weekly/monthly market-wide overview: top gainers/losers, top by volume/turnover/crossings, ASI and S&P SL20 performance, and top/bottom performin…
04Get corporate actionsGet a calendar of corporate actions (dividends, rights issues, share splits) — announcement details, not just a price-adjustment factor.
05List macroeconomic seriesList available macroeconomic series definitions.
Want to run these tasks against your MCP server with us?
CeylonCharts setup, tools, quality score, publishing readiness, and alternatives.
How do I add CeylonCharts to Claude, ChatGPT, or Cursor?
Add CeylonCharts to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.ceyloncharts.com/mcp.
Is CeylonCharts MCP ready for ChatGPT and Claude?
As of October 15, 2026, CeylonCharts scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is CeylonCharts's MCP tool documentation?
As of October 15, 2026, CeylonCharts scores 87/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 17 of 17 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to CeylonCharts?
As of October 20, 2026, alternatives to CeylonCharts in financial-services on the Manufact MCP leaderboard include Contract-Factory — Sociétés & SIREN, Coverage Cat Insurance, Kavara Kirk, Perps Pulse, and Netzo.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.