search-reader-mcp

search-reader-mcp

MCP server extending Jina Reader to provide web page/PDF to Markdown reading and Bocha AI/web search via a single HTTP endpoint, exposing read, search, and MCP tools.

Category
访问服务器

README

search-reader-mcp

扩展 Jina Reader 镜像的项目:在 Jina Reader 基础上添加自定义搜索(bocha)与 MCP 服务,以单端口整合 HTTP 服务器对外提供 read / search / mcp / sse 能力。

  • 单服务、单端口:一个进程承载全部能力(默认 18081),docker-compose 仅用于便捷启动
  • 复用镜像环境:进程内复用 jina 镜像的 Chrome 抓取、依赖与运行环境,不另起炉灶
  • MCP 双传输:streamable HTTP 与 legacy SSE 兼容新旧客户端

特性

能力 端点 说明
read GET /read/<url>(/r/<url>) 网页/PDF → Markdown,进程内复用 jina 抓取
search GET /s/<query>(/search/ai/<query>) bocha AI 语义搜索(总结+参考源+模态卡+追问)
search GET /search/web/<query> bocha 网页搜索(长摘要列表)
mcp POST /mcp MCP 服务(streamable HTTP),工具 search/read
sse GET /sse + POST /messages MCP legacy SSE 传输(兼容老客户端)

快速开始

docker compose(推荐)

# 前提:宿主已有环境变量 BOCHA_API_KEY(搜索必需)
docker compose up -d --build
# 访问 http://localhost:18081

默认值集中在 docker-compose.yml,按需手工修改(端口、URL、路径等)。

docker run

docker build -t search-reader-mcp .
docker run -d --name srm -p 18081:18081 -e BOCHA_API_KEY search-reader-mcp

配置(环境变量)

变量 默认值 说明
PORT 18081 监听端口(容器内外一致)
HOST 0.0.0.0 监听地址
BOCHA_API_KEY — 必填(搜索);开发/compose 共用标准环境变量
BOCHA_URL https://api.bochaai.com bocha API base-url
JINA_APP /app jina 镜像应用根目录
SEARCH_READER_MCP_DATA /app/extension/data 持久化数据目录(compose 外挂宿主 ~/.search_reader_mcp/)
SQLITE_PATH <dataDir>/cache.db sqlite 缓存库路径
LOG_DIR <dataDir>/.log 日志目录(按天滚动)

持久化:sqlite 库与 .log/ 日志外挂宿主 ~/.search_reader_mcp/,容器重建后数据仍在。

API

read(URL → Markdown)

curl "http://localhost:18081/r/https://example.com"
# 或 /read/<url>

返回目标页面的 Markdown 正文(文本/plain)。

search(bocha)

GET(路径即 query,支持 query string 高级参数):

# ai 语义搜索(快捷方式 /s,或 /search/ai)
curl "http://localhost:18081/s/今天天气如何?count=5"
curl "http://localhost:18081/search/ai/今天天气如何?count=5&freshness=oneDay"

# web 网页搜索
curl "http://localhost:18081/search/web/hello%20world?count=10&exclude=spam.com"

POST(标准 JSON body,GET/POST 交叉):

curl -X POST http://localhost:18081/search/ai \
  -H 'Content-Type: application/json' \
  -d '{"query":"今天天气如何","count":5,"freshness":"oneDay","include":"weather.com"}'

高级参数(web 与 ai 略有差异):

参数 说明
count 条数上限,默认 20,越界自动钳制到 1..50
freshness noLimit(默认)/oneDay/oneWeek/oneMonth/oneYear 或 YYYY-MM-DD..YYYY-MM-DD,非法值回退 noLimit
include 限定站点,多个用 | 或 , 分隔;web/ai 均支持
exclude 排除站点;仅 web 生效
summary / answer 是否返回长摘要 / AI 总结(布尔,默认透传官网)

响应(结构化 JSON):

  • ai:{ "summary", "webPages": [...], "modalCards": [...], "followUpQuestions": [...] }
  • web:{ "webPages": [...] }(webPages[] 含 name/url/siteName/snippet/summary)

MCP(工具 search、read)

  • streamable HTTP:POST /mcp(协议:JSON-RPC + SSE 流,服务端生成 Mcp-Session-Id)
  • legacy SSE:GET /sse 建流,POST /messages 发请求

Claude Code 接入示例(~/.claude.json 或项目 .mcp.json):

{
  "mcpServers": {
    "search-reader-mcp": {
      "type": "http",
      "url": "http://localhost:18081/mcp"
    }
  }
}

工具说明:

工具 参数 说明
search type(默认 ai,可 web)、query、count、freshness、include、exclude 格式化文本:AI 总结/模态卡/编号网页来源/追问
read url 网页/PDF → Markdown 正文

health

curl http://localhost:18081/health
# {"service":"search-reader-mcp","status":"ok"}

开发

开发环境直接使用 jina 镜像(复用 Node 24 + Chrome + 依赖)。

# 开发容器:挂载工作区 + tsc --watch + node --watch 热重载(端口 18082 映射到容器 18081)
docker compose up dev

# 或手动:宿主构建 + 单测,容器内验证
npm install                 # 宿主开发/测试依赖(koa/supertest 等已在 devDependencies)
npm test                    # tsc + HTTP 契约测试
npm run build               # 构建到 dist/

容器冒烟:docs/smoke-test.md(构建→启动→就绪→各端点断言),MCP 工具验证 scripts/mcp-smoke.mjs。

目录结构

src/
  index.ts         入口(加载配置 → jina 桥接 → 服务器 → 监听)
  server.ts        整合服务器(路由分发 + 请求/错误日志)
  config.ts        环境变量配置
  bocha/           bocha 能力层(客户端 + VO 类型)
  mcp/             MCP 服务层(search/read 工具)
  jina/            jina koaApp 桥接(复用抓取)
  cache/           sqlite 缓存基础设施(先建库)
  log/             按天滚动文件日志
test/              HTTP 契约测试(单一 seam)
docs/              术语(CONTEXT.md)、ADR、冒烟流程
scripts/           冒烟辅助脚本

参考

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选