{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Contact name",
"minLength": 1,
"maxLength": 120
},
"email": {
"type": "string",
"format": "email",
"pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$",
"description": "Business email",
"maxLength": 200
},
"company": {
"type": "string",
"description": "Company or project (optional)",
"maxLength": 160
},
"use_case": {
"type": "string",
"enum": [
"api",
"mcp",
"embedded",
"batch",
"volume",
"partnership",
"other"
],
"description": "Topic / use case"
},
"message": {
"type": "string",
"description": "Message body",
"minLength": 1,
"maxLength": 4000
}
},
"required": [
"name",
"email",
"use_case",
"message"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Site-relative path only. Allowed: /, /developers, /docs, /pricing, /contact, /status, /legal/privacy, /legal/terms. Optional hash (e.g. /docs#mcp).",
"pattern": "^/(|developers|docs|pricing|contact|status|legal/privacy|legal/terms)(#[\\w:-]+)?$"
}
},
"required": [
"path"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-zA-Z][\\w:-]*$",
"description": "DOM element id, e.g. mcp, rest-api, buy-credits"
}
},
"required": [
"id"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"getting-started",
"mcp",
"rest",
"payments",
"pricing",
"developers",
"contact",
"api"
],
"description": "Docs or site section to open"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"fen": {
"type": "string",
"minLength": 15,
"maxLength": 100,
"pattern": "^([rnbqkpRNBQKP1-8]+\\/){7}[rnbqkpRNBQKP1-8]+ [wb] ([KQkq]+|-) ([a-h][36]|-) \\d+ \\d+$",
"description": "Chess position in standard FEN (six fields: piece placement, active color, castling, en passant, halfmove, fullmove)."
},
"target_elo": {
"type": "integer",
"minimum": 400,
"maximum": 3500,
"description": "Target learner Elo (400–3500)."
}
},
"required": [
"fen",
"target_elo"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"fen": {
"type": "string",
"minLength": 15,
"maxLength": 100,
"pattern": "^([rnbqkpRNBQKP1-8]+\\/){7}[rnbqkpRNBQKP1-8]+ [wb] ([KQkq]+|-) ([a-h][36]|-) \\d+ \\d+$",
"description": "Chess position in standard FEN (six fields: piece placement, active color, castling, en passant, halfmove, fullmove)."
},
"moves": {
"type": "array",
"items": {
"type": "string",
"minLength": 2,
"maxLength": 10,
"pattern": "^(O-O(-O)?[+#]?|[NBRQK]?[a-h]?[1-8]?x?[a-h][1-8](=[NBRQ])?[+#]?)$",
"description": "One move in Standard Algebraic Notation (SAN), e.g. Nf3, exd5, O-O. Not UCI."
},
"minItems": 2,
"maxItems": 8,
"description": "Two or more candidate moves in SAN (not UCI)."
},
"target_elo": {
"type": "integer",
"minimum": 400,
"maximum": 3500,
"description": "Target learner Elo (400–3500)."
}
},
"required": [
"fen",
"moves",
"target_elo"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"pgn": {
"type": "string",
"minLength": 20,
"maxLength": 200000,
"description": "Full game in PGN (headers optional). Must include move text such as 1.e4 e5. Not a single FEN."
},
"target_elo": {
"type": "integer",
"minimum": 400,
"maximum": 3500,
"description": "Target learner Elo (400–3500)."
}
},
"required": [
"pgn",
"target_elo"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"pgn": {
"type": "string",
"minLength": 20,
"maxLength": 200000,
"description": "Full game in PGN (headers optional). Must include move text such as 1.e4 e5. Not a single FEN."
},
"target_elo": {
"type": "integer",
"minimum": 400,
"maximum": 3500,
"description": "Target learner Elo (400–3500)."
}
},
"required": [
"pgn",
"target_elo"
],
"additionalProperties": false
}