---
title: "Update MCP Server"
method: PUT
path: "/api/v1/servers/{id}"
tags: ["Servers"]
---

# Update MCP Server

`PUT /api/v1/servers/{id}`

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

## Path parameters

- `id` string, required — The unique identifier

## Request body

- ServerUpdate
  - `displayName` string
  - `description` string
  - `repository` Repository, nullable
    - `url` string, uri, required
    - `source` string, required
  - `iconUrl` string, uri — External icon URL. If provided, the server will fetch the icon from this URL, upload it to R2 storage, and delete the old icon. The response will contain the new 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 `200`

Server updated 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
- `403` — Forbidden - not owner or admin
- `404` — Server not found
- `500` — Internal server error

## Changes

- **2026-01-21** `ba253fbf08a7` — 1 breaking, 2 warning, 3 info
  - the response property `server/version` became optional for the status `200`
  - removed the request property `documentationUrl`
  - removed the optional property `server/documentationUrl` from the response with the `200` status
  - added the new optional request property `detailedDescription`
  - …2 more
- **2026-01-18** `8179b9ac1660` — 2 warning
  - removed the request property `packageName`
  - removed the request property `scope`
- **2026-01-18** `b0e6563d3fce` — 5 breaking, 3 warning, 5 info
  - the response property `server/repository` became nullable for the status `200`
  - the response property `server/repository` became optional for the status `200`
  - the `code` response property const value `INTERNAL_SERVER_ERROR` was removed for the status `500`
  - the `code` response property const value `NOT_FOUND` was removed for the status `404`
  - …9 more
- **2026-01-17** `4f3d96fe2656` — 7 info
  - added the new optional request property `author`
  - added the new optional request property `category`
  - added the new optional request property `tags`
  - added the optional property `server/author` to the response with the `200` status
  - …3 more
- …earlier changes not shown

[Full history](https://skmtc.dev/corespeed-io/apis/mcp-store-api/changes/api/v1/servers/:id/put.md)

---

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