The Control Plane for AI Infrastructure
Kubernetes-native registry for MCP servers, agents, skills & models
🚀 Quick Start • ✨ Features • 🏗️ Architecture • 📚 Docs • 📝 Blog
✨ 所得
Automatically indexes MCP servers, agents, skills, and models across clusters.
如果它正在运行,它在目录中。
不需要CLI。 代理注册处发货 MCP服务器 --将其连接到Claude Code、Cursor或任何兼容MCP的客户端,并以对话方式管理您的注册表。
| 能力 | 它意味着什么 |
|---|---|
| 🔍 自动发现 | 扫描集群中的AI工作负载——MCP服务器、代理、技能、模型——并自动对其进行编目。零体力劳动 |
| 📦 统一库存 | 所有东西都放在一个地方,横跨开发、测试、生产。Git是唯一的事实来源。 |
| ✍️ 创建和发布 | 通过UI/API生成清单,提交审核,打开PR-或直接部署。 |
| 🚀 一键部署 | 从目录部署到任何环境。控制器处理生命周期。 |
| 🔒 GitOps原生 | 内置GitOps和Gitless Ops工作流 |
| 🌐 多集群 | 使用工作负载标识跨集群发现和部署。 |
🚀 快速开始
运行开发环境的一个命令
git clone https://github.com/den-vasyliev/agentregistry-inventory.git
cd agentregistry-inventory && make dev🎯 就这样 UI在以下位置打开http://localhost:3000预加载样本数据。 不需要Kubernetes集群——使用envtest(嵌入式etcd+kube-apiserver)。
☸️ 有集群吗?
kubectl apply -k https://github.com/den-vasyliev/agentregistry-inventory/config/crd
helm install agentregistry-inventory ./charts/agentregistry -n agentregistry --create-namespace______________________________________________________________________
🌟 为什么要代理库存?
| 无代理库存 | 有代理库存 |
|---|---|
| 😵 AI工具在集群间的扩散📦 单一真相来源 | |
| 🔍 手动发现MCP服务器 | 🤖 自动发现和编目 |
| 😰 AI配置没有版本控制 | 📝 GitOps原生工作流 |
| 🤷 “哪些代理正在运行prod?” | 📊 实时库存和状态 |
| 😱 直接K8s yaml编辑 | 🚀 从UI/API一键部署 |
🏗️ 建筑
┌─────────────────────────────────────────────────────────────┐
│ WEB UI (Next.js) │
│ embedded in controller at :8080 │
└───────────────────────────┬─────────────────────────────────┘
│ REST
▼
┌─────────────────────────────────────────────────────────────┐
│ CONTROLLER (Go Controller Runtime) │
│ ┌─────────────┐ ┌────────────────┐ ┌─────────────────────┐ │
│ │ HTTP API │ │ Reconcilers │ │ Auto-Discovery │ │
│ │ :8080 │ │ │ │ │ │
│ └─────────────┘ └────────────────┘ └─────────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ MCP Server │ │ Metrics │ │ Health │ │
│ │ :8083 │ │ :8081 │ │ :8082 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
│ K8s API
▼
┌─────────────────────────────────────────────────────────────┐
│ CRDs (etcd) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ MCPServerCatalog│ │ AgentCatalog │ │ SkillCatalog │ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
│ ┌────────────────────┐ ┌─────────────────┐ │
│ │RegistryDeployment | │ DiscoveryConfig │ │
│ └────────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ RUNTIME (Kagent + KMCP +...) │
│ Agent ↔ MCP Server ↔ Model ↔ Skills │
└─────────────────────────────────────────────────────────────┘📚 CRD参考
______________________________________________________________________
📋 库存CRD示例
📦 发布目录条目
apiVersion: agentregistry.dev/v1alpha1
kind: MCPServerCatalog # Also: AgentCatalog, SkillCatalog, ModelCatalog
metadata:
name: filesystem-v1-0-0
namespace: agentregistry
spec:
name: "filesystem"
version: "1.0.0"
title: "Filesystem MCP Server"
description: "Provides file system access tools"
websiteUrl: "https://github.com/modelcontextprotocol/servers"
repository:
url: "https://github.com/modelcontextprotocol/servers"
source: github
packages:
- registryType: npm
identifier: "@modelcontextprotocol/server-filesystem"
version: "0.6.1"
transport:
type: stdio
remotes: # Optional: streamable-http endpoints
- type: streamable-http
url: "https://mcp.example.com/filesystem"🚀 部署到运行时
apiVersion: agentregistry.dev/v1alpha1
kind: RegistryDeployment
metadata:
name: filesystem-deployment
namespace: agentregistry
spec:
resourceName: "filesystem"
version: "1.0.0"
resourceType: mcp # mcp | agent
runtime: kubernetes # Required: deployment runtime
namespace: default # Target namespace
preferRemote: false # Use local package vs remote endpoint
environment: "" # Target environment (from DiscoveryConfig), empty = local cluster
config: # Optional: deployment configuration
LOG_LEVEL: "info"控制器对此进行协调→ 创建MCPServer/代理CR→ 跟踪状态。
🌍 多集群发现
apiVersion: agentregistry.dev/v1alpha1
kind: DiscoveryConfig
metadata:
name: multi-cluster-discovery
namespace: agentregistry
spec:
environments:
- name: production
cluster:
name: prod-gke
projectId: my-gcp-project
zone: us-central1
useWorkloadIdentity: true
provider: gcp
discoveryEnabled: true
deployEnabled: false
namespaces: [ai-workloads, agents]
resourceTypes: [MCPServer, Agent, ModelConfig]______________________________________________________________________
🔌 API 参考
公共API(只读,不需要身份验证)
curl http://localhost:8080/v0/servers
curl http://localhost:8080/v0/agents
curl http://localhost:8080/v0/skills管理员API(写入)
# Auth disabled by default — just POST
curl -X POST http://localhost:8080/admin/v0/servers \
-H "Content-Type: application/json" \
-d @server.json
# With auth enabled (AGENTREGISTRY_AUTH_ENABLED=true)
curl -X POST http://localhost:8080/admin/v0/servers \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d @server.json______________________________________________________________________
🤖 MCP服务器
控制器在以下位置嵌入MCP服务器 :8083.连接任何兼容MCP的客户端(Claude Code、Cursor等),以对话方式浏览、部署和管理注册表资源。
连接(禁用身份验证,默认)
{
"mcpServers": {
"agentregistry": {
"type": "streamable-http",
"url": "http://localhost:8083/mcp"
}
}
}连接(已启用身份验证)
{
"mcpServers": {
"agentregistry": {
"type": "streamable-http",
"url": "http://localhost:8083/mcp",
"headers": {
"Authorization": "Bearer your-token"
}
}
}
}工具
| 工具 | 说明 |
|---|---|
list_catalog | 列出目录条目(服务器/代理/技能/型号) |
get_catalog | 获取参赛详情 |
get_registry_stats | 所有资源类型的计数 |
list_deployments | 列出活动部署 |
get_deployment | 按名称列出的部署详细信息 |
deploy_catalog_item | 将目录项部署到Kubernetes |
delete_deployment | 删除部署 |
update_deployment_config | 更新部署配置 |
list_environments | 从DiscoveryConfig发现的环境 |
get_discovery_map | 群集拓扑和资源计数 |
trigger_discovery | 强制重新扫描发现 |
recommend_servers | 人工智能服务器推荐 |
analyze_agent_dependencies | 基于AI的依赖性分析 |
generate_deployment_plan | 人工智能驱动的部署规划 |
______________________________________________________________________
☸️ 生产部署
helm install agentregistry ./charts/agentregistry \
--namespace agentregistry \
--create-namespace \
--set replicaCount=2 \
--set controller.leaderElection=true密钥配置
| 设置 | 默认值 | 说明 |
|---|---|---|
replicaCount | 1 | HA设置为2+ |
controller.leaderElection | false | 多副本需要 |
controller.logLevel | info | 使用 debug 用于故障排除 |
httpApi.serviceType | ClusterIP | 使用 LoadBalancer 用于外部访问 |
disableAuth | true | 设置为 false 启用承载令牌身份验证 |
______________________________________________________________________
🔐 认证
认证是 默认情况下禁用.启用时(disableAuth: false),管理员API和MCP服务器需要来自 agentregistry-api-tokens Kubernetes的秘密。
对于带有网关的生产部署,请使用 代理网关 在控制器前处理Azure AD JWT验证--保持 disableAuth: true 在后端,让网关强制执行身份验证。
启用承载令牌身份验证
# Create token secret
kubectl create secret generic agentregistry-api-tokens \
-n agentregistry \
--from-literal=admin-token=$(openssl rand -hex 32)
# Install with auth enabled
helm install agentregistry ./charts/agentregistry \
--namespace agentregistry \
--set disableAuth=falseAzure AD(社交媒体浏览器PKCE)
嵌入式UI支持通过MSAL.js登录Azure AD,无需客户端密码。
# charts/agentregistry/values.yaml
azure:
tenantId: "your-tenant-id"
clientId: "your-client-id"______________________________________________________________________
🧪 发展
make dev # Full stack: controller + UI dev server
make run # Controller only with embedded UI at :8080
make test # Run test suite
make lint # gofmt + go vet
make build # Build UI + controller binary
make generate # Regenerate CRD manifests + deepcopy______________________________________________________________________
🔗 生态系统
| 项目 | 描述 | 链接 |
|---|---|---|
| 代理通道 | MCP/HTTP认证网关 | agentgateway.dev |
| 主控程序 | 模型上下文协议规范 | 模型上下文协议.io |
| 卡金特 | Kubernetes AI代理运行时 | https://kagent-dev/kagent |
| KMCP | Kubernetes的MCP服务器操作员 | |
| MCP Go SDK | 官方Go SDK |
______________________________________________________________________
💬 加入社区
______________________________________________________________________
由以下材料制成❤️ 由代理库存团队负责
