# MCP Subregistry Server

This is a MCP (Model Context Protocol) subregistry. It provides an API for discovering MCP servers that AI clients can use to access new tools, resources, prompts and more.

## Why MCP Servers?

MCP servers extend what AI assistants can do. Instead of being limited to text generation, an AI with access to MCP servers can:
- Access real-time data - weather, stock prices, database queries
- Take actions - send emails, create tickets, deploy code
- Use specialized tools - image processing, code analysis, API integrations

## Why Use a Registry?

Without a registry, you'd need to manually find, evaluate, and configure each MCP server. A registry solves this by providing:
- Discovery - search for servers by name or capability
- Standardization - consistent metadata format across all servers
- Installation info - package references (npm, pip, docker) and configuration

## Why a Subregistry?

The [Official MCP Registry](https://registry.modelcontextprotocol.io) serves as a primary upstream source of MCP servers.

This is a _subregistry_ that may mirror or extend this and other registries. Subregistries add value by:
- Curating specific server collections (e.g., only enterprise-approved servers)
- Adding additional servers like internal-use-only MCP servers
- Adding metadata like ratings, usage stats, or security audits

Your organization might run a subregistry to control which MCP servers are available to your AI tools, or to add internal servers not published publicly.

## Core Endpoints

You are accessing this page at `/docs` (or possibly redirected from `/`). Assume the base URL is at `/` relative to this.

E.g. if you are accessing this at `https://mcp.example.com/registry/docs`, you'd access the servers list at `https://mcp.example.com/registry/v0/servers`.

### List Servers
```
GET /v0/servers
```

Query parameters:
- `version=<version>` - Filter to a specific version or use the string `latest` to show latest versions. It is highly recommended to always use `version=latest`.
- `search=<term>` - Substring match on name. Given this, you should keep it very simple e.g. `weather`, NOT `weather forecast server`
- `updated_since=<ISO8601>` - Filter by update time
- `limit=<n>` - Results per page (default: 50)
- `cursor=<token>` - Pagination cursor

Example:
```
GET /v0/servers?version=latest&search=filesystem
```

### Get Server Versions
```
GET /v0/servers/{name}/versions
```

### Get Specific Version
```
GET /v0/servers/{name}/versions/{version}
```

## Response Structure

Server entries look like:
```jsonc
{
  "server": {
    "name": "server-name",
    "description": "What the server does",
    "version": "1.0.0",
    "title": "Display Name",
    "repository": {
      "url": "https://github.com/...",
      "source": "github"
    },
    "packages": [...], // local installation options
    "remotes": [...] // remote server URLs
  },
  "_meta": {
    "io.modelcontextprotocol.registry/official": {
      "status": "active",
      "publishedAt": "2025-01-01T00:00:00Z",
      "updatedAt": "2025-01-01T00:00:00Z",
      "isLatest": true
    }
  }
}
```

Always prefer streamable HTTP remotes when available and compatible with your client.

## Client-Specific Documentation

You should read instructions on configuring MCP servers in your client. See:
- `/docs/claude-ai` - Claude.ai web interface
- `/docs/claude-desktop` - Claude Desktop app
- `/docs/claude-code` - Claude Code CLI
- `/docs/claude-messages-api` - Anthropic Messages API
