eThekwini ESRI GIS MCP
用于访问eThekwini市开放式GIS数据门户的模型上下文协议(MCP)服务器。
概述
此MCP服务器通过ArcGIS REST服务提供对eThekwini市地理信息系统(GIS)数据的无缝访问。它可以从eThekwini GIS门户自动发现可用的数据集和服务,从而轻松查询和分析市政空间数据。
✅ 已成功连接到141多个eThekwini数据集,包括:
- 物业租赁和土地信息
- 道路和交通基础设施
- 市政边界和行政区域
- 环境数据(湿地、海岸带、洪泛区)
- 公共设施(学校、医院、图书馆)
- 公用事业和基础设施数据
- 规划和分区信息
特性
🔄 自动发现
- 自动从eThekwini的开放数据门户中发现可用数据集
- 在将新数据集和服务添加到门户时检测它们
- 具有可配置刷新间隔的智能缓存
🔍 综合搜索
- 按关键字、类别和标签搜索数据集
- 按市政服务类别(交通、环境等)筛选
- 跨数据集名称、描述和元数据的全文搜索
🗺️ 空间查询
- 使用空间和属性过滤器查询特征层
- 感兴趣地理区域的边界框查询
- 围绕特定坐标的缓冲区查询
- 支持各种空间关系(交叉、包含、内部等)
📊 统计分析
- 从数字字段(计数、总和、最小值、最大值、平均值、标准偏差)获取统计信息
- 字段信息和元数据提取
- 层架构发现
🛠️ 市政服务一体化
- 列出可用的市政服务类别
- 按服务类型对数据集的访问进行分类
- 市政特定数据结构和工作流程
🚀 部署选项
1. 标准MCP服务器 (直接集成)
与MCP兼容的客户端(如Claude Desktop、Azure AI Foundry或自定义应用程序)一起使用。
2. Azure功能部署 (云API)
作为web应用程序和AI代理的REST API部署:
- Azure AI Foundry集成 -非常适合AI代理知识库
- REST API访问 -所有MCP工具的HTTP端点
- 自动缩放 -自动处理流量峰值
- 南非主办 -部署在约翰内斯堡以获得最佳性能
安装
标准MCP安装
- 克隆存储库:
git clone https://github.com/bonnie-mapipa/ethekwini-gis-mcp.git
cd ethekwini-gis-mcp- 安装依赖项:
pip install -r requirements.txt- 运行MCP服务器:
python src/ethekwini_gis_mcp.py配置
MCP客户端配置
将以下内容添加到MCP客户端配置中:
{
"mcpServers": {
"ethekwini-gis": {
"command": "python",
"args": ["src/ethekwini_gis_mcp.py"],
"cwd": "/path/to/ethekwini-gis-mcp",
"env": {}
}
}
}环境变量
通过环境变量进行可选配置:
# Refresh interval in seconds (default: 900 = 15 minutes)
export ETHEKWINI_REFRESH_INTERVAL=900
# Maximum records per query (default: 100)
export ETHEKWINI_MAX_RECORDS=100
# HTTP timeout in seconds (default: 60)
export ETHEKWINI_TIMEOUT=60可用工具
数据集发现
refresh_datasets-刷新和发现新的数据集和服务search_datasets-按关键字、类别或标签搜索数据集get_dataset_info-获取特定数据集的详细信息list_municipal_services-列出可用的市政服务类别
数据查询
query_feature_layer-从数据集的特征层查询特征spatial_query_by_coordinates-查询边界框内或坐标附近的特征get_layer_fields-获取要素图层的字段信息get_layer_statistics-获取图层中数值字段的统计信息
使用示例
搜索交通数据
# Search for transportation-related datasets
search_datasets(
query="transport roads traffic",
category="Transportation",
limit=10
)查询道路网络特征
# Query roads in a specific area
spatial_query_by_coordinates(
service_url="https://services1.arcgis.com/.../FeatureServer/",
xmin=30.8, ymin=-29.9, # Durban area coordinates
xmax=31.1, ymax=-29.7,
max_records=50
)获取统计信息
# Get statistics for a numeric field
get_layer_statistics(
service_url="https://services1.arcgis.com/.../FeatureServer/",
field_name="POPULATION",
statistic_type="sum",
where="DISTRICT='eThekwini'"
)高级功能查询
# Query with attribute and spatial filters
query_feature_layer(
service_url="https://services3.arcgis.com/HO0zfySJshlD6Twu/arcgis/rest/services/Roads/FeatureServer/",
layer_id=0,
where="STATUS='Active' AND CATEGORY='Residential'",
return_geometry=True,
max_records=100,
out_fields="NAME,STATUS,CATEGORY,POPULATION"
)使用租赁数据集(已验证)
# Query the eThekwini Leases dataset - this is working!
query_leases_dataset(
where="SUBURB='Durban'",
layer_id=11,
format="geojson",
max_records=20
)
# Returns GeoJSON with properties including:
# OBJECTID, PROPKEY, SUBURB, STRNAME, LEASENUM, FARMTOWNNA, ERF, etc.真实数据集示例
MCP服务器发现了141多个真实数据集,包括:
- 租赁:包含24个字段的物业租赁信息
- 道路:道路网络数据
- 病房:市辖区边界
- 学校:教育机构
- 医院:医疗设施
- 湿地:环境保护区
- 消防站:紧急服务地点
- 图书馆:公共图书馆位置
- 分区:土地利用分区信息
数据源
此MCP服务器从以下位置访问数据:
- eThekwini开放数据门户: https://gis-ethekwini.opendata.arcgis.com
- ArcGIS REST服务:功能服务、地图服务和地理处理服务
- 市政数据集:交通、环境、规划、公用事业和行政数据
自动发现机制
如何检测新API
MCP服务器使用多种机制来发现新的数据集和API:
- 定期刷新:每15分钟自动刷新一次数据集缓存
- 手动刷新:使用
refresh_datasets手动更新缓存的工具 - API监测:监视eThekwini开放数据API中的新项目
- 服务发现:自动检测和编目新的ArcGIS REST服务
缓存管理
- 缓存持续时间:默认为15分钟(可配置)
- 强制刷新:手动刷新忽略缓存超时
- 增量更新:仅在可能的情况下获取新的/更新的数据集
- 错误处理:API错误缓存数据的优雅回退
新数据集集成
当新数据集添加到eThekwini门户时:
- 自动检测:在下一个缓存刷新周期检测到
- 工具生成:可以为特定数据集动态生成新工具
- 资源注册:新资源会自动向MCP注册
- 元数据抽取:自动发现服务信息和架构
API覆盖范围
当前支持的服务
- 功能服务:具有完整查询功能的矢量数据
- 地图服务:光栅和缓存地图服务
- 地质处理服务:空间分析和处理工具
- 图像服务:航空图像和卫星数据
服务类型
- 交通网络(道路、公共交通)
- 行政边界(区、区)
- 环境数据(空气质量、绿地)
- 公用事业基础设施(水、电)
- 规划和分区信息
- 人口普查和人口统计数据
技术架构
组件
- MCP服务器:核心协议实施
- 数据集发现引擎:自动服务发现和编目
- 查询引擎:空间和属性查询处理
- 缓存管理器:具有刷新逻辑的智能缓存
- 错误处理程序:强大的错误处理和回退机制
性能优化
- 并发请求:并行API调用可加快发现速度
- 智能缓存:减少API调用并改进响应时间
- 查询优化:高效的参数处理和结果处理
- 连接池:重用HTTP连接以获得更好的性能
🤖 Azure AI Foundry集成
Azure Function部署实现了与Azure AI Foundry代理的无缝集成:
快速设置
- 部署功能:使用
./azure_function/deploy.bat(Windows)或./azure_function/deploy.sh(Linux/macOS) - 创建AI代理:在Azure AI Foundry中添加函数URL作为自定义技能
- 配置身份验证:使用功能键进行安全访问
代理功能示例
🗺️ "Show me transport datasets in eThekwini"
📍 "Find municipal boundaries near coordinates -29.8587, 31.0218"
📊 "Get statistics for the water infrastructure dataset"
🔍 "Search for datasets containing 'environmental' data"功能端点
GET /api/datasets-列出所有数据集POST /api/datasets/{id}/query-查询特定数据集POST /api/datasets/{id}/spatial-空间查询GET /api/search?q={term}-搜索数据集
贡献
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
致谢
- eThekwini市提供GIS数据的开放访问
- 用于ArcGIS REST API和开放数据平台的Esri
- 协议规范的模型上下文协议(MCP)社区
支持
有关问题、疑问或贡献,请访问我们的 或者打开一个问题。
______________________________________________________________________
备注:此MCP服务器旨在处理来自eThekwini开放数据门户的公开数据。确保遵守市政当局的数据使用政策和服务条款。
