@cyanheads/地震-mcp-服务器
搜索USGS和EMSC地震数据——通过MCP实时输入,事件查询和地震计数. (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
来自USGS ComCat和EMSC地震门户网站的地震数据. 获取实时地震素材,按时间,规模,深度和位置搜索并计数地震事件,并拉出单个事件的全部分析细节.
工具
| 工具 | 说明 |
|---|---|
earthquake_get_feed | 按震级和时间窗口获取USGS预压缩的实时地震信号 |
earthquake_search_events | 按时间范围、规模、深度、位置半径、PAGER警报级别、感觉报告或ShakeMap和DYFI强度搜索地震 |
earthquake_count_events | 不获取完整记录而计算匹配的地震过滤器 |
earthquake_get_event | 获取一次地震,由USGS或EMSC事件ID提供,并附有USGS分析产品和选入源、规模、相继抵达、余震预报和PAGER损失估计 |
资源
| 资源 | 说明 |
|---|---|
earthquake://feed/{magnitude_tier}/{time_window} | USGS实时的首个100个活动页面, 精确的续作 URI |
earthquake://feed/{magnitude_tier}/{time_window}/page/{cursor} | 继续使用返回的保存的种子生成 next_uri |
earthquake://event/{event_id} | 由 USGS 或 EMSC 事件 ID 作为可注入上下文的地震, 相同 detail 产品预测为 earthquake_get_event |
技能
| 技能 | 说明 |
|---|---|
earthquake-guide | 代理向导 earthquake_* 工具:USGS与EMSC之间的标识链、覆盖面和规模门,以及产品和 include 团体回答一个问题。 由插件主机装入 skills/ 并服务于MCP skill://earthquake-guide/SKILL.md |
能力参考
earthquake_get_feed 工具
- 选择一个分级( E)
all, (中文(简体) ),1.0, (中文(简体) ),2.5, (中文(简体) ),4.5, (中文(简体) ),significant)和一个窗口(hour, (中文(简体) ),day, (中文(简体) ),week, (中文(简体) ),month。USGS缓存这些种子;使用earthquake_search_events用于历史查询或过滤查询. - 返回事件、页数、生成时间和源信息URL.
all包括微观观点;significant由USGS使用规模、感知报告和PAGER影响进行校准. - 每页返回
limit事件(默认 15),只减少最后一页。 A 类limit超过 1000 个返回 1000 个, 并注明所请求的和应用的值EARTHQUAKE_CLAMP_LIMITS=false而是被拒绝.limit适用于第一页;后页将页面大小保留在光标中.totalCount报告整个种子; 通过nextCursor与同级和同入窗口. - 续取读取"初读"一代,不受上游编辑的影响. 保留时间可长达15分钟,但需经过能力驱逐并重新启动.
cursor_expired表示在没有光标的情况下重新启动; 遗留光标也必须重新启动 .
earthquake_search_events 工具
- 搜索
usgs或者说emsc以时间、数量、深度、半径或边框表示。 需要半径latitude, (中文(简体) ),longitude,以及radius_km组合; 框边是独立可选的, 支持 antimeridian 边界, 最高可达 ± 360°, 并交叉一个供给的圆. - 回归正常化事件
event_type环管中心event_certainty和副秘书长办公室associated_ids(其他网络ID合并为事件).ignoredFilters名称不支持的过滤器;queryEcho报告有效的查询. - 搜索和计数都接受打开
magnitude_type任意来源的值; EMSC 匹配大小写,包括小写mb财务报告和审定财务报表mw和历史大写ML财务报告和审定财务报表MD。 。 。 .product_type(需要的产品,例如:.moment-tensor和review_status(单位:千美元)automatic或者说reviewed)仅适用于USGS;EMSC将其命名于ignoredFilters。空值表示省略. event_type, (中文(简体) ),magnitude_type,以及product_type保持打开字符串; USGS 以不区分大小写的方式匹配它们,以及event_type使用逗号分隔列表。 USGS在其公布的词汇外以零事件回答一个值,因此当USGS搜索的第一页或USGS计数空出后,notice列出每个未列出的值,一旦大小写,则列出的值等于-, (中文(简体) ),_,并忽略空格 :product_type "moment_tensor"建议"moment-tensor"。读取的词汇是一次在呼叫截止日期内尝试,缓存时间为24小时;如果失败,则零返回,如不检查。 EMSC 不发布词汇;一个零数或空的第一个搜索页建议混合或大写的小写拼写magnitude_type,而不更改请求的值.min_mmi(ShakeMap强度,经过修改的Mercalli)和min_cdi(DYFI社区强度),每一至十二次,按震动程度选择事件,震级下限或alert_level错过了 两者都只适用于USGS:没有ShakeMap或DYFI报告的事件从不匹配,EMSC将其命名于ignoredFilters。 。 。 .- 仅限日期(包括扩大的年/月表)是指在两个来源中指定日期开始的午夜:
2026-10-10变成2026-10-10T00:00:00,明确的时间和时区后缀保存;未添加的日期组件被添加. 无偏移时间使用UTC进行30天的默认.queryEcho显示确切的有效界限. - 以时间或规模来排序 每个呼叫请求
limit上游事件(默认 15,由DEFAULT_LIMIT)并全部返回,仅在最后一页减少。 A 类limit超过 1000 个返回 1000 个, 并注明所请求的和应用的值EARTHQUAKE_CLAMP_LIMITS=false而是被拒绝.queryEcho.limit报告适用的限制。 继续返回nextOffset(抵消外加返回的事件,从1起计)和相同的过滤器,限制和顺序. 搜索页面读取了当前目录,所以上游编辑可以影响后页. - 严格倒转的大小、深度或明确的时间界限在本地失效,因为
invalid_range,同时命名值和恢复值。 等同和单一的界限仍然有效;时间比较使用UTC即时,包括明确的抵消. 日历无效的数值仍为上游拒绝值. - 非空短页
totalCount;一空第一页建立为零,而一空后页则留下了总的未知. 完整页面使用计数查询,使用countUnavailable失败。 Feed,搜索,计数,以及事件调用,每个调用都共享一个50秒的截止时间来完成请求和重试;用于包括计数查询在内的搜索. 取消仍然是取消.
earthquake_count_events 工具
- 使用相同的过滤器计算匹配
earthquake_search_events,而不获取事件。 奥米start_time过去30天;queryEcho报告已解决的窗口和应用程序过滤器. exceeds_limit标出 2万 个事件单请求阈值, 而非检索上限 : 搜索平移 page 可以取取取更大的匹配集 .max_alloweduSGS为20 000美元,EMSC为无效;ignoredFilters名称过滤源不能应用.- USGS 零载数
notice当供应event_type, (中文(简体) ),magnitude_type,或product_type值不在USGS词汇中,就像搜索的空首页一样.
earthquake_get_event 工具
-
通过
id任何种子或搜索结果。 一个 EMSC 解析自 asource=emsc搜索(八位数、下划线、七位数等).20190706_0000043)在EMSC地震门户网站上被抬头;所有其他ID去USGS(例如.us6000sznj) (中文(简体) ). -
USGS 事件返回归正事件加可选事件
detail: PAGER、ShakeMap、DYFI、瞬间收发、地面故障警报、源质量(包括depth_type和有限过失维度。 在没有预测的栏目时,小组被略去;缺员并不意味着没有影响.associated_ids列出事件的其他网络ID USGS 持有; 诸如us70004bn0返回首选事件(ci38457511)与所列出的别名. -
EMSC 事件返回其搜索结果所携带的同一常态事件,但没有
detail没有associated_ids。 。 。 . -
include选择更多USGS事件:组 来源 额外请求 origins每个 origin产品在事件响应中,首选无 magnitudes首选事件级别 phase-data产品为 QuakeML, 包含一个已公布的站点数一个,共享 arrivalsarrivals该文件的首选来源的每一个阶段到达, 加入到它的选取并排序最接近 一个,共享 magnitudesaftershock_forecastUSGS操作后震预测:每个窗口在每个震级或以上发生后震的概率,其预期计算范围,以及一次大于主震的可能性 一个 pager警报背后的PAGER估计 losspager产品JSON的文件:每个概率值的死亡率和经济损失警报水平(经济界限以百万美元计)、PAGER的影响说明,以及按总数和按国家或区域分列的在每次震动强度下暴露的人当产品发布影响声明时,2到3个 -
未返回的请求组列于
unavailable_includes数字 :not_published当事件没有这种产品(每组在EMSC事件上)或其产品缺少该组读取的文件(在JSON文件存在之前公布的PAGER产品)时,fetch_failed当下载失败时,返回 HTML, 不解析, 指向配置的 USGS 源外, 或用重定向回答 。 活动,detail,其他团体仍然返回;取消宣传。 活动请求及其产品下载共享了50秒的最后期限. -
PAGER 曝光行保留已公布
country_code添加country_name页:1XF(加利福尼亚),EU(美国中部/东部),WU(美国西部),和UK(分配给任何国家的领域). -
本地空白身份识别失败 。 冠名身份证和别名 与案件无关.
-
摇摆图报告
max_pga单位:克和克max_pgv在 cm/s 中,使已知的遗产编码正常化.code_version确定出版时的制作人版本. -
detail.moment_tensor可以包括独立的节点平面focal-mechanism。 。 。 .nodal_planes_from识别提供飞机的产品。 百分数元数据来自首选的百分数可用时的百分数,以及percent_double_couple仍然是已公布的 0–1 分数.
earthquake://feed/{magnitude_tier}/{time_window} 资源
- 选择与
earthquake_get_feed;所有20个组合都被列为可浏览资源. - 每起回返100起事件
application/json在紧凑事件投影中加totalCount, (中文(简体) ),truncated, (中文(简体) ),nextCursor,以及next_uri读取next_uri逐字记录至缺席为止。 续作URI是earthquake://feed/{magnitude_tier}/{time_window}/page/{cursor}。 。 。 . - 饲料资源与保留世代共享
earthquake_get_feed。缓存提示是私人的,寿命为零,因为续作符号属于请求租户。 上游故障分类为ServiceUnavailable曝光feed_unavailable;分类为Timeout曝光feed_timeout,每个都有恢复指导 并且没有捕获的上游身体。 可用性失败保留了数字 HTTP 状态; HTTP 501 仍然不可重试,并指向EMSC 搜索. 其他错误类没有改变.
earthquake://event/{event_id} 资源
- 通过一个USGS或EMSC
event_id从种子或搜索结果。 返回同一事件和可选detail产品作为earthquake_get_event; 需要没有include。 。 。 . - 用那个工具
event_deleted, (中文(简体) ),not_found, (中文(简体) ),source_unavailable,以及source_timeout错误合同.
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
安保总局/紧急安保委员会:
- USGS FDSN/GeoJSON API 和 EMSC FDSN-WS API 的机型安全客户端,将两者都正常化为一个共享的地震域计划
- 在每个上游呼叫中,自动重试后退和按要求计时;检测USGS的限速/CDN故障模式(HTML服务而不是GeoJSON),并将其映射到一个打出的服务不可用错误,而不是将其解析为数据. 一个不是预期文档的主体没有重试就以同样的方式失败,一个连接掉入了中体会被重试;既不向呼叫者传递解析器,也不传递运行时的文本
- EMSC的"两个特征"
evtype代码根据已公布的事件类型/确定性术语解码为USGS发布的相同词汇,所以event_type两个来源都有一种意义 - 仅限USGS过滤器(
alert_level, (中文(简体) ),min_felt, (中文(简体) ),min_significance, (中文(简体) ),min_mmi, (中文(简体) ),min_cdi, (中文(简体) ),event_type, (中文(简体) ),product_type, (中文(简体) ),review_status)在ignoredFilters何时source=emsc关于副秘书长,event_type="earthquake"不包括采石场爆炸和其他非铁道记录. - 不需要API密钥或费率限制级——USGS和EMSC都是完全公开的,没有密钥的API
方便代理输出 :
- 证明 -
source: "usgs" | "emsc"搜索和计数回复,加source_catalog编号 :auth字段命名目录和权威机构,因此代理可以互相权衡两个独立的解决方案 - 歧视性产出合同 -
event_type和环管中心event_certainty保留已公布的分类,缺失的字段仍然未知;exceeds_limit, (中文(简体) ),countUnavailable,以及truncated旗帜允许调用者在数据上分行, 而不是解析表达词 - 反应塑造——来源不公布的字段返回
null,绝不是虚构的零(tsunami, (中文(简体) ),status,以及mmi在 EMSC 事件上总是无效的;为 EMSC 查询而丢弃的 USGS 唯一的过滤器在ignoredFilters而不是默默无视 - Graceful deform — 上游拒绝显示服务本身在错误消息中的解释(犯罪参数,被接受的格式),而不是赤裸状态代码,失败后继计数会降解为
countUnavailable而不是失败整个搜索, 和失败的产品下载列出其include组为fetch_failed而不是失败事件搜索
开始
公共托管实例
可在 https://earthquake.caseyjhand.com/mcp 无需安装。 通过可流式HTTP将 MCP 客户端指向它 :
{
"mcpServers": {
"earthquake-mcp-server": {
"type": "streamable-http",
"url": "https://earthquake.caseyjhand.com/mcp"
}
}
}
自有/当地
在您的 MCP 客户端配置文件中添加以下内容 .
{
"mcpServers": {
"earthquake-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/earthquake-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或者用 npx( 不需要 Bun) :
{
"mcpServers": {
"earthquake-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/earthquake-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或与道克相会:
{
"mcpServers": {
"earthquake-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/earthquake-mcp-server:latest"]
}
}
}
对于可流式HTTP,设置传输并启动服务器:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v 1.4.4 (单位:千美元) 或更高级.
- 不需要API密钥——USGS和EMSC数据完全公开.
安装
- 清除仓库 :
git clone https://github.com/cyanheads/earthquake-mcp-server.git
- 导航到目录 :
cd earthquake-mcp-server
- 安装依赖性 :
bun install
配置
所有配置在启动时通过 Zod schemas 在 src/config/server-config.ts关键环境变量:
| 变量 | 说明 | 默认 |
|---|---|---|
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http | stdio |
MCP_HTTP_PORT | HTTP 服务器端口 | 3010 |
MCP_HTTP_ENDPOINT_PATH | MCP 服务器挂载的 HTTP 路径 | /mcp |
MCP_PUBLIC_URL | 用于反向代理的公用 HTTP( S) 基址, 没有证书、 查询或片段 | 无 |
MCP_SESSION_MODE | HTTP 会话 : stateful, (中文(简体) ), stateless,或 auto (解为相. 覆盖 createApp() 声明; 居克和 .env.example 还有无国籍者. | stateless (宣布为 src/index.ts(中文(简体) ) |
MCP_AUTH_MODE | 认证 : none, (中文(简体) ), jwt,或 oauth | none |
MCP_JWT_EXPECTED_AUDIENCE | JWT模式设定时需要的观众. JWT 模式记录未设置的启动警告 . | 无 |
MCP_JWT_EXPECTED_ISSUER | 设定时 JWT 模式所需的发行器 | 无 |
MCP_LOG_LEVEL | 日志级别 (debug, (中文(简体) ), info, (中文(简体) ), warning, (中文(简体) ), error页:1 | info |
MCP_GC_PRESSURE_INTERVAL_MS | Opt-in Bun-只限强制-GC压力回路 (ms). 尝试 60000 如果在持续HTTP负载下观察到堆积增长. | 0 (残疾) |
LOGS_DIR | 节点.js和Bun上的日志文件目录 。 从服务器的软件包根解析出相对路径 . | <server-package-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 日志失败的工具参数和结果,由密钥名称编辑 。 自由形式值中的秘密依然存在. | false |
LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES | 每个登录故障有效载荷的UTF-8字节上限 | 16384 |
STORAGE_PROVIDER_TYPE | 存储后端 : in-memory, (中文(简体) ), filesystem, (中文(简体) ), supabase, (中文(简体) ), cloudflare-kv/r2/d1 | in-memory |
USGS_BASE_URL | USGS API 基础 URL. 覆盖测试或镜像. 产品文件(相位数据QuakeML,余震预报,PAGER JSON)只在此来源上取取出,所以一个镜像也必须为它们服务,内容 URL 重新写入其来源;否则 include 集团报告 fetch_failed。 。 。 . | https://earthquake.usgs.gov |
EMSC_BASE_URL | EMSC API 基础 URL. 覆盖测试或镜像. | https://www.seismicportal.eu |
DEFAULT_LIMIT | 活动 earthquake_search_events 当调用省略时返回 limit (1-1 000美元) | 15 |
EARTHQUAKE_CLAMP_LIMITS | 覆盖搜索或种子 limit 1 000至1 000以上并附有通知. false 宣传并强制实施最多1000个计划. | true |
REQUEST_TIMEOUT_MS | 任意 HTTP 超时以毫秒计(1 000-120 000)。 每一条消息、搜索、计数和事件呼吁也在其请求和重复的50秒总期限内进行. | 10000 |
OTEL_ENABLED | 启用打开远程 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | 跟踪的基础 URL (N)/v1/traces)和指标(/v1/metrics); 信号特定端点变量覆盖它 | 无 |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | Opt- in OTLP 日志端点, 作为-is使用; 基准 URL 从未启用日志 | 无 |
空值和未替换的整值 ${…} 占位符使用默认值。 见 .env.example 用于可选的覆盖.
运行服务器
地方发展
-
构建和运行制作版本数字 :
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
运行检查和测试数字 :
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
夹克
docker build -t earthquake-mcp-server .
docker run --rm -p 3010:3010 earthquake-mcp-server
Dockerfile 默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/earthquake-mcp-server。默认情况下安装了 OpenTeleometry 端端依赖性 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/mcp-server/tools | 工具定义*.tool.ts) (中文(简体) ). 四个工具跨越USGS和EMSC. |
src/mcp-server/resources | 饲料,饲料续作,以及事件资源. |
src/services/feed-snapshots.ts | 租户范围序列式饲料保留,并附有有限度的有效载荷和元数据核算. |
src/services/usgs | USGS ComCat 服务 — GeoJSON 种子获取器, FDSN 查询 API 客户端, 以及事件 include 预测(原产地产品、相相数据QuakeML、余震预报、PAGER估计数). |
src/services/emsc | EMSC地震门户网站服务——FDSN事件搜索,计数,并附带ID搜索. |
src/config | 服务器特定环境变量与Zod解析并验证. |
tests/ | 单位和综合测试,反映 src/ 结构. |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log用于伐木,ctx.state用于存储 - 登记册中的新工具和资源
createApp()数组 - 验证上游数据,使数据与域类型相一致,并保存缺失的值而不是发明事实
捐款
问题值得欢迎。 提交前进行检查和测试:
bun run devcheck
bun run test
许可证
这个项目根据Apache 2.0许可证获得许可. 见 自由主义 详细文件.