Tw Market Data
Taiwan stock market data (TWMD): official-source, point-in-time-safe datasets via read-only tools.
Connector by twmarketdata.comOfficial · Domain verified by the MCP Registry
Install
Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install connector/twmarketdata-com-tw-market-data
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Remote endpoint
https://mcp.twmarketdata.com/mcpRemote (HTTP)
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 35 read · 5 write · 1 delete
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- Nothing to install (hosted)
- Runs as
- Hosted (remote endpoint)
Tools by what they do 41
From the running server's own tool list (tools/list) on Oct 25, 2026.
Read 35 · Look things up without changing anything.
agent_activityaskcalendarchartcite_thiscompany_health_checkcomparedescribe_datasetexplain_provenancefind_relatedget_backtestget_code_example
Show 23 more tools
get_inclusion_proofget_researchlist_alertslist_backtestslist_datasetslist_factor_findingslist_pending_actionsmacro_regime_readmemory_get_watchlistmemory_replay_querymemory_searchpositioning_readquery_datasetquery_regimeread_primary_textreplay_backtestrisk_assessrisk_readrun_recipescreensearch_filingssupply_chain_readtry_sample
Write 5 · Create, change, send or run things.
approve_actionmemory_saverun_backtestrun_researchset_price_alert
Delete 1 · Delete, drop, revoke or wipe things.
delete_alert
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
X-API-Key
Network hosts it talks to 1
mcp.twmarketdata.com· found in remote endpoint, install command
Files it touches
- Any path the agent passes to its tools
Tools (41)
As the server listed them on Oct 25, 2026. Descriptions are the server’s own words; hidden characters are shown as [U+…].
agent_activityAgent activity logread-onlyWhat YOUR agents have actually done, from the durable audit trail. Every resident agent records what it did and ON WHAT BASIS — the rule and the two closes behind an alert, the coverage and limits behind a risk finding, the run_id and declared trial count behind a factor verdict. This is that trail, and it survives deploys. Reports which agents have recorded NOTHING (`coverage.missing`), because "the monitor has been quiet" and "the monitor is not running" look identical from the records alone and only one of them means your alerts work. …
approve_actionApprove a pending actionRecord a HUMAN's approval of a proposed action. This writes an audit record naming who approved what, and when. It does NOT execute the action: TWMD has no order or funds path, by design. Execution, if any, happens elsewhere and is performed by a person. Args: action_id: from `list_pending_actions` or a report's `proposed_actions`. approver: who is approving. Required — an unattributed approval is not an approval.
askAsk in natural languageread-onlyAnswer a plain-language question in Taiwanese-market vocabulary, sentence by sourced sentence. ★ FOR BEGINNERS WHO DO NOT KNOW WHICH DATASET THEY WANT. Ask "PBR 是什麼" or "什麼叫漲跌停" in ordinary words; routing happens on our side. `describe_dataset` explains a table you already named, `search_filings` digs through company disclosures, and `query_dataset` returns rows — this one turns a beginner's wording into a sourced explanation instead. ★ EVERY SENTENCE CARRIES A CITATION OR IS NOT RETURNED. Vocabulary sentences cite `glossary:<id>`. Figures cite the dataset row they ca…
calendarUpcoming and past eventsread-onlySort corporate dates into what is still ahead and what has already passed. ★ TWO DATES, NOT ONE. What is "upcoming" is decided by the date the event HAPPENS; `as_of` filters on the date it was ANNOUNCED. An ex-dividend declared on 2026-08-01 for 2026-09-15 is both already known and still ahead on 2026-08-10. Collapsing the two fields either hides every future date or reports last month's ex-dividend as though it were coming. ★ ELAPSED DATES ARE SEPARATED, NOT DISCARDED. They come back under `past` — the previous ex-dividend is useful context for a question about the n…
chartChart a seriesread-onlyTurn rows you already fetched into a Vega-Lite drawing your chat window can render. ★ IT DRAWS; IT DOES NOT FETCH. Hand it the output of `query_dataset` — this tool never touches the database, so it cannot bypass the `as_of` filter those rows were selected under. A plotting tool that fetched its own numbers would be a second data path, and a second path eventually disagrees with the first about what was knowable when. ★ GAPS BREAK THE LINE INSTEAD OF BEING BRIDGED. A missing value is emitted as null, so the rendered line stops rather than sloping smoothly across a per…
cite_thisCite a served numberread-onlyProduce a bibliographic citation for TWMD data — APA, BibTeX, and a re-verifiable token. ★ FOR PAPERS, REGULATORY FILINGS AND ANYTHING A REVIEWER WILL RE-CHECK LATER. A dataset is corrected, backfilled and re-run. Three years from now a reviewer opening our API sees different numbers than the paper, and nobody — author, reviewer, or us — can tell whether the data changed or the author mis-transcribed. So the citation carries `as_of`, the Merkle `checkpoint_root`, and a `verify_url`, plus a signed `reproducible_token` that binds those fields TO EACH OTHER. ★ PASS `…
company_health_checkCompany health checkread-only一檔股票的誠實體檢:成長、獲利品質、估值、籌碼、紅旗,每個數字可驗證。 ★ 這是**事實整理**,不是投資建議、不是預測、不是目標價。輸出帶 `does_not_prove`,轉述時請一併保留。 ★ POINT-IN-TIME:`as_of` 逐資料集尊重揭露時差 —— 月營收用法定截止日推得的 估計時點,財報用出表日,估值是當日。不給 `as_of` 就用「現在可知的最新」, **不是今天**。 ★ 沒看到的東西會列在 `cannot_see`,並說明是「查了沒有」「查詢失敗」還是 「散佈權未取得」—— 三者不同。⚠️ 不要替 `cannot_see` 裡的項目估算或補值。 ★ `checked_and_clear` 是「查過而且確認沒有」(例如近一年無裁罰), 和 `cannot_see` 的「不知道」是兩回事。 ★ 代號解析不到會回 `needs_disambiguation` 附候選 —— 請回問使用者,不要挑一個。 ★ PRECONDITIONS:這支工具**自己**去拿九個資料集,所以 rows 不需要先用 `query_dataset` 取好。它 requires 的…
compareCompare tickersread-onlyLay two to five named companies side by side on the same measures, gaps marked as gaps. ★ AN ABSENT FIGURE STAYS ABSENT, AND THE COMPANY STAYS ON THE TABLE. A blank cell is reported as `available: false`, never filled with a zero, a previous period, or by quietly dropping the column. Dropping is the worst of the three: it converts "we do not hold this measure for that company" into "you did not ask about that company". ★ EACH CELL NAMES ITS OWN SOURCE. Margins and institutional flows come from different datasets, so one citation for the whole table would imply every f…
delete_alertDelete a price alertcan change or delete dataCancel one armed price trigger permanently, by its rule id. Disarms a single watch so it will not fire again — the opposite of `set_price_alert`, and unlike `list_alerts` it changes state rather than reporting it. Cancellation is irreversible: re-arming means creating a fresh trigger. Naming somebody else's rule id cancels nothing at all. Args: rule_id.
describe_datasetDescribe a dataset's semanticsread-onlyFULL semantics of one dataset: grain (what a row is), field meanings+units, ★TIME-CORRECTNESS rules (knowledge_time_field / point_in_time_safe — read before backtesting), relations for cross-table reasoning, agent_hints (when to use), quant_use (which factors). Args: dataset_id.
explain_provenanceExplain where a value came fromread-onlyWhere did this number come from, and when could anyone have known it? (WP-6) ★ THIS IS THE GROUNDING TOOL. Every other tool's answer is supposed to be expandable through this one: given a ticker, a field and a date, it names the dataset that serves that field, the knowledge column, and WHICH as_of rule applies on that date. Use it whenever you are about to state a number as fact. ★ IT DOES NOT OVERLAP WITH THE OTHER TWO PROVENANCE TOOLS, and they are not substitutes: `get_inclusion_proof(dataset, row_key)` proves a ROW was in a published snapshot (Merkle). `c…
find_relatedFind related datasets and tickersread-onlyTraverse the knowledge graph for cross-table / supply-chain reasoning. - dataset_id: returns join-able datasets (+why) to plan multi-table analysis. - ticker: returns its industry value-chain node + peers in the same node (supply-chain reasoning). Args: dataset_id (e.g. 'equity_daily_prices') and/or ticker (e.g. '2330').
get_backtestGet a backtest resultread-onlyRetrieve a previous backtest by run_id — the full record, including why it was rejected. Only runs in YOUR namespace are visible; a run_id belonging to someone else is simply not found. Args: run_id (the `twmd_bt_…` handle returned by run_backtest).
get_code_exampleGet a code exampleread-onlyEmit a copy-pasteable HTTP snippet wired to the real endpoint, header and parameter names. ★ FOR WRITING YOUR OWN CLIENT, NOT FOR GETTING DATA. Every other tool here answers a question; this one hands you source code so your program can ask it directly over HTTPS. Nothing is fetched and no rows come back. ★ THE CONSTANTS ARE READ OUT OF THE SERVER, NOT REMEMBERED. Base URL, the `X-API-Key` header spelling, and the route path all come from the code that serves them. The worst kind of broken example is one that looks right: a mistyped path 404s and the reader blames the…
get_inclusion_proofGet an inclusion proofread-onlyProve a row was in the snapshot TWMD published — and check it yourself. Returns the Merkle sibling path, the signed root, and the checkpoint it belongs to. It returns the PATH rather than a yes/no on purpose: a service that answers "yes, it is included, trust me" is the opposite of verifiable. Recompute the root from the leaf and the path; the verifier is ~30 lines and is written out in docs/VERIFIABLE_DATA.md. ★ WHAT IT PROVES: integrity (the row was not altered after publication) and origin (the root was signed by TWMD). **It does NOT prove the numbers are correct**…
Show 26 more tools
get_researchGet a research reportread-onlyRetrieve one of YOUR previous research reports. Others' runs are simply not found. Args: research_id — the identifier `run_research` returned when it started that run.
list_alertsList price alertsread-onlyShow the price-trigger rules you have armed, and whether each is still armed. A read-only inventory of thresholds you asked to be watched — it arms nothing and cancels nothing (`set_price_alert` arms, `delete_alert` cancels). Another customer's triggers are simply not visible here.
list_backtestsList backtestsread-onlyBrowse an INDEX of your past backtest runs — ids and headline metrics only, no re-execution. Use when you want to find a run whose id you have forgotten. It never re-computes anything: `run_backtest` executes a new one, `get_backtest` opens a single record in full, and `replay_backtest` re-derives one to check reproducibility. This is the catalogue, not any of those three. Args: optional strategy_id filter, limit.
list_datasetsList datasetsread-onlyList available Taiwan-market datasets (discovery entry point). Returns id / 中文名 / category / tier / one-line description for each. Use this first to find the right data. Args: category: optional, e.g. 'chip'(籌碼) 'fundamental'(基本面) 'price'(行情) 'macro'(總經) 'relation'(關聯/產業鏈) 'derivatives'(期權) 'event'(事件) 'rag_text'(文本). tier: optional minimum plan: 'free' 'starter' 'pro' 'max' 'developer' 'enterprise'.
list_factor_findingsList factor findingsread-onlyVerdicts from the overnight factor search on YOUR namespace — including the rejections. The rejections are returned deliberately. A research log that keeps only the winners is the highlight reel overfitting lives in, and the acceptance RATE is the number that tells you whether the anti-overfitting gate is doing its job: a search that accepts most of what it tries has a broken gate, not a talent for finding alpha. Every verdict carries the trial count it was judged against, so it can be re-checked. `coverage.missing` names hypotheses that were p…
list_pending_actionsList pending actionsread-onlyFinancial actions proposed by your research runs that are waiting for a human decision. Nothing here has been executed or ever will be by this system. These are proposals.
macro_regime_readRead the macro regimeread-only總經 Regime:景氣信號、利率與殖利率曲線、匯率、資金流。 ★ 這支講的是**整個市場**,不是任何一檔個股 —— 所以它不收 ticker。 ★ 事實整理,不是投資建議、不是預測。輸出帶 `does_not_prove`。 ★ ⚠️ `macro_worldbank` 類的來源會**回溯修訂**歷史年度:今天讀到的舊年度數字 和當時看到的不是同一個,`pit_notes` 會標出來。 ★ Args:只有 `as_of`(選填)—— 它**不收 ticker**,因為主體是整個市場。 ★ Returns:同一個誠實信封;`subject` 固定是 "TW_MARKET"。 ★ 例如問「現在景氣循環在哪個位置」就是這一支,而不是問某一檔。 ★ PRECONDITIONS:自己取數;requires 一個已識別的 session。 ★ SIDE EFFECTS:read-only,does not 寫入。
memory_get_watchlistGet the watchlistread-onlyRead the tickers on one named watchlist, as it stands right now. A curated roster you maintain — distinct from `memory_search`, which digs through everything you ever recorded, and from `list_alerts`, which is about price triggers rather than symbols you are following. Args: key — the roster's name, default 'default'.
memory_replay_queryReplay a cited queryread-onlyRe-run a remembered query by its `twmd_q_…` id, through the read API's own replay store. This is what makes a recalled finding checkable: the memory says where it came from, and this fetches that same data again. It never re-executes the query by another route — two implementations of "replay" would be two answers to a question whose whole value is having one. `status` is one of: found the bytes are here, with `result_hash` to check them against too_large it WAS served, but exceeded the size ceiling: `result` is absent a…
memory_saveSave to agent memoryRemember something, with its sources and its knowledge time. Nothing is ever overwritten: saving a `factor_def` or `watchlist` under an existing key SUPERSEDES the previous version (both rows survive, so "what did I believe in June?" stays answerable), and saving identical content twice is a no-op rather than a duplicate. Args: kind: 'query' | 'factor_def' | 'watchlist' | 'finding' | 'note'. content: the thing to remember, as an object. key: the stable name — REQUIRED for 'factor_def' and 'watchlist' (that is what makes a …
memory_searchSearch agent memoryread-onlyRecall your own memories — hybrid (semantic + exact-term), with provenance attached. Every result carries where it came from (`source_query_ids`, replayable), when it was believed (`valid_from`/`valid_to`) and what knowledge time it is about (`as_of`), plus a `recall` block stating which model and which filters produced the answer. Args: query: what you are looking for, in words. kinds: restrict to some of 'query' 'factor_def' 'watchlist' 'finding' 'note'. as_of: knowledge-time bound — pass a backtest's as_of and nothing rec…
positioning_readRead institutional positioningread-only籌碼結構:法人分項、融資融券、借券使用率、大戶集中度、董監質押。 ★ 事實整理,不是投資建議、不是預測、不是目標價。輸出帶 `does_not_prove`。 ★ POINT-IN-TIME:`as_of` 逐資料集尊重揭露時差;不給就用「現在可知的最新」。 ★ 看不到的在 `cannot_see`,並分「查了沒有 / 查詢失敗 / 散佈權未取得」。 ⚠️ 逐券商分點進出**永遠**在 cannot_see —— 散佈權未取得,不要替它估算。 ★ PRECONDITIONS:自己取數,rows 不需要先用 `query_dataset` 備好;requires 一個 已識別的 session。方案沒涵蓋的資料集以 not_licensed 進 cannot_see,不整支失敗。 ★ Args:`ticker`(代號,例如 "2330")、`as_of`(選填的知識時間界線)。 ★ Returns:一個信封,`concerns`/`observations` 各帶觸發它的數字與驗證連結, 缺的東西 listed in `cannot_see`。 ★ SIDE EFFECTS:read-only,does not …
query_datasetQuery a dataset (PIT-safe)read-onlyQuery rows with built-in look-ahead protection. ★ POINT-IN-TIME: pass `as_of` (YYYY-MM-DD) for backtesting/agent-learning. For non-point-in-time-safe datasets (fundamentals, monthly_revenue, dividend_policy…) rows are filtered by DISCLOSURE date <= as_of, so the agent only sees what was public at that moment. Omit as_of only for present-day lookups (warned). ★ IF A VALUE IS IN `coverage.missing`, IT IS NOT AVAILABLE. Say it is not available. **Never estimate it, interpolate it, infer it from a neighbouring period, or carry the last known value forward.** `coverage.mis…
query_regimeQuery the macro regimeread-onlyThe Taiwan business-cycle light (NDC monitoring indicator) as a monthly series. ★ THIS IS A REVISED FIGURE, NOT A POINT-IN-TIME ONE. Every response carries `revision_basis: as_revised`. Our source holds exactly one row per month — the CURRENT value, not the value as first published — and it records no publication date. ★ `as_of` IS REFUSED, AND THE REFUSAL IS THE POINT. There is no honest point-in-time answer here yet. Do NOT work around it by asking for a date range that ends at your as_of: the NDC publishes a month's light about 27 days AFTER that month ends, so a r…
read_primary_textRead the primary source textread-onlyRead the FULL TEXT of filings and announcements — with proof links and a knowledge cutoff. ★ NOT `search_filings`. That one ranks passages by similarity and hands you fragments; this hands you whole documents so you can read what was actually said and where it sat in the filing. Similarity is not importance, and a fragment cannot show you its own context. ★ POINT-IN-TIME: pass `as_of` (YYYY-MM-DD). The cutoff is applied in SQL on the source's declared knowledge-time column BEFORE the row limit, so a bounded read is a true prefix of what was knowable, not a random subs…
replay_backtestReplay a backtestread-onlyRe-run a stored backtest and report whether it still produces the same numbers. Same spec, same `as_of`, same data questions. If the numbers moved, either the engine version changed or the underlying data was restated — both are reported, neither is smoothed over. Args: run_id.
risk_assessAssess portfolio riskread-onlyMeasure a portfolio you state against limits you state, on official point-in-time prices. Reports concentration and peak-to-trough drawdown, and NAMES every position it could not price rather than quietly assessing the rest — an assessment covering 60% of a portfolio without saying so is worse than none. Any breach produces a PROPOSAL (e.g. "reduce 2330") that requires a human decision. Approving a proposal records that decision; it executes nothing. TWMD has no order path. Args: positions: `[{"ticker": "2330", "quantity": 100}, ..…
risk_readRead risk eventsread-only事件與市場結構風險:隱含波動率、注意處置、裁罰訴訟、放空限制、因子。 ★ ⚠️ **部位集中度與回撤不在這裡** —— 那是 `risk_assess` 的職責。重算一份會產生 第二個答案,而兩個都帶著我們的名字。 ★ `checked_and_clear` 是「查過而且確認沒有」(例如近一年無裁罰),和 `cannot_see` 的「不知道」是兩回事。 ★ 事實整理,不是投資建議、不是預測。輸出帶 `does_not_prove`。 ★ Args:`ticker`(例如 "2330")、`as_of`(選填)。 ★ Returns:誠實信封;事件風險 listed in `concerns`,查過確認沒有的 listed in `checked_and_clear`。 ★ PRECONDITIONS:自己取數;requires 一個已識別的 session。 ★ SIDE EFFECTS:read-only,does not 寫入。
run_backtestRun a backtestSubmit a point-in-time backtest. NON-BLOCKING: returns a run_id at once; poll get_backtest. `job_status` tells you where it is: `cached` (this exact backtest was already computed — the stored result is returned immediately), `done` (it finished within `wait_seconds`), or `queued` / `running` (call `get_backtest(run_id)` until it is `done` or `failed`). The same spec always has the same run_id, so re-submitting is free and never computes twice. The run may only see data stamped on or before `as_of` — that is enforced structurally, not by convent…
run_recipeRun a research reciperead-onlyReplay a saved multi-step routine over rows you fetched, with every step listed. ★ THREE ROUTINES: `momentum_scan` (rank by a return column), `earnings_surprise` (actual versus estimate), `dividend_capture` (which ex-dates are still ahead). ★ A SAVED ROUTINE IS NOT A TRADING VIEW. The names are conventional labels for well-known sequences; what runs is arithmetic over rows you supplied. `steps[]` spells out each operation so you can disagree with the routine rather than trust it, and nothing here says any of these sequences makes money. ★ SKIPPED SYMBOLS ARE LIST…
run_researchRun a research reportRun a multi-agent research pass and return a structured, sourced report. Six roles run in order — data analyst, factor researcher, backtest engineer, risk officer, portfolio manager, compliance officer. Each step's output carries the `query_ids` behind it; risks are reported alongside results, not beneath them; and anything the run could not do is listed as a limitation rather than filled in. The factor researcher checks memory first and SKIPS a hypothesis a previous run already rejected. The portfolio manager proposes nothing when the evidence…
screenScreen the marketread-onlyPost-process rows already returned by query_dataset; without rows it returns a clear hint. Turn a spoken shortlist description into explicit numeric cut-offs, and show the cut-offs. ★ THE THRESHOLDS COME BACK WITH THE SHORTLIST. "低本益比" becomes `per < 15`, and that 15 is printed in `applied[]` so you can disagree with it. A filter that hands over thirty names without saying where it drew the line cannot be checked by anyone — and whether the line was 15 or 20 completely changes which thirty. ★ PHRASES IT CANNOT MAP COME BACK IN `unparsed[]`. It will not quietly invent…
search_filingsSearch filings and announcementsread-onlySemantic search over MOPS filings, financial-statement notes and company news. Answers questions a keyword filter cannot: "what risks did this company disclose this quarter?", "which companies mentioned CoWoS capacity expansion?" — matching on MEANING, so a paragraph that never uses your exact words still ranks. ★ POINT-IN-TIME: pass `as_of` (YYYY-MM-DD). Chunks are filtered `published_at <= as_of` in SQL BEFORE ranking, so a backtest cannot retrieve a filing that did not exist yet. `meta.as_of_applied` echoes the cutoff that actually ran — check it. **Without `as_of`…
set_price_alertSet a price alertLeave a standing instruction: tell me when this symbol crosses this price. The alert OUTLIVES this conversation. It is evaluated against official daily closes by a resident agent and delivered to your realtime stream and to any webhook endpoints you have registered — signed, retried, and de-duplicated so one crossing is one notification. This is a NOTIFICATION, not an order. Nothing in TWMD can place a trade. Args: rule_id: your name for this alert. Re-using one UPDATES it rather than adding a second. symbol: the Taiwan ticker,…
supply_chain_readRead the supply chainread-only供應鏈與同業:產業鏈位置、同業分組、轉投資、外銷訂單 vs 營收。 ★ 事實整理,不是投資建議、不是預測。輸出帶 `does_not_prove`。 ★ ⚠️ `company_peer_groups` 無日期欄:指定過去的 `as_of` 時,回的是**現況**分組, `pit_notes` 會標「非當時分類」。 ★ ⚠️ 質化的客戶/供應商關係與分部營收在年報附註,那條來源**尚未建置** —— 固定列在 `cannot_see`(status=no_loader),不是這次查失敗。 ★ Args:`ticker`(例如 "2330")、`as_of`(選填)。 ★ Returns:誠實信封;外銷訂單與營收的背離會 listed in `concerns`。 ★ PRECONDITIONS:自己取數;requires 一個已識別的 session。 ★ SIDE EFFECTS:read-only,does not 寫入。
try_sampleTry a free sample (no key)read-onlyHand an unregistered caller a short taste of an open dataset, plus where to unlock the rest. ★ WHAT AN ACCOUNTLESS CALLER GETS INSTEAD OF A BARE REFUSAL. Somebody arriving through a chat connector with no plan would otherwise meet a flat rejection, which the host model relays as "this service turned you down". ★ WHAT IS ACTUALLY FREE, STATED CONCRETELY. The reference resources read with no key at all, and the five sample tickers (2330, 2317, 2454, 0050, 2603) answer through `query_dataset` with no plan. Querying beyond those over MCP starts at the Pro plan. ★ OPE…
Signals
- Last release
- Jul 22, 2026 (3 months ago)
Details
- Registry name
com.twmarketdata/tw-market-data- Version
- 1.28.1
- Auth
- API key
- License
- License unknown
- Website
- twmarketdata.com
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- Official MCP Registry
Cite this page
Tw Market Data MCP server. Agent Mart. https://agentmart.dev/connectors/twmarketdata-com-tw-market-data (last updated 2026-10-24)