位置信息查询 MCP 服务

位置信息查询 MCP 服务

这是一个基于 MCP (Model Context Protocol) 的位置信息查询服务,提供多种位置相关信息的查询功能。

项目地址:location

功能特点

该服务提供以下四种查询功能:

  1. 手机号归属地查询:查询手机号的运营商和归属地信息
  2. IP地址归属地查询:查询IP地址的所属地区和ISP信息
  3. 银行卡信息查询:查询银行卡的发卡行和卡类型
  4. 身份证归属地查询:查询身份证号对应的行政区划信息

技术栈

  • TypeScript
  • Node.js
  • @modelcontextprotocol/sdk:MCP协议SDK
  • DuckDB:用于高效查询手机号和IP地址数据
  • CSV解析:用于银行卡和身份证号数据的查询

项目结构

.
├── data/                  # 数据文件目录
│   ├── mobile_location.duckdb    # 手机号归属地数据库
│   ├── ip_location.duckdb        # IP地址归属地数据库
│   ├── bank_card_bin_data.csv    # 银行卡BIN数据
│   └── id_location.csv           # 身份证归属地数据
├── src/                   # 源代码目录
│   ├── index.ts                  # 主入口文件
│   ├── mobile_location.ts        # 手机号归属地查询服务
│   ├── ip_location.ts            # IP地址归属地查询服务
│   ├── bank_card.ts              # 银行卡信息查询服务
│   └── id_location.ts            # 身份证归属地查询服务
├── dist/                  # 编译后的JavaScript文件
├── package.json           # 项目依赖配置
└── tsconfig.json          # TypeScript配置

安装和使用

安装依赖

npm install

编译TypeScript

npm run build

运行服务

npm start

或者在开发模式下运行:

npm run dev

MCP配置示例

在使用大语言模型时,可以将此服务配置为MCP服务器。以下是配置示例:

{
  "mcpServers": {
    "location": {
      "command": "npx",
      "args": ["@data_wise/location-mcp"],
      "env": {}
    }
  }
}

您可以将此配置添加到您的MCP配置文件中,然后大语言模型就可以调用这些位置查询工具。

数据文件

  • mobile_location.duckdb:包含手机号段与归属地的对应关系
  • ip_location.duckdb:包含IP地址段与归属地的对应关系
  • bank_card_bin_data.csv:包含银行卡BIN码、发卡行和卡类型信息
  • id_location.csv:包含身份证号行政区划代码与对应地区名称

查询接口

手机号归属地查询

queryMobileLocation: 查询手机号归属地
参数: {
  mobileNumbers: string[]  // 手机号数组
}
返回: {
  phoneNumber: string      // 手机号
  province: string         // 省份
  city: string             // 城市
  operator: string         // 运营商
}

IP归属地查询

queryIpLocation: 查询IP地址归属地
参数: {
  ipAddresses: string[]    // IP地址数组
}
返回: {
  ip: string               // IP地址
  isp: string              // 互联网服务提供商
  region: string           // 地区
}

银行卡信息查询

queryBankCard: 查询银行卡信息
参数: {
  cardNumbers: string[]    // 银行卡号数组
}
返回: {
  cardNumber: string       // 银行卡号
  bankName: string         // 银行名称
  cardType: string         // 卡类型(借记卡/信用卡)
}

身份证归属地查询

queryIdLocation: 查询身份证归属地
参数: {
  idNumbers: string[]      // 身份证号数组
}
返回: {
  idNumber: string         // 身份证号
  location: string         // 归属地区
}

使用示例

您可以通过标准输入输出与服务进行通信,符合MCP协议规范。也可以使用提供的测试脚本进行测试:

# 测试手机号归属地查询
npx ts-node src/test.ts

# 测试IP归属地查询
npx ts-node src/ip_test.ts

# 测试银行卡信息查询
npx ts-node src/bank_card_test.ts

# 测试身份证归属地查询
npx ts-node src/id_test.ts

开发说明

添加新的查询服务

  1. src目录下创建新的服务类文件
  2. 实现相应的查询逻辑
  3. index.ts中引入并注册新的工具

更新数据

各服务的数据文件位于data目录下,可以按需更新:

  • 手机号和IP地址数据使用DuckDB数据库
  • 银行卡和身份证号数据使用CSV文件

许可证

本项目采用MIT许可证

