- AI Workspace
- 1.0.0
- References
- Platform API
MCP Proxies¶
MCP proxy management operations
Create a new MCP proxy¶
POST /mcp-proxies
Code samples
curl -X POST https://localhost:9243/api/v0.9/mcp-proxies \
-H 'Authorization: Bearer {access_token}' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d @payload.json
Deploy a new MCP proxy configuration.
Payload
{
"id": "weather-mcp-proxy",
"displayName": "Weather Server",
"description": "An MCP server which provides weather information",
"version": "v1.0",
"projectId": "default-project",
"context": "/",
"vhost": "mcp.gw.com",
"upstream": {
"main": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
},
"sandbox": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
}
},
"mcpSpecVersion": "2025-06-18",
"policies": [
{
"executionCondition": "request.header.x-custom == 'enabled'",
"name": "SET_HEADER",
"params": {
"key": "MyHeader",
"value": "MyValue"
},
"version": "v1"
}
],
"kind": "Mcp",
"capabilities": {
"tools": [
{}
],
"resources": [
{}
],
"prompts": [
{}
]
},
"associatedGateways": [
{
"id": "prod-eu"
},
{
"id": "prod-us"
}
]
}
Authentication¶
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | MCPProxy | true | none |
Example responses
201 Response
{
"id": "weather-mcp-proxy",
"displayName": "Weather Server",
"description": "An MCP server which provides weather information",
"createdBy": "john.doe",
"readOnly": false,
"updatedBy": "john.doe",
"version": "v1.0",
"projectId": "default-project",
"context": "/",
"vhost": "mcp.gw.com",
"upstream": {
"main": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
},
"sandbox": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
}
},
"mcpSpecVersion": "2025-06-18",
"policies": [
{
"executionCondition": "request.header.x-custom == 'enabled'",
"name": "SET_HEADER",
"params": {
"key": "MyHeader",
"value": "MyValue"
},
"version": "v1"
}
],
"kind": "Mcp",
"capabilities": {
"tools": [
{}
],
"resources": [
{}
],
"prompts": [
{}
]
},
"associatedGateways": [
{
"id": "prod-eu"
},
{
"id": "prod-us"
}
],
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
400 Response
{
"status": "error",
"code": "VALIDATION_FAILED",
"message": "The request failed validation.",
"errors": [
{
"field": "<name of the offending field>",
"message": "<reason this field failed validation>"
}
]
}
401 Response
{
"status": "error",
"code": "UNAUTHORIZED",
"message": "Authorization header is required, or the token is invalid or expired."
}
403 Response
{
"status": "error",
"code": "FORBIDDEN",
"message": "You do not have permission to perform this action."
}
409 Response
{
"status": "error",
"code": "CONFLICT",
"message": "The request conflicts with the current state of the resource."
}
500 Response
{
"status": "error",
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred.",
"trackingId": "4f1c6f2e-8a4b-4c93-b1de-9f2f6f0c2a11"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | MCP proxy created successfully | MCPProxy |
| 400 | Bad Request | Bad Request. Invalid request or validation error. | Error |
| 401 | Unauthorized | Unauthorized. Authentication credentials are missing or invalid. | Error |
| 403 | Forbidden | Forbidden. The authenticated user does not have permission to access this resource. | Error |
| 409 | Conflict | Conflict. The request conflicts with the current state of the resource. | Error |
| 500 | Internal Server Error | Internal Server Error. | Error |
Response Headers¶
| Status | Header | Type | Format | Description |
|---|---|---|---|---|
| 201 | Location | string | uri | URL of the newly created resource. |
List all MCP proxies¶
GET /mcp-proxies
Code samples
curl -X GET https://localhost:9243/api/v0.9/mcp-proxies?projectId=default-project \
-H 'Authorization: Bearer {access_token}' \
-H 'Accept: application/json'
Retrieve a list of all MCP proxies for a project. Requires the projectId query parameter.
Authentication¶
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| projectId | query | string | true | Project ID consisting of the handle (unique slug identifier) of the Project whose resources should be returned. |
| limit | query | integer | false | Maximum number of items to return per page. |
| offset | query | integer | false | Zero-based index of the first item to return. |
Detailed descriptions
projectId: Project ID consisting of the handle (unique slug identifier) of the Project whose resources should be returned.
Example responses
200 Response
{
"count": 2,
"list": [
{
"id": "weather-mcp-proxy",
"displayName": "Weather Server",
"description": "An MCP server which provides weather information",
"createdBy": "john.doe",
"context": "/weather-mcp-proxy",
"version": "v1.0",
"projectId": "default-project",
"status": "deployed",
"mcpSpecVersion": "2025-11-25",
"createdAt": "2025-11-25T10:30:00Z",
"updatedAt": "2025-11-25T10:30:00Z",
"readOnly": false
}
],
"pagination": {
"total": 10,
"offset": 0,
"limit": 10
}
}
401 Response
{
"status": "error",
"code": "UNAUTHORIZED",
"message": "Authorization header is required, or the token is invalid or expired."
}
500 Response
{
"status": "error",
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred.",
"trackingId": "4f1c6f2e-8a4b-4c93-b1de-9f2f6f0c2a11"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | List of MCP proxies | MCPProxyListResponse |
| 401 | Unauthorized | Unauthorized. Authentication credentials are missing or invalid. | Error |
| 500 | Internal Server Error | Internal Server Error. | Error |
Get MCP proxy by unique identifier¶
GET /mcp-proxies/{mcpProxyId}
Code samples
curl -X GET https://localhost:9243/api/v0.9/mcp-proxies/{mcpProxyId} \
-H 'Authorization: Bearer {access_token}' \
-H 'Accept: application/json'
Retrieve the complete configuration for a specific MCP proxy.
Authentication¶
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| mcpProxyId | path | string | true | Unique identifier of the MCP proxy |
Example responses
200 Response
{
"id": "weather-mcp-proxy",
"displayName": "Weather Server",
"description": "An MCP server which provides weather information",
"createdBy": "john.doe",
"readOnly": false,
"updatedBy": "john.doe",
"version": "v1.0",
"projectId": "default-project",
"context": "/",
"vhost": "mcp.gw.com",
"upstream": {
"main": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
},
"sandbox": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
}
},
"mcpSpecVersion": "2025-06-18",
"policies": [
{
"executionCondition": "request.header.x-custom == 'enabled'",
"name": "SET_HEADER",
"params": {
"key": "MyHeader",
"value": "MyValue"
},
"version": "v1"
}
],
"kind": "Mcp",
"capabilities": {
"tools": [
{}
],
"resources": [
{}
],
"prompts": [
{}
]
},
"associatedGateways": [
{
"id": "prod-eu"
},
{
"id": "prod-us"
}
],
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
401 Response
{
"status": "error",
"code": "UNAUTHORIZED",
"message": "Authorization header is required, or the token is invalid or expired."
}
404 Response
500 Response
{
"status": "error",
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred.",
"trackingId": "4f1c6f2e-8a4b-4c93-b1de-9f2f6f0c2a11"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | MCP proxy details | MCPProxy |
| 401 | Unauthorized | Unauthorized. Authentication credentials are missing or invalid. | Error |
| 404 | Not Found | Not Found. The specified resource does not exist. | Error |
| 500 | Internal Server Error | Internal Server Error. | Error |
Update an existing MCP proxy¶
PUT /mcp-proxies/{mcpProxyId}
Code samples
curl -X PUT https://localhost:9243/api/v0.9/mcp-proxies/{mcpProxyId} \
-H 'Authorization: Bearer {access_token}' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d @payload.json
Update the configuration of an existing MCP proxy.
Payload
{
"id": "weather-mcp-proxy",
"displayName": "Weather Server",
"description": "An MCP server which provides weather information",
"version": "v1.0",
"projectId": "default-project",
"context": "/",
"vhost": "mcp.gw.com",
"upstream": {
"main": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
},
"sandbox": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
}
},
"mcpSpecVersion": "2025-06-18",
"policies": [
{
"executionCondition": "request.header.x-custom == 'enabled'",
"name": "SET_HEADER",
"params": {
"key": "MyHeader",
"value": "MyValue"
},
"version": "v1"
}
],
"kind": "Mcp",
"capabilities": {
"tools": [
{}
],
"resources": [
{}
],
"prompts": [
{}
]
},
"associatedGateways": [
{
"id": "prod-eu"
},
{
"id": "prod-us"
}
]
}
Authentication¶
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| mcpProxyId | path | string | true | Unique identifier of the MCP proxy |
| body | body | MCPProxy | true | none |
Example responses
200 Response
{
"id": "weather-mcp-proxy",
"displayName": "Weather Server",
"description": "An MCP server which provides weather information",
"createdBy": "john.doe",
"readOnly": false,
"updatedBy": "john.doe",
"version": "v1.0",
"projectId": "default-project",
"context": "/",
"vhost": "mcp.gw.com",
"upstream": {
"main": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
},
"sandbox": {
"url": "http://prod-backend:5000/api/v2",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
}
},
"mcpSpecVersion": "2025-06-18",
"policies": [
{
"executionCondition": "request.header.x-custom == 'enabled'",
"name": "SET_HEADER",
"params": {
"key": "MyHeader",
"value": "MyValue"
},
"version": "v1"
}
],
"kind": "Mcp",
"capabilities": {
"tools": [
{}
],
"resources": [
{}
],
"prompts": [
{}
]
},
"associatedGateways": [
{
"id": "prod-eu"
},
{
"id": "prod-us"
}
],
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
400 Response
{
"status": "error",
"code": "VALIDATION_FAILED",
"message": "The request failed validation.",
"errors": [
{
"field": "<name of the offending field>",
"message": "<reason this field failed validation>"
}
]
}
401 Response
{
"status": "error",
"code": "UNAUTHORIZED",
"message": "Authorization header is required, or the token is invalid or expired."
}
403 Response
{
"status": "error",
"code": "FORBIDDEN",
"message": "You do not have permission to perform this action."
}
404 Response
500 Response
{
"status": "error",
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred.",
"trackingId": "4f1c6f2e-8a4b-4c93-b1de-9f2f6f0c2a11"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | MCP proxy updated successfully | MCPProxy |
| 400 | Bad Request | Bad Request. Invalid request or validation error. | Error |
| 401 | Unauthorized | Unauthorized. Authentication credentials are missing or invalid. | Error |
| 403 | Forbidden | Forbidden. The authenticated user does not have permission to access this resource. | Error |
| 404 | Not Found | Not Found. The specified resource does not exist. | Error |
| 500 | Internal Server Error | Internal Server Error. | Error |
Delete an MCP proxy¶
DELETE /mcp-proxies/{mcpProxyId}
Code samples
curl -X DELETE https://localhost:9243/api/v0.9/mcp-proxies/{mcpProxyId} \
-H 'Authorization: Bearer {access_token}' \
-H 'Accept: application/json'
Remove an MCP proxy.
Authentication¶
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| mcpProxyId | path | string | true | Unique identifier of the MCP proxy |
Example responses
400 Response
{
"status": "error",
"code": "VALIDATION_FAILED",
"message": "The request failed validation.",
"errors": [
{
"field": "<name of the offending field>",
"message": "<reason this field failed validation>"
}
]
}
401 Response
{
"status": "error",
"code": "UNAUTHORIZED",
"message": "Authorization header is required, or the token is invalid or expired."
}
403 Response
{
"status": "error",
"code": "FORBIDDEN",
"message": "You do not have permission to perform this action."
}
404 Response
500 Response
{
"status": "error",
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred.",
"trackingId": "4f1c6f2e-8a4b-4c93-b1de-9f2f6f0c2a11"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 204 | No Content | MCP proxy deleted successfully | None |
| 400 | Bad Request | Bad Request. Invalid request or validation error. | Error |
| 401 | Unauthorized | Unauthorized. Authentication credentials are missing or invalid. | Error |
| 403 | Forbidden | Forbidden. The authenticated user does not have permission to access this resource. | Error |
| 404 | Not Found | Not Found. The specified resource does not exist. | Error |
| 500 | Internal Server Error | Internal Server Error. | Error |
Fetch server info from MCP proxy backend services¶
POST /mcp-proxies/fetch-server-info
Code samples
curl -X POST https://localhost:9243/api/v0.9/mcp-proxies/fetch-server-info \
-H 'Authorization: Bearer {access_token}' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d @payload.json
Fetches server information from the backend services of an MCP proxy. This is used to validate connectivity and retrieve metadata about the backend services.
Payload
{
"url": "https://mcp.server.com/mcp",
"proxyId": "my-mcp-proxy",
"auth": {
"type": "api-key",
"header": "X-API-Key",
"value": "my-api-key-value"
}
}
Authentication¶
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | MCPServerInfoFetchRequest | true | Target MCP server to introspect — either a direct url (with optional auth), or a proxyId to refetch using a stored proxy configuration. |
Example responses
200 Response
400 Response
{
"status": "error",
"code": "VALIDATION_FAILED",
"message": "The request failed validation.",
"errors": [
{
"field": "<name of the offending field>",
"message": "<reason this field failed validation>"
}
]
}
401 Response
{
"status": "error",
"code": "UNAUTHORIZED",
"message": "Authorization header is required, or the token is invalid or expired."
}
404 Response
500 Response
{
"status": "error",
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred.",
"trackingId": "4f1c6f2e-8a4b-4c93-b1de-9f2f6f0c2a11"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Server info retrieved successfully | MCPServerInfoFetchResponse |
| 400 | Bad Request | Bad Request. Invalid request or validation error. | Error |
| 401 | Unauthorized | Unauthorized. Authentication credentials are missing or invalid. | Error |
| 404 | Not Found | Not Found. The specified resource does not exist. | Error |
| 500 | Internal Server Error | Internal Server Error. | Error |