本章面向希望扩展 ShardingSphere-MCP 的开发者。 用户安装和使用请查看用户手册,协议表面请查看技术参考。
MCP 子链路按 api + support + features + core + bootstrap 分层组织:
mcp/api:public MCP capability 契约、descriptor 类型、协议 response、MCP 协议异常和 SPI 入口。mcp/support:database metadata、execution、capability、workflow context、模型、facade、database/workflow SPI 和复用 helper。mcp/features/encrypt:Encrypt MCP feature。mcp/features/mask:Mask MCP feature。mcp/features/broadcast:Broadcast MCP feature。mcp/features/readwrite-splitting:Readwrite-Splitting MCP feature。mcp/features/shadow:Shadow MCP feature。mcp/features/sharding:Sharding MCP feature。mcp/core:handler 发现、registry、request context、session、metadata discovery 和 runtime context。mcp/bootstrap:基于 MCP Java SDK 的 bootstrap、HTTP/STDIO transport、配置加载和生命周期管理。mcp/registry:隔离的发行元数据校验工具,不依赖 MCP runtime 模块。distribution/mcp:独立打包、启动脚本、配置和 Dockerfile。test/e2e/mcp:端到端契约验证。生产依赖方向固定为 api <- support <- core <- bootstrap 和 api <- support <- feature。
Feature 模块不依赖 core、bootstrap、registry 或其他 feature;mcp/bootstrap 只负责发布聚合后的协议表面,不硬编码具体 feature 业务。
公开的 server capability 契约按 org.apache.shardingsphere.mcp.api.capability.<capability> 组织,ServiceLoader 入口接口是
org.apache.shardingsphere.mcp.api.MCPHandlerProvider。Request context、session、transport、payload 和 exception 是跨 capability 或基础协议契约,不归入 capability 包。
新增 feature 的推荐路径:
mcp/features/<feature> 下创建模块。mcp/api。mcp/support。mcp/core 或 mcp/bootstrap;runtime 实现不是 feature 扩展契约。MCPHandlerProvider。getToolHandlers() 和 getResourceHandlers() 返回 feature 自己暴露的 handlers。MCPWorkflowDefinitionProvider。src/main/resources/META-INF/services/ 注册 org.apache.shardingsphere.mcp.api.MCPHandlerProvider。META-INF/shardingsphere-mcp/mcp-descriptors 下添加 descriptor。如果 feature 要作为官方默认能力随发行包提供,还需要:
mcp/features/pom.xml。distribution/mcp/pom.xml。如果 feature 是可选插件,构建后把 jar 放入发行包 plugins/ 目录。
需要规划、预览、执行和校验规则变更的 feature,应以数据加密 MCP feature 的规则 workflow 作为模板。 模板实现应满足:
mcp/features/<feature>;mcp/support 和 mcp/core 只承载通用 workflow、执行、redaction、descriptor 和 runtime 契约。approved_steps 执行。对外新增 tool:
MCPToolHandler<T extends MCPRequestContext>。handle(...) 只返回成功的 MCPSuccessPayload;参数非法、资源不存在、查询失败、超时、不支持等受控失败应抛出对应的 ShardingSphereMCPException 子类,由 runtime 转换为 MCP tool 错误结果。未预期的运行时失败会被脱敏并转换为 JSON-RPC internal error。对外新增 resource:
MCPResourceHandler<T extends MCPRequestContext>。handle(...) 只返回成功的 MCPSuccessPayload;不要在 handler 中手工构造错误 payload,受控失败应抛出对应的 ShardingSphereMCPException 子类,由 runtime 转换为 MCP resource 读取错误。未预期的运行时失败会被脱敏并转换为 JSON-RPC internal error。运行时代码需要 descriptor 时,应使用 canonical tool name 或 resource URI template,通过 MCPDescriptorCatalogIndex 从 catalog 解析。
不要在 handler 内重复维护 descriptor 字段。
MCPRequestContext。该接口只暴露 getSessionIdentity() 和 getActiveTransport()。MCPFeatureRequestContext。MCPSessionIdentity 将不透明的 session ID 与可选的可信 subject、source 和 attributes 拉平到一个对象中;通过 getSessionIdentity().getSessionId() 读取 session ID。归属信息只描述会话来源,不代表认证或授权结果。
MCPFeatureRuntimeRequestContext 是 runtime 管理的单次请求实现。Handler 和 completion provider 只依赖 context 接口,不依赖 core 实现类。
Completion 请求按 session 使用 60 秒固定窗口限流,默认每分钟 600 次,可通过 Java 系统属性
shardingsphere.mcp.maxCompletionRequestsPerMinute 调整。
shardingsphere://features/<feature>/... 命名空间。Descriptor 应说明模型如何使用协议表面,而不是只重复 tool 名或 URI。
维护时应包含:
Tool annotations 只是客户端提示,不能替代运行时校验、SQL 安全检查、用户审批或服务端授权。
