✨ What You Get
If it's running, it's in the catalog.
No CLI needed. Agent Registry ships an MCP server — connect it to Claude Code, Cursor, or any MCP-compatible client and manage your registry conversationally.
🚀 Quick Start
One command to run dev environment
git clone https://github.com/den-vasyliev/agentregistry-inventory.git
cd agentregistry-inventory && make dev
🎯 That's it. UI opens at http://localhost:3000 with sample data pre-loaded.
No Kubernetes cluster needed — uses envtest (embedded etcd + kube-apiserver).
☸️ Have a cluster?
kubectl apply -k https://github.com/den-vasyliev/agentregistry-inventory/config/crd
helm install agentregistry-inventory ./charts/agentregistry -n agentregistry --create-namespace
🌟 Why Agent Inventory?
🏗️ Architecture
┌─────────────────────────────────────────────────────────────┐
│ 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 Reference
- Kgateway — Gateway API for AI traffic
- Kagent — Kubernetes AI agent runtime
- KMCP — MCP server operator
📋 Inventory CRD Examples
📦 Publish a Catalog Entry
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"
🚀 Deploy to Runtime
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"
The controller reconciles this → creates MCPServer/Agent CRs → tracks status.
🌍 Multi-Cluster Discovery
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 Reference
Public API (Read-Only, no auth required)
curl http://localhost:8080/v0/servers
curl http://localhost:8080/v0/agents
curl http://localhost:8080/v0/skills
Admin API (Write)
# 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 Server
The controller embeds an MCP server on :8083. Connect any MCP-compatible client (Claude Code, Cursor, etc.) to browse, deploy, and manage registry resources conversationally.
Connect (auth disabled, default)
{
"mcpServers": {
"agentregistry": {
"type": "streamable-http",
"url": "http://localhost:8083/mcp"
}
}
}
Connect (auth enabled)
{
"mcpServers": {
"agentregistry": {
"type": "streamable-http",
"url": "http://localhost:8083/mcp",
"headers": {
"Authorization": "Bearer your-token"
}
}
}
}
Tools
☸️ Production Deployment
helm install agentregistry ./charts/agentregistry \
--namespace agentregistry \
--create-namespace \
--set replicaCount=2 \
--set controller.leaderElection=true
Key Configuration
🔐 Authentication
The admin API (/admin/*) is always authenticated and fail-closed: it requires a Bearer token from the agentregistry-api-tokens Kubernetes Secret and rejects every request when no tokens are configured, regardless of disableAuth. Public read endpoints (/v0/*) remain open. The disableAuth chart value (default false) governs Bearer-token enforcement on the MCP server and the auth flag served to the UI.
Enable Bearer Token Auth
# 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=false
Azure AD (MSAL Browser PKCE)
The embedded UI supports Azure AD login via MSAL.js — no client secret required.
# charts/agentregistry/values.yaml
azure:
tenantId: "your-tenant-id"
clientId: "your-client-id"
🧪 Development
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
🔗 Ecosystem
💬 Join the Community
- 🐛 Issues — Report bugs or request features
- 🤝 PRs Welcome — We love contributions!
Made with ❤️ by the Agent Inventory team