-
Notifications
You must be signed in to change notification settings - Fork 0
Add integration with agent and tool registries #69
Description
Add integration with agent and tool registries
Summary
Organizations managing the proliferation of agents, tools, and skills are adopting registries for onboarding, discovery, and governance. Loom should integrate with public and private registries so that users can browse available MCP servers and A2A agents, filter by capability, and selectively import them into their Loom instance — reducing manual configuration and ensuring consistency with organizational standards.
Context
Loom currently supports manual registration of MCP servers (by endpoint URL) and A2A agents (by base URL with Agent Card discovery). There is no mechanism to connect to a centralized registry that catalogs available servers and agents. Platform teams maintaining internal registries — or teams wanting to browse public registries — must manually copy URLs and configuration into Loom one at a time.
A registry integration would allow users to connect to a registry endpoint, browse its catalog with search and filtering, review details (tools, skills, authentication requirements), and import selected entries directly into Loom's MCP or A2A configuration.
Requirements
-
R1: registry-model — The backend should support a
Registrydata model that stores connection details for agent and tool registries. Fields should include:name,endpoint_url,registry_type(mcpora2aormixed),auth_type(none,api_key,oauth2), auth credentials (stored in Secrets Manager, not the database),description,status(active/inactive), and timestamps. CRUD endpoints under/api/registrieswith scopemcp:writeora2a:writeas appropriate. -
R2: registry-discovery — The backend should expose a
GET /api/registries/{registry_id}/catalogendpoint (scope:mcp:readora2a:read) that queries the connected registry and returns a paginated list of available entries. Each entry should include at minimum:name,description,type(mcp_serverora2a_agent),endpoint_url,tags/categories,auth_requirements, andversion. Support query parameters for search (q), type filter (type), tag filter (tag), and pagination (offset,limit). -
R3: registry-entry-detail — The backend should expose a
GET /api/registries/{registry_id}/catalog/{entry_id}endpoint that returns full details for a specific registry entry. For MCP servers, this includes the tool list with input schemas. For A2A agents, this includes the full Agent Card with skills, capabilities, I/O modes, and auth schemes. The response should indicate whether the entry is already imported into Loom (by matching on endpoint URL). -
R4: import-mcp-server — The backend should expose a
POST /api/registries/{registry_id}/importendpoint (scope:mcp:write) that accepts a list of MCP server entry IDs from the registry catalog and creates correspondingMcpServerrecords in Loom. The import should populate all fields from the registry metadata (name, endpoint URL, transport type, description, auth configuration). If an MCP server with the same endpoint URL already exists, the endpoint should return a conflict indicator rather than creating a duplicate. -
R5: import-a2a-agent — The backend should expose a
POST /api/registries/{registry_id}/importendpoint (scope:a2a:write) that accepts a list of A2A agent entry IDs from the registry catalog and creates correspondingA2aAgentrecords in Loom. The import should fetch each agent's Agent Card, parse skills and capabilities, and store them following the existing A2A registration flow. If an A2A agent with the same base URL already exists, the endpoint should return a conflict indicator. -
R6: registry-browse-page — The frontend should provide a "Registry" page accessible to users with
mcp:readora2a:readscopes. The page should display connected registries and allow the user to browse a selected registry's catalog. The catalog view should support: text search across name and description, type filter (MCP servers vs A2A agents), tag/category filter chips, and sortable columns (name, type, last updated). -
R7: registry-entry-preview — When a user selects a catalog entry in the frontend, a detail panel or modal should display the full entry information. For MCP servers: tool list with descriptions and parameter schemas. For A2A agents: Agent Card summary with skills, capabilities, and authentication requirements. An "Already Imported" badge should appear if the entry's endpoint URL matches an existing Loom resource.
-
R8: selective-import-flow — The frontend should support selecting multiple catalog entries (via checkboxes) and importing them in batch. The import flow should show a confirmation dialog listing the selected entries, their types, and any that would conflict with existing resources. After import, the user should be navigated to the relevant page (MCP Servers or A2A Agents) with a success toast.
-
R9: registry-auth-management — Registry connections that require authentication should store credentials securely in Secrets Manager following the existing credential pattern (write-only,
has_secretboolean in responses, 5-minute in-memory cache). The frontend registry form should supportnone,api_key, andoauth2auth types with progressive disclosure of auth fields. -
R10: registry-sync-status — Each registry should track the last successful catalog fetch timestamp and entry count. The registry list view should display sync status (last synced, entry count) and provide a manual "Refresh" action to re-fetch the catalog. Failed fetches should surface errors without disrupting the existing catalog cache.
Relevant Files
| File | Description |
|---|---|
backend/app/models/mcp.py |
McpServer, McpTool, McpServerAccess models |
backend/app/models/a2a.py |
A2aAgent, A2aAgentSkill, A2aAgentAccess models |
backend/app/routers/mcp.py |
MCP server CRUD, tools, access control endpoints |
backend/app/routers/a2a.py |
A2A agent CRUD, Agent Card, skills, access endpoints |
backend/app/services/mcp.py |
MCP connection test and tool discovery |
backend/app/services/a2a.py |
A2A Agent Card fetching and parsing |
backend/app/routers/credentials.py |
Credential management with Secrets Manager pattern |
frontend/src/pages/McpServersPage.tsx |
MCP server management UI |
frontend/src/pages/A2aAgentsPage.tsx |
A2A agent management UI |
frontend/src/api/mcp.ts |
MCP frontend API client |
frontend/src/api/a2a.ts |
A2A frontend API client |
frontend/src/components/McpServerForm.tsx |
MCP server create/edit form (auth pattern reference) |
frontend/src/components/A2aAgentForm.tsx |
A2A agent create/edit form |
Labels
feature, backend, frontend, mcp, a2a