IDX MCP - Indonesia Stock Exchange Trading Data
Server Details
Indonesia Stock Exchange data: listed companies, shareholders, boards and daily trading.
- Status
- Healthy
- Uptime
- 69.8% over 23 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- SeaMCP/idx-mcp
- GitHub Stars
- 0
TDQS
Scored across 5 tools
Each tool targets a distinct data need: single-company profile, whole-market daily snapshot, per-ticker price history, company search, and ownership connection search. Although get_company includes a latest trading summary that overlaps slightly with price_history, the primary purposes and descriptions are clear enough to prevent misselection.
All tools share the Idx_ prefix and use snake_case, which is consistent. However, the naming pattern mixes verb-noun (get_company, search_companies, search_ownership) with noun phrases (market_summary, price_history), so it is mostly consistent but not a uniform verb_noun pattern.
Five tools is well-scoped for an IDX trading data server, covering the core read-only operations without redundancy or excessive fragmentation. Each tool earns its place by addressing a unique aspect of company or market data.
The surface covers company profiles, market snapshots, price history, company search, and ownership search, which are the main workflows for trading data. Minor gaps exist, such as direct index or sector aggregate tools, but agents can work around them using existing filters and searches.
Available Tools
5 toolsIdx_get_companyARead-onlyInspect
Fetch one IDX-listed company by ticker: classification, address, tax id, website, major shareholders, subsidiaries, board, audit committee and corporate secretary, plus its latest daily trading summary.
Profile lists keep the IDX keys: Nama name, Persentase percent, Jumlah shares, Pengendali controlling holder, Kategori holder category, Jabatan position, Afiliasi affiliated, BidangUsaha line of business, JumlahAset total assets (unit in Satuan, e.g. JUTAAN = millions; currency in MataUang), StatusOperasi operating status, TahunKomersil year operations began.
Prices (previous, openPrice, high, low, close, change, bid, offer) are IDR per share. volume, listedShares, tradeableShares, foreignBuy and foreignSell are shares; value is IDR; frequency is the number of trades. changePercent = change / previous × 100 and foreignNet = foreignBuy − foreignSell are computed. Returns { data: null } when the ticker is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | IDX ticker, e.g. BBCA. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: it states the null-on-unknown-ticker contract, defines units (IDR per share, shares vs IDR), and discloses which fields are computed (changePercent, foreignNet).
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 sentence one, and the rest is a dense but organized glossary of profile keys, units and computed fields. It is long, but the length is largely earned because no output schema exists to carry the return 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?
With no output schema, the description must carry the return contract, and it does: it enumerates the profile sections, maps IDX key names to meanings, specifies units and currencies, defines derived fields, and documents the null case. An agent can interpret the response without any other source.
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 single 'code' parameter already documents the ticker format and gives the BBCA example. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb ('Fetch'), resource ('IDX-listed company'), and access key ('by ticker'), then enumerates the returned sections, which implicitly separates it from the lighter search/list siblings. It never names a sibling explicitly, so it stops short of a 5.
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?
Usage is implied: use this when you already have a ticker and want the full profile. There is no explicit when-to-use/when-not statement and no routing to Idx_search_companies for discovery or Idx_price_history for series data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Idx_market_summaryARead-onlyInspect
Whole-market snapshot for one trading day: every ticker that traded, joined with its company name and sector. Use it for top gainers/losers (sortBy changePercent), most active (value, volume, frequency) and foreign flows (foreignNet). Defaults to the latest trading day; a date with no trading (weekend, holiday) returns no rows.
Filter by sector/industry substring, a list of codes, or minimum traded value.
Prices (previous, openPrice, high, low, close, change, bid, offer) are IDR per share. volume, listedShares, tradeableShares, foreignBuy and foreignSell are shares; value is IDR; frequency is the number of trades. changePercent = change / previous × 100 and foreignNet = foreignBuy − foreignSell are computed.
Returns { date, data, total, page, limit }.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Trading day, YYYY-MM-DD. Defaults to the latest. | |
| page | No | ||
| codes | No | ||
| limit | No | ||
| sector | No | ||
| sortBy | No | value | |
| industry | No | ||
| minValue | No | Minimum traded value, IDR. | |
| sortOrder | No | desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/safe profile, and the description adds substantial extra context: defaulting to the latest trading day, that weekends/holidays return no rows, and a full unit map (IDR for prices/value, shares for volume/listedShares/foreignBuy/foreignSell, trade counts for frequency). It also discloses which fields are computed (changePercent, foreignNet), which goes well beyond the structured data.
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?
Front-loaded with the purpose and use cases, followed by filter semantics, then units, then the return shape. Every sentence adds information an agent needs; no 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?
No output schema exists, but the description supplies the return shape ({ date, data, total, page, limit }), the pagination-relevant fields, unit conventions, and edge-case behavior for non-trading days. Nothing material 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 only 22%, so the description carries the burden and does: it explains that sector/industry are substring filters, codes accepts a list of ticker codes, minValue sets a minimum traded value, and sortBy accepts changePercent/value/volume/frequency/foreignNet. Only page/limit lack prose, and their defaults are already 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?
States a specific verb+resource ('whole-market snapshot for one trading day') with scope ('every ticker that traded, joined with its company name and sector'), which clearly distinguishes it from the company-level siblings (Idx_get_company, Idx_price_history). An agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases mapped to sortBy values (top gainers/losers via changePercent, most active via value/volume/frequency, foreign flows via foreignNet) plus the default behavior and the empty-result edge case for non-trading days. It does not explicitly name an alternative sibling tool or state when not to use this one, so it falls short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Idx_price_historyARead-onlyInspect
Daily trading summaries for one IDX ticker: OHLC, volume, value, trade count, best bid/offer, foreign buy/sell and non-regular market activity. Data starts 2 Jan 2020. Defaults to the most recent days first.
Prices (previous, openPrice, high, low, close, change, bid, offer) are IDR per share. volume, listedShares, tradeableShares, foreignBuy and foreignSell are shares; value is IDR; frequency is the number of trades. changePercent = change / previous × 100 and foreignNet = foreignBuy − foreignSell are computed.
Returns { data, total, page, limit }.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | On or before, YYYY-MM-DD. | |
| code | Yes | IDX ticker, e.g. BBCA. | |
| from | No | On or after, YYYY-MM-DD. | |
| page | No | ||
| limit | No | ||
| sortOrder | No | desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description adds genuinely new behavioral context: data coverage starting 2 Jan 2020, the default descending date ordering, unit semantics per field, and which values are computed (changePercent, foreignNet). It stops short of rate limits, auth, or pagination caveats.
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 short paragraphs, each front-loaded: purpose first, then units, then return shape. The unit list is dense but every clause carries information an agent needs to interpret the numbers, so little is wasted.
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 carries the burden of describing returns and does so explicitly ({ data, total, page, limit }), plus per-field units, computed-field formulas, and the data start date. That is sufficient for an agent to call and interpret the result 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 only 50% (page, limit and sortOrder carry no descriptions), so the description should compensate more than it does. It contributes a real constraint via 'Data starts 2 Jan 2020' (a practical floor for 'from') and clarifies sortOrder's default effect, but never explains page/limit paging behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('daily trading summaries') bound to a precise scope ('one IDX ticker') and enumerates the returned fields (OHLC, volume, value, trade count, best bid/offer, foreign buy/sell, non-regular activity). The per-ticker scoping implicitly separates it from Idx_market_summary and Idx_get_company.
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 never says when to prefer this tool over siblings such as Idx_market_summary, nor any prerequisites or exclusions. 'Defaults to the most recent days first' is a default value, not usage guidance about which tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Idx_search_companiesARead-onlyInspect
Search companies listed on the Indonesia Stock Exchange (IDX). Filters are ANDed. Company id is the ticker (e.g. BBCA).
Sector, subSector, industry and subIndustry use the IDX-IC classification and match as substrings (e.g. sector "Financials", industry "Banks"). npwp is the tax id; its stored format varies (with or without spaces), so pass digits as they appear or search by name. listedFrom/listedTo filter on the listing (inception) date.
Returns { data, total, page, limit } without the profile lists; use Idx_get_company for shareholders, subsidiaries and board.
| Name | Required | Description | Default |
|---|---|---|---|
| npwp | No | Tax id substring. | |
| page | No | ||
| limit | No | ||
| query | No | Substring on company name or ticker. | |
| sector | No | ||
| sortBy | No | id | |
| industry | No | ||
| listedTo | No | Listed on or before, YYYY-MM-DD. | |
| sortOrder | No | asc | |
| subSector | No | ||
| listedFrom | No | Listed on or after, YYYY-MM-DD. | |
| subIndustry | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/no-destructive/no-open-world, so the safety profile is covered. The description adds non-obvious behavior: filters are ANDed, classification fields match as substrings, npwp storage format is inconsistent, date filters apply to listing/inception date, and the return omits profile lists.
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 tight paragraphs: identity/scope, filter semantics, return shape plus handoff. Front-loaded with the core purpose, and every sentence adds information an agent needs (substring semantics, tax-id format warning, sibling routing).
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?
No output schema exists, and the description supplies the return shape ({ data, total, page, limit }) and notes the omission of profile lists, which is exactly what is needed. It also covers the two most error-prone filters (npwp format, classification matching). Pagination behavior beyond the field names is not described, a minor gap.
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?
With only 33% schema description coverage, the description carries the burden and largely does: it explains that id is the ticker, sector/subSector/industry/subIndustry use IDX-IC with substring matching, npwp is the tax id with format caveats, and listedFrom/listedTo bind to listing date. sortBy/sortOrder/page/limit remain undocumented in prose, but their enums and defaults in the schema make them largely self-explanatory.
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?
States a specific verb and resource ('Search companies listed on the Indonesia Stock Exchange') with concrete scope details (ticker as id, ANDed filters). It also differentiates itself from the sibling Idx_get_company by naming what that tool covers instead (shareholders, subsidiaries, board).
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?
Routes the agent to Idx_get_company when profile lists are needed, which is a clear alternative-tool signal. It does not state negative conditions (e.g. minimum query length or when NOT to search), but the context needed to pick between this and its sibling is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Idx_search_ownershipARead-onlyInspect
Find IDX-listed companies connected to a person or entity by name: as a major shareholder, a subsidiary, a board member or an audit committee member. Use it for "which listed companies does X own / sit on the board of".
Matching is a case-insensitive substring on the name. Returns { data, total } where each row is a company with only the matching entries under each role.
Profile lists keep the IDX keys: Nama name, Persentase percent, Jumlah shares, Pengendali controlling holder, Kategori holder category, Jabatan position, Afiliasi affiliated, BidangUsaha line of business, JumlahAset total assets (unit in Satuan, e.g. JUTAAN = millions; currency in MataUang), StatusOperasi operating status, TahunKomersil year operations began.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Person or entity name substring. | |
| limit | No | ||
| roles | No | Limit to these roles. Defaults to all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the safety burden is lifted. The description adds genuinely useful behavior beyond that: case-insensitive substring matching on name, the { data, total } return envelope, and the notion that rows carry only the matching role entries. It does not cover pagination/limit semantics, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage in the first two sentences. The closing glossary paragraph is long but arguably earns its place because there is no output schema to document the returned row keys. Still, it is denser than the input-parameter task strictly requires.
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 steps in to describe the return shape ({ data, total }), the row structure, and the meaning of each profile key including units (JUTAAN = millions) and currency fields. Missing only pagination/limit behavior and result ordering for full completeness.
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 67%, and the description compensates for the required 'name' parameter by specifying that matching is a case-insensitive substring. But it says nothing about the 'limit' or 'roles' parameters, leaving those to the schema; roles do carry an enum, so the schema does the remaining work. 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?
States a specific verb ('Find') and a precise resource (IDX-listed companies connected to a person/entity), then enumerates the four relationship roles (shareholder, subsidiary, board, audit committee). This clearly distinguishes it from siblings like Idx_search_companies or Idx_get_company, which operate on companies rather than on a person's ownership linkages.
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?
Provides an explicit use case in the agent's own query language: "which listed companies does X own / sit on the board of". That gives clear context for when to reach for this tool. It stops short of naming alternative tools or stating when not to use it, so it misses the top of the scale.
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.
5 tool updates
- First observed
Idx_get_company - First observed
Idx_market_summary - First observed
Idx_price_history - First observed
Idx_search_companies - First observed
Idx_search_ownership
Related MCP Connectors
Data saham Indonesia (IDX) untuk AI: harga, teknikal, screener, deteksi bandar, sektor, earnings.
Philippine Stock Exchange data via PSE Edge: EOD quotes, price history, disclosures, financials.
Indonesian government procurement — LPSE tenders, Inaproc data, and company profiles.
Financial statements, metrics, dividends, and price data for public companies.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI agents to access Indonesian Stock Exchange market data, including Level 2 orderbooks, bandarmology, financials, chart pattern recognition, and quantitative risk budgeting.111MIT
- AlicenseNot gradedqualityDmaintenanceProvides real-time Indonesian stock market (IDX) data including prices, technical indicators, fundamental analysis, and trading signals optimized for the Indonesian market through the Model Context Protocol.7MIT
- AlicenseAqualityFmaintenanceEnables access to Indonesian Stock Exchange (IDX) data with comprehensive historical data from 2019-2025 for 958 stocks, including real-time market overview, technical analysis, sector performance, and stock comparison capabilities.950 npm43MIT
- FlicenseNot gradedqualityDmaintenanceMCP server exposing Indonesia Stock Exchange (IDX) market data as tools — fundamentals, broker flow, company profiles, and technical analysis via TA-Lib.2-
Glama MCP Gateway
Add one secure layer between your agents and this server.