FastGeoAPI MCP 服务器

使用说明

  • 项目简介
    • 该仓库实现了一个 MCP 服务器,基于 OpenAPI 的定义自动暴露地理数据相关的资源与工具,并通过 FastMCP 框架为 LLM 客户端提供统一的上下文服务接口。它在原有的 geospatial API 框架(pygeoapi)基础上增加了 OAuth/JWT、Open Policy Agent(OPA)、以及对 MCP 客户端的内置支持与权限控制。
    • MCP 服务器的核心能力包括:注册和暴露资源与工具、渲染和提供 Prompt 模板、以及通过 JSON-RPC/SSE/HTTP 等传输协议与客户端进行交互,确保会话管理和能力声明。
  • 主要功能点
    • 自动从 pygeoapi 的 OpenAPI 规范生成 MCP 工具,简化 LLM 客户端对 API 的调用。
    • 支持多种认证/授权模式:OpenID Connect/JWKS、API Key、OPA 基于策略的授权等,并提供可选的内部 OAuth 代理以简化多 IdP 的接入。
    • MCP 内部请求绕过认证(通过内部密钥)以实现 MCP 服务与 OpenAPI 后端之间的高效通信,同时支持在容器化和反向代理环境中的正确行为。
    • 通过 OpenAPI 安全增强,能够将 OAuth、OIDC、API Key 等安全方案注入到 OpenAPI 描述中,便于客户端理解与对接。
    • 提供对 MCP 的端点暴露、SSE/HTTP 的通信、以及对 OAuth 发现服务的暴露,确保完整的 MCP 端到端流程。
  • 安装步骤
    • 该项目基于常见的 Python 环境,通常使用 pip 安装公开发布版本,或在开发环境中从源码运行。依赖包括 FastAPI、pygeoapi、FASTAPI-OAuth/Open Policy Agent、以及 FastMCP 等组件。
    • 在开发环境中通常会采用 uvicorn 作为服务器启动器,使用 OpenID Connect 提供者和 OPA 进行安全保护。
  • MCP 服务器配置(供 MCP 客户端使用的启动配置) 配置信息为 JSON 格式,描述服务器的名称、启动命令及参数,便于 MCP 客户端连接和注册。该配置仅用于 MCP 客户端对接,实际部署时请在客户端侧进行配置。 示例(JSON): { "server_name": "fastgeoapi", "command": "npx", "args": ["mcp-remote", "http://localhost:5000/mcp/", "--allow-http"] } 说明:
    • server_name:MCP 服务在左侧客户端显示使用的名称,便于区分不同的 MCP 服务实例。
    • command:客户端启动 MCP 连接时使用的命令,示例中使用 npx 调用 mcp-remote。
    • args:连接参数,例如目标 MCP 服务地址、是否允许 http(仅在本地开发时使用)。 注:以上配置信息仅用于 MCP 客户端连接示意,实际使用中 MCP 客户端并不需要服务器端的代码片段,需在客户端侧参考该服务器的公开地址和能力进行注册与调用。
  • 基本使用方法
    • 启动服务器:在包含环境变量配置的环境中运行应用,或使用项目提供的开发脚本以 uvicorn 启动 FastAPI 应用。
    • 与 MCP 客户端对接:MCP 客户端通过/configured 的 server_name/地址,利用提供的命令与参数启动,建立与 MCP 服务器的会话,调用工具、读取资源、获取 Prompts 等能力。
    • 安全与授权:根据部署需求选择合适的认证方案(OpenID Connect/JWKS、API Key、OPA),并在环境变量中开启相应开关。MCP 内部请求支持通过 X-MCP-Internal-Key 实现内部通信的绕过认证(在受信任的服务之间使用)。
    • 调试与开发:阅读 README 及代码注释,关注 app/main.py、app/fastmcp 集成点、以及 MCP 服务的路由挂载点(默认 /mcp)。

服务器信息