项目简介
这是一个基于Model Context Protocol (MCP) 构建的应用后端,它连接到英国地形测量局 (Ordnance Survey, OS) 的地理数据API。通过将复杂的OS API功能封装成标准化的MCP工具,该服务器使得大型语言模型 (LLM) 客户端能够方便地查询和利用地理数据,例如搜索地理特征、获取地块信息或查找关联的地址。
主要功能点
- 地理集合访问: 列出和查询OS API中可用的地理特征集合信息。
- 地理特征搜索: 支持根据空间范围(bbox)和属性过滤条件搜索地理特征。
- 特定特征获取: 通过唯一标识符检索特定的地理特征详细信息。
- 关联标识符查询: 查找与给定标识符(如UPRN、TOID)关联的其他类型标识符。
- 批量操作: 支持一次性查询多个地理特征或关联标识符。
- 地址查找: 利用OS Places API根据UPRN(英国唯一房产参考号)查找地址信息。
- 内置安全措施: 包含基本的速率限制和简单的Prompt注入防护。
- 多协议支持: 支持Stdio和Server-Sent Events (SSE) 两种传输协议。
- Prompt模板: 提供预定义的Prompt模板,帮助LLM客户端更有效地使用工具。
安装步骤
- 安装 Python 3.11+: 确保您的系统安装了符合要求的Python版本。
- 获取 OS API Key: 您需要注册一个OS Data Hub账户并获取API Key。
- 设置环境变量: 将您的OS API Key设置为名为 'OS_API_KEY' 的环境变量。
- 安装依赖: 在项目目录下,使用 pip 或 uv 安装所需的Python库:
(注:仓库代码中提到了 'aiohttp, mcp[cli]',实际运行通常需要 'requirements.txt' 文件或通过其他方式管理依赖。)pip install -r requirements.txt # 或者使用 uv # uv sync
服务器配置
MCP服务器需要由MCP客户端(如支持MCP的LLM应用)来启动和管理。您需要在您的MCP客户端的配置中添加该服务器的信息。以下是一个典型的JSON配置示例,您需要根据您的实际情况修改路径:
{ // ... 其他 MCP 服务器配置 ... "os-ngd-api": { // 服务器的名称,用于在MCP客户端中识别 "command": "/path/to/your/python/env/bin/python", // 启动Python解释器的命令路径 "args": [ "src/server.py", // MCP服务器脚本路径 "--transport", "stdio" // 使用 stdio 协议启动 // 或者使用 sse 协议: // "--transport", "sse", "--host", "127.0.0.1", "--port", "8000" ], "env": { // 设置启动服务器进程所需的环境变量,例如OS API Key "OS_API_KEY": "your_api_key_here" // 如果使用 stdio 协议且服务器需要认证,可能还需要: // "STDIO_API_KEY": "your_client_auth_key" } } // ... 其他 MCP 服务器配置 ... }
重要提示:
- 'command' 应指向您的Python环境中的 'python' 可执行文件路径。
- 'args' 中的 'src/server.py' 应指向您下载的仓库中 'server.py' 文件所在的实际路径。
- 您可以选择 '--transport stdio' 或 '--transport sse' 协议。stdio 更简单,适合本地运行;sse 适合作为HTTP服务运行。如果使用sse,需要指定 '--host' 和 '--port'。
- 'env' 中务必设置 'OS_API_KEY' 为您的OS API Key。如果服务器配置了 stdio 认证(如代码所示的简单认证),也可能需要在 'env' 中设置 'STDIO_API_KEY'。
基本使用方法
-
配置客户端: 按照上述“服务器配置”部分,将该MCP服务器添加到您的MCP客户端(如Claude Desktop或其他兼容应用)的配置中。
-
启动客户端: 启动您的MCP客户端。客户端会根据配置尝试启动并连接该MCP服务器。
-
与LLM交互: 一旦服务器成功启动并连接,其提供的功能(如地理搜索、地址查找等)将作为工具供LLM使用。您可以直接向LLM提出与英国地理数据相关的问题,LLM将根据情况自动调用可用的工具来获取答案。
- 您可以询问LLM:“列出该服务器提供的工具。”来查看所有可用功能。
- 您可以询问LLM:“显示关于地理集合的Prompt模板。”来获取使用指导。
- 您可以直接提出问题,例如:“在伦敦市中心(指定一个bbox)搜索公园。”或“查找UPRN为xxxxxxx的地址信息。”
信息
分类
网页与API