---
title: "Publish MCP server (Optional)"
method: POST
path: "/v0.1/publish"
tags: ["publish"]
---

# Publish MCP server (Optional)

`POST /v0.1/publish`

Publish a new MCP server to the registry or update an existing one.

**Note**: This endpoint is optional for registry implementations. Read-only registries may not provide this functionality.

Authentication mechanism is registry-specific and may vary between implementations.

## Request body

- ServerDetail — unresolved $ref

## Response `200`

Successfully published server

- ServerResponse — API response format with separated server data and registry metadata
  - `server` ServerDetail, required — unresolved $ref
  - `_meta` object — Registry-managed metadata
    - `io.modelcontextprotocol.registry/official` object — Official MCP registry metadata
      - `status` 'active' | 'deprecated' | 'deleted' — Server lifecycle status
      - `statusMessage` string — Optional message explaining the status (e.g., deprecation reason)
      - `statusChangedAt` string, date-time — Timestamp when the server status was last updated
      - `publishedAt` string, date-time — Timestamp when the server was first published to the registry
      - `updatedAt` string, date-time — Timestamp when the server entry was last updated
      - `isLatest` boolean — Whether this is the latest version of the server

## Other responses

- `401` — Unauthorized - Invalid or missing authentication token
- `403` — Forbidden - Insufficient permissions
- `500` — Internal server error
- `501` — Not Implemented - Registry does not support publishing

## Changes

- **2026-04-29** `26eb1b376464` — 1 warning
  - the `packages/items/version` request property's maxLength was set to `255`
- **2026-04-23** `71ff271089a8` — 1 info
  - added the optional property `_meta/io.modelcontextprotocol.registry/official/statusChangedAt` to the response with the `200` status
- **2026-02-27** `d996fbd54ad7` — 1 info
  - added the optional property `_meta/io.modelcontextprotocol.registry/official/statusMessage` to the response with the `200` status
- **2026-02-09** `6d1f357b945d` — 4 warning, 4 info
  - changed the pattern of the request property `packages/items/transport/anyOf[#/components/schemas/SseTransport]/url` from `^https?://[^\s]+$` to `^(https?://[^\s]+|\{[a-zA-Z_][a-zA-Z0-9_]*\}[^\s]*)$`
  - changed the pattern of the request property `packages/items/transport/anyOf[#/components/schemas/StreamableHttpTransport]/url` from `^https?://[^\s]+$` to `^(https?://[^\s]+|\{[a-zA-Z_][a-zA-Z0-9_]*\}[^\s]*)$`
  - changed the pattern of the request property `remotes/items/allOf[subschema #1]/anyOf[#/components/schemas/SseTransport]/url` from `^https?://[^\s]+$` to `^(https?://[^\s]+|\{[a-zA-Z_][a-zA-Z0-9_]*\}[^\s]*)$`
  - changed the pattern of the request property `remotes/items/allOf[subschema #1]/anyOf[#/components/schemas/StreamableHttpTransport]/url` from `^https?://[^\s]+$` to `^(https?://[^\s]+|\{[a-zA-Z_][a-zA-Z0-9_]*\}[^\s]*)$`
  - …4 more
- …earlier changes not shown

[Full history](https://skmtc.dev/modelcontextprotocol/apis/mcp-server-registry-api/changes/v0.1/publish/post.md)

---

[API](https://skmtc.dev/modelcontextprotocol/apis/mcp-server-registry-api.md) · [All operations](https://skmtc.dev/modelcontextprotocol/apis/mcp-server-registry-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/modelcontextprotocol/mcp-server-registry-api/revisions/3ed9ca429754/schema)
