北斗网格引擎 MCP 智能平台
北斗网格引擎 MCP 智能平台
📖 项目简介
北斗网格引擎 MCP 智能平台是一个创新的空间数据智能分析系统,通过自然语言交互实现 GIS 数据的查询、分析和可视化。项目基于 Anthropic 的 Model Context Protocol (MCP) 协议,将大语言模型与地理信息系统深度融合,让用户无需掌握复杂的 GIS 查询语法,仅通过对话即可完成空间数据分析。
🎯 核心价值
- 降低门槛:用自然语言替代复杂的 GIS 查询语法
- 智能交互:AI 自动理解用户意图并调用相应工具
- 可视化呈现:查询结果自动在地图上渲染展示
- 标准化协议:基于 MCP 协议,易于扩展和集成
🌟 应用场景
- 🗺️ 城市规划:快速查询特定区域的建筑、道路等数据
- 📊 数据分析:通过对话完成空间统计和分析任务
- 🔍 应急响应:快速定位和查询灾害影响范围
- 🏢 企业决策:辅助选址、市场分析等业务场景
🏗️ 架构设计
整体架构图
┌─────────────────────────────────────────────────────────────┐
│ 用户界面层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ AI 对话 │ │ 地图交互 │ │ 工具监控 │ │ 配置管理 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ MCP 客户端层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MCP Client Factory (工厂管理) │ │
│ │ • 多服务器连接管理 │ │
│ │ • 工具自动发现与注册 │ │
│ │ • 会话生命周期管理 │ │
│ │ • 超时保护与错误处理 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↕ SSE 长连接
┌─────────────────────────────────────────────────────────────┐
│ MCP 服务器层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MCP Server (工具提供者) │ │
│ │ • get_data_source_list - 获取数据源列表 │ │
│ │ • geometry_search - 空间几何检索 │ │
│ │ • get_layer_by_indexLibraryName - 图层查询 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 业务数据层 │
│ 北斗网格引擎服务 (REST API) │
└─────────────────────────────────────────────────────────────┘
技术栈
前端
- 框架:Next.js 15 + React 19
- 语言:TypeScript
- 地图:Leaflet + React-Leaflet
- 状态管理:Zustand
- UI 组件:Radix UI + TailwindCSS
- MCP 客户端:@modelcontextprotocol/sdk
后端
- MCP 服务器:Node.js (TypeScript) / Python (FastMCP)
- 传输协议:SSE (Server-Sent Events)
- 参数校验:Zod Schema
- HTTP 框架:Express
AI 集成
- 模型:智谱 AI GLM-4 / DeepSeek
- 工具调用:OpenAI Function Calling 标准
- 响应方式:流式输出(SSE)
🔄 核心流程
1️⃣ 用户查询流程
用户输入自然语言
↓
系统构建上下文(包含地图空间信息)
↓
发送给大语言模型(携带可用工具列表)
↓
LLM 分析意图并决定调用哪个工具
↓
返回工具调用指令(工具名 + 参数)
↓
前端展示工具调用卡片(等待用户确认)
↓
用户确认后执行工具
↓
MCP 客户端调用 MCP 服务器
↓
MCP 服务器调用业务 API
↓
返回结果给 LLM 进行总结
↓
展示最终答案 + 地图可视化
2️⃣ MCP 工具调用流程
┌─────────────┐
│ LLM 决策 │ "需要调用 geometry_search 工具"
└──────┬──────┘
↓
┌─────────────┐
│ 工具路由器 │ 查找工具所属的 MCP 服务器
└──────┬──────┘
↓
┌─────────────┐
│ MCP Session │ 通过 SSE 连接发送工具调用请求
└──────┬──────┘
↓
┌─────────────┐
│ MCP Server │ 接收请求并执行工具逻辑
└──────┬──────┘
↓
┌─────────────┐
│ 业务 API │ 调用实际的数据服务
└──────┬──────┘
↓
┌─────────────┐
│ 返回结果 │ 逐层返回给用户
└─────────────┘
3️⃣ 地图交互流程
用户在地图上绘制区域(多边形/矩形)
↓
系统捕获 GeoJSON 坐标
↓
存储到全局状态(Zustand Store)
↓
用户发起查询
↓
GeoJSON 作为上下文传递给 LLM
↓
LLM 理解空间范围并调用工具
↓
工具使用 GeoJSON 作为查询参数
↓
返回该区域内的数据
↓
数据自动渲染到地图上(矢量图层)
✨ 功能特性
🤖 智能对话
- 自然语言理解:支持口语化的查询表达
- 上下文记忆:记住对话历史,支持追问
- 推理过程展示:实时显示 AI 的思考链路
- 流式响应:逐字输出,提升交互体验
🗺️ 地图功能
- 交互式地图:基于 Leaflet 的高性能地图渲染
- 空间绘制:支持绘制多边形、矩形作为查询条件
- 图层管理:动态添加、删除、样式自定义
- 数据可视化:查询结果自动渲染为矢量图层
- 弹窗展示:点击要素显示详细属性信息
🔧 工具调用
- 工具自动发现:连接 MCP 服务器后自动获取可用工具
- 可视化监控:实时展示工具调用状态和参数
- 用户确认机制:工具执行前需用户审批(可配置)
- 超时保护:防止工具调用长时间阻塞
- 错误降级:工具失败时返回友好提示
⚙️ 配置管理
- 多服务器支持:同时连接多个 MCP 服务器
- 动态配置:通过配置文件添加新工具,无需改代码
- 传输协议切换:支持 SSE 和 stdio 两种传输方式
- 环境隔离:开发/测试/生产环境独立配置
🚀 快速开始
环境要求
- Node.js 20+
- pnpm 10+
- Python 3.9+(如使用 Python MCP 服务器)
安装步骤
1. 克隆项目
1git clone https://github.com/your-repo/beidou-engine-mcp.git
2cd beidou-engine-mcp2. 启动后端 MCP 服务器
1cd server
2pip install fastmcp python-dotenv requests pydantic
3python es_app.py服务器将在 http://localhost:8000 启动。
3. 启动前端应用
1cd web/beidou-engine-mcp-web
2pnpm install
3pnpm run dev访问 http://localhost:3000 即可使用。
配置说明
在 web/beidou-engine-mcp-web/.env 中配置:
1# MCP 服务器地址
2NEXT_PUBLIC_MCP_SSE_URL=http://localhost:8000/sse
3
4# LLM API 配置
5OPENAI_API_KEY=your-api-key
6OPENAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
7OPENAI_MODEL=glm-4-9b📊 项目亮点
1. MCP 协议深度应用
- 国内首批基于 MCP 协议的生产级 GIS 应用
- 标准化工具定义,符合 MCP 规范,易于生态集成
- 多服务器聚合,统一管理不同来源的工具
- 工具自动发现,动态加载可用功能
2. 创新交互范式
- 多模态输入:文字 + 地图空间选择
- 双向联动:地图 ↔ AI 的实时交互
- 可视化反馈:工具调用过程全程可见
- 零学习成本:无需了解 GIS 专业知识
3. 工程化实践
- 全栈 TypeScript:端到端类型安全
- 设计模式应用:工厂模式、适配器模式、事件驱动
- 状态管理优化:Zustand 轻量级方案
- 性能优化:SSE 连接复用、流式响应、动态导入
4. 可扩展架构
- 插件化设计:通过配置文件添加新 MCP 服务器
- 工具聚合器:自动合并多个服务器的工具
- 前后端分离:MCP 服务器可独立部署和升级
- 协议标准化:遵循 MCP 规范,易于集成第三方工具
🎬 使用示例
示例 1:查询数据源
用户:帮我看看现在有哪些数据源?
系统:
- AI 识别意图,决定调用
get_data_source_list工具 - 展示工具调用卡片,显示工具名称和参数
- 用户点击"执行工具"
- 返回数据源列表:建筑数据、道路数据、POI 数据...
- AI 总结:当前系统有 3 个数据源可用
示例 2:空间范围查询
用户:
- 在地图上绘制一个矩形区域
- 输入:"查询这个区域内的建筑数据"
系统:
- 捕获地图绘制的 GeoJSON 坐标
- 构建上下文:用户输入 + 空间范围
- AI 决定调用
geometry_search工具 - 参数:数据源=建筑数据,几何范围=GeoJSON
- 返回该区域内的 156 条建筑记录
- 自动在地图上渲染建筑轮廓
- AI 总结:该区域共有 156 栋建筑,其中住宅 89 栋,商业 67 栋
示例 3:多轮对话
用户:查询深圳市南山区的数据源
AI:南山区有以下数据源:建筑数据、道路数据、绿地数据
用户:那帮我看看建筑数据有哪些图层
AI:(调用 get_layer_by_indexLibraryName 工具)建筑数据包含:住宅楼、商业楼、工业厂房、公共设施
用户:查询住宅楼的数量
AI:(调用 geometry_search 工具)南山区共有 2,345 栋住宅楼
📈 项目数据
- 代码量:前端 ~12,500 行,后端 ~840 行
- 核心模块:5 个(MCP 客户端、服务器、AI 编排、地图、状态管理)
- 支持工具:3 个(可扩展)
- 响应速度:首字节时间 < 500ms(流式输出)
- 并发支持:多客户端同时连接
🛣️ 未来规划
短期目标(1-3 个月)
- [ ] 增加更多空间分析工具(缓冲区、叠加分析)
- [ ] 支持数据导出(GeoJSON、Shapefile、CSV)
- [ ] 优化地图性能(大数据量渲染)
- [ ] 添加用户认证和权限管理
中期目标(3-6 个月)
- [ ] 多用户协作功能
- [ ] 查询历史和收藏功能
- [ ] 自定义 MCP 工具开发工具包
- [ ] 移动端适配
长期目标(6-12 个月)
- [ ] MCP 工具市场(社区贡献)
- [ ] 多模态输入(图片、语音)
- [ ] 实时数据订阅(WebSocket)
- [ ] 私有化部署方案
