UNPKG

@kubb/plugin-mcp

Version:
1 lines 6.77 kB
{"version":3,"sources":["../src/components/Server.tsx"],"names":["getPathParams","FunctionParams","isNullable","isReference","camelCase","isOptional","jsxs","File","jsx","Const"],"mappings":"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","file":"chunk-ODMTYF4L.cjs","sourcesContent":["import type { KubbFile } from '@kubb/core/fs'\n\nimport { Const, File, FunctionParams } from '@kubb/react'\nimport type { OperationSchemas } from '@kubb/plugin-oas'\nimport { getPathParams, isOptional } from '@kubb/plugin-oas/utils'\nimport { isNullable, isReference } from '@kubb/oas'\nimport { camelCase } from '@kubb/core/transformers'\n\ntype Props = {\n name: string\n serverName: string\n serverVersion: string\n operations: Array<{\n tool: {\n name: string\n description: string\n }\n mcp: {\n name: string\n file: KubbFile.File\n }\n zod: {\n name: string\n file: KubbFile.File\n schemas: OperationSchemas\n }\n type: {\n schemas: OperationSchemas\n }\n }>\n}\n\ntype GetParamsProps = {\n schemas: OperationSchemas\n}\n\nfunction getParams({ schemas }: GetParamsProps) {\n const pathParams = getPathParams(schemas.pathParams, {\n typed: false,\n })\n\n return FunctionParams.factory({\n data: {\n mode: 'object',\n children: {\n ...Object.entries(pathParams).reduce((acc, [key, param]) => {\n if (param && schemas.pathParams?.name) {\n let suffix = '.shape'\n\n if (isNullable(schemas.pathParams.schema)) {\n if (isReference(schemas.pathParams)) {\n suffix = '.unwrap().schema.unwrap().shape'\n } else {\n suffix = '.unwrap().shape'\n }\n } else {\n if (isReference(schemas.pathParams)) {\n suffix = '.schema.shape'\n }\n }\n\n param.value = `${schemas.pathParams?.name}${suffix}['${key}']`\n }\n\n return {\n ...acc,\n [camelCase(key)]: param,\n }\n }, {}),\n data: schemas.request?.name\n ? {\n value: schemas.request?.name,\n optional: isOptional(schemas.request?.schema),\n }\n : undefined,\n params: schemas.queryParams?.name\n ? {\n value: schemas.queryParams?.name,\n optional: isOptional(schemas.queryParams?.schema),\n }\n : undefined,\n headers: schemas.headerParams?.name\n ? {\n value: schemas.headerParams?.name,\n optional: isOptional(schemas.headerParams?.schema),\n }\n : undefined,\n },\n },\n })\n}\n\nexport function Server({ name, serverName, serverVersion, operations }: Props) {\n return (\n <File.Source name={name} isExportable isIndexable>\n <Const name={'server'} export>\n {`\n new McpServer({\n name: '${serverName}',\n version: '${serverVersion}',\n})\n `}\n </Const>\n\n {operations\n .map(({ tool, mcp, zod }) => {\n const paramsClient = getParams({ schemas: zod.schemas })\n\n if (zod.schemas.request?.name || zod.schemas.headerParams?.name || zod.schemas.queryParams?.name || zod.schemas.pathParams?.name) {\n return `\nserver.tool(${JSON.stringify(tool.name)}, ${JSON.stringify(tool.description)}, ${paramsClient.toObjectValue()}, async (${paramsClient.toObject()}) => {\n return ${mcp.name}(${paramsClient.toObject()})\n})\n `\n }\n\n return `\nserver.tool(${JSON.stringify(tool.name)}, ${JSON.stringify(tool.description)}, async () => {\n return ${mcp.name}(${paramsClient.toObject()})\n})\n `\n })\n .filter(Boolean)}\n\n {`\nasync function startServer() {\n try {\n const transport = new StdioServerTransport()\n await server.connect(transport)\n\n } catch (error) {\n console.error('Failed to start server:', error)\n process.exit(1)\n }\n}\n\nstartServer()\n`}\n </File.Source>\n )\n}\n"]}