[BUG] MCP tool schemas with complex/nested properties are silently truncated and parameters stripped
Environment
- Claude Code (claude-opus-4-6)
- macOS 15 (Darwin 25.3.0)
- MCP server: fradser/mcp-server-apple-events v1.2.0 via npx
Description
Claude Code silently truncates MCP tool schemas that have many properties or nested object types, and also strips the truncated parameters from outgoing tool calls. This means fully functional MCP server capabilities become invisible and unusable.
Reproduction
The calendar_events tool defines 20 properties in its inputSchema (in src/tools/definitions.ts). Claude Code only surfaces 12 of them.
Visible (12): action, endDate, filterCalendar, id, isAllDay, location, note, search, startDate, targetCalendar, title, url
Truncated (8): alarms, clearAlarms, structuredLocation, availability, recurrenceRules, clearRecurrence, span, filterAccount
The truncated parameters include:
- Arrays of objects (e.g.,
alarms: [{relativeOffset: -1800}]) - Nested objects (e.g.,
structuredLocation: {title, latitude, longitude}) - Simple types appearing later in a large schema (e.g.,
filterAccount: string)
The reminders_tasks tool from the same server has ~30 properties and is similarly affected.
Two distinct problems
- Schema truncation — Claude doesn't see the parameters exist, so it can't use them even with knowledge of the full schema (e.g., via a skill document that describes the hidden parameters)
- Parameter enforcement — Even when Claude attempts to pass truncated parameters in a tool call, they are stripped before reaching the MCP server
Evidence
- Created a calendar event attempting to pass
alarms: [{relativeOffset: -7200}, {relativeOffset: -900}] - Event was created successfully but with no alarms — the parameter was silently stripped
- Verified the MCP server's
definitions.tscorrectly definesalarmsin thecalendar_eventstool schema - Verified the full pipeline (handler → repository → Swift CLI) supports alarms
- The server never received the
alarmsparameter
Expected behavior
All parameters defined in an MCP tool's inputSchema should be visible to Claude and passable in tool calls. If schema size reduction is necessary for context management, it should be documented and ideally configurable, not silent.
Workaround
None fully effective. A skill document can inform Claude the parameters exist, but parameter enforcement still strips them from outgoing calls.
Reported by: Eric Turner (eric@magicwavesoftware.com)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