---
title: "Create MCP Server"
method: POST
path: "/api/v1/servers"
tags: ["Servers"]
---

# Create MCP Server

`POST /api/v1/servers`

Create a new MCP server. If iconUrl is provided, the server will fetch the icon from the external URL and upload it to R2 storage. The response will contain the R2 URL.

## Request body

- ServerCreate
  - `scope` string, required
  - `packageName` string, required
  - `displayName` string, required
  - `description` string, required
  - `repository` Repository, nullable
    - `url` string, uri, required
    - `source` string, required
  - `iconUrl` string, uri — External icon URL. The server will fetch the icon from this URL and upload it to R2 storage. The response will contain the R2 URL.
  - `detailedDescription` string
  - `version` string
  - `packages` Package[]
    - `registryName` string, required
    - `name` string, required
    - `version` string, required
    - `runtimeHint` string
    - `runtimeArguments` Argument[]
      - `type` 'positional' | 'named', required
      - `name` string
      - `isRepeated` boolean
      - `valueHint` string
      - `description` string
      - `isRequired` boolean
      - `format` 'string' | 'number' | 'boolean' | 'file_path'
      - `value` string
      - `isSecret` boolean
      - `default` string
      - `choices` string[]
      - `template` string
      - `properties` object
      - `variables` object
    - `packageArguments` Argument[]
      - `type` 'positional' | 'named', required
      - `name` string
      - `isRepeated` boolean
      - `valueHint` string
      - `description` string
      - `isRequired` boolean
      - `format` 'string' | 'number' | 'boolean' | 'file_path'
      - `value` string
      - `isSecret` boolean
      - `default` string
      - `choices` string[]
      - `template` string
      - `properties` object
      - `variables` object
    - `environmentVariables` KeyValueInput[]
      - `name` string, required
      - `description` string
      - `isRequired` boolean
      - `format` 'string' | 'number' | 'boolean' | 'file_path'
      - `value` string
      - `isSecret` boolean
      - `default` string
      - `choices` string[]
      - `template` string
      - `properties` object
      - `variables` object
  - `remotes` Remote[]
    - `transportType` string, required
    - `url` string, uri, required
    - `headers` KeyValueInput[]
      - `name` string, required
      - `description` string
      - `isRequired` boolean
      - `format` 'string' | 'number' | 'boolean' | 'file_path'
      - `value` string
      - `isSecret` boolean
      - `default` string
      - `choices` string[]
      - `template` string
      - `properties` object
      - `variables` object
  - `author` string
  - `category` string
  - `tags` string[]

## Response `201`

Server created successfully

- ServerResponse
  - `server` ServerDetail, required
    - `scope` string, required
    - `packageName` string, required
    - `displayName` string, required
    - `description` string, required
    - `repository` Repository, nullable
      - `url` string, uri, required
      - `source` string, required
    - `iconUrl` string, uri
    - `detailedDescription` string
    - `version` string
    - `author` string
    - `category` string
    - `tags` string[]
    - `createdAt` string, date-time
    - `updatedAt` string, date-time, required
    - `developerId` string
    - `source` 'gateway' | 'api' | 'seed'
    - `packages` Package[]
      - `registryName` string, required
      - `name` string, required
      - `version` string, required
      - `runtimeHint` string
      - `runtimeArguments` Argument[]
        - `type` 'positional' | 'named', required
        - `name` string
        - `isRepeated` boolean
        - `valueHint` string
        - `description` string
        - `isRequired` boolean
        - `format` 'string' | 'number' | 'boolean' | 'file_path'
        - `value` string
        - `isSecret` boolean
        - `default` string
        - `choices` string[]
        - `template` string
        - `properties` object
        - `variables` object
      - `packageArguments` Argument[]
        - `type` 'positional' | 'named', required
        - `name` string
        - `isRepeated` boolean
        - `valueHint` string
        - `description` string
        - `isRequired` boolean
        - `format` 'string' | 'number' | 'boolean' | 'file_path'
        - `value` string
        - `isSecret` boolean
        - `default` string
        - `choices` string[]
        - `template` string
        - `properties` object
        - `variables` object
      - `environmentVariables` KeyValueInput[]
        - `name` string, required
        - `description` string
        - `isRequired` boolean
        - `format` 'string' | 'number' | 'boolean' | 'file_path'
        - `value` string
        - `isSecret` boolean
        - `default` string
        - `choices` string[]
        - `template` string
        - `properties` object
        - `variables` object
    - `remotes` Remote[]
      - `transportType` string, required
      - `url` string, uri, required
      - `headers` KeyValueInput[]
        - `name` string, required
        - `description` string
        - `isRequired` boolean
        - `format` 'string' | 'number' | 'boolean' | 'file_path'
        - `value` string
        - `isSecret` boolean
        - `default` string
        - `choices` string[]
        - `template` string
        - `properties` object
        - `variables` object
    - `id` string, required

## Other responses

- `400` — Invalid request data
- `401` — Unauthorized - authentication required
- `500` — Internal server error

---

[API](https://skmtc.net/corespeed-io/apis/mcp-store-api.md) · [All operations](https://skmtc.net/corespeed-io/apis/mcp-store-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/corespeed-io/mcp-store-api/revisions/25721894961a/schema)
