关于 guardian-mcp-server
guardian-mcp-server 面向需要检索《卫报》新闻档案的研究者和读者,可搜索、浏览并获取文章全文,覆盖 1999 年至今。除关键词外,还支持按版块、标签、作者和日期筛选。
主要功能
- 01全文搜索新闻档案
- 02按版块或标签浏览内容
- 03获取文章正文与元数据
- 04按作者和日期筛选
- 05发现可用版块与标签
适用场景
- 01研究某主题在《卫报》的报道
- 02按作者或日期查找文章
- 03浏览特定版块或标签的最新内容
MCP 相关
通过 MCP 提供文章搜索、文章获取及内容浏览工具,支持 STDIO 与 Streamable HTTP;使用时需配置 Guardian Open Platform API 密钥。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @cyanheads/guardian-mcp-serverGUARDIAN_API_KEY密钥API key for The Guardian Open Platform (https://open-platform.theguardian.com/).MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODE密钥Authentication mode to use: 'none', 'jwt', or 'oauth'.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tag | string | 否 | 将结果限制为带有此标签 ID 的内容(例如 "environment/climate-change"、"technology/artificial-intelligence"、"world/ukraine")。多个标签以逗号分隔时使用 AND 逻辑。使用 guardian_browse 的 mode=list_tags 查找有效的标签 ID。 |
| page | integer | 否 | 页码(从 1 开始)。每页最多返回 page_size 条结果。 |
| query | string | 是 | 全文搜索查询。支持 AND、OR、NOT 运算符以及双引号括起的精确短语。示例:"climate change" AND (policy OR legislation) |
| section | string | 否 | 将结果限制为某个版块 ID(例如 "world"、"politics"、"science"、"environment"、"technology"、"culture"、"sport"、"lifeandstyle")。使用 guardian_browse 的 mode=list_sections 查找有效的版块 ID。 |
| to_date | string | 否 | 仅返回在此日期或之前发布的文章。格式:YYYY-MM-DD(例如 "2024-03-31")。 |
| order_by | enum | 否 | 排序方式。提供 query 时,"relevance" 按匹配度排序(默认)。"newest" 和 "oldest" 按发布日期排序。newest | oldest | relevance |
| from_date | string | 否 | 仅返回在此日期或之后发布的文章。格式:YYYY-MM-DD(例如 "2024-01-15")。 |
| page_size | integer | 否 | 每页结果数(1–50)。请求全文时,请保持较低值(≤10)以控制上下文大小。每篇文章正文可能有 10–30KB。 |
| contributor | string | 否 | 将结果限制为此撰稿人标签 ID 对应的文章(例如 "profile/george-monbiot")。撰稿人 ID 遵循 "profile/<slug>" 格式。使用 guardian_browse 的 mode=list_tags 和 tag_type=contributor 查找撰稿人 ID。 |
详细介绍
@cyanheads/guardian-mcp-server
通过 MCP 搜索、浏览并获取《卫报》新闻档案(1999 年至今)的完整文章文本。支持 STDIO 或 Streamable HTTP。
概述
《卫报》1999 年至今的新闻档案。可进行全文搜索、按栏目或标签浏览,并获取单篇文章。
工具
| 工具 | 描述 |
|---|---|
guardian_search_articles | 在《卫报》档案中进行全文搜索,可选按栏目、标签、撰稿人和日期筛选 |
guardian_get_article | 按 ID 获取单篇《卫报》文章及其正文文本和元数据 |
guardian_browse_content | 按栏目或标签浏览,或查看可用栏目和标签;支持四种模式 |
功能参考
guardian_search_articles 工具
- 布尔值
query语法(AND/OR/NOT、带引号的短语),可选section/tag/contributor和from_date/to_date(YYYY-MM-DD)筛选;order_by:relevance(默认)、newest或oldest;page+page_size(1–50,默认 10) - 文章包含元数据、去除 HTML 标签的正文文本和
truncated标记;结果包含total、page、pages、page_size和order_by - 无结果或日期无效时返回
no_results或invalid_date(日期必须是实际日历日期) tag支持逗号(AND)、竖线|(OR)、连字符-(NOT)和括号,例如environment/climate-crisis|environment/flooding。同时传入contributor时,请将 OR 表达式括在括号中。
guardian_get_article 工具
- 必填
article_id:由guardian_search_articles或guardian_browse_content返回的路径 slugid - 返回剥除 HTML 后的正文文本、元数据、贡献者、支柱/版块分类以及
truncated - 失败时返回
not_found
guardian_browse_content 工具
- 四种
mode值:section_latest(需要section_id)、tag_latest(需要tag_id)、list_sections、list_tags;文章和标签支持page+page_size(1–50,默认值为 10) list_tags可按可选的query和tag_type(keyword、contributor、blog、series、tone、type、publication、newspaper-book、newspaper-book-section)筛选;输出包含mode、total以及匹配的results/sections/tags数组- 失败时返回
missing_section_id、missing_tag_id、section_not_found或tag_not_found。tag_id接受与搜索的tag相同的布尔表达式。
这三个工具也可能因不同状态而返回 HTTP 错误。不可重试:unauthorized(401)、access_denied(403)、request_rejected(400)、validation_failed(422)、invalid_request、request_conflict、request_not_found 和 api_unsupported(501)。可重试:api_timeout(408/425/504)、rate_limited(429)和 api_error(其他 5xx)。每个错误都附带恢复提示。
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及结构化日志记录和可选的 OpenTelemetry 跟踪。
Guardian 专属功能:
- 使用免费的非商业开发者密钥封装 Guardian Open Platform API
- 提取完整正文文本——剥除 HTML,而非仅返回标题或摘要
- 通过
guardian_browse_content的list_tags模式和tag_type=contributor查找贡献者 ID - 浏览版块和标签分类体系(
list_sections、list_tags),以便在搜索前发现筛选条件 - 免费套餐:每天 5,000 次请求,每秒 12 次调用——服务不会额外限流
便于 Agent 使用的输出:
- 搜索和返回文章的浏览模式会将预览限制为 2,000 个词,并设置
truncated;如需全文,请调用guardian_get_article - 三个工具均提供带类型的错误原因,每个原因都附有恢复提示
- 每个分页响应都包含
total/page/pages,调用方可据此跟踪结果范围
开始使用
将以下内容添加到 MCP 客户端配置文件中。请在 open-platform.theguardian.com/access 注册免费 Guardian Open Platform API 密钥。
{
"mcpServers": {
"guardian-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/guardian-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"GUARDIAN_API_KEY": "your-api-key"
}
}
}
}
也可以使用 npx(无需 Bun):
{
"mcpServers": {
"guardian-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/guardian-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"GUARDIAN_API_KEY": "your-api-key"
}
}
}
}
或者使用 Docker:
{
"mcpServers": {
"guardian-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "GUARDIAN_API_KEY=your-api-key",
"ghcr.io/cyanheads/guardian-mcp-server:latest"
]
}
}
}
对于 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 GUARDIAN_API_KEY=your-api-key bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 免费 Guardian Open Platform API 密钥——请在 open-platform.theguardian.com/access 注册。非商业开发者套餐免费且可立即使用。
安装
- 克隆仓库:
git clone https://github.com/cyanheads/guardian-mcp-server.git
- 进入目录:
cd guardian-mcp-server
- 安装依赖:
bun install
- 配置环境:
cp .env.example .env
# Edit .env and set GUARDIAN_API_KEY
配置
| 变量 | 描述 | 默认值 |
|---|---|---|
GUARDIAN_API_KEY | 必填。 从 open-platform.theguardian.com/access 获取免费开发者密钥。 | — |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务的端口。 | 3010 |
MCP_SESSION_MODE | HTTP 会话模式:stateless、stateful 或 auto(解析为 stateful)。服务声明为 stateless;导出的值会覆盖该设置。 | stateless |
MCP_AUTH_MODE | 认证模式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 记录失败的工具参数和结果,按键名脱敏,并限制为 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(默认 16384)字节。自由格式值中的机密信息仍会显示。 | false |
STORAGE_PROVIDER_TYPE | 存储后端。 | in-memory |
OTEL_ENABLED | 启用 OpenTelemetry instrumentation(跨度、指标、完成日志)。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | OTLP 基础 URL;跟踪使用 /v1/traces,指标使用 /v1/metrics。 | — |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | 可选启用的 OTLP 日志端点,按原样使用。 | — |
完整的可选覆盖项列表请参见 .env.example。
运行服务
本地开发
-
构建并运行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t guardian-mcp-server .
docker run --rm -e GUARDIAN_API_KEY=your-api-key -p 3010:3010 guardian-mcp-server
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/guardian-mcp-server。默认会安装 OpenTelemetry 对等依赖项;构建时使用 --build-arg OTEL_ENABLED=false 可省略这些依赖项。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口点——注册工具并初始化 Guardian 服务。 |
src/config | 服务专用环境变量解析(GUARDIAN_API_KEY)。 |
src/mcp-server/tools | 工具定义(*.tool.ts):guardian_search_articles、guardian_get_article、guardian_browse_content。 |
src/services/guardian | Guardian Open Platform API 客户端、规范化处理和类型定义。 |
tests/ | 单元测试和集成测试。 |
docs/ | 设计文档和目录树。 |
开发指南
开发指南和架构规则请参见 CLAUDE.md / AGENTS.md。简而言之:
- 处理程序抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录请求级日志,使用ctx.state存储租户级数据 - 在
src/index.ts中createApp()的tools数组里注册新工具 - 封装外部 API 调用:校验原始数据 → 规范化为领域类型 → 返回输出架构;绝不编造缺失字段
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0——详情请参见 LICENSE。
由 The Guardian 提供支持。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。