Boolean `exclusiveMinimum` (draft-4 style) in dnsProvider-createRecord/updateRecord — Anthropic API 400s the whole tool list
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 379
- Forks
- 77
- PR merge metrics
- No merged PRs in 30d
Description
Summary
@dokploy/mcp 0.30.0 (serverInfo reports dokploy v2.0.0) ships two tools whose inputSchema declares $schema: https://json-schema.org/draft/2020-12/schema but contains a boolean exclusiveMinimum — draft-4 syntax. Draft 2020-12 requires exclusiveMinimum to be a number, so strict providers reject the entire request the moment either tool is in the payload.
Affected tools:
dnsProvider-createRecorddnsProvider-updateRecord
Emitted schema for ttl (from a live tools/list against 0.30.0):
{"type": "integer", "exclusiveMinimum": true, "minimum": 0, "maximum": 9007199254740991}
Impact
With the default preset (all, 597 tools), every Anthropic API request carrying the tool list fails:
API Error: 400 tools.N.custom.input_schema: JSON schema is invalid.
It must match JSON Schema draft 2020-12
In Claude Code this breaks the whole session (including context compaction) whenever the server is enabled — same failure family as #10 / #32 / #36 / #37, but a different keyword.
Root cause
src/generated/openapi.json is correct — both dnsProvider.createRecord and dnsProvider.updateRecord declare ttl with numeric exclusiveMinimum: 0. The generation/serialization pipeline converts that into the draft-4 pair {"minimum": 0, "exclusiveMinimum": true} (OpenAPI 3.0 style), while still stamping the schema as draft 2020-12.
Repro
DOKPLOY_URL=... DOKPLOY_API_KEY=... npx -y @dokploy/mcp
# send initialize + tools/list, then validate each inputSchema:
const Ajv2020 = require('ajv/dist/2020');
new Ajv2020({strict:false}).compile(tool.inputSchema);
// Error: schema is invalid: data/properties/ttl/exclusiveMinimum must be number
Validating all 597 tools with Ajv 2020: exactly these two fail; everything else compiles (only non-fatal format: uri/email warnings).
Expected
Either keep the numeric form from the OpenAPI source ("exclusiveMinimum": 0, drop the redundant minimum), or emit {"minimum": 1} — both valid draft 2020-12.
Workaround
DOKPLOY_TOOL_PRESET=minimal (40 tools) excludes both broken tools and works against Anthropic's API. DOKPLOY_DISABLED_TAGS=dns does not help — the tag filter left all 597 tools loaded in my test.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with src/generated/openapi.json and trace the generation or serialization pipeline that produces inputSchema for dnsProvider-createRecord and dnsProvider-updateRecord. Validate the emitted schemas with Ajv2020; done means both ttl schemas use a numeric exclusiveMinimum or valid minimum form and all 597 tools compile under draft 2020-12.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- openapi, typescript
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100