---
title: "Create Mcp Server"
method: POST
path: "/v1/mcp-servers/"
tags: ["v1", "protected", "mcp-servers"]
---

# Create Mcp Server

`POST /v1/mcp-servers/`

## Request body

- MCPServerCreate — Payload for creating an MCP server spec (catalog template). Either ``docker_image_url`` (for container-based servers) or ``remote_url`` (for HTTP-based servers like GitHub Copilot) should be supplied. ``env_schema`` describes the variables an instance built from this spec needs to provide; secret entries (``isSecret: true``) are routed through the secret manager rather than stored in plaintext.
  - `cmd` string[], nullable — Custom command override for container CMD (e.g. switching between stdio and HTTP modes).
  - `description` string, required — Short summary of what this MCP server provides.
  - `docker_image_url` string, nullable — Docker image URL for container-based MCP servers.
  - `env_schema` object[], nullable — Environment-variable schema entries (KeyValueInput from the MCP registry). Each item has at least 'name' and 'description'; mark secrets with 'isSecret: true'.
  - `is_public` boolean — If true, the spec is visible across workspaces.
  - `json_spec` object, nullable — Raw ServerJSON spec as published by the MCP registry.
  - `name` string, required — Human-readable MCP server name (unique per workspace).
  - `registry_url` string, nullable — Source registry URL the spec was imported from.
  - `remote_url` string, nullable — Remote endpoint URL for HTTP-based MCP servers.
  - `tags` string[] — Tags used for search and categorization.
  - `version` string — Semantic version of the MCP server spec.

## Response `200`

Successful Response

- MCPServerResponse
  - `cmd` string[], nullable, required
  - `created_at` string, required
  - `description` string, required
  - `docker_image_url` string, nullable
  - `env_schema` object[], required
  - `id` string, uuid, required
  - `is_public` boolean, required
  - `json_spec` object, nullable
  - `name` string, required
  - `registry_url` string, nullable
  - `remote_url` string, nullable
  - `slug` string, required
  - `status` string, required
  - `tags` string[], required
  - `updated_at` string, required
  - `version` string, required

## Other responses

- `422` — Validation Error

## Changes

- **2026-07-08** `8940d7f77282` — 2 breaking
  - the `created_at` response's property format changed from `date-time` to no format for status `200`
  - the `updated_at` response's property format changed from `date-time` to no format for status `200`
- **2026-06-18** `dad98bb65260` — 2 breaking, 1 info
  - the response property `docker_image_url` became optional for the status `200`
  - response property `docker_image_url` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - added the required property `slug` to the response with the `200` status
- **2026-04-29** `e1a530c0a2d5` — 1 breaking, 1 warning, 8 info
  - the `name` request property's minLength was increased from `0` to `1`
  - the `name` request property's maxLength was set to `255`
  - added the new optional request property `json_spec`
  - added the new optional request property `registry_url`
  - …6 more
- **2026-03-30** `e9c153221160` — 3 breaking, 6 warning, 3 info
  - the request property `docker_image_url` became required
  - request property `docker_image_url` list-of-types was narrowed by removing types `null` from media type `application/json`
  - removed the required property `slug` from the response with the `200` status
  - removed the request property `json_spec`
  - …8 more

[Change history](https://skmtc.dev/agentarea/apis/agentarea-api/changes/v1/mcp-servers/post.md)

---

[API](https://skmtc.dev/agentarea/apis/agentarea-api.md) · [All operations](https://skmtc.dev/agentarea/apis/agentarea-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/agentarea/agentarea-api/revisions/d29cbb0c8cc9/schema)
