{"serverId":"mcp-registry/com.keenielts/mcp","tools":[{"name":"check_drill_answers","fixed":{"name":"check_drill_answers","description":"Grade a user's drill answers server-side (same grader the website\n    uses — case/whitespace tolerant, accepts standard IELTS answer variants).\n\n    Args:\n        skill: 'listening' or 'reading'.\n        slug: the drill slug from get_drill.\n        answers: question number -> the user's answer,\n            e.g. {\"1\": \"true\", \"2\": \"B\", \"3\": \"24 April\"}.\n\n    Returns per-question results with the accepted answers and explanations\n    (safe to share with the user now that they have answered), plus ","inputSchema":{"type":"object","title":"check_drill_answersArguments","required":["skill","slug","answers"],"properties":{"slug":{"type":"string","title":"Slug"},"skill":{"type":"string","title":"Skill"},"answers":{"type":"object","title":"Answers","additionalProperties":{"type":"string"}}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":240,"tokensAfter":240},{"name":"compare_question","fixed":{"name":"compare_question","description":"List every public band-scored answer to ONE IELTS Writing question —\n    the same prompt answered by different students at different band scores,\n    useful for showing what separates a Band 6 from a Band 8 on identical\n    input. Fetch individual answers with get_model_answer.\n    ","inputSchema":{"type":"object","title":"compare_questionArguments","required":["section_id"],"properties":{"section_id":{"type":"integer","title":"Section Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"fetch","fixed":{"name":"fetch","description":"Fetch the full content of a KeenIELTS search result by id: a model\n    answer with examiner feedback, a practice drill, a question compared\n    across band scores, or a site page.\n    ","inputSchema":{"type":"object","title":"fetchArguments","required":["id"],"properties":{"id":{"type":"string","title":"Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":97,"tokensAfter":97},{"name":"get_drill","fixed":{"name":"get_drill","description":"Get one drill's content so the user can attempt it in conversation.\n\n    The questions are markdown; `{{3}}` marks a gap the user fills for\n    question 3, and `{{3:A/B/C}}` means question 3 is a choice between the\n    slash-separated options. For listening drills, give the user the audio\n    link to play before answering. Collect the user's answers, then call\n    check_drill_answers to grade them — do NOT guess at or reveal correct\n    answers yourself; they are only returned by check_drill_ans","inputSchema":{"type":"object","title":"get_drillArguments","required":["skill","slug"],"properties":{"slug":{"type":"string","title":"Slug"},"skill":{"type":"string","title":"Skill"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":203,"tokensAfter":203},{"name":"get_model_answer","fixed":{"name":"get_model_answer","description":"Get one student IELTS Writing answer in full: the question, the essay,\n    and the AI examiner's band scores + feedback on all four official IELTS\n    marking criteria (Task Achievement, Coherence & Cohesion, Lexical\n    Resource, Grammatical Range & Accuracy).\n\n    Get section_id/attempt_id pairs from search_model_answers or\n    compare_question.\n    ","inputSchema":{"type":"object","title":"get_model_answerArguments","required":["section_id","attempt_id"],"properties":{"attempt_id":{"type":"integer","title":"Attempt Id"},"section_id":{"type":"integer","title":"Section Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":176,"tokensAfter":176},{"name":"list_drills","fixed":{"name":"list_drills","description":"List short, targeted IELTS practice drills that can be taken right here\n    in the conversation (fetch with get_drill, grade with check_drill_answers).\n\n    Args:\n        skill: 'listening' or 'reading'.\n        category: optional IELTS question-type filter. Listening: completion,\n            multiple-choice, matching, labelling. Reading: true-false-not-given,\n            completion, matching-headings, matching-information,\n            multiple-choice-short-answer.\n    ","inputSchema":{"type":"object","title":"list_drillsArguments","required":["skill"],"properties":{"skill":{"type":"string","title":"Skill"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":210,"tokensAfter":210},{"name":"list_practice_tests","fixed":{"name":"list_practice_tests","description":"Catalog of full-length IELTS practice tests on keenielts.com — books,\n    difficulty, and test counts for all four skills (Listening, Reading,\n    Writing, Speaking). Full tests are taken on the website (timed, with audio\n    players and AI band scoring), not in this conversation — point the user at\n    the URLs. Taking tests and getting AI band scores is free.\n    ","inputSchema":{"type":"object","title":"list_practice_testsArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"search","fixed":{"name":"search","description":"Search KeenIELTS: real student IELTS Writing model answers with band\n    scores, Listening/Reading practice drills, and IELTS practice resources.\n    Returns result ids for use with fetch.\n    ","inputSchema":{"type":"object","title":"searchArguments","required":["query"],"properties":{"query":{"type":"string","title":"Query"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"search_model_answers","fixed":{"name":"search_model_answers","description":"Search real student IELTS Writing answers scored by AI examiner.\n\n    Args:\n        task: IELTS Writing task number — 1 (reports/letters) or 2 (essays).\n        band: whole band to filter on; matches half-bands too (8 -> 8.0-8.5).\n        query: free-text match against the question/prompt.\n        limit: max results (1-50).\n\n    Each result links to a full page with the question, the student's answer,\n    and criterion-by-criterion examiner feedback. Use get_model_answer for the\n    full content","inputSchema":{"type":"object","title":"search_model_answersArguments","properties":{"band":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Band","default":null},"task":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Task","default":null},"limit":{"type":"integer","title":"Limit","default":20},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":265,"tokensAfter":265}],"toolsChanged":9,"tokensSaved":0,"todo":[{"tool":"check_drill_answers","params":["slug","skill","answers"]},{"tool":"compare_question","params":["section_id"]},{"tool":"fetch","params":["id"]},{"tool":"get_drill","params":["slug","skill"]},{"tool":"get_model_answer","params":["attempt_id","section_id"]},{"tool":"list_drills","params":["skill","category"]},{"tool":"search","params":["query"]},{"tool":"search_model_answers","params":["band","task","limit","query"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}