Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- `connect` command now auto-generates session name when `@session` is omitted (e.g., `mcpc connect mcp.apify.com` creates `@apify`). If a session for the same server already exists with matching auth settings, it is reused instead of creating a duplicate.
- `--max-chars <chars>` global option to truncate large tool/prompt/resource output
- `--max-chars <n>` global option to truncate output to a given number of characters (ignored in `--json` mode)
- `tools-call <tool> --help` shows tool parameter schema (shortcut for `tools-get`)
- "Did you mean?" suggestions for unknown commands, including reversed names (e.g., `list-tools` → `tools-list`)
- `--json` output documentation in `--help` for all commands, describing the MCP object shape returned
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ Options:
--schema <file> Validate tool/prompt schema against expected schema
--schema-mode <mode> Schema validation mode: strict, compatible (default), ignore
--timeout <seconds> Request timeout in seconds (default: 300)
--max-chars <n> Truncate tool/prompt output to this many characters
--max-chars <n> Truncate output to n characters (ignored in --json mode)
--insecure Skip TLS certificate verification (for self-signed certs)
-v, --version Output the version number
-h, --help Display help
Expand Down
18 changes: 11 additions & 7 deletions src/cli/commands/prompts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*/

import type { CommandOptions } from '../../lib/types.js';
import { formatOutput, formatWarning, truncateOutput } from '../output.js';
import { formatOutput, formatWarning } from '../output.js';
import { withMcpClient } from '../helpers.js';
import { parseCommandArgs, hasStdinData, readStdinArgs } from '../parser.js';
import { ClientError } from '../../lib/errors.js';
Expand Down Expand Up @@ -31,7 +31,11 @@ export async function listPrompts(target: string, options: CommandOptions): Prom
cursor = result.nextCursor;
} while (cursor);

console.log(formatOutput(allPrompts, options.outputMode));
console.log(
formatOutput(allPrompts, options.outputMode, {
...(options.maxChars && { maxChars: options.maxChars }),
})
);
});
}

Expand Down Expand Up @@ -107,10 +111,10 @@ export async function getPrompt(

const result = await client.getPrompt(name, promptArgs);

let output = formatOutput(result, options.outputMode);
if (options.maxChars) {
output = truncateOutput(output, options.maxChars);
}
console.log(output);
console.log(
formatOutput(result, options.outputMode, {
...(options.maxChars && { maxChars: options.maxChars }),
})
);
});
}
24 changes: 16 additions & 8 deletions src/cli/commands/resources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Resources command handlers
*/

import { formatOutput, formatSuccess, truncateOutput } from '../output.js';
import { formatOutput, formatSuccess } from '../output.js';
import { withMcpClient } from '../helpers.js';
import type { CommandOptions } from '../../lib/types.js';

Expand All @@ -22,7 +22,11 @@ export async function listResources(target: string, options: CommandOptions): Pr
cursor = result.nextCursor;
} while (cursor);

console.log(formatOutput(allResources, options.outputMode));
console.log(
formatOutput(allResources, options.outputMode, {
...(options.maxChars && { maxChars: options.maxChars }),
})
);
});
}

Expand All @@ -45,7 +49,11 @@ export async function listResourceTemplates(
cursor = result.nextCursor;
} while (cursor);

console.log(formatOutput(allTemplates, options.outputMode));
console.log(
formatOutput(allTemplates, options.outputMode, {
...(options.maxChars && { maxChars: options.maxChars }),
})
);
});
}

Expand Down Expand Up @@ -83,11 +91,11 @@ export async function getResource(
return;
}

let output = formatOutput(result, options.outputMode);
if (options.maxChars) {
output = truncateOutput(output, options.maxChars);
}
console.log(output);
console.log(
formatOutput(result, options.outputMode, {
...(options.maxChars && { maxChars: options.maxChars }),
})
);
});
}

Expand Down
12 changes: 6 additions & 6 deletions src/cli/commands/tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import {
formatError,
formatWarning,
formatInfo,
truncateOutput,
} from '../output.js';
import { ClientError } from '../../lib/errors.js';
import type { CommandOptions, TaskUpdate } from '../../lib/types.js';
Expand Down Expand Up @@ -40,6 +39,7 @@ export async function listTools(
console.log(
formatOutput(result.tools, options.outputMode, {
...(options.full && { full: true }),
...(options.maxChars && { maxChars: options.maxChars }),
sessionName: target,
})
);
Expand Down Expand Up @@ -370,11 +370,11 @@ export async function callTool(
}
}

let output = formatOutput(result, options.outputMode);
if (options.maxChars) {
output = truncateOutput(output, options.maxChars);
}
console.log(output);
console.log(
formatOutput(result, options.outputMode, {
...(options.maxChars && { maxChars: options.maxChars }),
})
);

// Show hint for getting tool schema when the tool returned an error
if (result.isError && options.outputMode === 'human') {
Expand Down
4 changes: 2 additions & 2 deletions src/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ function createTopLevelProgram(): Command {
.option('--schema <file>', 'Validate tool/prompt schema against expected schema')
.option('--schema-mode <mode>', 'Schema validation mode: strict, compatible (default), ignore')
.option('--timeout <seconds>', 'Request timeout in seconds (default: 300)')
.option('--max-chars <n>', 'Truncate tool/prompt output to this many characters')
.option('--max-chars <n>', 'Truncate output to n characters (ignored in --json mode)')
.option('--insecure', 'Skip TLS certificate verification (for self-signed certs)')
.version(mcpcVersion, '-v, --version', 'Output the version number')
.helpOption('-h, --help', 'Display help');
Expand Down Expand Up @@ -1176,7 +1176,7 @@ function createSessionProgram(): Command {
.option('--schema <file>', 'Validate tool/prompt schema against expected schema')
.option('--schema-mode <mode>', 'Schema validation mode: strict, compatible (default), ignore')
.option('--timeout <seconds>', 'Request timeout in seconds (default: 300)')
.option('--max-chars <n>', 'Truncate tool/prompt output to this many characters')
.option('--max-chars <n>', 'Truncate output to n characters (ignored in --json mode)')
.option('--insecure', 'Skip TLS certificate verification (for self-signed certs)')
.addHelpText(
'after',
Expand Down
9 changes: 7 additions & 2 deletions src/cli/output.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ export interface FormatOptions {
full?: boolean;
/** Session name for contextual hints (e.g. @apify) */
sessionName?: string;
/** Truncate human-mode output to this many characters */
maxChars?: number;
}

/**
Expand All @@ -91,10 +93,13 @@ export function formatOutput(
if (mode === 'json') {
return formatJson(data);
}
const output = formatHuman(data, options);
let output = formatHuman(data, options);
// Ensure trailing newline for visual separation in shell (unless ends with code block)
if (!output.endsWith('````') && !output.endsWith('\n')) {
return output + '\n';
output += '\n';
}
if (options?.maxChars) {
output = truncateOutput(output, options.maxChars);
}
return output;
}
Expand Down
Loading