# Exam paper assembler

- Human page: https://happytails.ai/en/education-tools/exam-paper-assembler/
- Markdown: https://happytails.ai/en/education-tools/exam-paper-assembler.md
- Structured JSON: https://happytails.ai/agents/en/education-tools/exam-paper-assembler/index.json
- Visibility: public

## Tool capabilities

| Property | Value |
| --- | --- |
| Tool ID | `exam-paper-assembler` |
| Category | education-tools |
| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |
| Browser execution | Use the visible action or interactive controls. |
| Browser processing | Browser; see tool notes for network behavior. |
| HTTP API | Not callable through HTTP. |
| Browser-agent interface | run_current_tool |

### Implementation notes

Enter one question per row with marks and a topic. The search runs in the background on this device and stops after 200,000 steps.

### Inputs and settings

Text input: Question bank (CSV).

Example or placeholder shown in the interface (not a validated fixture):

```text
id,question,answer,marks,topic,minutes,objective
A1,Solve 2x + 3 = 11.,x = 4,2,Algebra,3,Linear equations
```

Start with the header row, then one question per line. Put quotes around any cell that contains a comma. Up to 500,000 characters. Review the settings before running.

| Setting | Meaning | Control type | Default | Constraints |
| --- | --- | --- | --- | --- |
| `totalMarks` | Total marks for the paper | text | "20" |  |
| `maxMinutes` | Time limit in minutes (0 for none) | number | 30 | min=0 max=600 step=1 |
| `minPerTopic` | Minimum questions per topic | number | 1 | min=0 max=20 step=1 |
| `coverObjectives` | Cover every objective at least once | checkbox | true |  |
| `versions` | Number of versions (question orders) | number | 2 | min=1 max=10 step=1 |
| `seed` | Seed | number | 1 | min=1 max=4294967295 step=1 |

### Browser-agent workflow

1. Open the human page in a browser that supports WebMCP.
2. Discover the interface exposed by that page; use its actual schema.
3. Select files on the page first when the tool requires files.
4. Call `run_current_tool` with valid input and settings.
5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.

Calls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.

### Planning specification

Up to 300 questions and 500,000 characters, each cell up to 2,000 characters. Marks are positive with at most two decimal places and the target total is at most 1,000. Minutes are whole numbers from 0 to 600, the time limit is 0 to 600 minutes, the topic minimum is 0 to 20 and you can print 1 to 10 versions. The search runs in the background on your device, stops after 200,000 steps and uploads nothing. Downloads: JSON report, CSV of every version, one printable HTML page per version and an HTML answer booklet.

This describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.

### Complete machine-readable capability record

```json
{
  "id": "exam-paper-assembler",
  "category": "education-tools",
  "built": true,
  "requirements": "Up to 300 questions and 500,000 characters, each cell up to 2,000 characters. Marks are positive with at most two decimal places and the target total is at most 1,000. Minutes are whole numbers from 0 to 600, the time limit is 0 to 600 minutes, the topic minimum is 0 to 20 and you can print 1 to 10 versions. The search runs in the background on your device, stops after 200,000 steps and uploads nothing. Downloads: JSON report, CSV of every version, one printable HTML page per version and an HTML answer booklet.",
  "implementation": {
    "fields": [
      {
        "key": "totalMarks",
        "label": "Total marks for the paper",
        "value": "20",
        "type": "text"
      },
      {
        "key": "maxMinutes",
        "label": "Time limit in minutes (0 for none)",
        "value": 30,
        "type": "number",
        "min": 0,
        "max": 600,
        "step": 1
      },
      {
        "key": "minPerTopic",
        "label": "Minimum questions per topic",
        "value": 1,
        "type": "number",
        "min": 0,
        "max": 20,
        "step": 1
      },
      {
        "key": "coverObjectives",
        "label": "Cover every objective at least once",
        "value": true,
        "type": "checkbox"
      },
      {
        "key": "versions",
        "label": "Number of versions (question orders)",
        "value": 2,
        "type": "number",
        "min": 1,
        "max": 10,
        "step": 1
      },
      {
        "key": "seed",
        "label": "Seed",
        "value": 1,
        "type": "number",
        "min": 1,
        "max": 4294967295,
        "step": 1
      }
    ],
    "registrationFamily": "assessment-blueprint",
    "inputMaxLength": 500000,
    "inputErrorCode": "ASSESSMENT_BLUEPRINT_TOO_LONG_EXAM",
    "note": "Enter one question per row with marks and a topic. The search runs in the background on this device and stops after 200,000 steps.",
    "experience": {
      "automatic": false,
      "single": false,
      "inputMaxLength": 500000,
      "inputMode": "text",
      "label": "Question bank (CSV)",
      "placeholder": "id,question,answer,marks,topic,minutes,objective\nA1,Solve 2x + 3 = 11.,x = 4,2,Algebra,3,Linear equations",
      "help": "Start with the header row, then one question per line. Put quotes around any cell that contains a comma. Up to 500,000 characters. Review the settings before running.",
      "action": null
    },
    "mode": "explicit",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}
```

## Page guide

Build an exam paper from your own question bank that hits an exact mark total, stays within a time limit and covers every topic and objective you ask for. You get printable versions and a separate answer booklet.

How can we improve this tool?

Report a problem or share an idea.

Please leave out private information. Your message and the tool name go to our team via PostHog.

### How to use Exam paper assembler

1. Paste your question bank as CSV with the header id,question,answer,marks,topic and, if you use them, minutes and objective.
2. Set the total marks, the time limit, the minimum number of questions per topic and whether every objective must appear.
3. Choose how many versions to print and keep the seed to reproduce the same paper later.
4. Assemble, then download the printable versions, the answer booklet, the CSV and the JSON report.

## Useful next steps

- [Multiple Choice Answer Sheet Maker](https://happytails.ai/en/education-tools/multiple-choice-answer-sheet-maker/) ([Markdown](https://happytails.ai/en/education-tools/multiple-choice-answer-sheet-maker.md))

- [Quiz from notes](https://happytails.ai/en/education-tools/quiz-from-notes/) ([Markdown](https://happytails.ai/en/education-tools/quiz-from-notes.md))

- [Grade calculator](https://happytails.ai/en/education-tools/grade-calculator/) ([Markdown](https://happytails.ai/en/education-tools/grade-calculator.md))

## How the paper is chosen

Questions are first put in a seeded random order, with the questions needed for topic minimums and objective coverage moved to the front. A depth-first branch and bound search (Land and Doig, Econometrica 28(3), 1960, checked 2026-10-16) then tries to include each question in turn and returns the first set that reaches the total marks exactly and meets every constraint. Branches are cut when the remaining questions cannot reach the total, using an exact subset-sum table (Bellman, Dynamic Programming, 1957), or when a topic minimum, an objective or the time limit can no longer be met.

### When no paper fits

If no set of questions meets every constraint, the report lists which ones fail: TOTAL\_MARKS when no combination of marks adds up to the total, TIME\_LIMIT with the shortest possible time for that total, TOPIC\_MINIMUM with the topic and how many questions it has, OBJECTIVE\_COVERAGE with the fewest marks that cover every objective when that is more than the total, or COMBINATION when each rule can be met alone but not together. The search stops after 200,000 steps and says so instead of guessing.

### Versions and answers

Every version contains the same questions in a different order, so all versions have the same marks, time and coverage. Version 1 keeps the search order. Each version file ends with its own answer key on a new page, and the answer booklet lists the answers for every version in one file. Marks are kept as exact hundredths, so totals such as 0.5 plus 1.25 never drift.
