Skip to main content

Travel Safety MCP

一个仅访问固定官方来源的旅行安全 MCP 服务。Agent 只能传入国家、别名和日期,不能传入任意 URL。

工具

  • get_current_time
  • search_china_consular_alert_url:极简版,只输入国家/地区,返回最新匹配的中国领事服务网安全提醒 URL
  • search_china_consular_alert_urls:只在中国领事服务网“安全提醒”栏目页内查找指定国家/地区的详情页 URL
  • search_four_travel_advisories:输入一次国家名称,后台并行调用千问联网检索 Agent 四次并合并结果
  • search_basic_advisories:保留 0.2.5 原四站结果,并追加中国领事服务网 cs.mfa.gov.cn/zggmcg/ljmdd/ 范围内的“了解目的地—国家概况”
  • search_health_events:旧的多站健康检索工具,百炼主流程不再使用
  • search_disaster_events
  • search_conflict_events

百炼使用与 0.2.5 相同的 travel-safety-mcp 完整入口。 0.2.12 保留原有 8 个工具、工具参数和 stdio 启动方式; search_basic_advisories 保留原四站输出,并追加中国领事国别概况页。

百炼主流程的“医疗卫生”节点应改用独立 MCP russel-china-cdc-risk-mcp 的 lookup_china_cdc_risk,不再调用 search_health_events。

中国领事服务网站内 URL 查找

当百炼全网搜索无法稳定召回 cs.mfa.gov.cn 原始详情页时,优先使用:

{
  "country": "日本"
}

如果需要候选列表和别名匹配,再使用复数版:

{
  "country": "日本",
  "aliases": ["日本国"],
  "max_results": 5,
  "max_pages": 1
}

返回示例:

{
  "country": "日本",
  "aliases": ["日本", "日本国"],
  "candidates": [
    {
      "title": "提醒中国公民近期避免前往日本",
      "date": "2026-03-26",
      "url": "https://cs.mfa.gov.cn/gyls/lsgz/lsyj/202603/t20260326_11881693.shtml",
      "matched_term": "日本",
      "source_index_url": "https://cs.mfa.gov.cn/gyls/lsgz/lsyj/"
    }
  ],
  "selected": {
    "title": "提醒中国公民近期避免前往日本",
    "date": "2026-03-26",
    "url": "https://cs.mfa.gov.cn/gyls/lsgz/lsyj/202603/t20260326_11881693.shtml",
    "matched_term": "日本",
    "source_index_url": "https://cs.mfa.gov.cn/gyls/lsgz/lsyj/"
  },
  "errors": []
}

百炼工作流中,下一步“读取详情页”节点引用 selected.url。

千问四站聚合工具

search_four_travel_advisories 的最小输入只有国家名称:

{
  "country": "日本"
}

可选传入时间 MCP 返回的日期和英文国名:

{
  "country": "日本",
  "current_date": "2026-07-07",
  "country_en": "Japan"
}

服务会在后台并行执行中国领事服务网、澳大利亚 Smartraveller、英国 Foreign Travel Advice、美国 Travel.State.Gov 四次定向检索,只向 Agent 返回 一次合并 JSON。非目标域名 URL 会被拒绝;每个候选 URL 还必须实际访问成功, 并通过页面标题或国家正文匹配。千问未召回或返回假 URL 时,服务自动从对应官网 目录发现并读取真实链接。只有 status=FOUND_VERIFIED 的页面可以用于回答, 事实依据以 official_excerpt 为准。

运行前配置环境变量:

export DASHSCOPE_API_KEY="sk-你的百炼APIKey"
export QWEN_WEB_SEARCH_AGENT_ID="aid-你的联网检索应用ID"
export QWEN_WEB_SEARCH_AGENT_VERSION="release"

可选配置:

export QWEN_WEB_SEARCH_TIMEOUT_SECONDS="180"
export QWEN_WEB_SEARCH_MAX_RETRIES="1"

密钥只能通过环境变量或阿里云密钥管理注入,不要写入代码、提示词或发布包。

所有检索工具都会返回来源状态。error 表示访问失败,no_match 表示当前页面没有找到国家匹配,Agent 不得把这两种状态描述为“没有风险”。

