Options
Pass these options to pluginMcp(). Shared options link to Shared plugin options, which documents their behavior once.
Options overview
| Option | Purpose | Default |
|---|---|---|
output | Where the generated handlers are written and exported. | { path: 'mcp', barrel: { type: 'named' } } |
↳ output.path | Choose the output folder. | 'mcp' |
↳ output.mode | Directory output only. | 'directory' |
↳ output.barrel | Configure barrel exports. | { type: 'named' } |
↳ output.banner | Add content before generated code. | None |
↳ output.footer | Add content after generated code. | None |
group | Split handlers into per-tag or per-path folders. | None |
↳ group.type | Group operations by tag or URL path. | Required with group |
↳ group.name | Customize output group names. | camelCased tag or raw path segment |
client | Which registered client plugin the handlers call. | Auto-detected |
include | Keep only operations that match. | None |
exclude | Skip operations that match. | [] |
override | Apply different options per pattern. | [] |
resolver | Customize generated names and file paths. | resolverMcp |
macros | Rewrite AST nodes before printing. | [] |
Option details
output
Where the generated MCP handler files are written. The plugin writes server.ts and .mcp.json at the root of output.path, next to the per-operation handlers, so keep output.path an extensionless directory name such as the default 'mcp'. A single-file output (output.mode: 'file', or a path with an extension) has nowhere to put those files. With group, the handlers move into subfolders while server.ts and .mcp.json keep their place at the root.
| Type | Output |
| Required | false |
| Default | { path: 'mcp', barrel: { type: 'named' } } |
client
Selects which registered client plugin the handlers call. A single registered client is auto-detected. Set client when several are registered.
| Type | 'fetch' | 'axios' |
| Required | false |
@kubb/plugin-fetch.@kubb/plugin-axios.Each handler passes grouped { path, query, headers, body } options. Configure transport settings such as baseURL on the client plugin.
Generated handlers follow the client plugin's returnType option. With 'full' (the client default) handlers read the success body from res.data, and with 'data' they use the resolved call result directly as the tool response body. Handlers always pass throwOnError: true so non-2xx responses throw and surface as tool errors, regardless of the client's throwOnErrorDefault.
@kubb/plugin-fetch or @kubb/plugin-axios alongside this one.resolver
Overrides generated file and symbol names. Omitted members keep resolverMcp. The shared members (name, file, imports) and the this context are described under resolver.
| Type | ResolverPatch<ResolverMcp> |
| Required | false |
type ResolverMcpPatch = {
name?(name: string): string
file?: {
baseName?(params: { name: string; extname: string }): string
path?(params: { baseName: string; output: Output }): string
}
imports?(options: ResolveImportsOptions): Array<ImportNode>
handler?: {
name?(node: OperationNode): string // → 'showPetByIdHandler'
}
}