a2a-registry
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"a2a-registry": {
"type": "http",
"url": "http://localhost:3005/mcp"
}
}
}
服务介绍
A2A Registry
A Model Context Protocol (MCP) server providing a unified registry for agents implementing the A2A (Agent-to-Agent) protocol. The registry exposes both a REST API and MCP tools for registering, querying, and managing agent metadata.
Features
- Dual API Access: REST API and MCP server running on a single HTTP server
- Intelligent Agent Registration: Automatically fetches AgentCards from URLs using smart routing
- Multiple Storage Backends: JSON file or SQLite database
- Concurrent Access: SSE-based MCP transport allows multiple clients simultaneously
- Full CRUD Operations: Create, read, update, and delete agents
- A2A Protocol Compliant: Uses standard AgentCard model from
@a2a-js/sdk
Installation
npm install
npm run build
Usage
Basic Usage
# Start with default settings (JSON store, port 3000)
npm start
# Or run directly
node dist/index.js
Configuration Options
# Use SQLite storage
node dist/index.js --store=sqlite --file=./agents.db
# Custom port
node dist/index.js --port=4000
# Custom JSON file location
node dist/index.js --store=json --file=./my-agents.json
# Combine options
node dist/index.js --store=sqlite --file=./agents.db --port=4000
CLI Options
| Flag | Values | Description | Default |
|---|---|---|---|
--store |
json, sqlite |
Storage backend | json |
--file |
path | Database or JSON file path | a2a-registry.json or a2a-registry.db |
--port |
number | HTTP server port | 3000 |
--help |
- | Show help message | - |
Using PM2
# Start with PM2
pm2 start ecosystem.config.cjs
# View logs
pm2 logs a2a-registry
# Stop
pm2 stop a2a-registry
# Restart
pm2 restart a2a-registry
API Endpoints
REST API
All REST endpoints are under /agents:
List All Agents
GET /agents
Get Agent by Name
GET /agents/:name
Register New Agent
POST /agents
Content-Type: application/json
{
"url": "https://example.com"
}
The registry will automatically:
- Determine the AgentCard URL using intelligent routing
- Fetch the AgentCard from the URL
- Validate the AgentCard structure
- Store it using the agent's name as the primary key
URL Routing Examples:
https://example.comFetches fromhttps://example.com/.well-known/agent-card.jsonhttps://example.com/my-agentFetches fromhttps://example.com/my-agent/.well-known/agent-card.jsonhttps://cdn.example.com/agent.jsonFetches directly (URL ends with.json)
Update Agent
PUT /agents/:name
Content-Type: application/json
{
"url": "https://new-url.com" # Optional, re-fetches from existing URL if omitted
}
Delete Agent
DELETE /agents/:name
MCP Server
The MCP server is available at /mcp using SSE (Server-Sent Events) transport.
Config example
{
"mcpServers": {
"a2a-registry": {
"type": "http",
"url": "http://localhost:3005/mcp"
}
}
}
Available MCP Tools
-
a2a_register_agent
- Register a new agent by URL
- Parameters:
{ url: string }
-
a2a_list_agents
- List all registered agents
- Parameters: none
-
a2a_get_agent
- Get agent details by name
- Parameters:
{ name: string }
-
a2a_update_agent
- Update agent by re-fetching AgentCard
- Parameters:
{ name: string, url?: string }
-
a2a_delete_agent
- Delete agent from registry
- Parameters:
{ name: string }
Architecture
REST API MCP Server
(HTTP Routes) (MCP Tools)
AgentService
(Business Logic & Validation)
Store Interface
(Storage Abstraction)
JsonFileStore SqliteStore
(Implementations)
Key Design Principles
- Service Layer Pattern: AgentService encapsulates all business logic
- No Code Duplication: REST and MCP APIs are thin adapters calling AgentService
- Intelligent Registration: Automatic AgentCard discovery and fetching
- Pluggable Storage: Easy to add new storage backends
- Concurrent Access: Stateless SSE transport for MCP
AgentCard Structure
The registry uses the standard AgentCard model from the A2A protocol. Required fields include:
name: Agent name (used as primary key)description: Agent purpose and capabilitiesurl: Primary A2A endpoint URLversion: Agent versioncapabilities: Supported A2A protocol featuresdefaultInputModes: Supported input MIME typesdefaultOutputModes: Supported output MIME typesskills: Agent's distinct capabilities
See the A2A Protocol Specification for complete details.
Development
Project Structure
a2a-registry/
src/
index.ts # Main entry point
types/ # TypeScript type definitions
store/ # Storage implementations
JsonFileStore.ts
SqliteStore.ts
services/ # Business logic
AgentService.ts
api/ # REST API
restApi.ts
mcp/ # MCP server
mcpServer.ts
utils/ # Utilities
validation.ts
dist/ # Compiled JavaScript
package.json
tsconfig.json
ecosystem.config.cjs # PM2 configuration
Build
npm run build
Development Mode (with auto-reload)
npm run dev
Clean Build
npm run clean
npm run build
Error Handling
The registry provides clear, actionable error messages:
- 404: Agent not found
- 409: Agent already exists (use update instead)
- 400: Invalid URL, fetch failure, or validation error
- 500: Internal server error
All errors include helpful messages to guide next steps.
License
MIT
Contributing
Contributions are welcome! Please ensure:
- Code follows the existing architecture patterns
- All business logic is in AgentService
- APIs are thin adapters
- Tests pass and build succeeds
Support
For issues or questions, please open an issue on GitHub.