CRUD operations for MCPProxies
POST /mcp-proxies
Code samples
curl -X POST http://localhost:9090/api/management/v0.9/mcp-proxies \
-u {username}:{password} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d @payload.json
Add a new MCPProxy to the Gateway.
Payload
{
"apiVersion": "gateway.api-platform.wso2.com/v1alpha1",
"kind": "Mcp",
"metadata": {
"name": "everything-mcp-v1.0"
},
"spec": {
"displayName": "Everything",
"version": "v1.0",
"context": "/everything",
"specVersion": "2025-06-18",
"upstream": {
"url": "http://everything:3001"
},
"tools": [],
"resources": [],
"prompts": []
}
}Required roles: admin, developer
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | MCPProxyConfigurationRequest | true | none |
Example responses
201 Response
{
"apiVersion": "gateway.api-platform.wso2.com/v1alpha1",
"kind": "Mcp",
"metadata": {
"name": "everything-mcp-v1.0"
},
"spec": {
"displayName": "Everything",
"version": "v1.0",
"context": "/everything",
"specVersion": "2025-06-18",
"upstream": {
"url": "http://everything:3001"
},
"tools": [],
"resources": [],
"prompts": []
},
"status": {
"id": "everything-mcp-v1.0",
"state": "deployed",
"createdAt": "2026-04-24T07:21:13Z",
"updatedAt": "2026-04-24T07:21:13Z",
"deployedAt": "2026-04-24T07:21:13Z"
}
}| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | MCPProxy created successfully | MCPProxyConfiguration |
| 400 | Bad Request | Invalid configuration (validation failed) | ErrorResponse |
| 409 | Conflict | Conflict - MCP Proxy with same name and version already exists | ErrorResponse |
| 500 | Internal Server Error | Internal server error | ErrorResponse |
GET /mcp-proxies
Code samples
curl -X GET http://localhost:9090/api/management/v0.9/mcp-proxies \
-u {username}:{password} \
-H 'Accept: application/json'
List MCPProxies registered in the Gateway, optionally filtered by name, version, context, or status.
This operation requires Basic Auth authentication.Required roles: admin, developer
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| displayName | query | string | false | Filter by MCP proxy display name |
| version | query | string | false | Filter by MCP proxy version |
| context | query | string | false | Filter by MCP proxy context/path |
| status | query | string | false | Filter by deployment status |
| Parameter | Value |
|---|---|
| status | deployed |
| status | undeployed |
Example responses
200 Response
{
"status": "success",
"count": 5,
"mcpProxies": [
{
"apiVersion": "gateway.api-platform.wso2.com/v1alpha1",
"kind": "Mcp",
"metadata": {
"name": "everything-mcp-v1.0"
},
"spec": {
"displayName": "Everything",
"version": "v1.0",
"context": "/everything",
"specVersion": "2025-06-18",
"upstream": {
"url": "http://everything:3001"
},
"tools": [],
"resources": [],
"prompts": []
},
"status": {
"id": "everything-mcp-v1.0",
"state": "deployed",
"createdAt": "2026-04-24T07:21:13Z",
"updatedAt": "2026-04-24T07:21:13Z",
"deployedAt": "2026-04-24T07:21:13Z"
}
}
]
}| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | List of MCPProxies | Inline |
| 500 | Internal Server Error | Internal server error | ErrorResponse |
Status Code 200
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| » status | string | false | none | none |
| » count | integer | false | none | none |
| » mcpProxies | [allOf] | false | none | none |
allOf
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| »» anonymous | MCPProxyConfigurationRequest | false | none | none |
| »»» apiVersion | string | true | none | MCP Proxy specification version |
| »»» kind | string | true | none | MCP Proxy type |
| »»» metadata | Metadata | true | none | none |
| »»»» name | string | true | none | Unique handle for the resource |
| »»»» labels | object | false | none | Labels are key-value pairs for organizing and selecting APIs. Keys must not contain spaces. |
| »»»»» additionalProperties | string | false | none | none |
| »»»» annotations | object | false | none | Annotations are arbitrary non-identifying metadata. Use domain-prefixed keys. |
| »»»»» additionalProperties | string | false | none | none |
| »»» spec | MCPProxyConfigData | true | none | none |
| »»»» displayName | string | true | none | Human-readable MCP Proxy display name |
| »»»» version | string | true | none | MCP Proxy version |
| »»»» context | string | false | none | MCP Proxy context path |
| »»»» specVersion | string | false | none | MCP specification version |
| »»»» vhost | string | false | none | Virtual host name used for routing. Supports standard domain names, subdomains, or wildcard domains. Must follow RFC-compliant hostname rules. Wildcards are only allowed in the left-most label (e.g., *.example.com). |
| »»»» upstream | any | true | none | The backend MCP server url and auth configurations |
allOf
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| »»»»» anonymous | Upstream | false | none | Upstream backend configuration (single target or reference) |
| »»»»»» url | string(uri) | false | none | Direct backend URL to route traffic to |
| »»»»»» ref | string | false | none | Reference to a predefined upstreamDefinition |
| »»»»»» hostRewrite | string | false | none | Controls how the Host header is handled when routing to the upstream. auto delegates host rewriting to Envoy, which rewrites the Host header using the upstream cluster host. manual disables automatic rewriting and expects explicit configuration. |
oneOf
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| »»»»»» anonymous | object | false | none | none |
xor
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| »»»»»» anonymous | object | false | none | none |
and
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| »»»»» anonymous | UpstreamAuth | false | none | none |
| »»»»»» auth | object | false | none | none |
| »»»»»»» type | string | true | none | none |
| »»»»»»» header | string | false | none | none |
| »»»»»»» value | string | false | none | none |
continued
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| »»»» policies | [Policy] | false | none | List of MCP Proxy level policies applied |
| »»»»» name | string | true | none | Name of the policy |
| »»»»» version | string | true | none | Version of the policy. Only major-only version is allowed (e.g., v0, v1). Full semantic version (e.g., v1.0.0) is not accepted and will be rejected. The Gateway Controller resolves the major version to the single matching full version installed in the gateway image. |
| »»»»» executionCondition | string | false | none | Expression controlling conditional execution of the policy |
| »»»»» params | object | false | none | Arbitrary parameters for the policy (free-form key/value structure) |
| »»»» tools | [MCPTool] | false | none | none |
| »»»»» name | string | true | none | Unique identifier for the tool |
| »»»»» title | string | false | none | Optional human-readable name of the tool for display purposes. |
| »»»»» description | string | true | none | Human-readable description of functionality |
| »»»»» inputSchema | string | true | none | JSON Schema defining expected parameters |
| »»»»» outputSchema | string | false | none | Optional JSON Schema defining expected output structure |
| »»»» resources | [MCPResource] | false | none | none |
| »»»»» uri | string | true | none | Unique identifier for the resource |
| »»»»» name | string | true | none | The name of the resource |
| »»»»» title | string | false | none | Optional human-readable name of the resource for display purposes |
| »»»»» description | string | false | none | Optional description |
| »»»»» mimeType | string | false | none | Optional MIME type |
| »»»»» size | integer | false | none | Optional size in bytes |
| »»»» prompts | [MCPPrompt] | false | none | none |
| »»»»» name | string | true | none | Unique identifier for the prompt |
| »»»»» title | string | false | none | Optional human-readable name of the prompt for display purposes |
| »»»»» description | string | false | none | Optional human-readable description |
| »»»»» arguments | [object] | false | none | Optional list of arguments for customization |
| »»»»»» name | string | true | none | Name of the argument |
| »»»»»» description | string | false | none | Description of the argument |
| »»»»»» required | boolean | false | none | Whether the argument is required |
| »»»»»» title | string | false | none | Optional human-readable title of the argument |
| »»»» deploymentState | string | false | none | Desired deployment state - 'deployed' (default) or 'undeployed'. When set to 'undeployed', the MCP Proxy is removed from router traffic but configuration and policies are preserved for potential redeployment. |
and
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| »» anonymous | object | false | none | none |
| »»» status | ResourceStatus | false | read-only | Server-managed lifecycle fields. Populated on responses. |
| »»»» id | string | false | none | Unique identifier assigned by the server (equal to metadata.name) |
| »»»» state | string | false | none | Desired deployment state reported by the server |
| »»»» createdAt | string(date-time) | false | none | Timestamp when the resource was first created (UTC) |
| »»»» updatedAt | string(date-time) | false | none | Timestamp when the resource was last updated (UTC) |
| »»»» deployedAt | string(date-time) | false | none | Timestamp when the resource was last deployed (omitted when undeployed) |
| Property | Value |
|---|---|
| apiVersion | gateway.api-platform.wso2.com/v1alpha1 |
| kind | Mcp |
| hostRewrite | auto |
| hostRewrite | manual |
| type | api-key |
| deploymentState | deployed |
| deploymentState | undeployed |
| state | deployed |
| state | undeployed |
GET /mcp-proxies/{id}
Code samples
curl -X GET http://localhost:9090/api/management/v0.9/mcp-proxies/{id} \
-u {username}:{password} \
-H 'Accept: application/json'
Get an MCPProxy by its ID.
This operation requires Basic Auth authentication.Required roles: admin, developer
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | true | Unique public identifier of the MCP Proxy. |
id: Unique public identifier of the MCP Proxy.
Example responses
200 Response
{
"apiVersion": "gateway.api-platform.wso2.com/v1alpha1",
"kind": "Mcp",
"metadata": {
"name": "everything-mcp-v1.0"
},
"spec": {
"displayName": "Everything",
"version": "v1.0",
"context": "/everything",
"specVersion": "2025-06-18",
"upstream": {
"url": "http://everything:3001"
},
"tools": [],
"resources": [],
"prompts": []
},
"status": {
"id": "everything-mcp-v1.0",
"state": "deployed",
"createdAt": "2026-04-24T07:21:13Z",
"updatedAt": "2026-04-24T07:21:13Z",
"deployedAt": "2026-04-24T07:21:13Z"
}
}| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | MCPProxy details | MCPProxyConfiguration |
| 404 | Not Found | MCPProxy not found | ErrorResponse |
| 500 | Internal Server Error | Internal server error | ErrorResponse |
PUT /mcp-proxies/{id}
Code samples
curl -X PUT http://localhost:9090/api/management/v0.9/mcp-proxies/{id} \
-u {username}:{password} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d @payload.json
Update an existing MCPProxy in the Gateway.
Payload
{
"apiVersion": "gateway.api-platform.wso2.com/v1alpha1",
"kind": "Mcp",
"metadata": {
"name": "everything-mcp-v1.0"
},
"spec": {
"displayName": "Everything",
"version": "v1.0",
"context": "/everything",
"specVersion": "2025-06-18",
"upstream": {
"url": "http://everything:3001"
},
"tools": [],
"resources": [],
"prompts": []
}
}Required roles: admin, developer
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | true | Unique public identifier of the MCP Proxy to update. |
| body | body | MCPProxyConfigurationRequest | true | none |
id: Unique public identifier of the MCP Proxy to update.
Example responses
200 Response
{
"apiVersion": "gateway.api-platform.wso2.com/v1alpha1",
"kind": "Mcp",
"metadata": {
"name": "everything-mcp-v1.0"
},
"spec": {
"displayName": "Everything",
"version": "v1.0",
"context": "/everything",
"specVersion": "2025-06-18",
"upstream": {
"url": "http://everything:3001"
},
"tools": [],
"resources": [],
"prompts": []
},
"status": {
"id": "everything-mcp-v1.0",
"state": "deployed",
"createdAt": "2026-04-24T07:21:13Z",
"updatedAt": "2026-04-24T07:21:13Z",
"deployedAt": "2026-04-24T07:21:13Z"
}
}| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | MCPProxy updated successfully | MCPProxyConfiguration |
| 400 | Bad Request | Invalid configuration (validation failed) | ErrorResponse |
| 404 | Not Found | MCPProxy not found | ErrorResponse |
| 500 | Internal Server Error | Internal server error | ErrorResponse |
DELETE /mcp-proxies/{id}
Code samples
curl -X DELETE http://localhost:9090/api/management/v0.9/mcp-proxies/{id} \
-u {username}:{password} \
-H 'Accept: application/json'
Delete an MCPProxy from the Gateway.
This operation requires Basic Auth authentication.Required roles: admin, developer
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | true | Unique public identifier of the MCP Proxy to delete. |
id: Unique public identifier of the MCP Proxy to delete.
Example responses
200 Response
{
"status": "success",
"message": "MCPProxy deleted successfully",
"id": "everything-mcp-v1.0"
}| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | MCPProxy deleted successfully | Inline |
| 404 | Not Found | MCPProxy not found | ErrorResponse |
| 500 | Internal Server Error | Internal server error | ErrorResponse |
Status Code 200
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| » status | string | false | none | none |
| » message | string | false | none | none |
| » id | string | false | none | none |