fix: parse object-type parameters as JSON in generated CLIs
When an MCP tool schema declares a parameter with type 'object' (e.g. Atlassian's editJiraIssue fields parameter), the generated CLI previously passed the value as a raw string, causing MCP validation errors. Root cause: inferType() didn't recognize 'object' as a valid type, so it returned 'unknown'. optionParser() had no case for 'object', so no JSON.parse was generated for the Commander option. Changes: - Add 'object' to GeneratedOption type union in tools.ts - Add 'object' to resolveType whitelist in inferType() - Add 'case object' returning JSON.parse in optionParser() Fixes #113
This commit is contained in:
parent
b49af49402
commit
6a60e967a6
@ -391,6 +391,8 @@ function optionParser(option: GeneratedOption): string | undefined {
|
||||
return '(value) => parseFloat(value)';
|
||||
case 'boolean':
|
||||
return "(value) => value !== 'false'";
|
||||
case 'object':
|
||||
return '(value) => JSON.parse(value)';
|
||||
case 'array':
|
||||
// Coerce array elements to their proper types based on schema
|
||||
switch (option.arrayItemType) {
|
||||
|
||||
@ -11,7 +11,7 @@ export interface GeneratedOption {
|
||||
cliName: string;
|
||||
description?: string;
|
||||
required: boolean;
|
||||
type: 'string' | 'number' | 'boolean' | 'array' | 'unknown';
|
||||
type: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'unknown';
|
||||
arrayItemType?: 'string' | 'number' | 'boolean' | 'unknown';
|
||||
placeholder: string;
|
||||
exampleValue?: string;
|
||||
@ -228,7 +228,7 @@ export function inferType(descriptor: unknown): GeneratedOption['type'] {
|
||||
if (value === 'integer') {
|
||||
return 'number';
|
||||
}
|
||||
if (value === 'string' || value === 'number' || value === 'boolean' || value === 'array') {
|
||||
if (value === 'string' || value === 'number' || value === 'boolean' || value === 'array' || value === 'object') {
|
||||
return value;
|
||||
}
|
||||
return undefined;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user