# KeenIELTS (remote · keenielts.com)

Free IELTS prep: band-scored student essays and interactive Listening/Reading drills graded in-chat.

- Trust score: 58/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-08

## Components

- remote · `keenielts.com`: 58/100 (this document), [markdown](https://verifymcp.io/servers/com-keenielts-mcp/keenielts.md), [page](https://verifymcp.io/servers/com-keenielts-mcp/keenielts)

## Channel facts

- Endpoint: `https://keenielts.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-08.

- **Endpoint Security**: 60/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 9 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 63/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1028 tokens (~114/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 13/100
  - Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-keenielts-mcp https://keenielts.com/mcp
```

### Codex

```toml
[mcp_servers.com-keenielts-mcp]
url = "https://keenielts.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-keenielts-mcp": {
      "type": "remote",
      "url": "https://keenielts.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-keenielts-mcp --url https://keenielts.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-keenielts-mcp:
    url: "https://keenielts.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-keenielts-mcp": {
      "type": "http",
      "url": "https://keenielts.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-07 (score 58, +1)

- [functional] The server no longer declares the “experimental” capability

### 2026-08-06 (score 57, +10)

- [security] Authorization: Authorisation not fully verified: no authorisation is required to call this server, and 9 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
- [functional regression] Schema quality: unverified → fail
- [functional regression] Schema quality: pass → fail
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 0
- [functional] Schema quality: fair → good
- [functional] New tool “check_drill_answers”
- [functional] New tool “compare_question”
- [functional] New tool “get_drill”
- [functional] New tool “get_model_answer”
- [functional] New tool “list_drills”
- [functional] New tool “list_practice_tests”
- [functional] New tool “search”
- [functional] New tool “search_model_answers”
- [functional] New tool “fetch”

### 2026-08-05 (score 47, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-08-04 (score 47)

First indexed and scored.

## MCP tools (9)

### `search_model_answers` (~164 tokens)

Search real student IELTS Writing answers scored by AI examiner.

    Args:
        task: IELTS Writing task number — 1 (reports/letters) or 2 (essays).
        band: whole band to filter on; matches half-bands too (8 -> 8.0-8.5).
        query: free-text match against the question/prompt.
        limit: max results (1-50).

    Each result links to a full page with the question, the student's answer,
    and criterion-by-criterion examiner feedback. Use get_model_answer for the
    full content, or compare_question to see the same prompt at other bands.

Input parameters:

- `band`
- `limit` (integer)
- `query`
- `task`

### `get_model_answer` (~101 tokens)

Get one student IELTS Writing answer in full: the question, the essay,
    and the AI examiner's band scores + feedback on all four official IELTS
    marking criteria (Task Achievement, Coherence & Cohesion, Lexical
    Resource, Grammatical Range & Accuracy).

    Get section_id/attempt_id pairs from search_model_answers or
    compare_question.

Input parameters:

- `attempt_id` (integer, required)
- `section_id` (integer, required)

### `compare_question` (~72 tokens)

List every public band-scored answer to ONE IELTS Writing question —
    the same prompt answered by different students at different band scores,
    useful for showing what separates a Band 6 from a Band 8 on identical
    input. Fetch individual answers with get_model_answer.

Input parameters:

- `section_id` (integer, required)

### `list_drills` (~115 tokens)

List short, targeted IELTS practice drills that can be taken right here
    in the conversation (fetch with get_drill, grade with check_drill_answers).

    Args:
        skill: 'listening' or 'reading'.
        category: optional IELTS question-type filter. Listening: completion,
            multiple-choice, matching, labelling. Reading: true-false-not-given,
            completion, matching-headings, matching-information,
            multiple-choice-short-answer.

Input parameters:

- `category`
- `skill` (string, required)

### `get_drill` (~142 tokens)

Get one drill's content so the user can attempt it in conversation.

    The questions are markdown; `{{3}}` marks a gap the user fills for
    question 3, and `{{3:A/B/C}}` means question 3 is a choice between the
    slash-separated options. For listening drills, give the user the audio
    link to play before answering. Collect the user's answers, then call
    check_drill_answers to grade them — do NOT guess at or reveal correct
    answers yourself; they are only returned by check_drill_answers.

Input parameters:

- `skill` (string, required)
- `slug` (string, required)

### `check_drill_answers` (~149 tokens)

Grade a user's drill answers server-side (same grader the website
    uses — case/whitespace tolerant, accepts standard IELTS answer variants).

    Args:
        skill: 'listening' or 'reading'.
        slug: the drill slug from get_drill.
        answers: question number -> the user's answer,
            e.g. {"1": "true", "2": "B", "3": "24 April"}.

    Returns per-question results with the accepted answers and explanations
    (safe to share with the user now that they have answered), plus a score.

Input parameters:

- `answers` (object, required)
- `skill` (string, required)
- `slug` (string, required)

### `list_practice_tests` (~91 tokens)

Catalog of full-length IELTS practice tests on keenielts.com — books,
    difficulty, and test counts for all four skills (Listening, Reading,
    Writing, Speaking). Full tests are taken on the website (timed, with audio
    players and AI band scoring), not in this conversation — point the user at
    the URLs. Taking tests and getting AI band scores is free.

### `search` (~52 tokens)

Search KeenIELTS: real student IELTS Writing model answers with band
    scores, Listening/Reading practice drills, and IELTS practice resources.
    Returns result ids for use with fetch.

Input parameters:

- `query` (string, required)

### `fetch` (~56 tokens)

Fetch the full content of a KeenIELTS search result by id: a model
    answer with examiner feedback, a practice drill, a question compared
    across band scores, or a site page.

Input parameters:

- `id` (string, required)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-keenielts-mcp/keenielts#diagnostics

## Score history

- 2026-08-08: 58
- 2026-08-07: 58
- 2026-08-06: 57
- 2026-08-05: 47
- 2026-08-04: 47

## Links

- Remote endpoint: https://keenielts.com/mcp
- Website: https://keenielts.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-keenielts-mcp/keenielts.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-keenielts-mcp/keenielts.json
- HTML version of this page: https://verifymcp.io/servers/com-keenielts-mcp/keenielts
