File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import { describe , expect , it } from "vitest" ;
2+ import type { V0ServerJson } from "@/generated/types.gen" ;
3+ import { mockedGetRegistryV01Servers } from "@/mocks/fixtures/registry_v0_1_servers/get" ;
4+ import { parseStacklokMeta } from "./server-meta" ;
5+
6+ const servers = mockedGetRegistryV01Servers . defaultValue . servers ?? [ ] ;
7+
8+ function getServerByName ( serverName : string ) : V0ServerJson {
9+ const serverEntry = servers . find (
10+ ( entry ) => entry . server ?. name === serverName ,
11+ ) ;
12+
13+ if ( ! serverEntry ?. server ) {
14+ throw new Error ( `Test fixture server not found: ${ serverName } ` ) ;
15+ }
16+
17+ return serverEntry . server as V0ServerJson ;
18+ }
19+
20+ const osvServer = getServerByName ( "com.toolhive.k8s.toolhive-system/osv" ) ;
21+ const googleWorkspaceServer = getServerByName ( "google/mcp-google-apps" ) ;
22+
23+ describe ( "parseStacklokMeta" , ( ) => {
24+ it ( "returns null when stacklok metadata is missing" , ( ) => {
25+ expect ( parseStacklokMeta ( googleWorkspaceServer ) ) . toBeNull ( ) ;
26+ } ) ;
27+
28+ it ( "returns a successful parse result when stacklok metadata is valid" , ( ) => {
29+ const result = parseStacklokMeta ( osvServer ) ;
30+
31+ expect ( result ?. success ) . toBe ( true ) ;
32+ } ) ;
33+ } ) ;
Original file line number Diff line number Diff line change @@ -31,5 +31,8 @@ export function parseStacklokMeta(server: V0ServerJson) {
3131 server . _meta ?. [ "io.modelcontextprotocol.registry/publisher-provided" ] ?. [
3232 "io.github.stacklok"
3333 ] ;
34+
35+ if ( ! raw ) return null ;
36+
3437 return stacklokMetaSchema . safeParse ( raw ) ;
3538}
Original file line number Diff line number Diff line change @@ -13,7 +13,7 @@ export function cn(...inputs: ClassValue[]) {
1313 */
1414export function isVirtualMCPServer ( server : V0ServerJson ) : boolean {
1515 const result = parseStacklokMeta ( server ) ;
16- if ( ! result . success ) return false ;
16+ if ( ! result || ! result . success ) return false ;
1717
1818 return Object . values ( result . data ) . some (
1919 ( t ) => t . metadata ?. kubernetes ?. kind === "VirtualMCPServer" ,
@@ -26,7 +26,7 @@ export function isVirtualMCPServer(server: V0ServerJson): boolean {
2626 */
2727export function getTools ( server : V0ServerJson ) : ServerTool [ ] {
2828 const result = parseStacklokMeta ( server ) ;
29- if ( ! result . success ) return [ ] ;
29+ if ( ! result || ! result . success ) return [ ] ;
3030
3131 return Object . values ( result . data ) . flatMap ( ( t ) => t . tool_definitions ?? [ ] ) ;
3232}
You can’t perform that action at this time.
0 commit comments