json-validate
MCP server for validating JSON against JSON Schema and repairing malformed/invalid JSON.
README
json-validate
MCP server for validating JSON against JSON Schema and repairing malformed/invalid JSON.
Features
- validate_json: Validate a JSON instance against a JSON Schema (draft-07 supported)
- explain_validation: Get human-readable explanations and fix suggestions for validation errors
- repair_json: Attempt to repair invalid JSON to match a schema (conservative approach)
Installation
npm install
npm run build
Usage
STDIO Transport (Default)
npm start
# or
node dist/index.js
HTTP Transport
npm start -- --transport http --port 3000
# or
TRANSPORT=http PORT=3000 node dist/index.js
Claude Desktop Configuration
Add to your Claude Desktop config (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"json-validate": {
"command": "node",
"args": ["/path/to/json-validate/dist/index.js"]
}
}
}
Tools
validate_json
Validate a JSON instance against a JSON Schema.
Input:
{
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name"]
},
"instance": {
"name": "John",
"age": 30
}
}
Output (Success):
{
"ok": true,
"data": {
"valid": true,
"errors": []
},
"meta": {
"source": "json-validate",
"retrieved_at": "2024-01-15T10:30:00.000Z",
"pagination": { "next_cursor": null },
"warnings": []
}
}
Output (Validation Errors):
{
"ok": true,
"data": {
"valid": false,
"errors": [
{
"path": "/age",
"keyword": "minimum",
"message": "must be >= 0",
"params": { "limit": 0 },
"schemaPath": "#/properties/age/minimum"
}
]
},
"meta": {
"source": "json-validate",
"retrieved_at": "2024-01-15T10:30:00.000Z",
"pagination": { "next_cursor": null },
"warnings": []
}
}
explain_validation
Get human-readable explanations for validation errors.
Input:
{
"errors": [
{
"path": "",
"keyword": "required",
"message": "must have required property 'name'",
"params": { "missingProperty": "name" },
"schemaPath": "#/required"
}
]
}
Output:
{
"ok": true,
"data": {
"explanations": [
{
"path": "",
"error": "must have required property 'name'",
"explanation": "The required property \"name\" is missing at root.",
"suggestion": "Add the missing property \"name\" with an appropriate value."
}
]
},
"meta": {
"source": "json-validate",
"retrieved_at": "2024-01-15T10:30:00.000Z",
"pagination": { "next_cursor": null },
"warnings": []
}
}
repair_json
Attempt to repair invalid JSON to match a schema.
Features:
- Parse malformed JSON (trailing commas, single quotes, unquoted keys)
- Apply schema defaults
- Remove additional properties when
additionalProperties: false - Coerce types when safe (e.g.,
"123"to123for number schema) - Conservative: never invents unknown fields unless schema requires defaults
Input:
{
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" },
"active": { "type": "boolean", "default": true }
},
"additionalProperties": false
},
"instance_or_text": "{'name': 'John', 'age': '30', 'extra': 'field',}"
}
Output:
{
"ok": true,
"data": {
"repaired": {
"name": "John",
"age": 30,
"active": true
},
"changes": [
{
"path": "/extra",
"action": "removed",
"from": "field",
"reason": "Property not allowed by schema (additionalProperties: false)"
},
{
"path": "/age",
"action": "coerced",
"from": "30",
"to": 30,
"reason": "Coerced string to integer"
},
{
"path": "/active",
"action": "defaulted",
"to": true,
"reason": "Applied schema default value"
}
],
"parseErrors": [
"Standard JSON parse failed, attempting repairs...",
"JSON repaired successfully with syntax fixes"
]
},
"meta": {
"source": "json-validate",
"retrieved_at": "2024-01-15T10:30:00.000Z",
"pagination": { "next_cursor": null },
"warnings": []
}
}
CLI Options
Usage: json-validate [options]
Options:
-t, --transport <type> Transport type: 'stdio' or 'http' (default: stdio)
-p, --port <number> HTTP server port (default: 3000)
-H, --host <address> HTTP server host (default: 127.0.0.1)
-l, --log-level <level> Log level: 'debug', 'info', 'warn', 'error' (default: info)
-h, --help Show this help message
Environment Variables
| Variable | Description | Default |
|---|---|---|
TRANSPORT |
Transport type: stdio or http |
stdio |
PORT |
HTTP server port | 3000 |
HOST |
HTTP server host | 127.0.0.1 |
LOG_LEVEL |
Log level: debug, info, warn, error |
info |
Development
# Install dependencies
npm install
# Run in development mode
npm run dev
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Type check
npm run typecheck
# Build
npm run build
Response Envelope
All tools return responses in a standard envelope format:
Success:
{
"ok": true,
"data": { ... },
"meta": {
"source": "json-validate",
"retrieved_at": "ISO-8601 timestamp",
"pagination": { "next_cursor": null },
"warnings": []
}
}
Error:
{
"ok": false,
"error": {
"code": "INVALID_INPUT | PARSE_ERROR | INTERNAL_ERROR",
"message": "Human readable message",
"details": { ... }
},
"meta": {
"retrieved_at": "ISO-8601 timestamp"
}
}
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.