| 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 | description?: string; |
| 37 | command: string; |
| 38 | args?: readonly string[]; |
| 39 | envVars?: readonly string[]; |
| 40 | env?: Record<string, string>; |
| 41 | cwd?: string; |
| 42 | versionNegotiation?: "legacy" | "auto"; |
| 43 | slug?: string; |
| 44 | }; |
| 45 | return { |
| 46 | transport: "stdio", |
| 47 | name: p.name, |
| 48 | description: p.description, |
| 49 | command: p.command, |
| 50 | args: p.args ? [...p.args] : undefined, |
| 51 | envVars: p.envVars ? [...p.envVars] : undefined, |
| 52 | env: p.env, |
| 53 | cwd: p.cwd, |
| 54 | versionNegotiation: p.versionNegotiation, |
| 55 | slug: p.slug, |
| 56 | }; |
| 57 | } |
| 58 | |
| 59 | const p = payload as { |
| 60 | transport?: "remote"; |
| 61 | name: string; |
| 62 | description?: string; |
| 63 | endpoint: string; |
| 64 | remoteTransport?: "streamable-http" | "sse" | "auto"; |
| 65 | queryParams?: Record<string, string>; |
| 66 | headers?: Record<string, string>; |
| 67 | slug?: string; |
| 68 | authenticationTemplate?: McpServerInput extends { authenticationTemplate?: infer T } |
| 69 | ? T |
| 70 | : never; |
| 71 | auth?: McpServerInput extends { auth?: infer A } ? A : never; |
| 72 | }; |
| 73 | |
| 74 | return { |
| 75 | transport: "remote", |
| 76 | name: p.name, |
| 77 | description: p.description, |
| 78 | endpoint: p.endpoint, |
| 79 | remoteTransport: p.remoteTransport, |
| 80 | queryParams: p.queryParams, |
| 81 | headers: p.headers, |
| 82 | slug: p.slug, |
| 83 | authenticationTemplate: p.authenticationTemplate, |
| 84 | auth: p.auth, |
| 85 | }; |
| 86 | }; |