registry/README.md
2025-04-24 18:17:36 -06:00

4.9 KiB

MCP Registry

A reference implementation of a registry service for Model Context Protocol (MCP) servers.

Note: This project is currently a work in progress.

Overview

The MCP Registry service provides a centralized repository for MCP server entries. It allows discovery and management of various MCP implementations with their associated metadata, configurations, and capabilities.

Features

  • RESTful API for managing MCP registry entries (list, get, create, update, delete)
  • Health check endpoint for service monitoring
  • Support for various environment configurations
  • Graceful shutdown handling
  • MongoDB and in-memory database support
  • Comprehensive API documentation
  • Pagination support for listing registry entries

Project Structure

├── cmd/           # Application entry points
├── config/        # Configuration files
├── internal/      # Private application code
│   ├── api/       # HTTP server and request handlers
│   ├── config/    # Configuration management
│   ├── model/     # Data models
│   └── service/   # Business logic
├── pkg/           # Public libraries
├── scripts/       # Utility scripts
└── build/         # Build artifacts

Getting Started

Prerequisites

  • Go 1.18 or later
  • MongoDB (optional, for production use)
  • Docker (optional, for containerized deployment)

Building

make build

This will create the registry binary in the build/ directory.

Running

./build/mcp-registry

Alternatively, run

MCP_REGISTRY_DATABASE_URL="mongodb://localhost:27017" ./build/registry

By default, the service will run on http://localhost:8080.

Docker Deployment

You can build and run the service using Docker:

# Build the Docker image
docker build -t registry .

# Run the registry and MongoDB with docker compose
docker compose up

This will start the MCP Registry service and MongoDB with Docker, exposing it on port 8080.

Using the Fake Service

For development and testing purposes, the application includes a fake service with pre-populated registry entries. To use the fake service:

  1. Set the environment to "test":
export MCP_REGISTRY_ENVIRONMENT=test
./build/registry

Alternatively, run

make run-test

The fake service provides three sample MCP registry entries with the following capabilities:

  • Registry 1: Code generation and completion capabilities
  • Registry 2: Chat and knowledge base capabilities
  • Registry 3: Data visualization and analysis capabilities

You can interact with the fake data through the API endpoints:

  • List all entries: GET /servers

The fake service is useful for:

  • Frontend development without a real backend
  • Testing API integrations
  • Example data structure reference

API Documentation

The API is documented using Swagger/OpenAPI. You can access the interactive Swagger UI at:

/v0/swagger/index.html

This provides a complete reference of all endpoints with request/response schemas and allows you to test the API directly from your browser.

API Endpoints

Health Check

GET /v0/health

Returns the health status of the service:

{
  "status": "ok"
}

Registry Endpoints

List Registry Server Entries

GET /v0/servers

Lists MCP registry server entries with pagination support.

Query parameters:

  • limit: Maximum number of entries to return (default: 30, max: 100)
  • cursor: Pagination cursor for retrieving next set of results

Response example:

{
  "servers": [
    {
      "id": "1",
      "name": "Example MCP Server",
      "description": "An example MCP server implementation",
      "url": "https://example.com/mcp",
      "repository": {
        "url": "https://github.com/example/mcp-server",
        "stars": 120
      },
      "version": "1.0.0",
    }],
   "metadata": {
    "next_cursor": "cursor-value-for-next-page"
  }
}

Ping Endpoint

GET /v0/ping

Simple ping endpoint that returns environment configuration information:

{
  "environment": "dev",
  "version": "registry-<sha>"
}

Configuration

The service can be configured using environment variables:

Variable Description Default
MCP_REGISTRY_ENVIRONMENT Application environment (production, test) production
MCP_REGISTRY_APP_VERSION Application version dev
MCP_REGISTRY_DATABASE_URL MongoDB connection string mongodb://localhost:27017
MCP_REGISTRY_DATABASE_NAME MongoDB database name mcp-registry
MCP_REGISTRY_COLLECTION_NAME MongoDB collection name for server registry servers_v2

Testing

Run the test script to validate API endpoints:

./scripts/test_endpoints.sh

You can specify specific endpoints to test:

./scripts/test_endpoints.sh --endpoint health
./scripts/test_endpoints.sh --endpoint servers

License

See the LICENSE file for details.