一個網址、一把 API 金鑰。網址所有人都一樣;金鑰是你自己的,在儀表板取得。
MCP server URL https://mcp.twmarketdata.com/mcpTransport streamable HTTPAuth header X-API-Key: sk_live_...
「連上」和「能用」是兩件事,失敗的樣子也不同——動手前先知道這點,因為客戶端可能看起來連上了,實際上每一次呼叫都被拒。
連線本身不需要金鑰。任何 MCP 客戶端只要連得到,就會列出工具——2026-08-25 自伺服器讀取為 34 個——以及六份參考資源。看得到那份清單,代表傳輸層通了。
呼叫工具才需要金鑰。沒有金鑰,伺服器回 401 unauthorized。所以「工具列出來了」還不代表認證過了——真正的證明是一次能取回資料的工具呼叫。
最快的驗證:叫 agent 執行一次 list_datasets。有資料回來,代表兩步都成立。
已經在用 Claude Code 的話,這是最短的路。把 sk_live_... 換成你自己的金鑰,其餘照抄。
claude mcp add --transport http twmd \
https://mcp.twmarketdata.com/mcp \
--header "X-API-Key: sk_live_..."
在 Claude Code 裡執行 /mcp。twmd 應該顯示為已連線、工具可用。接著請它列一次資料集——有資料回來,就代表金鑰有正確送出。
把這一段加進 ~/.codex/config.toml。mcp_servers. 後面的名字,就是 agent 之後會用的名稱。
[mcp_servers.twmd]url = "https://mcp.twmarketdata.com/mcp" [mcp_servers.twmd.http_headers]"X-API-Key" = "sk_live_..."
有些客戶端只吃「要執行的指令」,不吃網址。mcp-remote 負責橋接:對客戶端講 stdio,對我們講 streamable HTTP。
把這一行填進客戶端的「指令」欄位。機器上需要有 Node.js;不會常駐安裝任何東西。
npx -y mcp-remote https://mcp.twmarketdata.com/mcp \
--header "X-API-Key: sk_live_..."
Claude 的「連接器」設定與 ChatGPT 開發者模式的自訂連接器,都是貼上伺服器網址、用 OAuth 登入。不需要貼金鑰,也沒有東西要小心別寫進設定檔——所以這是建議先試的一條路。
上面三種依然可用,也沒有被淘汰。它們用標頭帶金鑰,適合腳本、CI,或任何無法用瀏覽器登入的場合。
- 打開客戶端的連接器設定——Claude:「連接器」;ChatGPT:開發者模式的自訂連接器。
- 貼上下方的伺服器網址。本頁所有連法用的都是同一個網址。
- 出現 OAuth 提示時登入。連線從此綁定你的帳號;整個過程都不需要輸入 API 金鑰。
https://mcp.twmarketdata.com/mcp
34 個工具與六份參考資源。數量、名稱與參數都是用 tools/list 直接向伺服器讀出來的,不是人工維護的名單——所以列在這裡的工具,就是伺服器真的會提供的工具。agent 連上後會自行探索,不需要逐一設定。
- list_datasets — 探索入口。先用它找到對的資料。
- describe_dataset — 一列代表什麼、欄位單位、時間正確性規則。回測前先讀這個。
- query_dataset — 取資料,內建未來函數防護:帶 as_of,agent 就只看得到那天已公開的內容。
- find_related — 跨表與產業鏈推理,走知識圖譜。
- 與 REST 同一份官方資料、同一套扣點。MCP 工具是協定封裝,不是另一份資料。
工作階段的起點:有哪些資料集,以及裡面一列到底代表什麼。
- list_datasets — 列出可用的台股資料集,是探索的入口。什麼時候用:工作階段的第一個呼叫;當你還不確定要的東西在哪個資料集裡。關鍵參數:category、tier。
- describe_dataset — 單一資料集的完整語意:一列代表什麼、各欄位的意義與單位,以及它的時間規則。什麼時候用:在查詢任何不熟悉的資料集之前。先讀它,才不會把單位或粒度用猜的。關鍵參數:dataset_id。
把資料列取出來,附帶防未來函數的保護與出處軌跡。
- query_dataset — 取回資料列,內建防未來函數;`as_of` 依揭露日期過濾,只會回傳在那個時點已經公開的內容。什麼時候用:任何需要真實數字的時候。回測或 agent 學習務必帶 `as_of`;不帶就是查現在,回應也會這樣標示。關鍵參數:dataset_id、tickers、start、end、as_of、limit。
- find_related — 沿知識圖譜走訪,用於跨表與供應鏈的推理。什麼時候用:當問題跨越多張表時——某供應商對某客戶的曝險,或哪些資料集可以和這張表 join。關鍵參數:dataset_id、ticker。
- search_filings — 對公開資訊觀測站申報、財報附註與公司公告做語意搜尋。什麼時候用:當答案在文字而不在數字表裡——附註、揭露事項、公司自己說明的原因。關鍵參數:query、tickers、doc_type、source_tier、as_of、limit。
- ask — 用台股的詞彙回答白話問題,取的是真實數字,而不是自己編出來的。什麼時候用:當你還不知道問題對應哪個資料集時。它負責導引,不會生出一個它找不到來源的答案。關鍵參數:question。
- read_primary_text — 讀取申報或公告的全文,並附回可查證發布內容的連結。什麼時候用:當摘要不夠、而措辭本身就是證據時。關鍵參數:source。
多步驟的研究流程,產出的是一份帶出處的報告,而不是單一答案。
- run_research — 執行多 agent 研究流程,回傳一份結構化、帶出處的報告。什麼時候用:面對需要多個步驟、且結果要能被引用的開放式問題,而不是一次性的回答。關鍵參數:prompt、tickers、start、end、as_of、max_backtests。
- get_research — 以 id 取回你先前的研究報告。其他租戶的執行結果看不到。什麼時候用:要重看或引用一次已經跑過的研究時,不必重跑。關鍵參數:research_id。
- list_factor_findings — 你的命名空間下,隔夜因子搜尋的結論——包含沒有通過的那些。什麼時候用:看看你不在時試過什麼。被否決的那一半才是資訊量所在。關鍵參數:limit。
時點正確的回測;可用 id 取回,也可重跑確認結果是否仍然一致。
- run_backtest — 執行時點正確的回測,回傳 run_id、指標與資料來源。什麼時候用:想在歷史上驗證一條規則,而且不讓它看到當時還不可能知道的資料。關鍵參數:strategy_id、start、end、as_of、tickers、universe_kind、rebalance、cost_bps。
- get_backtest — 以 run_id 取回先前的回測:完整記錄,包含當初為什麼跑它。什麼時候用:當你要引用某次回測、需要它原始的數字與當初的理由時。關鍵參數:run_id。
- list_backtests — 列出你近期的回測,由新到舊。什麼時候用:要找一個你沒記下來的 run_id。關鍵參數:limit、strategy_id。
- replay_backtest — 重跑一次已儲存的回測,並回報它是否仍得出相同的數字。什麼時候用:在依賴一個舊結果之前。一次不再重現的回測,正是你會希望早點知道的事。關鍵參數:run_id。
- risk_assess — 用官方時點資料,依你自己設定的限額衡量你自己陳述的投資組合。什麼時候用:在行動前,用限制條件檢查一份擬議的部位。它做的是衡量,不是建議。關鍵參數:positions、as_of、max_position_weight、max_drawdown。
agent 自己選擇記住的東西,並帶著它當時成立的知識時點。
- memory_save — 記住一件事,連同它的來源與它成立的知識時點。什麼時候用:當一個結論應該比這次對話活得更久時。存下來源 id,是它日後能被查證的關鍵。關鍵參數:key、kind、content、as_of、source_query_ids、agent_id。
- memory_search — 回想你自己的記憶——語意與精確詞混合檢索,附出處。什麼時候用:在重新推導之前先查一次。`include_superseded` 讓你看見自己過去曾經相信什麼。關鍵參數:query、key、kinds、as_of、include_superseded、limit。
- memory_replay_query — 以 `twmd_q_…` id 重跑一次記憶中的查詢,走 read API 原本的路徑。什麼時候用:要重現某個過去決策當時所依據的資料,而不是它今天的樣子。關鍵參數:query_id。
- memory_get_watchlist — 回傳你觀察清單的現行版本。什麼時候用:當這次工作階段應該依據一份既有清單、而不是臨時清單時。關鍵參數:key。
長期有效的指令,不隨建立它的那次對話結束而消失。
- set_price_alert — 留下一條長期指令:當這檔標的越過這個價格時通知我。什麼時候用:當觸發條件是市場事件,而不是這次對話的結束時。關鍵參數:symbol、threshold、direction、edge_triggered、label、rule_id。
- list_alerts — 列出你的長期警示規則。其他客戶的警示根本看不到。什麼時候用:在新增規則前,先看看已經有什麼在盯著。不需要參數。
- delete_alert — 移除你的一條長期警示。什麼時候用:當一條規則已經完成任務時。指定不屬於你的 id 不會有任何效果。關鍵參數:rule_id。
人工核可的界線,以及 agent 實際做了什麼的稽核軌跡。
- list_pending_actions — 由你的研究流程提出、正在等待人工處理的金融動作。什麼時候用:這是操作者要看的佇列。裡面的事都還沒發生——佇列存在的意義就在這裡。不需要參數。
- approve_action — 記錄某個人對一項擬議動作的核可。什麼時候用:這是 agent 自己跨不過去的界線。核可者是被記錄下來的,不是推斷出來的。關鍵參數:action_id、approver。
- agent_activity — 你的 agent 實際做過什麼,取自持久稽核軌跡。什麼時候用:事後檢視時使用,也用來回答稽核者會問的那個問題。關鍵參數:limit。
把已經取到的資料列,變成候選清單、對照、圖表,或一段可重複的流程。
- compare — 把二到五家指定公司,放在同一組指標上並排比較。什麼時候用:用於少數幾家指名公司的同口徑比較——不是用來篩選全市場。關鍵參數:tickers、metrics。
- screen — 把口語描述的候選條件,轉成明確的數值門檻並套用。什麼時候用:當範圍未知、但條件已知時。它會回傳所選用的門檻,所以模糊的要求不會變成看不見的決定。關鍵參數:conditions。
- chart — 把你已經取到的資料列,轉成聊天客戶端可以繪製的 Vega-Lite 圖。什麼時候用:在查詢之後用,而不是取代查詢——它只畫你交給它的資料,自己不去取數。關鍵參數:rows、x_field、y_field。
- calendar — 把公司行事曆的日期,分成尚未發生與已經發生兩邊。什麼時候用:當問題和時間點有關時——已經過去的除權息日,和還沒到的,意義完全不同。不需要參數。
- run_recipe — 在你取到的資料列上重播一段已儲存的多步驟流程,並顯示每一步。什麼時候用:用於會重複執行的分析。每一步都攤開,而不是壓縮成單一數字。關鍵參數:recipe。
給還沒整合的呼叫端:一段可直接跑的程式碼,以及看一眼真實資料。
- get_code_example — 產生一段可直接複製貼上的 HTTP 程式碼,已接上真實端點。什麼時候用:當你要從聊天轉到自己的程式碼、而端點與參數名必須正確時。關鍵參數:intent。
- try_sample — 讓尚未註冊的呼叫端,先看一小段開放資料集的內容。什麼時候用:在整合任何東西之前,先看看某個資料集真實的樣子。關鍵參數:dataset。
查證某一列確實在我們發布的快照裡——不必聽我們說。
- get_inclusion_proof — 證明某一列確實在 TWMD 發布的快照裡——並給你自行查證所需要的東西。什麼時候用:當一個數字必須經得起別人的檢視,而不只是你自己的。關鍵參數:dataset、row_key、snapshot_version。
- cite_this — 為 TWMD 資料產生書目引用——APA、BibTeX,以及一個可驗證的連結。什麼時候用:當產出要放進論文、備忘錄或 DDQ,來源必須被正確標示時。關鍵參數:dataset。
伺服器已上線可連,但屬 beta 而非 GA:工具介面在正式版前可能調整。任何禁不起變動的用途,穩定路徑仍是 REST API。
一個從未被訓練過這家公司的模型,去猜我們的 API 一定會猜錯——錯的主機、發明出來的參數、看起來很合理的胡說。但它猜不了 MCP 伺服器:它連上去、問有什麼可用,然後被告知。這就是把這份 metadata 公開出來、而不是期待自己被寫進訓練資料的理由。
路徑很重要。裸主機回 404,所以只拿到主機名稱的用戶端會判定伺服器掛了。
Server name com.twmarketdata/tw-market-dataVersion 1.28.1Endpoint https://mcp.twmarketdata.com/mcpTransport streamable-httpHandshake verified 2026-08-21Machine manifest /.well-known/mcp.json
- Point-in-time 是查詢參數而不是慣例。帶上 as_of,回應會說明 point_in_time、as_of_applied,以及它採用的知識時間欄位。
- coverage.missing 會列出「要了但沒回」的項目與原因。空結果配上有內容的 missing 清單,是一個完整的答覆,而不是要你去估算的邀請。
- proof 端點不需要金鑰。agent 可以在引用某一列之前,先驗證它確實屬於一份簽章過的快照。
- 資料工具需要認證:API 金鑰或 OAuth 登入。未帶憑證連線會得到結構化的 401,而不是空結果。
寫在這裡,是因為註冊清單正是一個過度宣稱會被從未讀過這一頁的人繼續傳下去的地方。
- 台灣上市櫃股票、衍生品與法規揭露。沒有美股、沒有 VIX、沒有委託簿深度。
- 證明建立的是完整性與來源,不是正確性。若官方來源公布了錯誤的數字,證明會忠實地為那個錯誤數字背書。
- 不構成投資建議;工具不會產生買進、賣出或目標價。
這就是 /.well-known/mcp.json 實際送出的內容——由同一個模組渲染,不是抄寫過來的。
{
"$schema": "https://modelcontextprotocol.io/schemas/server.json",
"name": "com.twmarketdata/tw-market-data",
"description": "Taiwan equities market data with point-in-time safety and cryptographic proof. Every value can be checked against a signed Merkle snapshot using public, keyless endpoints and a standard-library verifier, so an agent's citations can be verified rather than trusted.",
"version": "1.28.1",
"websiteUrl": "https://twmarketdata.com",
"remotes": [
{
"type": "streamable-http",
"url": "https://mcp.twmarketdata.com/mcp"
}
],
"_meta": {
"com.twmarketdata/verified_on": "2026-08-21",
"com.twmarketdata/requires_auth": true,
"com.twmarketdata/coverage": "Taiwan (TWSE, TPEx, TAIFEX, MOPS) only",
"com.twmarketdata/proof_endpoints_keyless": true,
"com.twmarketdata/not_investment_advice": true
}
}