https://mcp.newtimespace.com/mcp,Transport 為 Streamable HTTP,無需任何 API Key。search_articles(檢索列表)、get_article_detail(取正文)。{"page":1,"limit":10},不要傳 query。{"query":"小米"}。只傳一個核心詞,不要空格、不要 AND/OR。start_date / end_date(YYYY-MM-DD)。不存在 date 參數。ID 調 get_article_detail(一次最多 10 個)。⚠️ 服務端提示 就按提示改參數重試一次;看到空結果先去掉 category / 日期限定。| 項目 | 值 |
|---|---|
| Endpoint | https://mcp.newtimespace.com/mcp |
| Transport | Streamable HTTP(POST + SSE 響應) |
| Authentication | 無需 API Key |
| Server Name | nts-news-mcp-server |
| Version | 2.1.0 |
| Protocol Version | 支持 2024-11-05 / 2025-03-26 / 2025-06-18 / 2025-11-25;服務端回顯客戶端請求的版本,無法識別時回落到最高的 2025-11-25。手寫客戶端填 2025-03-26 即可正常工作。 |
| Tools | search_articles、get_article_detail |
| CORS | 允許跨域(Access-Control-Allow-Origin: *),瀏覽器端可直連 |
服務端支持會話復用:initialize 的響應頭會返回 mcp-session-id,後續請求需回傳該頭。使用標準 MCP 客戶端時無需關心,SDK 會自動處理;手寫 HTTP 客戶端請參見 第十二節。
動手前先對號入座:你是哪種 Agent
情況 A:能添加 MCP Server(Claude Desktop、Cursor、Cline、WorkBuddy、Cherry Studio 等支持 MCP 的客戶端)
→ 用下面的配置塊,把 endpoint 交給客戶端托管,兩個工具會自動出現在你的工具列表裏。
情況 B:不能添加 MCP Server,只能發 HTTP 請求(網頁抓取型 Agent、只有 fetch / curl 能力的運行環境)
→ 直接跳到 第十二節,那裏有復製即可運行的 curl 與 Python SDK 片段。
→ 註意:本服務不支持用 GET 直接抓取,必須 POST 並攜帶指定請求頭。
標準客戶端(Claude Desktop / Cursor / Cline / WorkBuddy 等)
{
"mcpServers": {
"nts-news": {
"url": "https://mcp.newtimespace.com/mcp"
}
}
}
只寫 url 即可,兼容性最好。若你的客戶端要求標註傳輸類型,按該客戶端文檔補 "type",常見取值為 http 或 streamable-http(各家叫法不一)。若配置文件的頂層鍵不是 mcpServers(例如 VS Code 用 servers),按其文檔調整結構即可,url 值不變。本服務只支持 Streamable HTTP,不支持舊的 HTTP+SSE 雙端點模式。
遠程 URL 直連(支持從 URL 添加的客戶端)
https://mcp.newtimespace.com/mcp
| 工具 | 用途 | 說明 |
|---|---|---|
search_articles |
檢索列表 | 按關鍵詞 / 分類 / 日期區間檢索文章,返回摘要 + 元數據的 Markdown 列表,默認不返回正文。 |
get_article_detail |
取正文 | 按 article_id 獲取一篇或多篇的完整正文(Markdown,已清洗樣式噪音)。單次最多 10 個 ID。 |
所有參數均為可選。不傳任何參數即返回全站最新文章。
| 參數 | 類型 | 默認 | 說明與約束 |
|---|---|---|---|
query 可選 |
string | — | 核心檢索詞,同時匹配標題與摘要。只傳單個主體詞(如 小米、英偉達、01810)。不要傳空格分隔的多詞或布爾運算符(如 小米 財報、小米 AND 財報),服務端會直接返回空結果並給出警告。支持股票代碼( 01810、03033.HK)檢索。
|
category可選 |
string | — | 分類名,精確匹配、區分大小寫,且必須與 language 配對(中文分類不能配 en)。合法值見 第六節。不傳則檢索全站。 |
language 可選 |
enum | zh-cn |
zh-cn 簡中 | zh-hk 繁中 | en 英文。同時決定返回語言與 url 路徑。 |
start_date 可選 |
string | — | 起始日期,格式 YYYY-MM-DD,含當天 00:00:00。可單獨使用(表示該日至今)。 |
end_date 可選 |
string | — | 結束日期,格式 YYYY-MM-DD,含當天 23:59:59。篩單日則起止傳同一天。 |
sort 可選 |
enum | publish_time |
publish_time(發布時間)| id(文章 ID)。 |
order 可選 |
enum | desc |
desc 降序 | asc 升序。 |
include_content 可選 |
boolean | false |
是否在列表結果中直接附帶完整正文。默認 false 只給摘要以節省 Token。僅在只取 1~3 篇時使用;批量閱讀請改走 get_article_detail。 |
page 可選 |
integer | 1 |
頁碼,最小 1。傳 0 會被拒絕並返回參數校驗錯誤。 |
limit 可選 |
integer | 10 |
每頁條數,範圍 1–100。超過 100 會被拒絕並返回參數校驗錯誤。 註意體量: limit=100 單次響應約 4 萬字符(≈2 萬 Token)。日常取 5–10 即可。
|
參數名不存在時不會報錯,只會靜默失效
傳了未定義的參數(例如把日期寫成 "date": "2026-10-20"),服務端不會報錯,而是直接忽略該字段,返回全站最新文章。Agent 會以為篩選成功、實際拿到的是無關數據,這是最常見的踩坑點。
請嚴格使用上表參數名。日期篩選只有 start_date / end_date 兩個。
分類名隨語言變化,必須精確匹配,且區分大小寫。
| language | 合法分類 |
|---|---|
zh-cn | 財經 | 新股 | ETF | 科技 | 出海 | 新時空研究院 | 財經FAQ |
zh-hk | 財經 | 新股 | ETF | 科技 | 出海 | 新時空研究院 | 財經FAQ |
en | Finance | IPO | ETF | Tech | Overseas | Research | 財經FAQ |
不確定分類時的自糾錯辦法
任意傳一個占位分類(如 {"category":"_"}),服務端不會報錯,而是在返回的 ⚠️ 服務端提示 中回吐該語言下的權威分類清單,據此重填 category 重試即可。
註意:en 分類清單末尾的 財經FAQ 為服務端當前實際返回的中文名,未做本地化,按原樣傳即可。
| 參數 | 類型 | 必填 | 說明 |
|---|---|---|---|
article_ids |
string | 是 | 文章 ID,多個用英文逗號分隔,如 "1455411" 或 "1455411,1455409"。單次最多 10 個,超過會返回 [PARAMETER_EXCEEDED_LIMIT] 錯誤。逗號後帶空格可容錯。 |
language |
enum | 否 | zh-cn(默認)| zh-hk | en。同一 article_id 在三種語言下均可取到對應語言的正文,ID 跨語言共享。 |
article_id 來自 search_articles 列表中每條的 (ID: 1455793) 標註。
search_articles
返回單段 Markdown 文本,不是 JSON。結構固定為「概要行 → 分隔線 → 逐條列表」:
📋 NewTimeSpace 資訊檢索結果 關鍵詞: 小米 | 分類: 全部 | 語言: zh-cn 日期: * ~ * | 排序: publish_time desc 第 1/15 頁 · 本頁 10 條 · 總計 143 條 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【1】恒生中國企業(02828.HK)盤中漲0.96%,恒指重回23000點… (ID: 1455411) · 分類: ETF | 語言: zh-cn | 發布時間: 2026-10-23T13:45:24+08:00 · 作者: 沈博瀚 | 來源: 新時空 | 標簽: ETF盤中異動,恒生中國企業,02828.HK · 摘要: 恒生中國企業(02828.HK)10月23日盤中漲0.96%、報79.640港元… · 鏈接: https://www.newtimespace.com/zh-cn/etf/1455411.html ────────────────────────────── 【2】…
摘要 可能被截斷(以 ...... 結尾),需要全文請調 get_article_detail。發布時間 為帶時區 ISO 8601(+08:00)。鏈接 的路徑隨 language 變化(/zh-cn/、/zh-hk/、/en/)。include_content: true 時,每條改為 📰 文章詳情 [ID: …] 塊並附 正文內容 (N 字,Markdown)。get_article_detail
📰 文章詳情 [ID: 1455411] 標題: 恒生中國企業(02828.HK)盤中漲0.96%,恒指重回23000點、國企指數午盤漲0.93% 分類: ETF | 語言: zh-cn | 時間: 2026-10-23T13:45:24+08:00 作者: 沈博瀚 | 來源: 新時空 | 標簽: ETF盤中異動,恒生中國企業,02828.HK 鏈接: https://www.newtimespace.com/zh-cn/etf/1455411.html ──────────────────────────────────────── 正文內容 (842 字,Markdown): 新時空訊:截至10月23日13時39分,恒生中國企業(02828.HK)上漲0.96%…
多篇時同樣以 📰 文章詳情 [ID: …] 分塊連續返回。單篇正文約 800–2800 字。
標準兩步式:先檢索列表拿到 ID,再按需取正文,避免一次性拉取大量正文導致上下文溢出。
search_articles({"query":"小米","limit":10})。先看概要行的命中總數,判斷關鍵詞是否過寬(數萬條)或過窄(0 條)。ID。get_article_detail({"article_ids":"1455411,1455409"})。標題 + 發布時間 + 鏈接,便於溯源。常見場景速查
| 場景 | 調用方式 |
|---|---|
| 今日最新資訊 | {"page":1,"limit":10},不傳 query |
| 某公司近期動態 | {"query":"小米","limit":10} |
| 某公司 + 限定板塊 | {"query":"小米","category":"科技"} |
| 指定日期區間 | {"start_date":"2026-10-20","end_date":"2026-10-22","limit":10} |
| 只要某個板塊 | {"category":"ETF","limit":10} |
| 英文資訊 | {"query":"NVIDIA","language":"en","category":"Tech"} |
| 深度分析單篇 | 先檢索拿 ID → get_article_detail({"article_ids":"1455411"}) |
| 只要 1~3 篇全文 | {"query":"小米","limit":2,"include_content":true} |
服務端會區分兩類失敗:參數越界返回工具錯誤(isError: true),無結果返回空文案 + 提示。
| 返回內容 | 含義 | 處理方式 |
|---|---|---|
MCP error -32602: Input validation error: Number must be less than or equal to 100 at limit |
參數越界 | limit 改到 ≤100,page 改到 ≥1 後重試。 |
❌ 獲取文章詳情失敗: API HTTP 400 [PARAMETER_EXCEEDED_LIMIT] … 單次最多支持查詢 10 條 |
ID 數量超限 | 把 article_ids 拆成每批 ≤10 個,分批調用。 |
📭 未找到符合條件的新聞數據。。 |
無命中 | 先去掉 category 與日期限定,只留 query 重試;仍無結果則換更短的核心詞。 |
📭 未找到匹配該分類的新聞數據。。 + ⚠️ 服務端提示:… 下可用分類:… |
分類非當前語言合法值 | 照警告裏回吐的分類清單重填 category。 |
⚠️ 服務端提示:query 含空格或布爾運算符,建議僅傳入單個核心關鍵詞 |
檢索詞過復雜 | 拆成單個詞重試,如 "小米 AND 財報" → "小米"。 |
📭 未找到指定的文章內容 [IDs: 999999999] |
ID 不存在 | 重新用 search_articles 取有效 ID,不要憑空構造。 |
把 warnings 用起來
返回文本末尾若出現 ⚠️ 服務端提示(請據此自我修正),說明參數存在問題但請求已成功返回。Agent 應讀取提示內容、修正參數、重試一次,而不是把空結果當成「真的沒有這條新聞」直接回復用戶。
| 錯誤做法 | 正確做法 |
|---|---|
用 date 參數篩日期 | 用 start_date + end_date;date 會被靜默忽略 |
| 以為返回摘要就夠了,忽略正文獲取 | 列表摘要會截斷,長文分析必須調 get_article_detail |
| 把返回文本當 JSON 解析 | 返回是 Markdown 文本,直接閱讀或用正則提取 (ID: (\d+)) |
query 傳 "小米 財報 三季度" | 只傳 "小米",再按 publish_time 或取正文自行篩選 |
中文分類配 en({"category":"財經","language":"en"}) | 英文用 Finance;分類須與語言配對 |
limit=1000 想一次拉全量 | 最大 100,翻頁取;或縮小日期區間 |
一次給 article_ids 傳 20 個 | 單次 ≤10 個,分批調用 |
猜參數名(keyword、q、lang、type) | 未定義參數會被靜默丟棄,只會拿到全站最新數據 |
如果所在環境無法添加 MCP Server,只要能發 POST 請求就能調用本服務。整個流程兩步:先 initialize 拿會話 ID,再帶著會話 ID 發 tools/call。
| 項目 | 要求 |
|---|---|
| 方法 | 必須 POST。用 GET 會被拒絕。 |
| 路徑 | https://mcp.newtimespace.com/mcp(末尾多余的 / 可容忍) |
Content-Type | 必須 application/json |
Accept | 必須同時包含兩個值:application/json, text/event-stream。只寫其中一個會返回 406。 |
Mcp-Session-Id | initialize 之後的每個請求都要帶,值取自 initialize 的響應頭 mcp-session-id。 |
把兩步合成一次執行,直接返回數據:
SID=$(curl -si --max-time 40 -X POST https://mcp.newtimespace.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"web-agent","version":"1.0"}}}' \
| grep -i '^mcp-session-id:' | tr -d '\r' | cut -d' ' -f2) && \
curl -s --max-time 40 -X POST https://mcp.newtimespace.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: $SID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_articles","arguments":{"query":"小米","limit":2}}}'
它就是下面 12.3 的兩步用 && 串起來的。若你的運行環境一次只能執行一條命令,直接用這條最省事。
第一步,握手並取出會話 ID:
SID=$(curl -si --max-time 40 -X POST https://mcp.newtimespace.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"web-agent","version":"1.0"}}}' \
| grep -i '^mcp-session-id:' | tr -d '\r' | cut -d' ' -f2)
echo "SID=$SID"
拆開執行時必須註意
SID 是 shell 變量,不是寫死在命令裏的常量。兩步必須在同一個 shell 會話中執行,否則第二步取不到值,會收到 400 Session missing or invalid。-H "Mcp-Session-Id: 實際值",不要用 $SID。
第二步,帶著會話 ID 調用工具:
curl -s --max-time 40 -X POST https://mcp.newtimespace.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: $SID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_articles","arguments":{"query":"小米","limit":3}}}'
響應是 SSE 流,正文包在 data: 行裏:
event: message
data: {"result":{"content":[{"type":"text","text":"📋 NewTimeSpace 資訊檢索結果n…"}],"isError":false},"jsonrpc":"2.0","id":2}
取用方法:取 data: 其後那一段 JSON,讀 result.content[0].text,內容即第八節所示的 Markdown 文本。若 result.isError 為 true,text 裏是錯誤說明而非數據。
若環境裏有 Python 且能 pip install mcp,直接用官方 SDK 最省事,握手與會話管理它全包了:
import anyio
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client
async def main():
async with streamable_http_client("https://mcp.newtimespace.com/mcp") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
print([t.name for t in tools.tools])
r = await session.call_tool("search_articles", {"query": "小米", "limit": 3})
print(r.content[0].text)
anyio.run(main)
適配 mcp 2.x:只傳 URL 即可連通,SDK 會自動把協議版本協商到 2025-11-25,兩個工具及全部參數均正常。註意 2.x 起字段為蛇形命名(is_error、input_schema),照舊版教程寫 isError 會報 AttributeError。
notifications/initialized 可以不發。規範建議發送,但本服務不強製——跳過它直接調 tools/call 完全正常。發了會返回 202 空響應,無副作用。MCP-Protocol-Version 請求頭可以不帶,帶了值不對也不影響調用。| 現象 | 真實原因 | 處理 |
|---|---|---|
406 Not Acceptable: Client must accept both application/json and text/event-stream |
Accept 頭沒有同時包含兩個值 | 改成 Accept: application/json, text/event-stream |
400 Bad Request: Session missing or invalid |
四種可能:① 沒先做 initialize ② 請求漏了 Content-Type: application/json ③ initialize 的 body 缺 protocolVersion 或 clientInfo ④ 會話已失效 |
不要被文案誤導成“只是 session 問題”。先補全請求頭與 body,再重新 initialize |
404 Cannot POST / |
POST 打到了域名根路徑 | 路徑必須帶 /mcp |
400 Invalid or missing session ID |
直接對端點發了 GET | 本服務不支持 GET 抓取,改用 POST |
{"error":{"code":-32601,"message":"Method not found"}} |
method 名拼錯 |
只有 initialize / tools/list / tools/call |
MCP error -32602: Tool xxx not found |
工具名拼錯 | 只有 search_articles、get_article_detail,先跑 tools/list 核對 |
連上後先做一次自檢
發一次 {"jsonrpc":"2.0","id":1,"method":"tools/list"},確認返回裏能看到 search_articles 與 get_article_detail 兩個工具及其參數 schema,再發起業務調用。這樣能在參數寫錯之前就發現問題,而不是等到返回空結果時才懷疑人生。
瀏覽器直連說明
Access-Control-Allow-Origin: *,且 mcp-session-id 已通過 Access-Control-Expose-Headers 暴露,因此前端 JS 的 fetch 也能直接讀到這個響應頭,可以在瀏覽器裏完成整套握手。
| 項目 | 限製 |
|---|---|
| 鑒權 | 無,公開調用 |
| 每頁條數 | 1–100,默認 10 |
| 詳情批量 | 單次 ≤10 個 article_id |
| 單次響應體量 | limit=10 約 4 千字符;limit=100 約 4 萬字符(≈2 萬 Token) |
| 響應耗時 | 常規 0.2–1.5 秒 |
| 語言覆蓋 | zh-cn / zh-hk / en,同一文章 ID 三語皆可取 |