Skip to content

MCP servers

Create MCP server

Register an external MCP server without establishing a tool connection; registration may probe its authentication method. A duplicate URL returns `409`; use Update MCP server to change the registration. It stays disconnected until List MCP server tools succeeds. Requires workspace write access. OAuth scope: `api:write`.

POST/api/v2/mcp-servers

Register an external MCP server without establishing a tool connection; registration may probe its authentication method. A duplicate URL returns 409; use Update MCP server to change the registration. It stays disconnected until List MCP server tools succeeds. Requires workspace write access.

OAuth scope: api:write.

Authentication

Send a personal or workspace API key in X-API-Key. See key types and access; operations that reject workspace keys say so in their description.

Send X-API-Key in the request header.

Alternatively

Send a Sim OAuth access token in Authorization: Bearer. See OAuth authentication and scopes.

Authorization: Bearer YOUR_ACCESS_TOKEN

Required scopes: api:write

OAuth flows
json
{
  "authorizationCode": {
    "authorizationUrl": "https://www.sim.ai/api/auth/oauth2/authorize",
    "tokenUrl": "https://www.sim.ai/api/auth/oauth2/token",
    "refreshUrl": "https://www.sim.ai/api/auth/oauth2/token",
    "scopes": {
      "api:read": "Read your workspaces, workflows, files, tables, and logs",
      "api:write": "Read, create, change, run, and delete resources in your workspaces",
      "offline_access": "Stay signed in without asking again"
    }
  }
}

OAuth scope: api:write.

Request body

Required

Configuration for a new MCP server.

object

Configuration for a new MCP server.

12 fields
workspaceIdstringRequired

Workspace in which to register the server.

minLength
1
maxLength
128
namestringRequired

Server display name.

minLength
1
maxLength
255
descriptionstring

Optional server description.

maxLength
2000
transportstring

Transport protocol. Defaults to streamable-http on creation.

default
streamable-http
enum
["streamable-http"]
urlstringRequired

Absolute HTTP or HTTPS endpoint URL without {{ENV_VAR}} references. It determines server identity and is immutable: delete and recreate the server to change endpoints.

minLength
1
maxLength
2048
authTypestring

Authentication method. On creation, omission without headers probes once: an OAuth challenge selects oauth, an unauthenticated success selects none, and other outcomes fall back to headers. An OAuth client ID selects oauth when the method is omitted. Set explicitly to use headers with a server advertising OAuth; adding headers later does not change the saved method.

enum
["none","headers","oauth"]
headersobject

Write-only request headers sent to the server. Replaced wholesale rather than merged on update: sending this field drops every stored header it does not repeat.

writeOnly
true
Schema details
Additional propertiesstring

Header value sent to the MCP server.

timeoutinteger

Per-request timeout in milliseconds. Defaults to 30000 on creation.

default
30000
minimum
1000
maximum
300000
retriesinteger

Number of retries per request. Defaults to 3 on creation.

default
3
minimum
0
maximum
10
enabledboolean

Whether workflows can use the server's tools. Defaults to true on creation.

default
true
oauthClientIdvalue

Pre-registered OAuth client identifier. Changing it on update revokes the stored OAuth grant and forces reauthorization.

Schema details

Any of

Option 1string
maxLength
512
Option 2null
oauthClientSecretvalue

Write-only pre-registered OAuth client secret. Sending it on update as null or a new value revokes the stored OAuth grant and forces reauthorization, as does switching away from OAuth authentication.

writeOnly
true
Schema details

Any of

Option 1string
maxLength
2048
Option 2null

Additional properties are not allowed.

Request example 1

json
{
  "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64",
  "name": "Docs server",
  "url": "https://mcp.example.com/sse",
  "authType": "headers",
  "headers": {
    "Authorization": "Bearer YOUR_TOKEN"
  }
}

Responses

201

The MCP server was registered.

object

The registered MCP server without write-only credentials.

1 field
dataobjectRequired

Response data.

20 fields
idstringRequired

Unique server identifier derived from the workspace and endpoint URL.

namestringRequired

Server display name.

descriptionstring

Optional server description.

transportstringRequired

Transport used to communicate with the server.

default
streamable-http
enum
["streamable-http"]
authTypestring

Authentication method used by the server.

enum
["none","headers","oauth"]
urlstring

Server endpoint URL.

timeoutnumber

Per-request timeout in milliseconds.

retriesnumber

Number of retries attempted per request.

enabledbooleanRequired

Whether the server tools are available to workflows.

connectionStatusstring

Result of the most recent tool connection attempt. New registrations start disconnected; re-registration resets this state only when connection inputs change. Authentication probes do not establish a tool connection. Tool discovery updates this state.

enum
["connected","disconnected","error"]
lastErrorvalue

Message from the most recent failed tool connection, or null when absent. Successful discovery or re-registration with changed connection inputs clears it.

Schema details

Any of

Option 1string
Option 2null
toolCountnumber

Number of tools discovered on the server.

lastToolsRefreshstring

ISO 8601 timestamp of the most recent tool-list refresh.

format
date-time
pattern
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
lastConnectedstring

ISO 8601 timestamp of the most recent successful tool connection. Absent until one succeeds, or after re-registration changes connection inputs.

format
date-time
pattern
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
createdAtstringRequired

ISO 8601 timestamp when the server was registered.

format
date-time
pattern
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
updatedAtstringRequired

ISO 8601 timestamp when the server was last updated.

format
date-time
pattern
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
oauthClientIdstring

Pre-registered OAuth client identifier, when configured.

hasHeadersbooleanRequired

Whether any request headers are configured.

headerNamesarrayRequired

Names of configured request headers. Header values are never returned.

Schema details
Array itemstring

Configured header name.

hasOauthClientSecretbooleanRequired

Whether an OAuth client secret is stored. The value is never returned.

Additional properties are not allowed.

Additional properties are not allowed.

Response example 1

json
{
  "data": {
    "id": "mcp-3f7a9c21",
    "name": "Docs server",
    "description": "Internal documentation tools",
    "transport": "streamable-http",
    "authType": "headers",
    "url": "https://mcp.example.com/sse",
    "timeout": 30000,
    "retries": 3,
    "enabled": true,
    "connectionStatus": "disconnected",
    "lastError": null,
    "toolCount": 0,
    "createdAt": "2026-06-01T09:14:00.000Z",
    "updatedAt": "2026-06-20T14:02:11.000Z",
    "hasHeaders": true,
    "headerNames": [
      "Authorization"
    ],
    "hasOauthClientSecret": false
  }
}

Response headers

X-RateLimit-Limitinteger

Maximum requests allowed in the current window.

minimum
0
maximum
9007199254740991
X-RateLimit-Remaininginteger

Requests remaining in the current window.

minimum
0
maximum
9007199254740991
X-RateLimit-Resetstring

ISO 8601 timestamp when the current rate-limit window resets.

format
date-time
pattern
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Was this helpful?
Suggest an edit