Skip to content

Commit 765b455

Browse files
committed
feat(backend): add endpoint to retrieve team MCP installations with pagination for global_admin
1 parent e4ce931 commit 765b455

File tree

5 files changed

+696
-0
lines changed

5 files changed

+696
-0
lines changed

services/backend/api-spec.json

Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35336,6 +35336,285 @@
3533635336
}
3533735337
}
3533835338
},
35339+
"/api/admin/teams/{id}/mcp/installations": {
35340+
"get": {
35341+
"summary": "Get team MCP installations (Global Admin)",
35342+
"tags": [
35343+
"Admin - Teams"
35344+
],
35345+
"description": "Allows global administrators to view all MCP server installations for a specific team with pagination.",
35346+
"parameters": [
35347+
{
35348+
"schema": {
35349+
"type": "string",
35350+
"pattern": "^\\d+$"
35351+
},
35352+
"in": "query",
35353+
"name": "limit",
35354+
"required": false,
35355+
"description": "Maximum number of items to return (1-100, default: 20)"
35356+
},
35357+
{
35358+
"schema": {
35359+
"type": "string",
35360+
"pattern": "^\\d+$"
35361+
},
35362+
"in": "query",
35363+
"name": "offset",
35364+
"required": false,
35365+
"description": "Number of items to skip (≥0, default: 0)"
35366+
},
35367+
{
35368+
"schema": {
35369+
"type": "string"
35370+
},
35371+
"in": "path",
35372+
"name": "id",
35373+
"required": true,
35374+
"description": "Team ID"
35375+
}
35376+
],
35377+
"security": [
35378+
{
35379+
"cookieAuth": []
35380+
}
35381+
],
35382+
"responses": {
35383+
"200": {
35384+
"description": "Paginated list of MCP installations for the team",
35385+
"content": {
35386+
"application/json": {
35387+
"schema": {
35388+
"type": "object",
35389+
"properties": {
35390+
"success": {
35391+
"type": "boolean",
35392+
"description": "Indicates operation success"
35393+
},
35394+
"data": {
35395+
"type": "object",
35396+
"properties": {
35397+
"installations": {
35398+
"type": "array",
35399+
"items": {
35400+
"type": "object",
35401+
"properties": {
35402+
"id": {
35403+
"type": "string",
35404+
"description": "Installation unique identifier"
35405+
},
35406+
"installation_name": {
35407+
"type": "string",
35408+
"description": "User-defined installation name"
35409+
},
35410+
"server_name": {
35411+
"type": "string",
35412+
"description": "MCP server name"
35413+
},
35414+
"server_slug": {
35415+
"type": "string",
35416+
"description": "MCP server slug"
35417+
},
35418+
"status": {
35419+
"type": "string",
35420+
"description": "Installation status (provisioning|online|offline|error|...)"
35421+
},
35422+
"created_at": {
35423+
"type": "string",
35424+
"description": "ISO8601 timestamp"
35425+
},
35426+
"last_used_at": {
35427+
"type": "string",
35428+
"nullable": true,
35429+
"description": "ISO8601 timestamp or null"
35430+
}
35431+
},
35432+
"required": [
35433+
"id",
35434+
"installation_name",
35435+
"server_name",
35436+
"server_slug",
35437+
"status",
35438+
"created_at"
35439+
]
35440+
}
35441+
},
35442+
"pagination": {
35443+
"type": "object",
35444+
"properties": {
35445+
"total": {
35446+
"type": "number",
35447+
"description": "Total number of teams"
35448+
},
35449+
"limit": {
35450+
"type": "number",
35451+
"description": "Number of teams per page"
35452+
},
35453+
"offset": {
35454+
"type": "number",
35455+
"description": "Number of teams skipped"
35456+
},
35457+
"has_more": {
35458+
"type": "boolean",
35459+
"description": "Whether there are more teams beyond this page"
35460+
}
35461+
},
35462+
"required": [
35463+
"total",
35464+
"limit",
35465+
"offset",
35466+
"has_more"
35467+
]
35468+
}
35469+
},
35470+
"required": [
35471+
"installations",
35472+
"pagination"
35473+
]
35474+
}
35475+
},
35476+
"required": [
35477+
"success",
35478+
"data"
35479+
],
35480+
"description": "Paginated list of MCP installations for the team"
35481+
}
35482+
}
35483+
}
35484+
},
35485+
"400": {
35486+
"description": "Bad Request - Invalid pagination parameters",
35487+
"content": {
35488+
"application/json": {
35489+
"schema": {
35490+
"type": "object",
35491+
"properties": {
35492+
"success": {
35493+
"type": "boolean",
35494+
"default": false,
35495+
"description": "Indicates operation failure"
35496+
},
35497+
"error": {
35498+
"type": "string",
35499+
"description": "Error message"
35500+
}
35501+
},
35502+
"required": [
35503+
"success",
35504+
"error"
35505+
],
35506+
"description": "Bad Request - Invalid pagination parameters"
35507+
}
35508+
}
35509+
}
35510+
},
35511+
"401": {
35512+
"description": "Unauthorized",
35513+
"content": {
35514+
"application/json": {
35515+
"schema": {
35516+
"type": "object",
35517+
"properties": {
35518+
"success": {
35519+
"type": "boolean",
35520+
"default": false,
35521+
"description": "Indicates operation failure"
35522+
},
35523+
"error": {
35524+
"type": "string",
35525+
"description": "Error message"
35526+
}
35527+
},
35528+
"required": [
35529+
"success",
35530+
"error"
35531+
],
35532+
"description": "Unauthorized"
35533+
}
35534+
}
35535+
}
35536+
},
35537+
"403": {
35538+
"description": "Forbidden - Global admin required",
35539+
"content": {
35540+
"application/json": {
35541+
"schema": {
35542+
"type": "object",
35543+
"properties": {
35544+
"success": {
35545+
"type": "boolean",
35546+
"default": false,
35547+
"description": "Indicates operation failure"
35548+
},
35549+
"error": {
35550+
"type": "string",
35551+
"description": "Error message"
35552+
}
35553+
},
35554+
"required": [
35555+
"success",
35556+
"error"
35557+
],
35558+
"description": "Forbidden - Global admin required"
35559+
}
35560+
}
35561+
}
35562+
},
35563+
"404": {
35564+
"description": "Team not found",
35565+
"content": {
35566+
"application/json": {
35567+
"schema": {
35568+
"type": "object",
35569+
"properties": {
35570+
"success": {
35571+
"type": "boolean",
35572+
"default": false,
35573+
"description": "Indicates operation failure"
35574+
},
35575+
"error": {
35576+
"type": "string",
35577+
"description": "Error message"
35578+
}
35579+
},
35580+
"required": [
35581+
"success",
35582+
"error"
35583+
],
35584+
"description": "Team not found"
35585+
}
35586+
}
35587+
}
35588+
},
35589+
"500": {
35590+
"description": "Internal Server Error",
35591+
"content": {
35592+
"application/json": {
35593+
"schema": {
35594+
"type": "object",
35595+
"properties": {
35596+
"success": {
35597+
"type": "boolean",
35598+
"default": false,
35599+
"description": "Indicates operation failure"
35600+
},
35601+
"error": {
35602+
"type": "string",
35603+
"description": "Error message"
35604+
}
35605+
},
35606+
"required": [
35607+
"success",
35608+
"error"
35609+
],
35610+
"description": "Internal Server Error"
35611+
}
35612+
}
35613+
}
35614+
}
35615+
}
35616+
}
35617+
},
3533935618
"/api/admin/oauth-providers": {
3534035619
"get": {
3534135620
"summary": "List all OAuth providers (Global Admin)",

0 commit comments

Comments
 (0)