安全边界

  • 起始网页固定在 config.py 中。
  • 只允许 HTTPS 443 和精确匹配的白名单域名。
  • 每一次重定向都会重新检查域名。
  • 拒绝解析到私网、环回、链路本地等非公网地址的域名。
  • HTTP 客户端不读取系统代理配置。
  • 单个响应最多 2 MB,最多跟随 5 次白名单内重定向。
  • 工具不接受 URL 参数。

代码白名单可以控制 MCP 自己发出的请求。生产环境仍建议通过 VPC 出站代理或云防火墙实施“默认拒绝、按域名放行”的网络策略。

本地运行

需要 Python 3.11 以上和 uv:

uv sync
uv run travel-safety-mcp

运行测试:

uv run python -m unittest discover -s tests -v

发布到 PyPI

百炼的 uvx 脚本部署需要从公开 PyPI 安装包。当前发布包名为 russel-travel-safety-mcp-2026,命令名为 travel-safety-mcp。

uv build
uv publish

不要在代码或发布包中保存 PyPI Token、百炼 API Key 或其他密钥。

百炼脚本部署

在 MCP 管理 -> 创建 MCP 服务 -> 使用脚本部署 中选择:

  • 安装方式:uvx
  • 部署方式:基础模式
  • 地域:北京或最接近业务的地域

使用下面的包名和版本:

{
  "mcpServers": {
    "travel-safety": {
      "command": "uvx",
      "args": [
        "--from",
        "russel-travel-safety-mcp-2026==0.2.24",
        "travel-safety-mcp"
      ]
    }
  }
}

该完整入口与 0.2.5 一样暴露 8 个工具。

Agent 提示词片段

每次国家查询必须先调用 get_current_time,时区固定为 Asia/Shanghai。
随后使用规范化的中文国名、英文国名和别名调用相应工具。
起止日期仅用于灾害、冲突和安全事件等时效性检索。
中国领事国家概况不按日期筛选;中国 CDC 节点固定使用 2026 年 5 月数据库。
国家概况只使用 status=ok 的 pages 内容;CDC 只使用工具返回的 reason、selected_event 和 dataset。
status 为 error 或 no_match 时,不得推测或补写;应说明指定网站未获取到相关信息。
不得把国家概况描述为旅行风险建议,不得把固定 CDC 数据描述为实时数据。

当前限制

第一版通过各官方网站的固定索引页发现国家相关链接。网站改版、JavaScript 渲染、验证码或反自动化策略都可能导致单一来源返回 error 或 no_match。后续应为失败率较高的网站增加专用适配器,而不是放开通用搜索或任意 URL 抓取。

Metadata

Release files for russel-travel-safety-mcp-2026 0.2.24

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for russel-travel-safety-mcp-2026 0.2.24
File Size Uploaded Provenance Actions
russel_travel_safety_mcp_2026-0.2.24.tar.gz 78.2 kB Without provenance Details for russel_travel_safety_mcp_2026-0.2.24.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for russel-travel-safety-mcp-2026 0.2.24
File Interpreter ABI Platform Actions
russel_travel_safety_mcp_2026-0.2.24-py3-none-any.whl Python 3 none any Details for russel_travel_safety_mcp_2026-0.2.24-py3-none-any.whl

Total release size: 114.1 kB

Release files / russel_travel_safety_mcp_2026-0.2.24.tar.gz

Download URL russel_travel_safety_mcp_2026-0.2.24.tar.gz
Size 78.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b0237a07e9de63d7a019991d55abeb2ad07752e54938ce4adcf270cc46ebffdd
BLAKE2b-256 checksum
How to use checksums
50539d9d76d2bb2eb2924910deb91a8d44357f983b64ef2f7c30d40311abf149
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / russel_travel_safety_mcp_2026-0.2.24-py3-none-any.whl

Download URL russel_travel_safety_mcp_2026-0.2.24-py3-none-any.whl
Size 35.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dbb691495601acd12bec8a638c59fc9ee15a9075f7d51f41fb796d78ac01027f
BLAKE2b-256 checksum
How to use checksums
adbf481e2642863883468086cb76e564f614c67b0362b1450d3209c39d633419
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for russel-travel-safety-mcp-2026 0.2.24

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page