Skip to content

Commit d1e0420

Browse files
committed
feat(all): enhance admin features with MCP catalog installations and team statistics
- Add MCP server catalog detail page with installations tab - Implement server catalog detail header component - Refactor server fetching logic into reusable composable - Add backend endpoints for team search and MCP installations lookup - Enhance user/team statistics with member and MCP server counts - Update admin team and user views with new metrics display
1 parent 915381c commit d1e0420

File tree

30 files changed

+1432
-1377
lines changed

30 files changed

+1432
-1377
lines changed

services/backend/api-spec.json

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35076,6 +35076,14 @@
3507635076
"type": "boolean",
3507735077
"description": "Allow remote MCP servers"
3507835078
},
35079+
"mcp_servers_count": {
35080+
"type": "integer",
35081+
"description": "Number of MCP servers installed in this team"
35082+
},
35083+
"members_count": {
35084+
"type": "integer",
35085+
"description": "Number of members in this team"
35086+
},
3507935087
"created_at": {
3508035088
"type": "string",
3508135089
"description": "ISO8601 timestamp"
@@ -35095,6 +35103,8 @@
3509535103
"mcp_server_limit",
3509635104
"member_limit",
3509735105
"allow_remote_mcp",
35106+
"mcp_servers_count",
35107+
"members_count",
3509835108
"created_at",
3509935109
"updated_at"
3510035110
]
@@ -35354,6 +35364,14 @@
3535435364
"type": "boolean",
3535535365
"description": "Allow remote MCP servers"
3535635366
},
35367+
"mcp_servers_count": {
35368+
"type": "integer",
35369+
"description": "Number of MCP servers installed in this team"
35370+
},
35371+
"members_count": {
35372+
"type": "integer",
35373+
"description": "Number of members in this team"
35374+
},
3535735375
"created_at": {
3535835376
"type": "string",
3535935377
"description": "ISO8601 timestamp"
@@ -35373,6 +35391,8 @@
3537335391
"mcp_server_limit",
3537435392
"member_limit",
3537535393
"allow_remote_mcp",
35394+
"mcp_servers_count",
35395+
"members_count",
3537635396
"created_at",
3537735397
"updated_at"
3537835398
]
@@ -35611,6 +35631,14 @@
3561135631
"type": "boolean",
3561235632
"description": "Allow remote MCP servers"
3561335633
},
35634+
"mcp_servers_count": {
35635+
"type": "integer",
35636+
"description": "Number of MCP servers installed in this team"
35637+
},
35638+
"members_count": {
35639+
"type": "integer",
35640+
"description": "Number of members in this team"
35641+
},
3561435642
"created_at": {
3561535643
"type": "string",
3561635644
"description": "ISO8601 timestamp"
@@ -35630,6 +35658,8 @@
3563035658
"mcp_server_limit",
3563135659
"member_limit",
3563235660
"allow_remote_mcp",
35661+
"mcp_servers_count",
35662+
"members_count",
3563335663
"created_at",
3563435664
"updated_at"
3563535665
]
@@ -35876,6 +35906,14 @@
3587635906
"type": "boolean",
3587735907
"description": "Allow remote MCP servers"
3587835908
},
35909+
"mcp_servers_count": {
35910+
"type": "integer",
35911+
"description": "Number of MCP servers installed in this team"
35912+
},
35913+
"members_count": {
35914+
"type": "integer",
35915+
"description": "Number of members in this team"
35916+
},
3587935917
"created_at": {
3588035918
"type": "string",
3588135919
"description": "ISO8601 timestamp"
@@ -35895,6 +35933,8 @@
3589535933
"mcp_server_limit",
3589635934
"member_limit",
3589735935
"allow_remote_mcp",
35936+
"mcp_servers_count",
35937+
"members_count",
3589835938
"created_at",
3589935939
"updated_at"
3590035940
]
@@ -36976,7 +37016,7 @@
3697637016
"tags": [
3697737017
"Admin - Users"
3697837018
],
36979-
"description": "Allows global administrators to retrieve user statistics including count by role.",
37019+
"description": "Allows global administrators to retrieve comprehensive user and team statistics including counts by role, authentication type, and team types.",
3698037020
"security": [
3698137021
{
3698237022
"cookieAuth": []
@@ -36997,6 +37037,55 @@
3699737037
"data": {
3699837038
"type": "object",
3699937039
"properties": {
37040+
"user_statistics": {
37041+
"type": "object",
37042+
"properties": {
37043+
"total_users": {
37044+
"type": "number",
37045+
"description": "Total number of users"
37046+
},
37047+
"users_by_auth_type": {
37048+
"type": "object",
37049+
"properties": {
37050+
"email": {
37051+
"type": "number",
37052+
"description": "Users registered via email"
37053+
},
37054+
"github": {
37055+
"type": "number",
37056+
"description": "Users registered via GitHub"
37057+
}
37058+
},
37059+
"description": "User count grouped by authentication type"
37060+
},
37061+
"global_admins": {
37062+
"type": "number",
37063+
"description": "Number of users with global_admin role"
37064+
}
37065+
},
37066+
"required": [
37067+
"total_users",
37068+
"users_by_auth_type",
37069+
"global_admins"
37070+
]
37071+
},
37072+
"team_statistics": {
37073+
"type": "object",
37074+
"properties": {
37075+
"default_teams": {
37076+
"type": "number",
37077+
"description": "Number of default teams"
37078+
},
37079+
"non_default_teams": {
37080+
"type": "number",
37081+
"description": "Number of non-default teams"
37082+
}
37083+
},
37084+
"required": [
37085+
"default_teams",
37086+
"non_default_teams"
37087+
]
37088+
},
3700037089
"user_count_by_role": {
3700137090
"type": "array",
3700237091
"items": {
@@ -37020,6 +37109,8 @@
3702037109
}
3702137110
},
3702237111
"required": [
37112+
"user_statistics",
37113+
"team_statistics",
3702337114
"user_count_by_role"
3702437115
]
3702537116
}

services/backend/api-spec.yaml

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24829,6 +24829,12 @@ paths:
2482924829
allow_remote_mcp:
2483024830
type: boolean
2483124831
description: Allow remote MCP servers
24832+
mcp_servers_count:
24833+
type: integer
24834+
description: Number of MCP servers installed in this team
24835+
members_count:
24836+
type: integer
24837+
description: Number of members in this team
2483224838
created_at:
2483324839
type: string
2483424840
description: ISO8601 timestamp
@@ -24845,6 +24851,8 @@ paths:
2484524851
- mcp_server_limit
2484624852
- member_limit
2484724853
- allow_remote_mcp
24854+
- mcp_servers_count
24855+
- members_count
2484824856
- created_at
2484924857
- updated_at
2485024858
pagination:
@@ -25028,6 +25036,12 @@ paths:
2502825036
allow_remote_mcp:
2502925037
type: boolean
2503025038
description: Allow remote MCP servers
25039+
mcp_servers_count:
25040+
type: integer
25041+
description: Number of MCP servers installed in this team
25042+
members_count:
25043+
type: integer
25044+
description: Number of members in this team
2503125045
created_at:
2503225046
type: string
2503325047
description: ISO8601 timestamp
@@ -25044,6 +25058,8 @@ paths:
2504425058
- mcp_server_limit
2504525059
- member_limit
2504625060
- allow_remote_mcp
25061+
- mcp_servers_count
25062+
- members_count
2504725063
- created_at
2504825064
- updated_at
2504925065
pagination:
@@ -25208,6 +25224,12 @@ paths:
2520825224
allow_remote_mcp:
2520925225
type: boolean
2521025226
description: Allow remote MCP servers
25227+
mcp_servers_count:
25228+
type: integer
25229+
description: Number of MCP servers installed in this team
25230+
members_count:
25231+
type: integer
25232+
description: Number of members in this team
2521125233
created_at:
2521225234
type: string
2521325235
description: ISO8601 timestamp
@@ -25224,6 +25246,8 @@ paths:
2522425246
- mcp_server_limit
2522525247
- member_limit
2522625248
- allow_remote_mcp
25249+
- mcp_servers_count
25250+
- members_count
2522725251
- created_at
2522825252
- updated_at
2522925253
required:
@@ -25400,6 +25424,12 @@ paths:
2540025424
allow_remote_mcp:
2540125425
type: boolean
2540225426
description: Allow remote MCP servers
25427+
mcp_servers_count:
25428+
type: integer
25429+
description: Number of MCP servers installed in this team
25430+
members_count:
25431+
type: integer
25432+
description: Number of members in this team
2540325433
created_at:
2540425434
type: string
2540525435
description: ISO8601 timestamp
@@ -25416,6 +25446,8 @@ paths:
2541625446
- mcp_server_limit
2541725447
- member_limit
2541825448
- allow_remote_mcp
25449+
- mcp_servers_count
25450+
- members_count
2541925451
- created_at
2542025452
- updated_at
2542125453
required:
@@ -26175,8 +26207,9 @@ paths:
2617526207
summary: Get user statistics (Global Admin)
2617626208
tags:
2617726209
- Admin - Users
26178-
description: Allows global administrators to retrieve user statistics including
26179-
count by role.
26210+
description: Allows global administrators to retrieve comprehensive user and
26211+
team statistics including counts by role, authentication type, and team
26212+
types.
2618026213
security:
2618126214
- cookieAuth: []
2618226215
responses:
@@ -26193,6 +26226,41 @@ paths:
2619326226
data:
2619426227
type: object
2619526228
properties:
26229+
user_statistics:
26230+
type: object
26231+
properties:
26232+
total_users:
26233+
type: number
26234+
description: Total number of users
26235+
users_by_auth_type:
26236+
type: object
26237+
properties:
26238+
email:
26239+
type: number
26240+
description: Users registered via email
26241+
github:
26242+
type: number
26243+
description: Users registered via GitHub
26244+
description: User count grouped by authentication type
26245+
global_admins:
26246+
type: number
26247+
description: Number of users with global_admin role
26248+
required:
26249+
- total_users
26250+
- users_by_auth_type
26251+
- global_admins
26252+
team_statistics:
26253+
type: object
26254+
properties:
26255+
default_teams:
26256+
type: number
26257+
description: Number of default teams
26258+
non_default_teams:
26259+
type: number
26260+
description: Number of non-default teams
26261+
required:
26262+
- default_teams
26263+
- non_default_teams
2619626264
user_count_by_role:
2619726265
type: array
2619826266
items:
@@ -26209,6 +26277,8 @@ paths:
2620926277
- count
2621026278
description: User count grouped by role
2621126279
required:
26280+
- user_statistics
26281+
- team_statistics
2621226282
- user_count_by_role
2621326283
required:
2621426284
- success

0 commit comments

Comments
 (0)