@orval/mcp 8.7.0 → 8.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import path from "node:path";
2
- import { camel, generateMutatorImports, getFileInfo, getFullRoute, isObject, isString, jsDoc, jsStringEscape, pascal, upath } from "@orval/core";
2
+ import { camel, generateMutatorImports, getFileInfo, getFullRoute, getParamsInPath, isObject, isString, jsDoc, jsStringEscape, pascal, upath } from "@orval/core";
3
3
  import { generateClient, generateFetchHeader } from "@orval/fetch";
4
4
  import { generateZod } from "@orval/zod";
5
5
 
@@ -32,8 +32,9 @@ const getMcpHeader = ({ verbOptions, output }) => {
32
32
  };
33
33
  const generateMcp = (verbOptions) => {
34
34
  const handlerArgsTypes = [];
35
- const pathParamsType = verbOptions.params.map((param) => {
36
- return ` ${param.name.split(": ")[0]}: ${param.implementation.split(": ")[1]}`;
35
+ const originalParamNames = getParamsInPath(verbOptions.pathRoute);
36
+ const pathParamsType = verbOptions.params.map((param, index) => {
37
+ return ` ${originalParamNames[index]}: ${param.implementation.split(": ")[1]}`;
37
38
  }).join(",\n");
38
39
  if (pathParamsType) handlerArgsTypes.push(` pathParams: {\n${pathParamsType}\n };`);
39
40
  if (verbOptions.queryParams) handlerArgsTypes.push(` queryParams: ${verbOptions.queryParams.schema.name};`);
@@ -46,16 +47,14 @@ ${handlerArgsTypes.join("\n")}
46
47
  ` : "";
47
48
  const fetchParams = [];
48
49
  if (verbOptions.params.length > 0) {
49
- const pathParamsArgs = verbOptions.params.map((param) => {
50
- return `args.pathParams.${param.name.split(": ")[0]}`;
51
- }).join(", ");
50
+ const pathParamsArgs = originalParamNames.map((paramName) => `args.pathParams.${paramName}`).join(", ");
52
51
  fetchParams.push(pathParamsArgs);
53
52
  }
54
53
  if (verbOptions.body.definition) fetchParams.push(`args.bodyParams`);
55
54
  if (verbOptions.queryParams) fetchParams.push(`args.queryParams`);
56
55
  const handlersImplementation = [handlerArgsImplementation, `
57
- export const ${`${verbOptions.operationName}Handler`} = async (${handlerArgsTypes.length > 0 ? `args: ${handlerArgsName}` : ""}) => {
58
- const res = await ${verbOptions.operationName}(${fetchParams.join(", ")});
56
+ export const ${`${verbOptions.operationName}Handler`} = async (${handlerArgsTypes.length > 0 ? `args: ${handlerArgsName}, ` : ""}options?: RequestInit) => {
57
+ const res = await ${verbOptions.operationName}(${fetchParams.length > 0 ? `${fetchParams.join(", ")}, ` : ""}options);
59
58
 
60
59
  return {
61
60
  content: [
@@ -76,6 +75,7 @@ const generateServer = (verbOptions, output, context) => {
76
75
  const { extension, dirname } = getFileInfo(output.target);
77
76
  const serverPath = path.join(dirname, `server${extension}`);
78
77
  const header = getHeader(output.override.header, info);
78
+ const mcpServerOptions = output.override.mcp.server;
79
79
  const toolImplementations = Object.values(verbOptions).map((verbOption) => {
80
80
  const pascalOperationName = pascal(verbOption.operationName);
81
81
  const inputSchemaTypes = [];
@@ -85,11 +85,12 @@ const generateServer = (verbOptions, output, context) => {
85
85
  const inputSchemaImplementation = inputSchemaTypes.length > 0 ? ` {
86
86
  ${inputSchemaTypes.join(",\n ")}
87
87
  },` : "";
88
+ const handlerCallImplementation = inputSchemaImplementation ? `(args) => ${verbOption.operationName}Handler(args, options)` : `() => ${verbOption.operationName}Handler(options)`;
88
89
  return `
89
90
  server.tool(
90
91
  '${jsStringEscape(verbOption.operationName)}',
91
92
  '${jsStringEscape(verbOption.summary ?? "")}',${inputSchemaImplementation ? `\n${inputSchemaImplementation}` : ""}
92
- ${jsStringEscape(verbOption.operationName)}Handler
93
+ ${handlerCallImplementation}
93
94
  );`;
94
95
  }).join("\n");
95
96
  const importToolSchemasImplementation = `import {\n${Object.values(verbOptions).flatMap((verbOption) => {
@@ -101,27 +102,39 @@ server.tool(
101
102
  if (verbOption.body.definition) imports.push(` ${pascalOperationName}Body`);
102
103
  return imports;
103
104
  }).join(",\n")}\n} from './tool-schemas.zod';`;
104
- return [{
105
- content: [
106
- header,
107
- `import {
105
+ const importHandlersImplementation = `import {\n${Object.values(verbOptions).filter((verbOption) => toolImplementations.includes(`${verbOption.operationName}Handler`)).map((verbOption) => ` ${verbOption.operationName}Handler`).join(`,\n`)}\n} from './handlers';`;
106
+ const createMcpServerImplementation = `
107
+ const createMcpServer = (options?: RequestInit) => {
108
+ const server = new McpServer({
109
+ name: '${camel(info.title)}Server',
110
+ version: '1.0.0',
111
+ });
112
+ ${toolImplementations}
113
+
114
+ return server;
115
+ };
116
+ `;
117
+ const serverFunctionName = mcpServerOptions?.name ?? "customServer";
118
+ const relativeServerPath = mcpServerOptions ? upath.getRelativeImportPath(serverPath, mcpServerOptions.path) : "";
119
+ const importSpecifier = mcpServerOptions?.default ? serverFunctionName : `{ ${serverFunctionName} }`;
120
+ const importDependenciesImplementation = `import {
108
121
  McpServer
109
122
  } from '@modelcontextprotocol/sdk/server/mcp.js';
110
-
111
- import {
123
+
124
+ ${mcpServerOptions ? `import ${importSpecifier} from '${relativeServerPath}';` : `import {
112
125
  StdioServerTransport
113
- } from '@modelcontextprotocol/sdk/server/stdio.js';
114
- `,
115
- `import {\n${Object.values(verbOptions).filter((verbOption) => toolImplementations.includes(`${verbOption.operationName}Handler`)).map((verbOption) => ` ${verbOption.operationName}Handler`).join(`,\n`)}\n} from './handlers';`,
126
+ } from '@modelcontextprotocol/sdk/server/stdio.js';`}
127
+ `;
128
+ const customServerConnectImplementation = `\n${serverFunctionName}(createMcpServer);\n`;
129
+ return [{
130
+ content: [
131
+ header,
132
+ importDependenciesImplementation,
133
+ importHandlersImplementation,
116
134
  importToolSchemasImplementation,
117
- `
118
- const server = new McpServer({
119
- name: '${camel(info.title)}Server',
120
- version: '1.0.0',
121
- });
122
- `,
123
- toolImplementations,
124
- `
135
+ createMcpServerImplementation,
136
+ mcpServerOptions ? customServerConnectImplementation : `
137
+ const server = createMcpServer();
125
138
  const transport = new StdioServerTransport();
126
139
 
127
140
  server.connect(transport).then(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n camel,\n type ClientBuilder,\n type ClientExtraFilesBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n type ContextSpec,\n generateMutatorImports,\n type GeneratorVerbOptions,\n getFileInfo,\n getFullRoute,\n isObject,\n isString,\n jsDoc,\n jsStringEscape,\n type NormalizedOutputOptions,\n type OpenApiInfoObject,\n pascal,\n upath,\n} from '@orval/core';\nimport { generateClient, generateFetchHeader } from '@orval/fetch';\nimport { generateZod } from '@orval/zod';\n\nconst getHeader = (\n option: false | ((info: OpenApiInfoObject) => string | string[]),\n info: OpenApiInfoObject,\n): string => {\n if (!option) {\n return '';\n }\n\n const header = option(info);\n\n return Array.isArray(header) ? jsDoc({ description: header }) : header;\n};\n\nconst getSpecInfo = (context: ContextSpec): OpenApiInfoObject =>\n context.spec.info ?? {\n title: 'API',\n version: '1.0.0',\n };\n\nexport const getMcpHeader: ClientHeaderBuilder = ({ verbOptions, output }) => {\n const targetInfo = getFileInfo(output.target);\n const schemasPath = (\n isObject(output.schemas)\n ? output.schemas.path\n : isString(output.schemas)\n ? output.schemas\n : undefined\n ) as string | undefined;\n const schemaInfo = schemasPath ? getFileInfo(schemasPath) : undefined;\n\n const isZodSchemaOutput =\n isObject(output.schemas) && output.schemas.type === 'zod';\n const basePath = schemaInfo?.dirname;\n const relativeSchemaImportPath = basePath\n ? isZodSchemaOutput && output.indexFiles\n ? upath.getRelativeImportPath(targetInfo.path, basePath, true)\n : upath.getRelativeImportPath(targetInfo.path, basePath)\n : './' + targetInfo.filename + '.schemas';\n\n const importSchemaNames = new Set(\n Object.values(verbOptions).flatMap((verbOption) => {\n const imports = [];\n const pascalOperationName = pascal(verbOption.operationName);\n\n if (verbOption.queryParams) {\n imports.push(`${pascalOperationName}Params`);\n }\n\n if (verbOption.body.imports[0]?.name) {\n imports.push(verbOption.body.imports[0]?.name);\n }\n\n return imports;\n }),\n )\n .values()\n .toArray();\n\n const importSchemasImplementation = `import {\\n ${importSchemaNames.join(\n ',\\n ',\n )}\\n} from '${relativeSchemaImportPath}';\n`;\n\n const relativeFetchClientPath = './http-client';\n const importFetchClientNames = new Set(\n Object.values(verbOptions).flatMap(\n (verbOption) => verbOption.operationName,\n ),\n )\n .values()\n .toArray();\n\n const importFetchClientImplementation = `import {\\n ${importFetchClientNames.join(\n ',\\n ',\n )}\\n} from '${relativeFetchClientPath}';\n `;\n\n const content = [\n importSchemasImplementation,\n importFetchClientImplementation,\n ].join('\\n');\n\n return content + '\\n';\n};\n\nexport const generateMcp: ClientBuilder = (verbOptions) => {\n const handlerArgsTypes = [];\n const pathParamsType = verbOptions.params\n .map((param) => {\n const paramName = param.name.split(': ')[0];\n const paramType = param.implementation.split(': ')[1];\n return ` ${paramName}: ${paramType}`;\n })\n .join(',\\n');\n if (pathParamsType) {\n handlerArgsTypes.push(` pathParams: {\\n${pathParamsType}\\n };`);\n }\n if (verbOptions.queryParams) {\n handlerArgsTypes.push(\n ` queryParams: ${verbOptions.queryParams.schema.name};`,\n );\n }\n if (verbOptions.body.definition) {\n handlerArgsTypes.push(` bodyParams: ${verbOptions.body.definition};`);\n }\n\n const handlerArgsName = `${verbOptions.operationName}Args`;\n const handlerArgsImplementation =\n handlerArgsTypes.length > 0\n ? `\nexport type ${handlerArgsName} = {\n${handlerArgsTypes.join('\\n')}\n}\n`\n : '';\n\n const fetchParams = [];\n if (verbOptions.params.length > 0) {\n const pathParamsArgs = verbOptions.params\n .map((param) => {\n const paramName = param.name.split(': ')[0];\n\n return `args.pathParams.${paramName}`;\n })\n .join(', ');\n\n fetchParams.push(pathParamsArgs);\n }\n if (verbOptions.body.definition) fetchParams.push(`args.bodyParams`);\n if (verbOptions.queryParams) fetchParams.push(`args.queryParams`);\n\n const handlerName = `${verbOptions.operationName}Handler`;\n const handlerImplementation = `\nexport const ${handlerName} = async (${handlerArgsTypes.length > 0 ? `args: ${handlerArgsName}` : ''}) => {\n const res = await ${verbOptions.operationName}(${fetchParams.join(', ')});\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(res),\n },\n ],\n };\n};`;\n\n const handlersImplementation = [\n handlerArgsImplementation,\n handlerImplementation,\n ].join('');\n\n return {\n implementation: handlersImplementation ? `${handlersImplementation}\\n` : '',\n imports: [],\n };\n};\n\nexport const generateServer = (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpec,\n) => {\n const info = getSpecInfo(context);\n const { extension, dirname } = getFileInfo(output.target);\n const serverPath = path.join(dirname, `server${extension}`);\n const header = getHeader(output.override.header, info);\n\n const toolImplementations = Object.values(verbOptions)\n .map((verbOption) => {\n const pascalOperationName = pascal(verbOption.operationName);\n const inputSchemaTypes = [];\n if (verbOption.params.length > 0)\n inputSchemaTypes.push(` pathParams: ${pascalOperationName}Params`);\n if (verbOption.queryParams)\n inputSchemaTypes.push(\n ` queryParams: ${pascalOperationName}QueryParams`,\n );\n if (verbOption.body.definition)\n inputSchemaTypes.push(` bodyParams: ${pascalOperationName}Body`);\n\n const inputSchemaImplementation =\n inputSchemaTypes.length > 0\n ? ` {\n ${inputSchemaTypes.join(',\\n ')}\n },`\n : '';\n\n const toolImplementation = `\nserver.tool(\n '${jsStringEscape(verbOption.operationName)}',\n '${jsStringEscape(verbOption.summary ?? '')}',${inputSchemaImplementation ? `\\n${inputSchemaImplementation}` : ''}\n ${jsStringEscape(verbOption.operationName)}Handler\n);`;\n\n return toolImplementation;\n })\n .join('\\n');\n\n const importToolSchemas = Object.values(verbOptions)\n .flatMap((verbOption) => {\n const imports = [];\n\n const pascalOperationName = pascal(verbOption.operationName);\n\n if (verbOption.headers) imports.push(` ${pascalOperationName}Header`);\n if (verbOption.params.length > 0)\n imports.push(` ${pascalOperationName}Params`);\n if (verbOption.queryParams)\n imports.push(` ${pascalOperationName}QueryParams`);\n if (verbOption.body.definition)\n imports.push(` ${pascalOperationName}Body`);\n\n return imports;\n })\n .join(',\\n');\n const importToolSchemasImplementation = `import {\\n${importToolSchemas}\\n} from './tool-schemas.zod';`;\n\n const importHandlers = Object.values(verbOptions)\n .filter((verbOption) =>\n toolImplementations.includes(`${verbOption.operationName}Handler`),\n )\n .map((verbOption) => ` ${verbOption.operationName}Handler`)\n .join(`,\\n`);\n const importHandlersImplementation = `import {\\n${importHandlers}\\n} from './handlers';`;\n\n const importDependenciesImplementation = `import {\n McpServer\n} from '@modelcontextprotocol/sdk/server/mcp.js';\n \nimport {\n StdioServerTransport\n} from '@modelcontextprotocol/sdk/server/stdio.js'; \n`;\n const newMcpServerImplementation = `\nconst server = new McpServer({\n name: '${camel(info.title)}Server',\n version: '1.0.0',\n});\n`;\n const serverConnectImplementation = `\nconst transport = new StdioServerTransport();\n\nserver.connect(transport).then(() => {\n console.error('MCP server running on stdio');\n}).catch(console.error);\n`;\n\n const content = [\n header,\n importDependenciesImplementation,\n importHandlersImplementation,\n importToolSchemasImplementation,\n newMcpServerImplementation,\n toolImplementations,\n serverConnectImplementation,\n ].join('\\n');\n\n return [\n {\n content,\n path: serverPath,\n },\n ];\n};\n\nconst generateZodFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpec,\n) => {\n const { extension, dirname } = getFileInfo(output.target);\n\n const header = getHeader(output.override.header, getSpecInfo(context));\n\n const zods = await Promise.all(\n Object.values(verbOptions).map(async (verbOption) =>\n generateZod(\n verbOption,\n {\n route: verbOption.route,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target,\n },\n output.client,\n ),\n ),\n );\n\n const allMutators = new Map(\n zods.flatMap((z) => z.mutators ?? []).map((m) => [m.name, m]),\n )\n .values()\n .toArray();\n\n const mutatorsImports = generateMutatorImports({\n mutators: allMutators,\n });\n\n let content = `${header}import { z as zod } from 'zod';\\n${mutatorsImports}\\n`;\n\n const zodPath = path.join(dirname, `tool-schemas.zod${extension}`);\n\n content += zods.map((zod) => zod.implementation).join('\\n');\n\n return [\n {\n content,\n path: zodPath,\n },\n ];\n};\n\nconst generateHttpClientFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpec,\n) => {\n const {\n path: targetPath,\n extension,\n dirname,\n filename,\n } = getFileInfo(output.target);\n\n const header = getHeader(output.override.header, getSpecInfo(context));\n\n const clients = await Promise.all(\n Object.values(verbOptions).map(async (verbOption) => {\n const fullRoute = getFullRoute(\n verbOption.route,\n context.spec.servers,\n output.baseUrl,\n );\n\n const options = {\n route: fullRoute,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target,\n };\n\n return generateClient(verbOption, options, output.client, output);\n }),\n );\n\n const clientImplementation = clients\n .map((client) => client.implementation)\n .join('\\n');\n\n const isZodSchemaOutput =\n isObject(output.schemas) && output.schemas.type === 'zod';\n const schemasPath = (\n isObject(output.schemas)\n ? output.schemas.path\n : isString(output.schemas)\n ? output.schemas\n : undefined\n ) as string | undefined;\n const basePath = schemasPath ? getFileInfo(schemasPath).dirname : undefined;\n const relativeSchemasPath = basePath\n ? isZodSchemaOutput && output.indexFiles\n ? upath.getRelativeImportPath(targetPath, basePath, true)\n : upath.getRelativeImportPath(targetPath, basePath)\n : './' + filename + '.schemas';\n\n const importNames = clients\n .flatMap((client) => client.imports)\n .map((imp) => imp.name);\n const uniqueImportNames = new Set(importNames).values().toArray();\n\n const importImplementation = `import { ${uniqueImportNames.join(\n ',\\n',\n )} } from '${relativeSchemasPath}';`;\n\n const fetchHeader = generateFetchHeader({\n title: '',\n isRequestOptions: false,\n isMutator: false,\n noFunction: false,\n isGlobalMutator: false,\n provideIn: false,\n hasAwaitedType: false,\n output,\n verbOptions,\n clientImplementation,\n });\n\n const content = [\n header,\n importImplementation,\n fetchHeader,\n clientImplementation,\n ].join('\\n');\n const outputPath = path.join(dirname, `http-client${extension}`);\n\n return [\n {\n content,\n path: outputPath,\n },\n ];\n};\n\nexport const generateExtraFiles: ClientExtraFilesBuilder = async (\n verbOptions,\n output,\n context,\n) => {\n const server = generateServer(verbOptions, output, context);\n const [zods, httpClients] = await Promise.all([\n generateZodFiles(verbOptions, output, context),\n generateHttpClientFiles(verbOptions, output, context),\n ]);\n\n return [...server, ...zods, ...httpClients];\n};\n\nconst mcpClientBuilder: ClientGeneratorsBuilder = {\n client: generateMcp,\n header: getMcpHeader,\n extraFiles: generateExtraFiles,\n};\n\nexport const builder = () => () => mcpClientBuilder;\n\nexport default builder;\n"],"mappings":";;;;;;AAyBA,MAAM,aACJ,QACA,SACW;AACX,KAAI,CAAC,OACH,QAAO;CAGT,MAAM,SAAS,OAAO,KAAK;AAE3B,QAAO,MAAM,QAAQ,OAAO,GAAG,MAAM,EAAE,aAAa,QAAQ,CAAC,GAAG;;AAGlE,MAAM,eAAe,YACnB,QAAQ,KAAK,QAAQ;CACnB,OAAO;CACP,SAAS;CACV;AAEH,MAAa,gBAAqC,EAAE,aAAa,aAAa;CAC5E,MAAM,aAAa,YAAY,OAAO,OAAO;CAC7C,MAAM,cACJ,SAAS,OAAO,QAAQ,GACpB,OAAO,QAAQ,OACf,SAAS,OAAO,QAAQ,GACtB,OAAO,UACP;CAER,MAAM,aAAa,cAAc,YAAY,YAAY,GAAG;CAE5D,MAAM,oBACJ,SAAS,OAAO,QAAQ,IAAI,OAAO,QAAQ,SAAS;CACtD,MAAM,WAAW,YAAY;CAC7B,MAAM,2BAA2B,WAC7B,qBAAqB,OAAO,aAC1B,MAAM,sBAAsB,WAAW,MAAM,UAAU,KAAK,GAC5D,MAAM,sBAAsB,WAAW,MAAM,SAAS,GACxD,OAAO,WAAW,WAAW;AA6CjC,QALgB,CAnBoB,eAnBV,IAAI,IAC5B,OAAO,OAAO,YAAY,CAAC,SAAS,eAAe;EACjD,MAAM,UAAU,EAAE;EAClB,MAAM,sBAAsB,OAAO,WAAW,cAAc;AAE5D,MAAI,WAAW,YACb,SAAQ,KAAK,GAAG,oBAAoB,QAAQ;AAG9C,MAAI,WAAW,KAAK,QAAQ,IAAI,KAC9B,SAAQ,KAAK,WAAW,KAAK,QAAQ,IAAI,KAAK;AAGhD,SAAO;GACP,CACH,CACE,QAAQ,CACR,SAAS,CAEyD,KACnE,QACD,CAAC,YAAY,yBAAyB;GAYC,eART,IAAI,IACjC,OAAO,OAAO,YAAY,CAAC,SACxB,eAAe,WAAW,cAC5B,CACF,CACE,QAAQ,CACR,SAAS,CAEkE,KAC5E,QACD,CAAC;IAMD,CAAC,KAAK,KAAK,GAEK;;AAGnB,MAAa,eAA8B,gBAAgB;CACzD,MAAM,mBAAmB,EAAE;CAC3B,MAAM,iBAAiB,YAAY,OAChC,KAAK,UAAU;AAGd,SAAO,OAFW,MAAM,KAAK,MAAM,KAAK,CAAC,GAEjB,IADN,MAAM,eAAe,MAAM,KAAK,CAAC;GAEnD,CACD,KAAK,MAAM;AACd,KAAI,eACF,kBAAiB,KAAK,oBAAoB,eAAe,QAAQ;AAEnE,KAAI,YAAY,YACd,kBAAiB,KACf,kBAAkB,YAAY,YAAY,OAAO,KAAK,GACvD;AAEH,KAAI,YAAY,KAAK,WACnB,kBAAiB,KAAK,iBAAiB,YAAY,KAAK,WAAW,GAAG;CAGxE,MAAM,kBAAkB,GAAG,YAAY,cAAc;CACrD,MAAM,4BACJ,iBAAiB,SAAS,IACtB;cACM,gBAAgB;EAC5B,iBAAiB,KAAK,KAAK,CAAC;;IAGtB;CAEN,MAAM,cAAc,EAAE;AACtB,KAAI,YAAY,OAAO,SAAS,GAAG;EACjC,MAAM,iBAAiB,YAAY,OAChC,KAAK,UAAU;AAGd,UAAO,mBAFW,MAAM,KAAK,MAAM,KAAK,CAAC;IAGzC,CACD,KAAK,KAAK;AAEb,cAAY,KAAK,eAAe;;AAElC,KAAI,YAAY,KAAK,WAAY,aAAY,KAAK,kBAAkB;AACpE,KAAI,YAAY,YAAa,aAAY,KAAK,mBAAmB;CAiBjE,MAAM,yBAAyB,CAC7B,2BAf4B;eADV,GAAG,YAAY,cAAc,SAExB,YAAY,iBAAiB,SAAS,IAAI,SAAS,oBAAoB,GAAG;sBAC/E,YAAY,cAAc,GAAG,YAAY,KAAK,KAAK,CAAC;;;;;;;;;;IAevE,CAAC,KAAK,GAAG;AAEV,QAAO;EACL,gBAAgB,yBAAyB,GAAG,uBAAuB,MAAM;EACzE,SAAS,EAAE;EACZ;;AAGH,MAAa,kBACX,aACA,QACA,YACG;CACH,MAAM,OAAO,YAAY,QAAQ;CACjC,MAAM,EAAE,WAAW,YAAY,YAAY,OAAO,OAAO;CACzD,MAAM,aAAa,KAAK,KAAK,SAAS,SAAS,YAAY;CAC3D,MAAM,SAAS,UAAU,OAAO,SAAS,QAAQ,KAAK;CAEtD,MAAM,sBAAsB,OAAO,OAAO,YAAY,CACnD,KAAK,eAAe;EACnB,MAAM,sBAAsB,OAAO,WAAW,cAAc;EAC5D,MAAM,mBAAmB,EAAE;AAC3B,MAAI,WAAW,OAAO,SAAS,EAC7B,kBAAiB,KAAK,iBAAiB,oBAAoB,QAAQ;AACrE,MAAI,WAAW,YACb,kBAAiB,KACf,kBAAkB,oBAAoB,aACvC;AACH,MAAI,WAAW,KAAK,WAClB,kBAAiB,KAAK,iBAAiB,oBAAoB,MAAM;EAEnE,MAAM,4BACJ,iBAAiB,SAAS,IACtB;IACR,iBAAiB,KAAK,QAAQ,CAAC;QAEvB;AASN,SAP2B;;KAE5B,eAAe,WAAW,cAAc,CAAC;KACzC,eAAe,WAAW,WAAW,GAAG,CAAC,IAAI,4BAA4B,KAAK,8BAA8B,GAAG;IAChH,eAAe,WAAW,cAAc,CAAC;;GAIvC,CACD,KAAK,KAAK;CAmBb,MAAM,kCAAkC,aAjBd,OAAO,OAAO,YAAY,CACjD,SAAS,eAAe;EACvB,MAAM,UAAU,EAAE;EAElB,MAAM,sBAAsB,OAAO,WAAW,cAAc;AAE5D,MAAI,WAAW,QAAS,SAAQ,KAAK,KAAK,oBAAoB,QAAQ;AACtE,MAAI,WAAW,OAAO,SAAS,EAC7B,SAAQ,KAAK,KAAK,oBAAoB,QAAQ;AAChD,MAAI,WAAW,YACb,SAAQ,KAAK,KAAK,oBAAoB,aAAa;AACrD,MAAI,WAAW,KAAK,WAClB,SAAQ,KAAK,KAAK,oBAAoB,MAAM;AAE9C,SAAO;GACP,CACD,KAAK,MAAM,CACyD;AA0CvE,QAAO,CACL;EACE,SAZY;GACd;GAvBuC;;;;;;;;GAFJ,aANd,OAAO,OAAO,YAAY,CAC9C,QAAQ,eACP,oBAAoB,SAAS,GAAG,WAAW,cAAc,SAAS,CACnE,CACA,KAAK,eAAe,KAAK,WAAW,cAAc,SAAS,CAC3D,KAAK,MAAM,CACmD;GA4B/D;GAlBiC;;WAE1B,MAAM,KAAK,MAAM,CAAC;;;;GAkBzB;GAdkC;;;;;;;GAgBnC,CAAC,KAAK,KAAK;EAKR,MAAM;EACP,CACF;;AAGH,MAAM,mBAAmB,OACvB,aACA,QACA,YACG;CACH,MAAM,EAAE,WAAW,YAAY,YAAY,OAAO,OAAO;CAEzD,MAAM,SAAS,UAAU,OAAO,SAAS,QAAQ,YAAY,QAAQ,CAAC;CAEtE,MAAM,OAAO,MAAM,QAAQ,IACzB,OAAO,OAAO,YAAY,CAAC,IAAI,OAAO,eACpC,YACE,YACA;EACE,OAAO,WAAW;EAClB,WAAW,WAAW;EACtB,UAAU,OAAO;EACjB;EACA,MAAM,OAAO;EACb,QAAQ,OAAO;EAChB,EACD,OAAO,OACR,CACF,CACF;CAYD,IAAI,UAAU,GAAG,OAAO,mCAJA,uBAAuB,EAC7C,UAPkB,IAAI,IACtB,KAAK,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAC9D,CACE,QAAQ,CACR,SAAS,EAIX,CAAC,CAEyE;CAE3E,MAAM,UAAU,KAAK,KAAK,SAAS,mBAAmB,YAAY;AAElE,YAAW,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,KAAK,KAAK;AAE3D,QAAO,CACL;EACE;EACA,MAAM;EACP,CACF;;AAGH,MAAM,0BAA0B,OAC9B,aACA,QACA,YACG;CACH,MAAM,EACJ,MAAM,YACN,WACA,SACA,aACE,YAAY,OAAO,OAAO;CAE9B,MAAM,SAAS,UAAU,OAAO,SAAS,QAAQ,YAAY,QAAQ,CAAC;CAEtE,MAAM,UAAU,MAAM,QAAQ,IAC5B,OAAO,OAAO,YAAY,CAAC,IAAI,OAAO,eAAe;AAgBnD,SAAO,eAAe,YATN;GACd,OAPgB,aAChB,WAAW,OACX,QAAQ,KAAK,SACb,OAAO,QACR;GAIC,WAAW,WAAW;GACtB,UAAU,OAAO;GACjB;GACA,MAAM,OAAO;GACb,QAAQ,OAAO;GAChB,EAE0C,OAAO,QAAQ,OAAO;GACjE,CACH;CAED,MAAM,uBAAuB,QAC1B,KAAK,WAAW,OAAO,eAAe,CACtC,KAAK,KAAK;CAEb,MAAM,oBACJ,SAAS,OAAO,QAAQ,IAAI,OAAO,QAAQ,SAAS;CACtD,MAAM,cACJ,SAAS,OAAO,QAAQ,GACpB,OAAO,QAAQ,OACf,SAAS,OAAO,QAAQ,GACtB,OAAO,UACP;CAER,MAAM,WAAW,cAAc,YAAY,YAAY,CAAC,UAAU;CAClE,MAAM,sBAAsB,WACxB,qBAAqB,OAAO,aAC1B,MAAM,sBAAsB,YAAY,UAAU,KAAK,GACvD,MAAM,sBAAsB,YAAY,SAAS,GACnD,OAAO,WAAW;CAEtB,MAAM,cAAc,QACjB,SAAS,WAAW,OAAO,QAAQ,CACnC,KAAK,QAAQ,IAAI,KAAK;AA4BzB,QAAO,CACL;EACE,SAVY;GACd;GAlB2B,YAFH,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAEN,KACzD,MACD,CAAC,WAAW,oBAAoB;GAEb,oBAAoB;IACtC,OAAO;IACP,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,gBAAgB;IAChB;IACA;IACA;IACD,CAAC;GAMA;GACD,CAAC,KAAK,KAAK;EAMR,MALe,KAAK,KAAK,SAAS,cAAc,YAAY;EAM7D,CACF;;AAGH,MAAa,qBAA8C,OACzD,aACA,QACA,YACG;CACH,MAAM,SAAS,eAAe,aAAa,QAAQ,QAAQ;CAC3D,MAAM,CAAC,MAAM,eAAe,MAAM,QAAQ,IAAI,CAC5C,iBAAiB,aAAa,QAAQ,QAAQ,EAC9C,wBAAwB,aAAa,QAAQ,QAAQ,CACtD,CAAC;AAEF,QAAO;EAAC,GAAG;EAAQ,GAAG;EAAM,GAAG;EAAY;;AAG7C,MAAM,mBAA4C;CAChD,QAAQ;CACR,QAAQ;CACR,YAAY;CACb;AAED,MAAa,sBAAsB"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport {\n camel,\n type ClientBuilder,\n type ClientExtraFilesBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n type ContextSpec,\n generateMutatorImports,\n type GeneratorVerbOptions,\n getFileInfo,\n getFullRoute,\n getParamsInPath,\n isObject,\n isString,\n jsDoc,\n jsStringEscape,\n type NormalizedOutputOptions,\n type OpenApiInfoObject,\n pascal,\n upath,\n} from '@orval/core';\nimport { generateClient, generateFetchHeader } from '@orval/fetch';\nimport { generateZod } from '@orval/zod';\n\nconst getHeader = (\n option: false | ((info: OpenApiInfoObject) => string | string[]),\n info: OpenApiInfoObject,\n): string => {\n if (!option) {\n return '';\n }\n\n const header = option(info);\n\n return Array.isArray(header) ? jsDoc({ description: header }) : header;\n};\n\nconst getSpecInfo = (context: ContextSpec): OpenApiInfoObject =>\n context.spec.info ?? {\n title: 'API',\n version: '1.0.0',\n };\n\nexport const getMcpHeader: ClientHeaderBuilder = ({ verbOptions, output }) => {\n const targetInfo = getFileInfo(output.target);\n const schemasPath = (\n isObject(output.schemas)\n ? output.schemas.path\n : isString(output.schemas)\n ? output.schemas\n : undefined\n ) as string | undefined;\n const schemaInfo = schemasPath ? getFileInfo(schemasPath) : undefined;\n\n const isZodSchemaOutput =\n isObject(output.schemas) && output.schemas.type === 'zod';\n const basePath = schemaInfo?.dirname;\n const relativeSchemaImportPath = basePath\n ? isZodSchemaOutput && output.indexFiles\n ? upath.getRelativeImportPath(targetInfo.path, basePath, true)\n : upath.getRelativeImportPath(targetInfo.path, basePath)\n : './' + targetInfo.filename + '.schemas';\n\n const importSchemaNames = new Set(\n Object.values(verbOptions).flatMap((verbOption) => {\n const imports = [];\n const pascalOperationName = pascal(verbOption.operationName);\n\n if (verbOption.queryParams) {\n imports.push(`${pascalOperationName}Params`);\n }\n\n if (verbOption.body.imports[0]?.name) {\n imports.push(verbOption.body.imports[0]?.name);\n }\n\n return imports;\n }),\n )\n .values()\n .toArray();\n\n const importSchemasImplementation = `import {\\n ${importSchemaNames.join(\n ',\\n ',\n )}\\n} from '${relativeSchemaImportPath}';\n`;\n\n const relativeFetchClientPath = './http-client';\n const importFetchClientNames = new Set(\n Object.values(verbOptions).flatMap(\n (verbOption) => verbOption.operationName,\n ),\n )\n .values()\n .toArray();\n\n const importFetchClientImplementation = `import {\\n ${importFetchClientNames.join(\n ',\\n ',\n )}\\n} from '${relativeFetchClientPath}';\n `;\n\n const content = [\n importSchemasImplementation,\n importFetchClientImplementation,\n ].join('\\n');\n\n return content + '\\n';\n};\n\nexport const generateMcp: ClientBuilder = (verbOptions) => {\n const handlerArgsTypes = [];\n const originalParamNames = getParamsInPath(verbOptions.pathRoute);\n const pathParamsType = verbOptions.params\n .map((param, index) => {\n const paramName = originalParamNames[index];\n const paramType = param.implementation.split(': ')[1];\n return ` ${paramName}: ${paramType}`;\n })\n .join(',\\n');\n if (pathParamsType) {\n handlerArgsTypes.push(` pathParams: {\\n${pathParamsType}\\n };`);\n }\n if (verbOptions.queryParams) {\n handlerArgsTypes.push(\n ` queryParams: ${verbOptions.queryParams.schema.name};`,\n );\n }\n if (verbOptions.body.definition) {\n handlerArgsTypes.push(` bodyParams: ${verbOptions.body.definition};`);\n }\n\n const handlerArgsName = `${verbOptions.operationName}Args`;\n const handlerArgsImplementation =\n handlerArgsTypes.length > 0\n ? `\nexport type ${handlerArgsName} = {\n${handlerArgsTypes.join('\\n')}\n}\n`\n : '';\n\n const fetchParams = [];\n if (verbOptions.params.length > 0) {\n const pathParamsArgs = originalParamNames\n .map((paramName) => `args.pathParams.${paramName}`)\n .join(', ');\n\n fetchParams.push(pathParamsArgs);\n }\n if (verbOptions.body.definition) fetchParams.push(`args.bodyParams`);\n if (verbOptions.queryParams) fetchParams.push(`args.queryParams`);\n\n const handlerName = `${verbOptions.operationName}Handler`;\n const handlerImplementation = `\nexport const ${handlerName} = async (${handlerArgsTypes.length > 0 ? `args: ${handlerArgsName}, ` : ''}options?: RequestInit) => {\n const res = await ${verbOptions.operationName}(${fetchParams.length > 0 ? `${fetchParams.join(', ')}, ` : ''}options);\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(res),\n },\n ],\n };\n};`;\n\n const handlersImplementation = [\n handlerArgsImplementation,\n handlerImplementation,\n ].join('');\n\n return {\n implementation: handlersImplementation ? `${handlersImplementation}\\n` : '',\n imports: [],\n };\n};\n\nexport const generateServer = (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpec,\n) => {\n const info = getSpecInfo(context);\n const { extension, dirname } = getFileInfo(output.target);\n const serverPath = path.join(dirname, `server${extension}`);\n const header = getHeader(output.override.header, info);\n\n const mcpServerOptions = output.override.mcp.server;\n\n const toolImplementations = Object.values(verbOptions)\n .map((verbOption) => {\n const pascalOperationName = pascal(verbOption.operationName);\n const inputSchemaTypes = [];\n if (verbOption.params.length > 0)\n inputSchemaTypes.push(` pathParams: ${pascalOperationName}Params`);\n if (verbOption.queryParams)\n inputSchemaTypes.push(\n ` queryParams: ${pascalOperationName}QueryParams`,\n );\n if (verbOption.body.definition)\n inputSchemaTypes.push(` bodyParams: ${pascalOperationName}Body`);\n\n const inputSchemaImplementation =\n inputSchemaTypes.length > 0\n ? ` {\n ${inputSchemaTypes.join(',\\n ')}\n },`\n : '';\n\n const handlerCallImplementation = inputSchemaImplementation\n ? `(args) => ${verbOption.operationName}Handler(args, options)`\n : `() => ${verbOption.operationName}Handler(options)`;\n\n const toolImplementation = `\nserver.tool(\n '${jsStringEscape(verbOption.operationName)}',\n '${jsStringEscape(verbOption.summary ?? '')}',${inputSchemaImplementation ? `\\n${inputSchemaImplementation}` : ''}\n ${handlerCallImplementation}\n);`;\n\n return toolImplementation;\n })\n .join('\\n');\n\n const importToolSchemas = Object.values(verbOptions)\n .flatMap((verbOption) => {\n const imports = [];\n\n const pascalOperationName = pascal(verbOption.operationName);\n\n if (verbOption.headers) imports.push(` ${pascalOperationName}Header`);\n if (verbOption.params.length > 0)\n imports.push(` ${pascalOperationName}Params`);\n if (verbOption.queryParams)\n imports.push(` ${pascalOperationName}QueryParams`);\n if (verbOption.body.definition)\n imports.push(` ${pascalOperationName}Body`);\n\n return imports;\n })\n .join(',\\n');\n const importToolSchemasImplementation = `import {\\n${importToolSchemas}\\n} from './tool-schemas.zod';`;\n\n const importHandlers = Object.values(verbOptions)\n .filter((verbOption) =>\n toolImplementations.includes(`${verbOption.operationName}Handler`),\n )\n .map((verbOption) => ` ${verbOption.operationName}Handler`)\n .join(`,\\n`);\n const importHandlersImplementation = `import {\\n${importHandlers}\\n} from './handlers';`;\n\n const createMcpServerImplementation = `\nconst createMcpServer = (options?: RequestInit) => {\n const server = new McpServer({\n name: '${camel(info.title)}Server',\n version: '1.0.0',\n });\n${toolImplementations}\n\n return server;\n};\n`;\n\n const serverFunctionName = mcpServerOptions?.name ?? 'customServer';\n const relativeServerPath = mcpServerOptions\n ? upath.getRelativeImportPath(serverPath, mcpServerOptions.path)\n : '';\n const importSpecifier = mcpServerOptions?.default\n ? serverFunctionName\n : `{ ${serverFunctionName} }`;\n\n const importMcpServer = `import {\n McpServer\n} from '@modelcontextprotocol/sdk/server/mcp.js';\n`;\n\n const importTransport = mcpServerOptions\n ? `import ${importSpecifier} from '${relativeServerPath}';`\n : `import {\n StdioServerTransport\n} from '@modelcontextprotocol/sdk/server/stdio.js';`;\n\n const importDependenciesImplementation = `${importMcpServer}\n${importTransport}\n`;\n\n const customServerConnectImplementation = `\\n${serverFunctionName}(createMcpServer);\\n`;\n const stdioServerConnectImplementation = `\nconst server = createMcpServer();\nconst transport = new StdioServerTransport();\n\nserver.connect(transport).then(() => {\n console.error('MCP server running on stdio');\n}).catch(console.error);\n`;\n\n const serverConnectImplementation = mcpServerOptions\n ? customServerConnectImplementation\n : stdioServerConnectImplementation;\n\n const content = [\n header,\n importDependenciesImplementation,\n importHandlersImplementation,\n importToolSchemasImplementation,\n createMcpServerImplementation,\n serverConnectImplementation,\n ].join('\\n');\n\n return [\n {\n content,\n path: serverPath,\n },\n ];\n};\n\nconst generateZodFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpec,\n) => {\n const { extension, dirname } = getFileInfo(output.target);\n\n const header = getHeader(output.override.header, getSpecInfo(context));\n\n const zods = await Promise.all(\n Object.values(verbOptions).map(async (verbOption) =>\n generateZod(\n verbOption,\n {\n route: verbOption.route,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target,\n },\n output.client,\n ),\n ),\n );\n\n const allMutators = new Map(\n zods.flatMap((z) => z.mutators ?? []).map((m) => [m.name, m]),\n )\n .values()\n .toArray();\n\n const mutatorsImports = generateMutatorImports({\n mutators: allMutators,\n });\n\n let content = `${header}import { z as zod } from 'zod';\\n${mutatorsImports}\\n`;\n\n const zodPath = path.join(dirname, `tool-schemas.zod${extension}`);\n\n content += zods.map((zod) => zod.implementation).join('\\n');\n\n return [\n {\n content,\n path: zodPath,\n },\n ];\n};\n\nconst generateHttpClientFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpec,\n) => {\n const {\n path: targetPath,\n extension,\n dirname,\n filename,\n } = getFileInfo(output.target);\n\n const header = getHeader(output.override.header, getSpecInfo(context));\n\n const clients = await Promise.all(\n Object.values(verbOptions).map(async (verbOption) => {\n const fullRoute = getFullRoute(\n verbOption.route,\n context.spec.servers,\n output.baseUrl,\n );\n\n const options = {\n route: fullRoute,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target,\n };\n\n return generateClient(verbOption, options, output.client, output);\n }),\n );\n\n const clientImplementation = clients\n .map((client) => client.implementation)\n .join('\\n');\n\n const isZodSchemaOutput =\n isObject(output.schemas) && output.schemas.type === 'zod';\n const schemasPath = (\n isObject(output.schemas)\n ? output.schemas.path\n : isString(output.schemas)\n ? output.schemas\n : undefined\n ) as string | undefined;\n const basePath = schemasPath ? getFileInfo(schemasPath).dirname : undefined;\n const relativeSchemasPath = basePath\n ? isZodSchemaOutput && output.indexFiles\n ? upath.getRelativeImportPath(targetPath, basePath, true)\n : upath.getRelativeImportPath(targetPath, basePath)\n : './' + filename + '.schemas';\n\n const importNames = clients\n .flatMap((client) => client.imports)\n .map((imp) => imp.name);\n const uniqueImportNames = new Set(importNames).values().toArray();\n\n const importImplementation = `import { ${uniqueImportNames.join(\n ',\\n',\n )} } from '${relativeSchemasPath}';`;\n\n const fetchHeader = generateFetchHeader({\n title: '',\n isRequestOptions: false,\n isMutator: false,\n noFunction: false,\n isGlobalMutator: false,\n provideIn: false,\n hasAwaitedType: false,\n output,\n verbOptions,\n clientImplementation,\n });\n\n const content = [\n header,\n importImplementation,\n fetchHeader,\n clientImplementation,\n ].join('\\n');\n const outputPath = path.join(dirname, `http-client${extension}`);\n\n return [\n {\n content,\n path: outputPath,\n },\n ];\n};\n\nexport const generateExtraFiles: ClientExtraFilesBuilder = async (\n verbOptions,\n output,\n context,\n) => {\n const server = generateServer(verbOptions, output, context);\n const [zods, httpClients] = await Promise.all([\n generateZodFiles(verbOptions, output, context),\n generateHttpClientFiles(verbOptions, output, context),\n ]);\n\n return [...server, ...zods, ...httpClients];\n};\n\nconst mcpClientBuilder: ClientGeneratorsBuilder = {\n client: generateMcp,\n header: getMcpHeader,\n extraFiles: generateExtraFiles,\n};\n\nexport const builder = () => () => mcpClientBuilder;\n\nexport default builder;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orval/mcp",
3
- "version": "8.7.0",
3
+ "version": "8.8.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,9 +35,9 @@
35
35
  "nuke": "rimraf .turbo dist node_modules"
36
36
  },
37
37
  "dependencies": {
38
- "@orval/core": "8.7.0",
39
- "@orval/fetch": "8.7.0",
40
- "@orval/zod": "8.7.0"
38
+ "@orval/core": "8.8.0",
39
+ "@orval/fetch": "8.8.0",
40
+ "@orval/zod": "8.8.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "eslint": "10.1.0",