Summary
88 parameters across 26 tools have no type field in their JSON Schema. profile_name is untyped on 25 tools, region on 24, max_items on 7, and limit on 3.
MCP spec reference
The MCP specification (2025-03-26) requires tools to define their input via JSON Schema. The JSON Schema spec (draft 2020-12, section 6.1.1) defines type as the primary mechanism for constraining instance values. Without it, conformant MCP clients cannot validate or coerce argument types before sending.
Impact
Without a type field, agents guess the type from the parameter name. For max_items and limit (integers), agents frequently send "7" (string) instead of 7 (integer). For region and profile_name (strings), the absence is less critical but still violates the schema contract.
When agents send the wrong type, the tool returns an error and the agent retries with a different guess. Each retry consumes tokens and latency. Across 88 untyped parameters on 26 tools, this is a systemic source of tool-use failures.
Affected parameters
| Parameter |
Tools affected |
profile_name |
25 |
region |
24 |
max_items |
7 |
limit |
3 |
account_identifiers |
2 |
start_time, end_time |
2 each |
| 17 others |
1 each |
Additional findings (2 errors, 29 warnings)
get_metric_data: required parameters namespace and metric_name have no description
- 4 tool pairs have 80-89% similar descriptions (agents may confuse them)
tools/list response is 107KB (~27,542 tokens per session)
Reproduction
pip install mcp-assert
cd src/cloudwatch-mcp-server && uv venv && uv pip install -e .
mcp-assert lint -server ".venv/bin/awslabs.cloudwatch-mcp-server"
Summary
88 parameters across 26 tools have no
typefield in their JSON Schema.profile_nameis untyped on 25 tools,regionon 24,max_itemson 7, andlimiton 3.MCP spec reference
The MCP specification (2025-03-26) requires tools to define their input via JSON Schema. The JSON Schema spec (draft 2020-12, section 6.1.1) defines
typeas the primary mechanism for constraining instance values. Without it, conformant MCP clients cannot validate or coerce argument types before sending.Impact
Without a
typefield, agents guess the type from the parameter name. Formax_itemsandlimit(integers), agents frequently send"7"(string) instead of7(integer). Forregionandprofile_name(strings), the absence is less critical but still violates the schema contract.When agents send the wrong type, the tool returns an error and the agent retries with a different guess. Each retry consumes tokens and latency. Across 88 untyped parameters on 26 tools, this is a systemic source of tool-use failures.
Affected parameters
profile_nameregionmax_itemslimitaccount_identifiersstart_time,end_timeAdditional findings (2 errors, 29 warnings)
get_metric_data: required parametersnamespaceandmetric_namehave no descriptiontools/listresponse is 107KB (~27,542 tokens per session)Reproduction