新时空 MCP 接入指南

本文介绍如何连接新时空 MCP 服务,并在 AI Agent 应用中调用资讯工具。下文所列参数名、默认值、取值范围与返回格式,均按线上服务的实际行为整理。

一、Agent 速查

照下面顺序操作即可跑通全流程。
  1. 连接 https://mcp.newtimespace.com/mcp,Transport 为 Streamable HTTP,无需任何 API Key。
  2. 服务端共 2 个工具:search_articles(检索列表)、get_article_detail(取正文)。
  3. 取最新资讯:传 {"page":1,"limit":10},不要传 query。
  4. 检索主体:传 {"query":"小米"}。只传一个核心词,不要空格、不要 AND/OR。
  5. 筛日期:用 start_date / end_date(YYYY-MM-DD)。不存在 date 参数。
  6. 列表默认不含正文;需要全文时拿列表里的 ID 调 get_article_detail(一次最多 10 个)。
  7. 返回内容是 Markdown 文本,不是 JSON。
  8. 看到 ⚠️ 服务端提示 就按提示改参数重试一次;看到空结果先去掉 category / 日期限定。
  9. 加不了 MCP 客户端?直接看 第十二节,有复制即可运行的 curl 与 SDK 片段。

二、服务信息

项目值
Endpointhttps://mcp.newtimespace.com/mcp
TransportStreamable HTTP(POST + SSE 响应)
Authentication无需 API Key
Server Naments-news-mcp-server
Version2.1.0
Protocol Version支持 2024-11-05 / 2025-03-26 / 2025-06-18 / 2025-11-25;服务端回显客户端请求的版本,无法识别时回落到最高的 2025-11-25。手写客户端填 2025-03-26 即可正常工作。
Toolssearch_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

四、Tool 总览

工具用途说明
search_articles 检索列表 按关键词 / 分类 / 日期区间检索文章,返回摘要 + 元数据的 Markdown 列表,默认不返回正文。
get_article_detail 取正文 按 article_id 获取一篇或多篇的完整正文(Markdown,已清洗样式噪音)。单次最多 10 个 ID。

五、search_articles 参数

所有参数均为可选。不传任何参数即返回全站最新文章。

参数 类型 默认 说明与约束
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 两个。

六、category 合法取值(按语言)

分类名随语言变化,必须精确匹配,且区分大小写。

language合法分类
zh-cn财经 | 新股 | ETF | 科技 | 出海 | 新时空研究院 | 财经FAQ
zh-hk財經 | 新股 | ETF | 科技 | 出海 | 新時空研究院 | 財經FAQ
enFinance | IPO | ETF | Tech | Overseas | Research | 财经FAQ

不确定分类时的自纠错办法

任意传一个占位分类(如 {"category":"_"}),服务端不会报错,而是在返回的 ⚠️ 服务端提示 中回吐该语言下的权威分类清单,据此重填 category 重试即可。

注意:en 分类清单末尾的 财经FAQ 为服务端当前实际返回的中文名,未做本地化,按原样传即可。

七、get_article_detail 参数

参数类型必填说明
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 字。

九、Agent 调用建议

标准两步式:先检索列表拿到 ID,再按需取正文,避免一次性拉取大量正文导致上下文溢出。

  1. 检索:search_articles({"query":"小米","limit":10})。先看概要行的命中总数,判断关键词是否过宽(数万条)或过窄(0 条)。
  2. 选目标:从列表挑 1–10 条最相关的 ID。
  3. 取正文:get_article_detail({"article_ids":"1455411,1455409"})。
  4. 整理输出:回答中保留 标题 + 发布时间 + 链接,便于溯源。

常见场景速查

场景调用方式
今日最新资讯{"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)未定义参数会被静默丢弃,只会拿到全站最新数据

十二、不走客户端:手写 HTTP 调用

如果所在环境无法添加 MCP Server,只要能发 POST 请求就能调用本服务。整个流程两步:先 initialize 拿会话 ID,再带着会话 ID 发 tools/call。

12.1 硬性要求(缺一不可)

项目要求
方法必须 POST。用 GET 会被拒绝。
路径https://mcp.newtimespace.com/mcp(末尾多余的 / 可容忍)
Content-Type必须 application/json
Accept必须同时包含两个值:application/json, text/event-stream。只写其中一个会返回 406。
Mcp-Session-Idinitialize 之后的每个请求都要带,值取自 initialize 的响应头 mcp-session-id。

12.2 最快方式:一条命令跑完

把两步合成一次执行,直接返回数据:

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 的两步用 && 串起来的。若你的运行环境一次只能执行一条命令,直接用这条最省事。

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。
若你只能分两次、跨会话执行,请把第一步打印出的 ID 值直接填进第二步的 -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 里是错误说明而非数据。

12.4 用官方 SDK(Python)

若环境里有 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。

12.5 三个可以省掉的动作

  • notifications/initialized 可以不发。规范建议发送,但本服务不强制——跳过它直接调 tools/call 完全正常。发了会返回 202 空响应,无副作用。
  • MCP-Protocol-Version 请求头可以不带,带了值不对也不影响调用。
  • 同一个会话 ID 可以连续复用多次调用,不必每次重新 initialize;若中途失效,重跑第一步即可。

12.6 排错对照

现象真实原因处理
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 三语皆可取