Prevents execution of tools with invalid JSON parameters by validating JSON
syntax before tool execution and showing error UI for invalid input.
- Add validateJson method to DynamicJsonForm via forwardRef
- Add validation check in ToolsTab before tool execution
- Reuse existing JsonEditor error display for consistent UX
Number inputs were immediately converting values to Number() on every
keystroke, which prevented users from typing negative numbers since
the intermediate "-" character cannot be converted to a valid number.
Now the input stores the raw string value and only converts to Number
when the value is non-empty, allowing proper negative number entry.
- Extract tool results rendering into separate ToolResults component
- Hoist checkContentCompatibility function to module level following codebase conventions
- Add ajv@6.12.6 as direct dependency to client package.json
- All tests pass and linting is clean
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove unused catch parameter in ToolsTab.tsx
- Replace 'as any' with @ts-expect-error in test for invalid schema
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Applied consistent formatting to ToolsTab.tsx and schemaUtils.ts
to fix linting issues. No functional changes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit adds comprehensive support for structured output validation in tool calls,
following the MCP specification for tools with output schemas.
UI Changes:
1. Output Schema Display:
- Added collapsible output schema section in ToolsTab
- Shows output schemas after input fields, before the Run Tool button
- Default view shows 8 lines with scrolling, expandable to full view
- Expand/Collapse button with chevron icons for better UX
2. Structured Content Display:
- New "Structured Content" section when tools return structuredContent
- Shows structured data in a formatted JSON view
- Validation status indicator (green checkmark for valid, red X for errors)
- Detailed validation error messages when content doesn't match schema
3. Unstructured Content Labeling:
- Added "Unstructured Content" heading when both structured and unstructured content exist
- Only shows label when structured content is also present
- Maintains clean UI when only unstructured content exists
4. Compatibility Checking:
- Checks if unstructured content matches structured content (when output schema exists)
- Shows compatibility status with blue (compatible) or yellow (incompatible) indicators
- Detailed messages explain why content doesn't match
- Only runs compatibility check for tools with output schemas
5. Validation Error Handling:
- Shows error when tool with output schema doesn't return structured content
- Clear error messages for schema validation failures
- Maintains proper error state display
Technical Implementation:
- Added schema validation utilities using Ajv (same as SDK)
- Caches compiled validators for performance
- Validates on tool result display, not during the call
- Follows SDK's Client.callTool validation pattern
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>