registry/internal/docs/swagger.yaml
adam jones 1821f68360
docs: Clean up API documentation (#236)
- Move API examples from docs into swagger.yaml
- Align openapi.yaml docs with implementation
2025-08-09 18:44:53 +01:00

534 lines
17 KiB
YAML

openapi: 3.0.0
info:
title: Model Context Protocol Registry API
description: API for the Model Context Protocol Registry
version: "0.1.0"
servers:
- url: /
description: Default server
tags:
- name: health
description: Health checking operations
- name: servers
description: Server registry operations
paths:
/v0/health:
get:
tags:
- health
summary: Health check endpoint
description: Returns the health status of the API
operationId: healthCheck
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: ok
github_client_id:
type: string
example: "your_github_client_id"
/v0/ping:
get:
tags:
- health
summary: API version check
description: Returns the API version and status
operationId: pingCheck
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: ok
version:
type: string
example: "0.1.0"
'405':
description: Method not allowed
/v0/servers:
get:
tags:
- servers
summary: List registered servers
description: Returns a paginated list of registered servers
operationId: listServers
parameters:
- name: cursor
in: query
description: Pagination cursor (UUID)
required: false
schema:
type: string
format: uuid
- name: limit
in: query
description: Maximum number of items to return (1-100, default 30)
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 30
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
servers:
type: array
items:
$ref: '#/components/schemas/Server'
metadata:
$ref: '#/components/schemas/PaginationMetadata'
example:
servers:
- id: "123e4567-e89b-12d3-a456-426614174000"
name: "io.github.modelcontextprotocol/filesystem"
description: "Node.js server implementing Model Context Protocol (MCP) for filesystem operations."
status: "active"
repository:
url: "https://github.com/modelcontextprotocol/servers"
source: "github"
id: "b94b5f7e-c7c6-d760-2c78-a5e9b8a5b8c9"
version_detail:
version: "1.0.2"
release_date: "2023-06-15T10:30:00Z"
is_latest: true
created_at: "2025-05-17T17:34:22.912Z"
updated_at: "2025-05-17T17:34:22.912Z"
metadata:
next_cursor: "123e4567-e89b-12d3-a456-426614174000"
count: 30
'400':
description: Invalid cursor or limit parameter
'405':
description: Method not allowed
/v0/publish:
post:
tags:
- servers
summary: Publish a server to the registry
description: Adds a new server to the MCP registry with authentication
operationId: publishServer
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
server_detail:
$ref: '#/components/schemas/ServerDetail'
repo_ref:
type: string
description: Repository reference used for authentication (defaults to server name if not provided)
example:
server_detail:
description: "<your description here>"
name: "io.github.<owner>/<server-name>"
packages:
- registry_name: "npm"
name: "@<owner>/<server-name>"
version: "0.2.23"
package_arguments:
- description: "Specify services and permissions."
is_required: true
format: "string"
value: "-s"
default: "-s"
type: "positional"
value_hint: "-s"
environment_variables:
- description: "API Key to access the server"
name: "API_KEY"
- registry_name: "docker"
name: "@<owner>/<server-name>-cli"
version: "0.123.223"
runtime_hint: "docker"
runtime_arguments:
- description: "Specify services and permissions."
is_required: true
format: "string"
value: "--mount"
default: "--mount"
type: "positional"
value_hint: "--mount"
environment_variables:
- description: "API Key to access the server"
name: "API_KEY"
repository:
url: "https://github.com/<owner>/<server-name>"
source: "github"
version_detail:
version: "0.0.1-<publisher_version>"
repo_ref: "optional-repository-reference"
responses:
'201':
description: Server published successfully
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Server publication successful
id:
type: string
example: 1234567890abcdef12345678
'400':
description: Invalid request
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: Name is required
'401':
description: Authentication failed
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: Authentication is required for publishing
'405':
description: Method not allowed
'500':
description: Server error
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: Failed to publish server details
/v0/servers/{id}:
get:
tags:
- servers
summary: Get server details
description: Returns details of a specific server by ID
operationId: getServerDetails
parameters:
- name: id
in: path
description: Server ID (UUID)
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ServerDetail'
example:
id: "01129bff-3d65-4e3d-8e82-6f2f269f818c"
name: "io.github.gongrzhe/redis-mcp-server"
description: "A Redis MCP server implementation for interacting with Redis databases. This server enables LLMs to interact with Redis key-value stores through a set of standardized tools."
status: "active"
repository:
url: "https://github.com/GongRzhe/REDIS-MCP-Server"
source: "github"
id: "907849235"
version_detail:
version: "0.0.1-seed"
release_date: "2025-05-16T19:13:21Z"
is_latest: true
created_at: "2025-05-17T17:34:22.912Z"
updated_at: "2025-05-17T17:34:22.912Z"
packages:
- registry_name: "docker"
name: "@gongrzhe/server-redis-mcp"
version: "1.0.0"
package_arguments:
- description: "Docker image to run"
is_required: true
format: "string"
value: "mcp/redis"
default: "mcp/redis"
type: "positional"
value_hint: "mcp/redis"
- description: "Redis server connection string"
is_required: true
format: "string"
value: "redis://host.docker.internal:6379"
default: "redis://host.docker.internal:6379"
type: "positional"
value_hint: "host.docker.internal:6379"
'400':
description: Invalid ID format
'404':
description: Server not found
'405':
description: Method not allowed
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\""
schemas:
Server:
type: object
required:
- name
- description
- version_detail
properties:
id:
type: string
format: uuid
example: "123e4567-e89b-12d3-a456-426614174000"
name:
type: string
description: "Server name/identifier"
example: "io.github.modelcontextprotocol/filesystem"
description:
type: string
description: "Human-readable description of the server's functionality"
example: "Node.js server implementing Model Context Protocol (MCP) for filesystem operations."
status:
type: string
enum: [active, deprecated]
default: active
description: "Server lifecycle status. 'deprecated' indicates the server is no longer recommended for new usage."
example: "active"
repository:
$ref: '#/components/schemas/Repository'
version_detail:
$ref: '#/components/schemas/VersionDetail'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
PaginationMetadata:
type: object
properties:
next_cursor:
type: string
format: uuid
example: "123e4567-e89b-12d3-a456-426614174000"
count:
type: integer
example: 30
Repository:
type: object
required:
- url
- source
- id
properties:
url:
type: string
format: uri
example: "https://github.com/modelcontextprotocol/servers"
source:
type: string
example: "github"
id:
type: string
example: "b94b5f7e-c7c6-d760-2c78-a5e9b8a5b8c9"
VersionDetail:
type: object
required:
- version
- release_date
- is_latest
properties:
version:
type: string
example: "1.0.2"
description: Equivalent of Implementation.version in MCP specification.
release_date:
type: string
format: date-time
example: "2023-06-15T10:30:00Z"
description: Datetime that the MCP server version was published to the registry.
is_latest:
type: boolean
example: true
description: Whether the MCP server version is the latest version available in the registry.
ServerDetail:
description: Schema for a static representation of an MCP server. Used in various contexts related to discovery, installation, and configuration.
allOf:
- $ref: '#/components/schemas/Server'
- type: object
properties:
packages:
type: array
items:
$ref: '#/components/schemas/Package'
remotes:
type: array
items:
$ref: '#/components/schemas/Remote'
Package:
type: object
required:
- registry_name
- name
- version
properties:
registry_name:
type: string
description: Package registry type
example: "npm"
name:
type: string
description: Package name in the registry
example: "io.modelcontextprotocol/filesystem"
version:
type: string
description: Package version
example: "1.0.2"
runtime_hint:
type: string
description: A hint to help clients determine the appropriate runtime for the package
example: "docker"
runtime_arguments:
type: array
description: A list of arguments to be passed to the package's runtime command
items:
$ref: '#/components/schemas/Argument'
package_arguments:
type: array
description: A list of arguments to be passed to the package's binary
items:
$ref: '#/components/schemas/Argument'
environment_variables:
type: array
description: Environment variables to be set when running the package
items:
$ref: '#/components/schemas/KeyValueInput'
Input:
type: object
properties:
description:
description: A description of the input
type: string
is_required:
type: boolean
default: false
format:
type: string
enum: [string, number, boolean, filepath]
default: string
value:
type: string
is_secret:
type: boolean
default: false
default:
type: string
choices:
type: array
items:
type: string
InputWithVariables:
allOf:
- $ref: '#/components/schemas/Input'
- type: object
properties:
variables:
type: object
additionalProperties:
$ref: '#/components/schemas/Input'
KeyValueInput:
allOf:
- $ref: '#/components/schemas/InputWithVariables'
- type: object
required:
- name
properties:
name:
type: string
description: Name of the header or environment variable
example: "API_KEY"
Argument:
allOf:
- $ref: '#/components/schemas/InputWithVariables'
- type: object
required:
- type
properties:
type:
type: string
enum: [positional, named]
example: "positional"
name:
type: string
description: The flag name (for named arguments)
example: "--port"
is_repeated:
type: boolean
default: false
value_hint:
type: string
example: "file_path"
Remote:
type: object
required:
- transport_type
- url
properties:
transport_type:
type: string
enum: [streamable, sse]
description: Transport protocol type
example: "sse"
url:
type: string
format: uri
description: Remote server URL
example: "https://mcp-fs.example.com/sse"
headers:
type: array
description: HTTP headers to include
items:
$ref: '#/components/schemas/KeyValueInput'