<think>我们正在讨论如何使用FastAPI实现MCP服务。根据引用内容,FastAPI-MCP是一个工具,它可以帮助我们将FastAPI应用转换为MCP服务。具体步骤和实现方法如下: 1. **环境准备与依赖安装**:首先需要安装FastAPI和fastapi_mcp库。可以使用pip进行安装。 2. **创建FastAPI应用**:使用FastAPI创建一个基本的应用实例。 3. **挂载MCP服务器**:使用fastapi_mcp库中的`add_mcp_server`函数将MCP服务器挂载到FastAPI应用上,并指定挂载路径和名称。 4. **运行应用**:使用uvicorn或其他ASGI服务器运行应用。 根据引用[3]的代码示例,我们可以这样实现: ```python from fastapi import FastAPI from fastapi_mcp import add_mcp_server # 创建FastAPI应用 app = FastAPI() # 挂载MCP服务器 add_mcp_server( app, # 你的FastAPI应用 mount_path="/mcp", # 挂载MCP服务器的路径 name="MyAPIMCP", # MCP服务器的名称 ) ``` 这样,我们就创建了一个基本的MCP服务。但是,我们可能还需要定义一些工具(tools)以供AI模型调用。引用[4]中提到了一个示例文件(05_reregister_tools_example.py),我们可以参考它来注册工具。 具体步骤: 1. 定义工具函数:这些函数将作为AI模型可以调用的工具。 2. 使用`register_tool`装饰器注册这些函数,以便MCP服务能够识别它们。 例如,假设我们有一个获取天气的工具函数: ```python from fastapi_mcp import register_tool @register_tool def get_weather(city: str) -> str: """ 根据城市名获取天气信息 Args: city (str): 城市名称 Returns: str: 天气信息 """ # 这里实现获取天气的逻辑,例如调用第三方API return f"{city}的天气是晴天" ``` 然后,我们将这个工具注册到MCP服务中。注意,上面的`register_tool`装饰器会自动将工具注册到MCP中。 最后,我们运行应用: ```bash uvicorn main:app --reload ``` 这样,MCP服务就运行在指定的路径(例如:/mcp)下,AI模型可以通过这个端点来调用我们注册的工具。 另外,引用[1]提到,FastAPI的高性能特性(异步支持和优化的请求处理流程)使得构建的MCP服务器具有高性能。同时,FastAPI的模块化和插件系统也方便我们扩展MCP服务器。 总结步骤: 1. 安装依赖:fastapi, uvicorn, fastapi_mcp 2. 创建FastAPI应用 3. 使用`add_mcp_server`挂载MCP服务 4. 使用`register_tool`注册工具函数 5. 运行应用 注意:fastapi_mcp的具体用法可能还需要参考其文档(引用[4]提供的链接)。 如果我们需要更复杂的功能,比如跨模态上下文传递,可能需要扩展MCP协议,但根据当前问题,我们只需要实现一个基本的MCP服务即可。 现在,我们根据上述步骤编写一个完整的示例。</think>### 使用 FastAPI 实现 MCP 服务的完整指南 #### 1. **环境准备与依赖安装** ```bash # 创建虚拟环境(可选) python -m venv mcp-env source mcp-env/bin/activate # 安装核心依赖 pip install fastapi uvicorn fastapi-mcp ``` #### 2. **基础服务搭建** ```python from fastapi import FastAPI from fastapi_mcp import add_mcp_server # 初始化 FastAPI 应用 app = FastAPI(title="AI 服务网关") # 挂载 MCP 服务器 add_mcp_server( app=app, # FastAPI 应用实例 mount_path="/mcp", # MCP 服务端点路径 name="AIServiceMCP", # MCP 服务名称 description="AI 模型集成平台" # 服务描述 ) ``` #### 3. **注册自定义功能工具** ```python from fastapi_mcp import register_tool # 注册天气查询工具 @register_tool async def get_weather(location: str) -> dict: """ 获取指定位置的天气信息 参数: - location: 城市名称 (如 "北京") 返回: - 包含温度、天气状况的字典 """ # 这里实现实际的天气API调用 return {"location": location, "temp": 25, "condition": "晴"} # 注册股票查询工具 @register_tool async def get_stock_price(symbol: str) -> float: """ 查询股票实时价格 参数: - symbol: 股票代码 (如 "AAPL") 返回: - 当前股价 """ # 这里实现实际的股票API调用 return 175.43 ``` #### 4. **配置上下文管理** ```python from fastapi_mcp import McpContext # 自定义上下文处理器 @app.middleware("http") async def add_context(request: Request, call_next): # 创建MCP上下文对象 context = McpContext( user_id=request.headers.get("X-User-ID"), session_id=request.cookies.get("session_id") ) # 将上下文附加到请求状态 request.state.mcp_context = context response = await call_next(request) # 更新上下文状态(如保存对话历史) context.save_session_data() return response ``` #### 5. **启动服务** ```bash # 使用 Uvicorn 启动服务 uvicorn main:app --reload --port 8000 ``` #### 6. **服务验证** 访问以下端点验证服务状态: - MCP 服务文档:`http://localhost:8000/mcp/docs` - 工具列表:`http://localhost:8000/mcp/tools` - 服务健康检查:`http://localhost:8000/mcp/health` #### 7. **AI 模型集成示例** ```python # 在 FastAPI 路由中使用 MCP @app.post("/ask-ai") async def ask_ai(question: str, request: Request): # 获取当前上下文 context = request.state.mcp_context # 构建 AI 请求 ai_response = await context.query_ai( prompt=question, model="gpt-4", max_tokens=500 ) # 处理可能的工具调用 if ai_response.tool_calls: results = await execute_tools(ai_response.tool_calls) return {"answer": results} return {"answer": ai_response.content} ``` #### 8. **高级配置选项** ```python # 高级 MCP 配置 add_mcp_server( app=app, mount_path="/mcp", name="AdvancedMCP", # 性能优化配置 max_workers=8, # 最大工作线程数 rate_limit="100/minute", # 请求速率限制 # 安全配置 api_keys=["SECRET_KEY_1", "SECRET_KEY_2"], # 模型集成 default_model="claude-3", fallback_model="gpt-3.5-turbo" ) ``` #### 关键优势与特性 1. **高性能基础**:继承 FastAPI 的异步特性,支持高并发请求处理[^1] 2. **自动文档生成**:内置 OpenAPI 文档,自动展示所有注册工具 3. **上下文管理**:支持跨请求的上下文持久化 4. **工具热注册**:运行时动态添加/移除工具函数 5. **统一错误处理**:标准化错误响应格式 6. **多模型支持**:可同时集成多个AI模型后端 > 实际部署时建议添加: > - API网关层(如 Nginx) > - 监控系统(Prometheus/Grafana) > - 分布式缓存(Redis) > - 消息队列(RabbitMQ/Kafka)用于异步任务处理 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值