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 三语皆可取 |