22import { useI18n } from ' vue-i18n'
33import { useRouter } from ' vue-router'
44import { Button } from ' @/components/ui/button'
5+ import { Badge } from ' @/components/ui/badge'
56import { Github , Star } from ' lucide-vue-next'
67import type { McpServer } from ' @/views/admin/mcp-server-catalog/types'
78
@@ -44,6 +45,22 @@ const getGitHubAvatarUrl = (server: McpServer) => {
4445 if (! server .github_account_id ) return null
4546 return ` https://avatars.githubusercontent.com/u/${server .github_account_id }?v=4&s=64 `
4647}
48+
49+ const getRuntimeBadgeClass = (runtime : string | null | undefined ) => {
50+ if (! runtime ) return ' bg-gray-100 text-gray-800'
51+
52+ const runtimeLower = runtime .toLowerCase ()
53+
54+ if (runtimeLower === ' node' ) {
55+ return ' bg-green-100 text-green-800'
56+ } else if (runtimeLower === ' python' ) {
57+ return ' bg-blue-100 text-blue-800'
58+ } else if (runtimeLower === ' http' ) {
59+ return ' bg-purple-100 text-purple-800'
60+ }
61+
62+ return ' bg-gray-100 text-gray-800'
63+ }
4764 </script >
4865
4966<template >
@@ -67,6 +84,11 @@ const getGitHubAvatarUrl = (server: McpServer) => {
6784 {{ server.name }}
6885 </dt >
6986 </div >
87+ <div class =" flex-none pt-6 pr-6" >
88+ <Badge v-if =" server.runtime" variant =" secondary" :class =" ['font-mono text-xs', getRuntimeBadgeClass(server.runtime)]" >
89+ {{ server.runtime }}
90+ </Badge >
91+ </div >
7092 <div class =" mt-6 flex w-full flex-none gap-x-4 items-center border-t border-gray-900/5 px-6 pt-6" >
7193 <dt class =" flex-none" >
7294 <span class =" sr-only" >{{ t('mcpInstallations.view.fields.repository') }}</span >
@@ -91,7 +113,24 @@ const getGitHubAvatarUrl = (server: McpServer) => {
91113 </dd >
92114 </div >
93115 <div class =" mt-4 flex w-full flex-none gap-x-4 px-6" >
94- <dd class =" text-sm text-gray-600 line-clamp-3 min-h-[3.75rem]" >{{ getServerDescription(server) }}</dd >
116+ <dd class =" text-sm text-gray-600 line-clamp-3 min-h-[3.75rem]" >
117+ {{ getServerDescription(server) }}
118+ </dd >
119+ </div >
120+ <div v-if =" server.tags && server.tags.length > 0" class =" mt-2 flex w-full flex-none px-6 min-h-[3rem]" >
121+ <dd class =" flex flex-wrap gap-1.5 items-center line-clamp-2" >
122+ <Badge
123+ v-for =" tag in server.tags"
124+ :key =" tag"
125+ variant =" outline"
126+ class =" text-xs px-2 py-0.5"
127+ >
128+ {{ tag }}
129+ </Badge >
130+ </dd >
131+ </div >
132+ <div v-else class =" mt-2 flex w-full flex-none px-6 min-h-[3rem]" >
133+ <!-- Empty space to maintain consistent card height -->
95134 </div >
96135 </dl >
97136 <div class =" mt-6 border-t border-gray-900/5 px-6 py-6" >
@@ -114,4 +153,11 @@ const getGitHubAvatarUrl = (server: McpServer) => {
114153 -webkit-box-orient : vertical ;
115154 overflow : hidden ;
116155}
156+
157+ .line-clamp-2 {
158+ display : -webkit-box ;
159+ -webkit-line-clamp : 2 ;
160+ -webkit-box-orient : vertical ;
161+ overflow : hidden ;
162+ }
117163 </style >
0 commit comments