Sigma 可以在现有 sigma server 进程中内嵌 MCP server,用于 AI 客户端和自动化工具访问 Sigma 的管理能力。 MCP 默认关闭,需要显式开启。
暴露哪些能力
MCP server 只暴露管理面和元数据能力,不暴露 OCI Blob 上传/下载流量。
当前已支持的 tools:
- 系统:
system-version-get、system-endpoint-get、system-config-summary-get - Namespace:
namespace-list、namespace-get、namespace-create、namespace-update、namespace-delete - Namespace 成员:
namespace-member-list、namespace-member-add、namespace-member-update、namespace-member-delete、namespace-member-self-get - Repository:
repository-list、repository-get、repository-create、repository-update、repository-delete - Tag:
tag-list、tag-get、tag-delete、tag-manifest-raw-get - Artifact:
artifact-list、artifact-get、artifact-delete
只读 resources:
sigma://system/versionsigma://system/capabilities
开启 MCP
在配置文件中设置 mcp:
yaml
mcp:
enabled: true
path: /api/v1/mcp
transport: streamable_http
auditWrites: true
toolTimeout: 30s
maxRequestBody: 1048576使用 Helm 部署时:
bash
helm upgrade --install sigma ./deploy/sigma \
--set config.mcp.enabled=trueMCP endpoint 复用现有 server service:
text
https://<sigma-host>/api/v1/mcp认证方式
MCP 使用 Sigma Basic Auth。每个 MCP 请求都必须携带:
text
Authorization: Basic <base64(username:password)>例如:
bash
printf 'sigma:Admin@123' | base64将编码后的值写入 MCP client 配置:
json
{
"mcpServers": {
"sigma": {
"url": "https://<sigma-host>/api/v1/mcp",
"headers": {
"Authorization": "Basic <base64(username:password)>"
}
}
}
}Basic Auth 会在每次请求中发送凭据,因此 MCP 必须通过 HTTPS 或具备 TLS 终止能力的网关暴露。
权限模型
MCP tool 会以认证后的 Sigma 用户身份执行,并复用 Sigma HTTP API 的资源权限模型:
- Root 和 admin 用户可以访问所有 MCP tools
- Namespace reader 可以读取 namespace 范围内的资源
- Namespace manager 可以管理 repository、tag 和 artifact
- Namespace admin 可以管理 namespace 元数据和成员
没有权限的调用会返回 tool error,不会执行对应操作。
审计和指标
当 mcp.auditWrites 开启时,写操作会记录到 audit 表。 审计字段使用:
method:MCPpath: MCP endpoint pathroute: MCP tool name
写入审计前会过滤敏感字段,例如 password、token、privateKey、ak、sk、secret、authorization。
MCP 指标复用现有 /metrics endpoint 暴露:
sigma_mcp_tool_calls_totalsigma_mcp_tool_duration_secondssigma_mcp_auth_failures_total
Tool 参数示例
列出 namespace 下的 repositories:
json
{
"namespace_id": "550e8400-e29b-41d4-a716-446655440000",
"page": 1,
"limit": 10
}创建 repository:
json
{
"namespace_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "library/alpine",
"description": "Alpine images"
}获取 tag manifest:
json
{
"repository_id": "550e8400-e29b-41d4-a716-446655440000",
"digest": "sha256:..."
}