Commit graph

7 commits

Author SHA1 Message Date
Jeremiah Lowin
24e6a42f68
Use pydantic_core.to_json for consistency
- Generator now uses pydantic_core.to_json() instead of json.dumps()
- Consistent with rest of fastmcp codebase
- Generated CLI still uses plain json module (standalone script)
2026-02-03 14:15:15 -05:00
Jeremiah Lowin
8b285bf33e
Fix Codex review issues in generate-cli
High priority fixes:
- Complex type defaults: Serialize dict/list defaults to JSON strings
- List params: Preserve help metadata with Annotated wrapper
- Name collisions: Detect and error on sanitized name conflicts
- JSON parsing: Use isinstance check for safety with defaults

Added tests for:
- Complex types with default values
- Parameter name collision detection
- Updated existing tests to match new format
2026-02-03 14:13:39 -05:00
Jeremiah Lowin
8c8c074d10
Implement smart parameter handling for generate-cli
- Simple types (str, int, float, bool): Direct typed flags
- Arrays of simple types (list[str], list[int]): Repeatable flags via cyclopts
- Complex types (objects, nested arrays): Accept JSON strings with parsing
- JSON schema shown in help text for complex parameters
- Proper escaping of newlines and quotes in help text
- Filter out None and empty list defaults when calling tools

This gives typed, discoverable CLIs for common cases while handling
complex schemas via JSON input.
2026-02-03 12:57:01 -05:00
Jeremiah Lowin
89c4242034
Fix string escaping issues in generate-cli
- Use single-quoted docstrings to avoid triple-quote escaping issues
- Escape quotes in app_name derived from server_name
- Add tests for descriptions with quotes and server names with quotes

Addresses CodeRabbit review comments about insufficient escaping.
2026-02-03 12:35:22 -05:00
Jeremiah Lowin
68cd6770a9
fix: address PR review feedback
- Sanitize tool and parameter names to valid Python identifiers
- Replace bare except Exception with specific exception types
- Escape server name in generated string literals
- Handle trailing colon edge case in _derive_server_name
- Clarify in docs that generated CLI is a client, not a bundled server
2026-02-03 11:37:26 -05:00
Jeremiah Lowin
59f323ebb7
docs: add generate-cli documentation; skip Windows executable test 2026-02-03 11:23:42 -05:00
Jeremiah Lowin
2c705faa87
Add fastmcp generate-cli command
Connects to any MCP server, reads its tool/resource/prompt schemas,
and writes a standalone Python CLI script with typed subcommands.
2026-02-03 11:11:08 -05:00