| 27 | // --------------------------------------------------------------------------- |
| 28 | |
| 29 | const toServerInput = ( |
| 30 | payload: { transport?: "remote" | "stdio" } & Record<string, unknown>, |
| 31 | ): McpServerInput => { |
| 32 | if (payload.transport === "stdio") { |
| 33 | const p = payload as { |
| 34 | transport: "stdio"; |
| 35 | name: string; |
| 36 | family?: string; |
| 37 | description?: string; |
| 38 | command: string; |
| 39 | args?: readonly string[]; |
| 40 | envVars?: readonly string[]; |
| 41 | env?: Record<string, string>; |
| 42 | staticEnv?: Record<string, string>; |
| 43 | cwd?: string; |
| 44 | versionNegotiation?: "legacy" | "auto"; |
| 45 | spawnPerCall?: boolean; |
| 46 | appServer?: { |
| 47 | server: string; |
| 48 | surface?: "sky" | "browser"; |
| 49 | modulePath?: string; |
| 50 | presetId?: string; |
| 51 | }; |
| 52 | slug?: string; |
| 53 | }; |
| 54 | return { |
| 55 | transport: "stdio", |
| 56 | name: p.name, |
| 57 | family: p.family, |
| 58 | description: p.description, |
| 59 | command: p.command, |
| 60 | args: p.args ? [...p.args] : undefined, |
| 61 | envVars: p.envVars ? [...p.envVars] : undefined, |
| 62 | env: p.env, |
| 63 | staticEnv: p.staticEnv, |
| 64 | cwd: p.cwd, |
| 65 | versionNegotiation: p.versionNegotiation, |
| 66 | spawnPerCall: p.spawnPerCall, |
| 67 | appServer: p.appServer, |
| 68 | slug: p.slug, |
| 69 | }; |
| 70 | } |
| 71 | |
| 72 | const p = payload as { |
| 73 | transport?: "remote"; |
| 74 | name: string; |
| 75 | family?: string; |
| 76 | description?: string; |
| 77 | endpoint: string; |
| 78 | remoteTransport?: "streamable-http" | "sse" | "auto"; |
| 79 | versionNegotiation?: "auto" | "legacy"; |
| 80 | queryParams?: Record<string, string>; |
| 81 | headers?: Record<string, string>; |
| 82 | slug?: string; |
| 83 | authenticationTemplate?: McpServerInput extends { authenticationTemplate?: infer T } |
| 84 | ? T |
| 85 | : never; |
| 86 | auth?: McpServerInput extends { auth?: infer A } ? A : never; |