Fix guides · check schema.untyped
Each property needs type, enum, anyOf/oneOf or $ref.
269 of 15,360 reachable MCP servers (1.8%) have this issue today.
Without a type the model guesses: strings for numbers, objects for arrays, ISO dates as free text. Typed parameters are the cheapest way to get correct arguments on the first call.
"properties": { "limit": {}, "since": { "description": "start date" } }"properties": { "limit": { "type": "integer", "minimum": 1, "maximum": 100 }, "since": { "type": "string", "format": "date", "description": "ISO 8601 date, e.g. 2026-10-17" } }inputSchema: { limit: z.number().int().min(1).max(100), since: z.string().date().describe("ISO 8601 date, e.g. 2026-10-17") }def list_items(limit: Annotated[int, Field(ge=1, le=100)] = 20, since: Annotated[date | None, Field(description="ISO 8601 date")] = None): ...
Paste your endpoint at /check, or run it in CI:
pipx run glimind check https://your-server.example.com/mcp --min-grade B