logo
0
0
Login
编辑文件 README.md

地震数据 MCP 服务

基于 MCP (Model Context Protocol) 的地震数据服务,提供实时地震数据查询和统计分析功能。

1. 安装和设置指南

项目依赖

  • Python >= 3.8
  • FastAPI
  • FastMCP
  • requests
  • uv (Python包管理器和运行器)

安装步骤

  1. 安装uv工具(必需)
# 使用pip安装 pip install uv # 或者使用其他方式安装,参考uv官方文档: # https://github.com/astral-sh/uv
  1. 克隆项目到本地
git clone [项目地址] cd earthquake
  1. 安装项目依赖
# 使用uv安装依赖 uv pip install -r requirements.txt # 或者使用传统pip安装 pip install -r requirements.txt

配置说明

项目使用FastMCP框架,需要在你的MCP配置文件中添加以下设置:

{ "mcpServers": { "cnb.cool/cnb/tools/earthquake-mcp": { "command": "uv", "args": [ "--directory", "C:/my/PyProject/dizhen/earthquake", "run", "main.py" ] } } }

配置说明:

  1. command: 使用 uv 作为Python包管理器和运行器
  2. args:
    • --directory: 指定项目目录路径
    • run: 运行Python脚本
    • main.py: 主程序文件

配置步骤:

  1. 找到你的MCP配置文件(通常在用户配置目录下)
  2. 添加上述配置,确保使用正确的项目路径
  3. 保存配置文件后服务将自动加载

注意:

  • 确保已正确安装uv工具,因为它是运行服务的必需组件
  • 确保项目路径使用正斜杠(/)而不是反斜杠()
  • 配置完成后,服务器将自动启动并可以使用

2. API使用说明

主要API接口

earthquake_info 函数

获取指定条件的地震信息数据。

参数说明:

  • start_date (str): 开始日期,格式:YYYY-MM-DD
  • end_date (str, 可选): 结束日期,格式:YYYY-MM-DD
  • min_magnitude (float, 可选): 最小震级
  • location (str, 可选): 地点关键词

返回值格式: 返回一个包含地震信息的列表,每条信息包含以下字段:

  • time: 发生时间
  • magnitude: 震级
  • depth: 震源深度(千米)
  • location: 地点描述
  • latitude: 纬度
  • longitude: 经度
  • source: 数据来源

错误处理

服务使用标准的HTTP状态码进行错误处理:

  • 404: 未找到数据
  • 500: 服务器内部错误
  • 503: 服务不可用

错误响应格式:

{ "detail": "错误描述信息" }

3. 示例代码和用例

基本使用示例

from mcp.client import Client async def get_latest_earthquakes(): client = Client() # 获取最近一天的地震信息 result = await client.call_tool("cnb.cool/cnb/tools/earthquake-mcp", "earthquake_info", { "start_date": "2024-01-31" }) print(result)

条件查询示例

async def get_filtered_earthquakes(): client = Client() # 获取指定日期范围内,震级大于4.0的四川地区地震 results = await client.call_tool("cnb.cool/cnb/tools/earthquake-mcp", "earthquake_info", { "start_date": "2024-01-01", "end_date": "2024-01-31", "min_magnitude": 4.0, "location": "四川" }) for quake in results: print(f"时间: {quake['time']}, 地点: {quake['location']}, 震级: {quake['magnitude']}")

错误处理示例

async def handle_errors(): client = Client() try: result = await client.call_tool("cnb.cool/cnb/tools/earthquake-mcp", "earthquake_info", { "start_date": "2024-01-31" }) except HTTPException as e: print(f"错误: {e.detail} (状态码: {e.status_code})") except Exception as e: print(f"未知错误: {str(e)}")

使用变量存储服务器名称

async def use_server_variable(): client = Client() # 将服务器名称存储为变量,便于维护 server_name = "cnb.cool/cnb/tools/earthquake-mcp" # 获取不同条件的地震数据 recent_quakes = await client.call_tool(server_name, "earthquake_info", { "start_date": "2024-01-31" }) significant_quakes = await client.call_tool(server_name, "earthquake_info", { "start_date": "2024-01-01", "min_magnitude": 5.0 }) print("最近地震:", recent_quakes) print("重要地震:", significant_quakes)

4. 故障排除指南

  1. 如果遇到网络请求失败:

    • 检查网络连接
    • 确认防火墙设置
    • 验证代理配置(如果使用)
  2. 如果返回空结果:

    • 确认日期格式是否正确(YYYY-MM-DD)
    • 验证筛选条件是否过于严格
    • 检查地点关键词是否准确
  3. 如果遇到API调用错误:

    • 确认MCP服务器配置是否正确
    • 验证参数类型和格式是否符合要求
    • 检查错误信息以获取具体原因
  4. 如果遇到uv相关问题:

    • 确认uv工具已正确安装
    • 验证uv命令是否在系统PATH中
    • 检查uv版本是否兼容

注意事项

  1. 该服务依赖于中国地震台网的数据,可能受到网站维护或更新的影响
  2. 建议适当控制请求频率,避免对服务器造成过大压力
  3. 返回的地震数据仅供参考,以官方发布为准
  4. 确保系统中已正确安装和配置uv工具,它是运行服务的必需组件

更新日志

v0.2.0 (2024-01-31)

  • 重构错误处理机制,使用FastAPI的HTTPException
  • 简化API接口,提供统一的earthquake_info工具
  • 优化数据过滤功能
  • 改进代码结构和文档

v0.1.0 (2024-01-01)

  • 初始版本发布
  • 实现基本的地震数据获取功能