fix: convert non-boolean additionalProperties to boolean in tool schemas#129
fix: convert non-boolean additionalProperties to boolean in tool schemas#129lenanghai wants to merge 1 commit into
Conversation
Some MCP clients (Claude Desktop, OpenAI Codex) expect
additionalProperties to be a boolean, not a JSON Schema object.
The ADK generates `additionalProperties: {"type": "string"}` for
Dict[str, Any] type hints, which causes these clients to fail
silently or reject the tool schema entirely.
This adds a recursive fix in the schema post-processing step that
converts any non-boolean additionalProperties to `true`.
Fixes googleanalytics#40
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
|
@lenanghai Thanks for your submission. Can you sign the CLA here: https://cla.developers.google.com/ |
|
This fix was taken care of #135 |
| if "anyOf" in prop and prop.get("type") == "null": | ||
| del prop["type"] | ||
| # Fix non-boolean additionalProperties that break some MCP clients | ||
| _fix_additional_properties(tool.inputSchema) |
There was a problem hiding this comment.
| _fix_additional_properties(tool.inputSchema) | |
| _fix_additional_properties(tool.inputSchema)[]() |
tmpho079-pixel
left a comment
There was a problem hiding this comment.
/usr/bin/git config --global --add safe.directory /home/runner/work/google-analytics-mcp/google-analytics-mcp
Deleting the contents of '/home/runner/work/google-analytics-mcp/google-analytics-mcp'
Initializing the repository
Disabling automatic garbage collection
Setting up auth
Fetching the repository
/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +fc396716e86aacd4ec023a02487f8322e28a32a6:refs/remotes/pull/129/merge
| mcp_tools = [adk_to_mcp_tool_type(tool) for tool in tools] | ||
|
|
||
|
|
||
| def _fix_additional_properties(schema: dict) -> None: |
There was a problem hiding this comment.
/usr/bin/git config --global --add safe.directory /home/runner/work/google-analytics-mcp/google-analytics-mcp
Deleting the contents of '/home/runner/work/google-analytics-mcp/google-analytics-mcp'
Initializing the repository
Disabling automatic garbage collection
Setting up auth
Fetching the repository
/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +fc396716e86aacd4ec023a02487f8322e28a32a6:refs/remotes/pull/129/merge
Summary
additionalPropertiesin generated tool schemas that break MCP clients like Claude Desktop and OpenAI CodexadditionalProperties: {"type": "string"}forDict[str, Any]type hints, but some clients expect a boolean value_fix_additional_properties()function in the existing schema post-processing step incoordinator.pyRoot Cause
Parameters typed as
Dict[str, Any](e.g.,date_ranges,dimension_filter,metric_filter,order_bysinrun_report) produce JSON Schema withadditionalProperties: {"type": "string"}instead ofadditionalProperties: true. This causes:Failed to convert MCP tool: invalid type: map, expected a booleanTest plan
run_reporttool schema hasadditionalProperties: true(boolean) instead of{"type": "string"}run_reportrun_reportFixes #40
🤖 Generated with Claude Code