Skip to content

Add integration with agent and tool registries #69

@heeki

Description

@heeki

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 Registry data model that stores connection details for agent and tool registries. Fields should include: name, endpoint_url, registry_type (mcp or a2a or mixed), 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/registries with scope mcp:write or a2a:write as appropriate.

  • R2: registry-discovery — The backend should expose a GET /api/registries/{registry_id}/catalog endpoint (scope: mcp:read or a2a:read) that queries the connected registry and returns a paginated list of available entries. Each entry should include at minimum: name, description, type (mcp_server or a2a_agent), endpoint_url, tags/categories, auth_requirements, and version. 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}/import endpoint (scope: mcp:write) that accepts a list of MCP server entry IDs from the registry catalog and creates corresponding McpServer records 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}/import endpoint (scope: a2a:write) that accepts a list of A2A agent entry IDs from the registry catalog and creates corresponding A2aAgent records 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:read or a2a:read scopes. 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_secret boolean in responses, 5-minute in-memory cache). The frontend registry form should support none, api_key, and oauth2 auth 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

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions