@@ -30,6 +30,8 @@ import { EffectBridge } from "@/effect"
3030import { InstanceState } from "@/effect"
3131import { ChildProcess , ChildProcessSpawner } from "effect/unstable/process"
3232import * as CrossSpawnSpawner from "@/effect/cross-spawn-spawner"
33+ import { zod as effectZod } from "@/util/effect-zod"
34+ import { withStatics } from "@/util/schema"
3335
3436const log = Log . create ( { service : "mcp" } )
3537const DEFAULT_TIMEOUT = 30_000
@@ -69,50 +71,33 @@ export const Failed = NamedError.create(
6971
7072type MCPClient = Client
7173
72- export const Status = z
73- . discriminatedUnion ( "status" , [
74- z
75- . object ( {
76- status : z . literal ( "connected" ) ,
77- } )
78- . meta ( {
79- ref : "MCPStatusConnected" ,
80- } ) ,
81- z
82- . object ( {
83- status : z . literal ( "disabled" ) ,
84- } )
85- . meta ( {
86- ref : "MCPStatusDisabled" ,
87- } ) ,
88- z
89- . object ( {
90- status : z . literal ( "failed" ) ,
91- error : z . string ( ) ,
92- } )
93- . meta ( {
94- ref : "MCPStatusFailed" ,
95- } ) ,
96- z
97- . object ( {
98- status : z . literal ( "needs_auth" ) ,
99- } )
100- . meta ( {
101- ref : "MCPStatusNeedsAuth" ,
102- } ) ,
103- z
104- . object ( {
105- status : z . literal ( "needs_client_registration" ) ,
106- error : z . string ( ) ,
107- } )
108- . meta ( {
109- ref : "MCPStatusNeedsClientRegistration" ,
110- } ) ,
111- ] )
112- . meta ( {
113- ref : "MCPStatus" ,
114- } )
115- export type Status = z . infer < typeof Status >
74+ const StatusConnected = Schema . Struct ( { status : Schema . Literal ( "connected" ) } ) . annotate ( {
75+ identifier : "MCPStatusConnected" ,
76+ } )
77+ const StatusDisabled = Schema . Struct ( { status : Schema . Literal ( "disabled" ) } ) . annotate ( {
78+ identifier : "MCPStatusDisabled" ,
79+ } )
80+ const StatusFailed = Schema . Struct ( { status : Schema . Literal ( "failed" ) , error : Schema . String } ) . annotate ( {
81+ identifier : "MCPStatusFailed" ,
82+ } )
83+ const StatusNeedsAuth = Schema . Struct ( { status : Schema . Literal ( "needs_auth" ) } ) . annotate ( {
84+ identifier : "MCPStatusNeedsAuth" ,
85+ } )
86+ const StatusNeedsClientRegistration = Schema . Struct ( {
87+ status : Schema . Literal ( "needs_client_registration" ) ,
88+ error : Schema . String ,
89+ } ) . annotate ( { identifier : "MCPStatusNeedsClientRegistration" } )
90+
91+ export const Status = Schema . Union ( [
92+ StatusConnected ,
93+ StatusDisabled ,
94+ StatusFailed ,
95+ StatusNeedsAuth ,
96+ StatusNeedsClientRegistration ,
97+ ] )
98+ . annotate ( { identifier : "MCPStatus" , discriminator : "status" } )
99+ . pipe ( withStatics ( ( s ) => ( { zod : effectZod ( s ) } ) ) )
100+ export type Status = Schema . Schema . Type < typeof Status >
116101
117102// Store transports for OAuth servers to allow finishing auth
118103type TransportWithAuth = StreamableHTTPClientTransport | SSEClientTransport
0 commit comments