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