Skip to main content
Glama

Jsonaut

JSON repair & validation built for AI agents as the customer. Send possibly-malformed JSON (LLM tool-call output, another agent's message, a flaky upstream), get back parsed, schema-valid JSON.

  • Free tier: deterministic repair — trailing commas, single quotes, truncation, markdown code fences, comments, Python literals — plus JSON Schema validation with type coercion (string→number, defaults, stripping hallucinated fields). Rate-limited per IP.

  • Paid tier: LLM-fallback repair for inputs the deterministic pass can't fix. $0.01/call, charged only on success, paid autonomously per-call via x402 (USDC on Base) — no accounts, no signup.

Business context, market research, and the full 3-day plan live in IDEA.md and PLAN.md.

Quickstart

npm install
npm test          # 27 tests: repair battery, schema coercion, HTTP API, MCP protocol
npm run dev       # http://localhost:8787 — demo page + API + MCP endpoint

Try it:

curl -s -X POST http://localhost:8787/v1/repair \
  -H "content-type: application/json" \
  -d "{\"input\": \"{'name': 'alice', 'count': '42',}\", \"schema\": {\"type\":\"object\",\"properties\":{\"count\":{\"type\":\"number\"}}}}"
{
  "valid": true,
  "repaired": { "name": "alice", "count": 42 },
  "method": "deterministic-repair",
  "changes": ["repaired JSON syntax (jsonrepair)", "$.count: coerced string \"42\" to number"]
}

Related MCP server: json-sanity

API

Route

What it does

POST /v1/repair

Repair + optional schema validation/coercion. Body: {input, schema?, allow_llm_fallback?}

POST /v1/validate

Validate only, no repair. Body: {input, schema}

POST /mcp

MCP server (Streamable HTTP, stateless). Tools: repair_json, validate_json

GET /

Interactive demo page

GET /llms.txt

Agent-readable capability + pricing description

GET /openapi.yaml

OpenAPI 3.1 spec

Response method values: direct (was already valid), deterministic-repair (free fix), llm-repair (paid fix), failed. changes[] lists every modification so callers can audit what was done to their data.

Using it from an agent (MCP)

claude mcp add --transport http jsonaut https://YOUR-DEPLOYMENT/mcp

Or in any MCP client config:

{ "mcpServers": { "jsonaut": { "type": "http", "url": "https://YOUR-DEPLOYMENT/mcp" } } }

For the paid tier, clients pay via x402 and retry with the X-PAYMENT header (the payment receipt). No accounts or API keys — agents pay per call.

Payment flow (x402)

  1. Agent calls /v1/repair with allow_llm_fallback: true; deterministic repair fails.

  2. Server responds 402 with an x402 accepts array (USDC on Base, amount = PRICE_USD).

  3. Agent pays and retries with the X-PAYMENT header; server verifies via the facilitator, runs the LLM repair, and settles only if the repair succeeds.

Configuration

Env var

Purpose

Required for

OPENROUTER_API_KEY

Enables the paid LLM-fallback tier (via OpenRouter; free model by default)

Paid tier

OPENROUTER_MODEL

Override the model (default meta-llama/llama-3.3-70b-instruct:free)

X402_PAY_TO

Wallet address on Base receiving USDC

x402 rail

X402_NETWORK

base or base-sepolia (default base)

x402 rail

FACILITATOR_URL

x402 facilitator for verify/settle

x402 rail

FREE_DAILY_LIMIT

Free calls per IP per day (default 100)

PRICE_USD

Paid-tier price (default 0.01)

DEV_ALLOW_FREE_LLM

true opens the paid tier for local dev only

Local dev secrets go in a .dev.vars file (git-ignored) or your shell env.

Deployment (Cloudflare Workers)

npx wrangler login
npx wrangler kv namespace create KV      # then paste the id into wrangler.toml
npx wrangler secret put OPENROUTER_API_KEY
npx wrangler deploy

The same codebase runs on Node for local dev (npm run dev) and on Workers in production — storage falls back to in-memory when no KV binding exists.

Project structure

src/core/      pipeline.ts (repair engine) · coerce.ts (schema coercion) · llm.ts (paid tier)
src/http/      app.ts (routes) · payment.ts (x402 rail) · ratelimit.ts · demo.ts · billing.ts (parked, unused)
src/mcp/       server.ts (stateless Streamable HTTP MCP server)
src/worker.ts  Cloudflare Workers entry
src/dev.ts     Node dev entry
test/          full battery: broken-JSON cases, coercion, HTTP, MCP protocol

Known limitations (MVP)

  • Schema coercion does not resolve $ref or oneOf/anyOf branches.

  • x402 verification requires an external facilitator (FACILITATOR_URL); there is no on-chain verification built in.

  • Free-tier rate limiting is approximate under high concurrency (KV read-modify-write).

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shoggi211/jsonaut'

If you have feedback or need assistance with the MCP directory API, please join our Discord server