streamable-httpupdated 2mo ago
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.
What can you do with jsonaut?
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"]
}
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)
- Agent calls
/v1/repairwithallow_llm_fallback: true; deterministic repair fails. - Server responds
402with an x402acceptsarray (USDC on Base, amount =PRICE_USD). - Agent pays and retries with the
X-PAYMENTheader; 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
$reforoneOf/anyOfbranches. - 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).
Install
Add jsonaut to your client. Pick the one you use.
claude mcp add --transport http jsonaut https://jsonaut.jsonaut-shaurya.workers.dev/mcpcodex mcp add jsonaut --url https://jsonaut.jsonaut-shaurya.workers.dev/mcp{
"mcpServers": {
"jsonaut": {
"url": "https://jsonaut.jsonaut-shaurya.workers.dev/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"jsonaut": {
"type": "http",
"url": "https://jsonaut.jsonaut-shaurya.workers.dev/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"jsonaut": {
"url": "https://jsonaut.jsonaut-shaurya.workers.dev/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"jsonaut": {
"serverUrl": "https://jsonaut.jsonaut-shaurya.workers.dev/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance16/25
- Trust6/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 56 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.1.0Latest | Jul 2, 2026 |