十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenMetadata MCP Server 应用配置指南:Base URL 与 Allowed Origins 实战解析

OpenMetadata MCP Server 应用配置指南:Base URL 与 Allowed Origins 实战解析 OpenMetadata MCP Server 应用配置指南Base URL 与 Allowed Origins 实战解析【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata导读OpenMetadata 内置了一个嵌入式 Model Context ProtocolMCP服务器允许支持 MCP 协议的 AI 客户端如 Claude Desktop、Cursor、VS Code Copilot 等直接以 SSE 或 Streamable-Http 传输方式接入平台调用搜索元数据、血缘分析、数据质量、数据治理等能力。本文以 McpApplication.md 为核心深入讲解 MCP Server 应用的端点布局以及Base URL与Allowed Origins两个关键配置项在集群、负载均衡与浏览器跨域场景下的真实作用并结合 openmetadata-mcp 模块源码剖析其底层实现原理帮助读者在部署中一次配置到位。一、MCP Server 应用概览1.1 什么是 MCP Server 应用MCP Server 是一个 OpenMetadata 原生应用Native Application安装后会在 OpenMetadata 进程内部嵌入一个无状态 MCP 服务器。其 Java 入口为 McpApplication.java继承自AbstractNativeApplication应用名常量定义于 McpAppConstants.javaMcpApplication该名称会写入apps_extension_time_series.appName供读取侧资源查询。从服务端启动流程看OpenMetadataApplication.java 中的registerMCPServer()在 SSO 认证处理器注册完成后执行它会检查应用注册表中是否存在McpApplication若存在则通过反射动态加载org.openmetadata.mcp.McpServer并调用initializeMcpServer()将 MCP 服务器挂载到 Dropwizard/Jetty 的 Servlet 上下文中。这意味着只有当 McpApplication 应用被启用时/mcp端点才会对外提供服务同时MCP 模块必须存在于 classpathopenmetadata-mcp依赖否则会跳过初始化。1.2 支持 MCP 协议的两种传输方式MCP Server 同时对外暴露两个端点分别对应两种主流传输协议传输方式端点地址适用场景SSEServer-Sent Eventshttp[s]://openmetadata-host/mcp/sse基于 SSE 的 MCP 客户端Streamable-Httphttp[s]://openmetadata-host/mcp基于 Streamable-Http 的 MCP 客户端推荐现代客户端默认支持注原文档中第 7 行与第 11 行的注释文字相同This endpoint can be used by client if Streamable-Http transport is used.其中 SSE 行存在笔误。从源码看McpServer.java 将同一个statelessOauthTransport注册为/mcp/*的 Servlet通配符覆盖/mcp与/mcp/sse等子路径两个端点共用同一套无状态传输实现均通过 OAuth 2.0 完成认证。server.jsonopenmetadata-mcp/server.json是 MCP 服务器注册清单其中remotes声明了 Streamable-Http 远程端点模板{ name: io.github.open-metadata/openmetadata-mcp, title: OpenMetadata, description: Official OpenMetadata MCP: 21 read and write tools for search, lineage, data quality, governance., version: 1.1.1, remotes: [ { type: streamable-http, url: https://{openmetadata_host}/mcp, variables: { openmetadata_host: { description: Hostname of your OpenMetadata deployment, including port if non-standard. Examples: metadata.example.com (behind a reverse proxy on 443) or metadata.example.com:8585 (direct, default OpenMetadata port). The MCP endpoint is mounted at /mcp and authenticates via OAuth 2.0 with PKCE through your existing OpenMetadata SSO provider or Basic Auth., isRequired: true } } } ] }可以看到MCP 端点挂载在/mcp通过现有 OpenMetadata SSO 提供方或 Basic Auth 以 OAuth 2.0 PKCE 完成认证这正是下文Base URL配置存在的意义——它决定了 OAuth 元数据中对外公布的 issuer 与端点地址。1.3 能力范围与工具集MCP Server 支持tools与prompts两类能力McpServer.java#L83-L85 中buildServerCapabilities()只声明 tools 与 prompts未声明 logging/resources避免向客户端承诺无处理器的方法。工具与提示词定义位于工具定义tools.json如company_context、search_metadata、semantic_search、get_entity_details等提示词定义prompts.json如search_metadata值得注意的细节当 RDF知识图谱三元组存储未启用时sparql_query、entity_neighborhood、find_by_tag、shacl_validate这 4 个依赖实时三元组存储的工具会被从tools/list中剔除避免向客户端暴露注定失败的调用McpServer.java#L93-L118。二、配置项一Base URL$(idbaseUrl)2.1 配置含义Base URL是对外暴露的基准地址会写入 MCP OAuth 元数据issuer 与各端点 URL中供 MCP 客户端完成 OAuth 2.0 发现与重定向。配置项说明原文如下External-facing base URL advertised in the MCP OAuth metadata (issuer and endpoint URLs). Leave empty to fall back to the OpenMetadata base URL from system settings. Set this explicitly for clustered deployments where the service is reached through a load balancer or ingress.Example:https://openmetadata.example.com要点拆解留空时自动回退到系统设置System Settings中的 OpenMetadata Base URL集群/反向代理场景当服务通过负载均衡器或 Ingress 对外暴露时必须显式设置保证 OAuth issuer 与回调地址与外部可访问的域名一致示例值https://openmetadata.example.com注意带协议头不要写成openmetadata.example.com。2.2 源码中的解析与回退链路McpServer的初始化过程展示了完整的取值优先级McpServer.java#L356-L368从SecurityConfigurationManager.getCurrentMcpConfig()获取MCPConfiguration若其baseUrl非空则直接采用即 MCP 应用配置面板中填写的值否则调用getBaseUrlFromSettings()读取系统设置中的OpenMetadataBaseUrlConfiguration.openMetadataUrlMcpServer.java#L391-L419若以上均不可用回退到http://localhost:8585——源码明确注释该回退值仅适用于本地开发生产部署必须配置正确的 Base URL。// McpServer.java关键逻辑摘要 String baseUrl getBaseUrlFromConfig(); LOG.info(MCP OAuth initialized with base URL: {}, baseUrl); // ... OAuthHttpStatelessServerTransportProvider statelessOauthTransport new OAuthHttpStatelessServerTransportProvider( JsonUtils.getObjectMapper(), baseUrl, /mcp, new AuthEnrichedMcpContextExtractor(), authProvider, allowedOrigins);MCPConfiguration由 SecurityConfigurationManager.java 从 SettingsCache 读取设置键MCP_CONFIGURATION由 UI 的 MCP 应用配置表单写入数据库属于数据库支撑的动态配置修改后无需重启进程即可在后续初始化中生效。2.3 为什么集群部署必须显式设置MCP 客户端获取 OAuth 元数据的路径是/.well-known/*McpServer.java#L214-L225 注册了OAuthWellKnownFilter。在集群部署中客户端从负载均衡器/Ingress 的外部域名访问/mcp若 OAuth 元数据中暴露的是内部节点地址如pod-1.internal:8585客户端将无法访问 issuer 与 token 端点OAuth 握手直接失败显式配置https://openmetadata.example.com后issuer、授权端点、令牌端点、重定向 URI 全部使用该外部地址客户端与反向代理之间的握手才能闭环。因此原文档的建议非常明确只要服务不是通过 OpenMetadata 自身的默认地址被直接访问就应该显式填写 Base URL。三、配置项二Allowed Origins$(idallowedOrigins)3.1 配置含义Allowed Origins是允许从浏览器调用 MCP OAuth 端点的源Origin白名单本质是 CORS 允许列表。配置项说明原文如下Origins allowed to call the MCP OAuth endpoints from a browser (CORS allowlist). An empty list rejects every cross-origin request, which stops browser-based MCP clients from connecting. Use exact origins in production;*is accepted but not recommended.要点拆解空列表 拒绝一切跨域请求浏览器型 MCP 客户端Web 应用形态将完全无法连接生产环境使用精确 Origin如https://claude.ai、https://app.example.com*虽被接受但不推荐意味着任何网站都能以浏览器身份发起 OAuth 请求存在 CSRF/恶意消费风险。3.2 源码中的实现在McpServer初始化中getAllowedOriginsFromConfig()McpServer.java#L370-L386从MCPConfiguration.allowedOrigins读取列表并传入OAuthHttpStatelessServerTransportProvider读取失败或配置缺失时返回空列表此时CORS 将拒绝所有来源源码日志原文CORS will reject all origins。服务端还有一层进程级 CORS 兜底CorsFilterFactory.java 中allowedOrigins通过CrossOriginFilter.ALLOWED_ORIGINS_PARAM注入 Jetty 过滤器。MCP OAuth 的 CORS 行为由 MCP 应用自身的Allowed Origins控制二者叠加构成了浏览器跨域请求的两道防线。3.3 典型配置建议客户端形态推荐 Origin 值说明桌面/CLI MCP 客户端Claude Desktop 等可不填或留空非浏览器场景无 CORS 约束浏览器内嵌 MCP 客户端Web 应用精确列出每个前端源如https://claude.ai生产环境必选白名单最小化内网/开发环境*接受但慎用仅在受信网络中使用四、配置入口与完整操作流程4.1 配置位置在 OpenMetadata UI 中进入Settings → Applications → McpApplication即可看到两个配置字段Base URL文本框示例https://openmetadata.example.comAllowed Origins列表输入可添加多个 Origin。该文档McpApplication.md正是 McpApplication 应用配置面板的英文界面文案使用$$section ... $$语法将每个配置项渲染为独立分区。4.2 部署前配置检查清单确认openmetadata-mcp模块已包含在服务端 classpath发行版默认包含在 UI 中安装并启用McpApplication应用否则registerMCPServer会跳过注册/mcp端点不可达非直连部署集群 LB/Ingress时显式设置Base URL为外部域名有浏览器端 MCP 客户端时将对应前端 Origin 加入Allowed Origins验证端点浏览器访问https://host/.well-known/oauth-authorization-server由OAuthWellKnownFilter提供应返回包含正确 issuer 的 OAuth 元数据 JSON使用支持 MCP 的客户端连接https://host/mcp确认工具列表如search_metadata、get_entity_details可正常拉取。4.3 认证与鉴权链路底层原理MCP OAuth 认证是理解两个配置项价值的钥匙完整链路McpServer.java#L129-L285如下凭据校验根据当前认证提供方选择校验器——LDAP 使用LdapAuthenticatorLDAP bind其余提供方使用BasicAuthenticator数据库校验令牌签发UserSSOOAuthProvider结合JWTTokenGenerator签发访问令牌SSO 回调桥接OIDC/SAML 流程通过AuthenticationCodeFlowHandler.setMcpStateChecker/setMcpPendingStatePersister/SamlAuthServletHandler.setMcpSamlCallbackHandler将 SSO 回调转发回/mcp/callback工具执行getTool()回调中通过jwtFilter.getCatalogSecurityContext(token)解析用户身份并以 MCP Bot 身份设置ImpersonationContext提权执行随后调用toolContext.callToolWithMetadata()并记录用量McpUsageRecorder.record。上述每一步涉及的端点 URLissuer、授权端点、/mcp/callback回调都基于Base URL拼装而浏览器发起的 OAuth 请求是否被放行则取决于Allowed Origins——这正是两个配置项决定 MCP 能否对外正常服务的根本原因。相关调用链的线程模型正确性由测试用例 McpImpersonationTest.java 验证断言ImpersonationContext必须在工具执行线程而非 Jetty Servlet 线程上设置。五、常见问题排查FAQQ1客户端连接/mcp报 401/握手失败先检查/.well-known/oauth-authorization-server返回的 issuer 是否与客户端可访问地址一致。若显示http://localhost:8585说明 Base URL 未配置或回退到了本地默认值需在 McpApplication 中显式设置。Q2浏览器端 MCP 客户端报 CORS 错误检查Allowed Origins是否为空。空列表会拒绝一切跨域请求源码强制行为必须加入客户端前端的精确 Origin不要在生产环境使用*。Q3/mcp端点 404确认McpApplication应用已安装并启用且服务端发行包包含openmetadata-mcp模块。registerMCPServer只有在应用注册表中找到McpApplication时才会挂载 Servlet。Q4RDF 相关工具如sparql_query在工具列表里看不到这是预期行为RDF 未启用时这 4 个依赖三元组存储的工具会被主动隐藏McpServer.java#L93-L118启用 RDF 后会自动恢复。结语OpenMetadata 的 MCP Server 应用以「内嵌无状态服务器 OAuth 2.0/PKCE 认证」的方式将元数据能力开放给各类 MCP 客户端Base URL与Allowed Origins则是其对外可达性与安全边界的两大支柱前者决定 OAuth 元数据对外的地址一致性后者约束浏览器跨域调用来源。理解了 McpServer.java 中的取值优先级与回退逻辑即可在单机、集群与反向代理等不同部署形态下准确配置让 AI 客户端安全、稳定地接入 OpenMetadata 的数据上下文层。延伸阅读若需进一步了解 MCP 工具与提示词的完整清单可查看 tools.json 与 prompts.jsonMCP 模块的整体说明见 openmetadata-mcp/README.md。【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表