Skip to content
TW Market Data logo

TW Market Data MCP server

Which MCP servers are TW Market Data's own, from the official registry and from asking its own domain, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.

read 2026-10-25

← Back to TW Market Data

Whose server it is
  • Registry namecom.twmarketdata/tw-market-dataverified in the MCP registry

The registry name sits under twmarketdata.com. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.

When we asked itchecked 2026-10-25
  • Stateanswerschecked 2026-10-25
  • Tools41
  • Server calls itselftw-market-data
  • Server version1.28.1
  • Protocol version2025-06-18

On 2026-10-25 the server answered initialize and tools/list without a sign-in. First answer in 395 ms.

Should an agent connect itNot proven either way yet
  • Whether its tools do the product's job has not been judged yet.
  • Checked on 2 of the 7 days it takes to judge reliability.

Once connected

  • For "Backtest strategies on point-in-time historical data", the likely first call is run_backtest.
  • delete_alert change data without a sign-in: anyone with the address can call them.
  • Parameters are untyped or undescribed in 39 of 41 tools: check arguments before calling.

Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.

Measured dailydaily checks: 2, the first on 2026-10-25
  • INITE MCP scoreafter a weeka score needs 7 daily checks: 2 so far
  • Answeredmeasuring2 of the 7 daily checks it takes to print a share
  • Median first answer403 ms
  • Space in an agent's context≈ 14,032 tokensthe definitions of all its tools (41), which an agent carries on every turn
  • Tool definitionsB · 84 of 100
  • Typed results41 of 41 toolsdeclared outputSchema: results come typed, read once
  • Parameters without a description: in 39 of 41

What an agent can do with it

  • not sure · Pull TWSE and TPEx daily prices via REST API
  • not sure · Give AI agents Taiwan market data through MCP
  • can do · Backtest strategies on point-in-time historical data

Each of the product's use cases, put to Jev against this server's tool list: can an agent do it with these tools?

Worth a look

  • Tools that change data, on a server that answers without a sign-in: delete_alert

A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (25%), doing the product's job (25%), definitions (20%), context (10%), use (10%) and how readily a client connects (10%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →

Tools it offers41 tools · read 2026-10-25
  • list_datasets

    List 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'(基本面)…

  • describe_dataset

    FULL 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)…

  • query_dataset

    Query 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…

  • find_related

    Traverse 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…

  • search_filings

    Semantic 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?"…

  • explain_provenance

    Where 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…

  • get_inclusion_proof

    Prove 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…

  • cite_this

    Produce 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…

  • read_primary_text

    Read 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…

  • ask

    Answer 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…

  • chart

    Turn 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…

  • screen

    Post-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. "低本益比"…

  • query_regime

    The 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…

  • calendar

    Sort 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…

  • compare

    Lay 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…

  • get_code_example

    Emit 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…

  • run_recipe

    Replay 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…

  • try_sample

    Hand 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…

  • run_backtest

    Submit 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…

  • get_backtest

    Retrieve 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…

  • replay_backtest

    Re-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…

  • list_backtests

    Browse 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`…

  • memory_save

    Remember 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?"…

  • memory_search

    Recall 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…

  • memory_get_watchlist

    Read 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…

  • memory_replay_query

    Re-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…

  • run_research

    Run 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…

  • get_research

    Retrieve 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_pending_actions

    Financial 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.

  • approve_action

    Record 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…

  • list_alerts

    Show 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…

  • set_price_alert

    Leave 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…

  • delete_alert

    Cancel 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…

  • risk_assess

    Measure 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…

  • agent_activity

    What 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…

  • list_factor_findings

    Verdicts 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…

  • company_health_check

    一檔股票的誠實體檢:成長、獲利品質、估值、籌碼、紅旗,每個數字可驗證。 ★ 這是**事實整理**,不是投資建議、不是預測、不是目標價。輸出帶 `does_not_prove`,轉述時請一併保留。 ★ POINT-IN-TIME:`as_of` 逐資料集尊重揭露時差 —— 月營收用法定截止日推得的 估計時點,財報用出表日,估值是當日。不給 `as_of` 就用「現在可知的最新」, **不是今天**。 ★ 沒看到的東西會列在…

  • positioning_read

    籌碼結構:法人分項、融資融券、借券使用率、大戶集中度、董監質押。 ★ 事實整理,不是投資建議、不是預測、不是目標價。輸出帶 `does_not_prove`。 ★ POINT-IN-TIME:`as_of` 逐資料集尊重揭露時差;不給就用「現在可知的最新」。 ★ 看不到的在 `cannot_see`,並分「查了沒有 / 查詢失敗 / 散佈權未取得」。 ⚠️ 逐券商分點進出**永遠**在 cannot_see —— 散佈權未取得,不要替它估算。 ★…

  • macro_regime_read

    總經 Regime:景氣信號、利率與殖利率曲線、匯率、資金流。 ★ 這支講的是**整個市場**,不是任何一檔個股 —— 所以它不收 ticker。 ★ 事實整理,不是投資建議、不是預測。輸出帶 `does_not_prove`。 ★ ⚠️ `macro_worldbank` 類的來源會**回溯修訂**歷史年度:今天讀到的舊年度數字 和當時看到的不是同一個,`pit_notes` 會標出來。 ★ Args:只有 `as_of`(選填)—— 它**不收…

  • supply_chain_read

    供應鏈與同業:產業鏈位置、同業分組、轉投資、外銷訂單 vs 營收。 ★ 事實整理,不是投資建議、不是預測。輸出帶 `does_not_prove`。 ★ ⚠️ `company_peer_groups` 無日期欄:指定過去的 `as_of` 時,回的是**現況**分組, `pit_notes` 會標「非當時分類」。 ★ ⚠️ 質化的客戶/供應商關係與分部營收在年報附註,那條來源**尚未建置** —— 固定列在…

  • risk_read

    事件與市場結構風險:隱含波動率、注意處置、裁罰訴訟、放空限制、因子。 ★ ⚠️ **部位集中度與回撤不在這裡** —— 那是 `risk_assess` 的職責。重算一份會產生 第二個答案,而兩個都帶著我們的名字。 ★ `checked_and_clear` 是「查過而且確認沒有」(例如近一年無裁罰),和 `cannot_see` 的「不知道」是兩回事。 ★ 事實整理,不是投資建議、不是預測。輸出帶 `does_not_prove`。 ★ Args:`ticker`(例如…

How to connect

Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:

{
  "mcpServers": {
    "tw-market-data": {
      "type": "http",
      "url": "https://mcp.twmarketdata.com/mcp"
    }
  }
}

Add it

Claude Code, in a terminal

claude mcp add --transport http twmarketdata https://mcp.twmarketdata.com/mcp

Add to CursorAdd to VS Code

claude.ai, ChatGPT and other clients: add https://mcp.twmarketdata.com/mcp as a custom connector in the settings.

OpenAPI spec

9 paths, read 2026-10-25. Open the spec ↗

Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.