Skip to content

Commit 09ae873

Browse files
author
Lasim
committed
feat(backend): implement admin team update route with validation and response schemas
1 parent abafe4e commit 09ae873

File tree

13 files changed

+5116
-1
lines changed

13 files changed

+5116
-1
lines changed

services/backend/api-spec.json

Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27365,6 +27365,270 @@
2736527365
}
2736627366
}
2736727367
},
27368+
"/api/admin/teams/{id}": {
27369+
"put": {
27370+
"summary": "Update team (Global Admin)",
27371+
"tags": [
27372+
"Admin - Teams"
27373+
],
27374+
"description": "Allows global administrators to update any team's name, description, and non-HTTP MCP server limit.",
27375+
"requestBody": {
27376+
"content": {
27377+
"application/json": {
27378+
"schema": {
27379+
"type": "object",
27380+
"properties": {
27381+
"name": {
27382+
"type": "string",
27383+
"minLength": 1,
27384+
"maxLength": 100,
27385+
"description": "Team name (1-100 characters)"
27386+
},
27387+
"description": {
27388+
"type": "string",
27389+
"maxLength": 500,
27390+
"nullable": true,
27391+
"description": "Team description (max 500 characters, optional)"
27392+
},
27393+
"non_http_mcp_limit": {
27394+
"type": "integer",
27395+
"minimum": 0,
27396+
"description": "Maximum number of non-HTTP (stdio) MCP servers the team can install"
27397+
}
27398+
},
27399+
"additionalProperties": false
27400+
}
27401+
}
27402+
}
27403+
},
27404+
"parameters": [
27405+
{
27406+
"schema": {
27407+
"type": "string"
27408+
},
27409+
"in": "path",
27410+
"name": "id",
27411+
"required": true,
27412+
"description": "Team ID"
27413+
}
27414+
],
27415+
"security": [
27416+
{
27417+
"cookieAuth": []
27418+
}
27419+
],
27420+
"responses": {
27421+
"200": {
27422+
"description": "Team updated successfully",
27423+
"content": {
27424+
"application/json": {
27425+
"schema": {
27426+
"type": "object",
27427+
"properties": {
27428+
"success": {
27429+
"type": "boolean",
27430+
"description": "Indicates operation success"
27431+
},
27432+
"message": {
27433+
"type": "string",
27434+
"description": "Success message"
27435+
},
27436+
"data": {
27437+
"type": "object",
27438+
"properties": {
27439+
"id": {
27440+
"type": "string",
27441+
"description": "Team unique identifier"
27442+
},
27443+
"name": {
27444+
"type": "string",
27445+
"description": "Team name"
27446+
},
27447+
"slug": {
27448+
"type": "string",
27449+
"description": "Team URL slug"
27450+
},
27451+
"description": {
27452+
"type": "string",
27453+
"nullable": true,
27454+
"description": "Team description"
27455+
},
27456+
"owner_id": {
27457+
"type": "string",
27458+
"description": "Team owner user ID"
27459+
},
27460+
"is_default": {
27461+
"type": "boolean",
27462+
"description": "Whether this is the default team"
27463+
},
27464+
"non_http_mcp_limit": {
27465+
"type": "integer",
27466+
"description": "Non-HTTP MCP server limit"
27467+
},
27468+
"created_at": {
27469+
"type": "string",
27470+
"description": "ISO8601 timestamp"
27471+
},
27472+
"updated_at": {
27473+
"type": "string",
27474+
"description": "ISO8601 timestamp"
27475+
}
27476+
},
27477+
"required": [
27478+
"id",
27479+
"name",
27480+
"slug",
27481+
"owner_id",
27482+
"is_default",
27483+
"non_http_mcp_limit",
27484+
"created_at",
27485+
"updated_at"
27486+
]
27487+
}
27488+
},
27489+
"required": [
27490+
"success",
27491+
"message",
27492+
"data"
27493+
],
27494+
"description": "Team updated successfully"
27495+
}
27496+
}
27497+
}
27498+
},
27499+
"400": {
27500+
"description": "Bad Request - Invalid input",
27501+
"content": {
27502+
"application/json": {
27503+
"schema": {
27504+
"type": "object",
27505+
"properties": {
27506+
"success": {
27507+
"type": "boolean",
27508+
"default": false,
27509+
"description": "Indicates operation failure"
27510+
},
27511+
"error": {
27512+
"type": "string",
27513+
"description": "Error message"
27514+
}
27515+
},
27516+
"required": [
27517+
"success",
27518+
"error"
27519+
],
27520+
"description": "Bad Request - Invalid input"
27521+
}
27522+
}
27523+
}
27524+
},
27525+
"401": {
27526+
"description": "Unauthorized",
27527+
"content": {
27528+
"application/json": {
27529+
"schema": {
27530+
"type": "object",
27531+
"properties": {
27532+
"success": {
27533+
"type": "boolean",
27534+
"default": false,
27535+
"description": "Indicates operation failure"
27536+
},
27537+
"error": {
27538+
"type": "string",
27539+
"description": "Error message"
27540+
}
27541+
},
27542+
"required": [
27543+
"success",
27544+
"error"
27545+
],
27546+
"description": "Unauthorized"
27547+
}
27548+
}
27549+
}
27550+
},
27551+
"403": {
27552+
"description": "Forbidden - Global admin required",
27553+
"content": {
27554+
"application/json": {
27555+
"schema": {
27556+
"type": "object",
27557+
"properties": {
27558+
"success": {
27559+
"type": "boolean",
27560+
"default": false,
27561+
"description": "Indicates operation failure"
27562+
},
27563+
"error": {
27564+
"type": "string",
27565+
"description": "Error message"
27566+
}
27567+
},
27568+
"required": [
27569+
"success",
27570+
"error"
27571+
],
27572+
"description": "Forbidden - Global admin required"
27573+
}
27574+
}
27575+
}
27576+
},
27577+
"404": {
27578+
"description": "Team not found",
27579+
"content": {
27580+
"application/json": {
27581+
"schema": {
27582+
"type": "object",
27583+
"properties": {
27584+
"success": {
27585+
"type": "boolean",
27586+
"default": false,
27587+
"description": "Indicates operation failure"
27588+
},
27589+
"error": {
27590+
"type": "string",
27591+
"description": "Error message"
27592+
}
27593+
},
27594+
"required": [
27595+
"success",
27596+
"error"
27597+
],
27598+
"description": "Team not found"
27599+
}
27600+
}
27601+
}
27602+
},
27603+
"500": {
27604+
"description": "Internal Server Error",
27605+
"content": {
27606+
"application/json": {
27607+
"schema": {
27608+
"type": "object",
27609+
"properties": {
27610+
"success": {
27611+
"type": "boolean",
27612+
"default": false,
27613+
"description": "Indicates operation failure"
27614+
},
27615+
"error": {
27616+
"type": "string",
27617+
"description": "Error message"
27618+
}
27619+
},
27620+
"required": [
27621+
"success",
27622+
"error"
27623+
],
27624+
"description": "Internal Server Error"
27625+
}
27626+
}
27627+
}
27628+
}
27629+
}
27630+
}
27631+
},
2736827632
"/api/gateway/me/mcp-configurations": {
2736927633
"get": {
2737027634
"summary": "Get merged MCP configurations for gateway",

0 commit comments

Comments
 (0)