Skip to main content
Glama
README.md
# ictexam-mcp

A [Model Context Protocol](https://modelcontextprotocol.io) server for
**[ICTExam](https://www.ictlms.net)**, the AI exam authoring, delivery and
auto-grading platform from [ICT Innovations](https://ictinnovations.com).

It lets an AI assistant read your exams, gradebooks and per-question item
analysis, and — only when you turn writes on — parse a question paper into a
structured exam with AI and publish exams to students.

## Install

Run it straight from npm with `npx`, or install it globally:

```bash
npx -y ictexam-mcp      # no install
npm install -g ictexam-mcp
```

Requires Node.js 18 or newer.

## Configure

Set these in your MCP client's server config (or a `.env`):

| Variable | Required | Default | |
|----------|----------|---------|--|
| `ICTEXAM_BASE_URL` | yes | | Your site, e.g. `https://app.ictlms.net` (no trailing `/api`) |
| `ICTEXAM_EMAIL` | yes | | A teacher or admin account |
| `ICTEXAM_PASSWORD` | yes | | Password for that account |
| `ICTEXAM_API_PREFIX` | no | `/api` | API mount path; set empty to hit the backend port directly |
| `ICTEXAM_MCP_ALLOW_WRITE` | no | `false` | Unlock the write tools (see Safety) |
| `ICTEXAM_TIMEOUT_MS` | no | `60000` | Per-request timeout (AI parsing can be slow) |
| `ICTEXAM_TLS_INSECURE` | no | `false` | Skip TLS verification — self-signed test servers only |

### Claude Desktop example

```json
{
  "mcpServers": {
    "ictexam": {
      "command": "npx",
      "args": ["-y", "ictexam-mcp"],
      "env": {
        "ICTEXAM_BASE_URL": "https://app.ictlms.net",
        "ICTEXAM_EMAIL": "teacher@example.com",
        "ICTEXAM_PASSWORD": "your-password"
      }
    }
  }
}
```

## Tools

Read tools are always available:

| Tool | What it does |
|------|--------------|
| `ictexam_list_exams` | List exam papers (id, title, status, class, subject) |
| `ictexam_get_exam` | One paper's settings, share links and questions |
| `ictexam_list_classes` | Classes (course groups) |
| `ictexam_list_subjects` | Subjects, each tied to a class |
| `ictexam_gradebook` | Per-exam totals and student marks |
| `ictexam_item_analysis` | Per-question difficulty, p-value and average mark |

Write tools appear only when `ICTEXAM_MCP_ALLOW_WRITE=true`:

| Tool | What it does |
|------|--------------|
| `ictexam_parse_question_paper` | Upload a local PDF/DOCX and AI-extract the questions |
| `ictexam_publish_exam` | Publish a paper; returns student and teacher share URLs |
| `ictexam_unpublish_exam` | Set a paper back to draft |

## Safety

The server is **read-only by default**. The three write tools are not registered
at all unless you set `ICTEXAM_MCP_ALLOW_WRITE=true`, so a default install cannot
change anything on the platform. Parsing a paper spends AI credit on the server,
and publishing makes an exam live for students — both sit behind that switch on
purpose. The client authenticates with the account's own session cookie and
echoes the CSRF token on writes, exactly as the web app does; it never stores or
logs your password beyond the environment you give it.

## How it connects

ICTExam runs a FastAPI backend. The server signs in once with your email and
password, keeps the session cookie for the life of the process, and talks to the
REST API under `/api` (configurable). No API key to provision.

## About

Built by Tahir Almas at [ICT Innovations](https://ictinnovations.com) — the team
behind ICTExam, ICTContact, ICTDialer, ICTFax and ICTPBX. ICTExam ships with a
native Moodle activity module (LTI 1.3, grade passback and roster sync); learn
more at [ictlms.net](https://www.ictlms.net).

MIT licensed. Issues and PRs welcome at
[github.com/ictinnovations/ictexam-mcp](https://github.com/ictinnovations/ictexam-mcp).

TDQS

A4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct entity or artifact: subjects, classes, exams, exam detail, gradebook, and item analysis. There is no pair that would plausibly produce the same result, so an agent can reliably choose based on the desired resource.

Naming Consistency4/5

All tools share the consistent ictexam_ prefix, and most use a clear verb_noun pattern (list_subjects, list_exams, list_classes, get_exam). However, gradebook and item_analysis are plain noun phrases, breaking the imperative verb pattern.

Tool Count5/5

Six tools is a compact and well-scoped set for an exam data and analytics MCP. Each tool covers a meaningful query surface, and none feels redundant or unnecessary.

Completeness4/5

The set covers the core read-only workflows: enumerating classes, subjects, and exams; retrieving an exam; viewing gradebook data; and running item analysis. It lacks create/update/delete operations, but those appear outside the apparent analysis-oriented purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues