Groq Desktop · MCP Debugging · JSON Schema

The
boss battle:
we fixed Groq
Desktop before
Groq did

Six apps configured. All working. Then Groq Desktop: every single tool call failed with a JSON schema error. The bug was inside Groq's own source code — and they didn't know it existed yet.

10 MIN READ PART 2 OF 3 GROQ · JSON SCHEMA · MCP · DEBUGGING
// THREE_PART_SERIES
PART 02 The Boss Battle — We fixed Groq Desktop before Groq did
THE_MOMENT_IT_BREAKS

Six apps working.
Then Groq.

Claude Desktop: working. Cursor: working. Windsurf: working. VS Code: working. Continue: working. Groq Desktop — the brand new AI desktop app from the company behind the fastest LLM inference on the planet: every single tool call fails with the same error, every time.

// ERROR — Groq Desktop tool call
400 {"error":{"message":"invalid JSON schema for tool vektor_recall, tools[0].function.parameters: `additionalProperties:false` must be set on every object","type":"invalid_request_error"}}

The error is clear enough: Groq's API requires additionalProperties: false on every object in a tool schema. Fair enough — some APIs are stricter than others. So we added it to every one of our 34 tool schemas. Repacked, reinstalled, retested.

Same error. Different wording this time:

// ERROR — after our fix
400 {"error":{"message":"invalid JSON schema for tool vektor_recall, tools[0].function.parameters: /required: `required` is required to be supplied and to be an array including every key in properties. The following properties must be listed in `required`: top_k"}}

Now Groq is complaining that optional properties aren't in the required array. top_k is optional — that's the point. It has a default value. But Groq's strict mode demands every property be listed as required.

We could fix our schemas. But something felt wrong. These errors shouldn't be coming from Groq's API directly — they should be coming from Groq Desktop's MCP-to-OpenAI converter. We looked at our tool schemas in Claude Desktop. They worked fine. Same schemas. Why would Groq's API see them differently?

INTO_THE_SOURCE_CODE

We opened
their source code.
And found the comment.

Groq Desktop is open source on GitHub. We cloned it, built it from source, and started searching. The MCP integration has to convert tool schemas from MCP format (inputSchema) to OpenAI function-calling format (parameters) before sending them to the API. That conversion lives in electron/chatHandler.js.

Line 80. Right there in the source:

electron/chatHandler.js — the smoking gun
// Sanitize schema: Reconstruction Strategy // Instead of copying, we rebuild the schema from scratch let safeSchema = { type: "object", properties: {} // Removed 'required' init here to add it only if needed // Removed 'additionalProperties' to be less strict/prone to validation errors };

"Removed 'additionalProperties' to be less strict/prone to validation errors." — Their own comment. The thing they removed to avoid validation errors was causing validation errors.

The irony is perfect. They removed additionalProperties: false to avoid validation errors — but Groq's own API now requires it. Their fix for one problem created a worse problem downstream.

And the required array bug was the same pattern: they only copied required from the original schema if it existed and had items. Optional properties with defaults — like our top_k — never made it into required. Groq's strict mode then rejected the schema because a property existed that wasn't listed as required.

THE_FIX

Two bugs.
Two fixes.
One rebuild.

The fix was surgical. In chatHandler.js, after the schema reconstruction block, we added three lines:

electron/chatHandler.js — the fix
// Rebuild required only if it has items (existing code) if (Array.isArray(schema.required) && schema.required.length > 0) { safeSchema.required = [...schema.required]; } // FIX 1 + 2: Groq API requires ALL properties in required[] // and additionalProperties: false on every object const allKeys = Object.keys(safeSchema.properties); if (allKeys.length > 0) safeSchema.required = allKeys; safeSchema.additionalProperties = false;

Three lines. That's it. Force all property keys into required. Add additionalProperties: false. Rebuild Groq Desktop. Install. Test.

// SUCCESS — after the fix
ToolVektor recall The memory has been successfully stored and recalled. "Groq Desktop fixed 13 April 2026" id: 16, score: 1.0

Score of 1.0. Perfect recall. All 34 tools working in Groq Desktop.

The timeline

ERROR #1
additionalProperties missing
Added to all 34 tool schemas in our MCP server
ERROR #2
Still failing — different error
Optional properties not in required[] — but our schemas were fine
INSIGHT
The error is coming from their converter
Groq Desktop strips and rebuilds schemas before sending to API
FOUND IT
chatHandler.js line 80
"Removed additionalProperties to be less strict" — the comment that said everything
FIXED
3 lines added, app rebuilt
score: 1.0 — all 34 tools working in Groq Desktop
REPORTED
Bug report sent to Groq
Full technical writeup with exact file, line numbers, and fix included
THE_CUSTOMER_PROBLEM

Every customer
would hit this.
So we automated the fix.

The moment the fix worked, the next question was obvious: what about our customers? Anyone who installs VEKTOR and tries to use it with Groq Desktop will hit the exact same two errors. They'll think VEKTOR is broken. They'll give up. They'll leave a one-star review.

We couldn't wait for Groq to push a fix. So we built the patch into our setup wizard. When the wizard detects Groq Desktop is installed, it automatically applies the chatHandler.js fix before writing the MCP config. The customer never sees an error. They never know the bug existed.

vektor-setup-wizard.js — auto-patch
// When Groq Desktop is detected, patch it silently if (app.name === 'Groq Desktop') { const patched = patchGroqDesktop(app.detect); if (patched) { tick('Groq Desktop schema fix applied automatically'); } writeMcpConfig(app.configPath, serverEntry, rootKey); }
// Wizard output — seamless customer experience
✓ Groq Desktop schema fix applied automatically ✓ Groq Desktop configured → settings.json ✓ Profile: dev (15 tools — dev optimised) · Restart Groq Desktop to apply changes

This is what good developer tooling looks like. You don't document the bug and hope users read it. You find it, fix it, automate the fix, and ship it. The user experience should be perfect even when the underlying ecosystem isn't.

COMING_NEXT

Part 3:
what we built

The dragons are slain. In Part 3 we zoom out — what is VEKTOR actually, why does local-first memory matter, and what does a 34-tool MCP server give you that a simple chatbot doesn't.

→ READ PART 3: WHAT WE BUILT