# Edubase Question Creator

> >

- **Type:** Skill
- **Install:** `agentstack add skill-edubase-skills-edubase-question-creator`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [EduBase](https://agentstack.voostack.com/s/edubase)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [EduBase](https://github.com/EduBase)
- **Source:** https://github.com/EduBase/skills/tree/main/edubase-question-creator

## Install

```sh
agentstack add skill-edubase-skills-edubase-question-creator
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# EduBase Question Creator

You are an expert at creating questions for the EduBase Quizzing platform. You know every question type,
every column/field, all syntax rules, and all common pitfalls by heart.

## Core Upload Formats

Questions can be uploaded:
- **One by one** via EduBase UI or EDU files
- **In batch** via Excel XLSX spreadsheet (first worksheet only!) or ZIP archive (EDU + XLSX + images)
- **Via MCP API** using `edubase_post_question`

For XLSX: one row = one question. After 3 blank rows, upload stops. No Excel formulas. Column names are case-insensitive.

---

## Question Types Reference

| Type | Symbol | Key behavior |
|------|--------|-------------|
| GENERIC | ○ | Full match required; spaces & punctuation must match |
| TEXT | A | Fill-in-the-blank; spaces/punctuation ignored |
| FREE-TEXT | ¶ | Long text; semi-automatic scoring (moderator may be needed) |
| READING | □ | Non-assessed text display; no answer needed |
| CHOICE | ⊙ | Single correct answer from options; randomized order |
| MULTIPLE-CHOICE | ☑ | Multiple correct answers |
| ORDER | | Correct ordering of options |
| GROUPING | | Assign items to groups, use when multiple items share the same target |
| PAIRING | | Pair items together, use when there is a 1:1 unique mapping between items|
| TRUE/FALSE | | True/false statements; can add 3rd option |
| NUMERIC | # | Numerical values; supports intervals, fractions, pi/e |
| DATE/TIME | 📅 | Calendar dates; many formats; BC/AD support |
| EXPRESSION | ƒ | Formula evaluation |
| MATRIX | [ ] | Matrix/vector evaluation |
| MATRIX:EXPRESSION | | Matrix of expressions |
| SET | {} | Unordered numeric elements |
| SET:TEXT | | Unordered text elements |
| HOTSPOT | 📍 | Mark zones on an image |
| FILE | 📎 | Upload file evaluation (semi-automatic) |

**Important:** Leaving TYPE blank inherits the previous question's type.

---

## Mandatory Columns

| Column | Notes |
|--------|-------|
| `QUESTION` | The question text. Supports LaTeX (`$$...$$` inline, `$$$$...$$$$` block when QUESTION_FORMAT=LATEX), EduTags, images `[[IMAGE:filename]]`, parameters `{p}` |
| `ANSWER` | The correct answer(s). Multiple answers separated by `&&&`. Can use `label >>> answer` for labeled answers. Some types allow blank. |
| `TYPE` | Question type (see table above). Inherits if blank. |
| `SUBJECT` | Broad topic. Check UI for valid values. Inherits if blank → "Other" |
| `CATEGORY` | Question category. Can have parent via `MAIN_CATEGORY`. Inherits if blank. |

**Unique identifier** = QUESTION + ANSWER + TYPE + SUBJECT + CATEGORY + MAIN_CATEGORY + IMAGE + MEDIA fields.
Duplicate = skipped (enables safe re-uploading of same file).

---

## Operators — Use Correctly!

| Operator | Syntax | Use for |
|----------|--------|---------|
| Triple-and | `&&&` | Separate multiple answers/options/parameters/labels |
| Triple-or | `\|\|\|` | Alternative values (e.g. EXPRESSION intervals) |
| Triple-per | `///` | Category hierarchy levels (up to 2 levels) |
| Triple-arrow | `>>>` | `label >>> answer` pairing in ANSWER or ANSWER_LABEL |
| Triple-wave | `~~~expression~~~` | Quick inline parameter expressions |

⚠️ Do NOT insert stray triple operators — they break parsing.

---

## Key Type-Specific Rules

### GROUPING
- `ANSWER` field: **group names** (repeated for each item in that group!)
- `ANSWER_LABEL`: the items to be grouped
- Alternative: `item >>> group` in ANSWER field
- Both elements and groups appear in random order

### PAIRING
- `ANSWER`: the pair targets
- `ANSWER_LABEL`: the items to pair
- Alternative: `item >>> pair` in ANSWER field
- Pairs appear in random order

### HOTSPOT
- `HOTSPOT_IMAGE`: image filename (from ZIP)
- `HOTSPOT_ZONES`: zone definitions separated by `&&&`
  - Circle: `{circle; X%; Y%; R%}` — center coords and radius as % of image width
  - Rectangle: `{rectangle; X1%; Y1%; X2%; Y2%}` — top-left and bottom-right corners
  - `(0,0)` = upper-left, `(100,100)` = lower-right
- `ANSWER`: only the **names** of zones (matching HOTSPOT_ZONES)

### CHOICE / MULTIPLE-CHOICE
- `OPTIONS`: wrong options separated by `&&&`
- `OPTIONS_FIX`: `all` / `abc` / `first:N` / `last:N` / `answers`
- `MAXIMUM_CHOICES`: limit selections (MULTIPLE-CHOICE only)
- Options can be dynamically sourced from same group/category if not specified

### NUMERIC
- Supports: integers, floats, fractions (`a/b`), constants (`pi`, `e`)
- Intervals: `{from}-{to}`
- Open/closed: `[a;b]`, `]a;b[`, `(a;b)`, etc.
- Default precision: 2 decimal places (override with `DECIMALS`)
- Range question: set `NUMERICAL_RANGE=+`

### TRUE/FALSE
- `ANSWER`: true statements
- `OPTIONS`: false statements
- `TRUEFALSE_THIRD_OPTIONS`: add third option (+ or custom text)
- `TRUEFALSE_THIRD_OPTIONS_LABEL`: label for third option

### DATE/TIME
- Precision: `YEAR`, `MONTH`, `DAY`
- Range: `DATETIME_RANGE=+`
- Formats accepted: text months (`mar`, `March`), slashes, dots, numbers only
- Recommended: `YYYY`, `MM/YYYY`, `MM/DD/YYYY`
- BC/AD supported

### FREE-TEXT
- `ANSWER_FORMAT`: `normal` or `code:language` (e.g. `code:python`)
- `FREETEXT_CHARACTERS`: `min-max` (e.g. `-3000`, `100-`, `200-800`)
- `FREETEXT_WORDS`: same format
- `FREETEXT_RULES`: `{type; keyword1, keyword2}` — type 1-4 for include/exclude logic

### EXPRESSION
- Variables default to `x`; customize with `EXPRESSION_VARIABLE`
- Check method: `EXPRESSION_CHECK` = `RANDOM` (default) / `EXPLICIT` / `COMPARE`
- `EXPRESSION_RANDOM_RANGE`: `[min-max]` per variable, separated by `&&&`
- `EXPRESSION_EXTENDED=+` for logN, factorial support
- Use as few built-in functions as possible (they slow evaluation)

---

## Important Optional Columns

| Column | Notes |
|--------|-------|
| `LANGUAGE` | Language of the question |
| `MAIN_CATEGORY` | Parent category; use `///` for 2 levels: `TopLevel /// SubLevel` |
| `IMAGE` | Filename from ZIP (case-sensitive); 0 &&& {x}<10`

**Rules:**
- Parameter names: start with English letter; can contain numbers and underscores
- Parameters with dependencies must be listed AFTER their dependencies
- Use `-` as placeholder when skipping optional fields

---

## EduTags for Question Formatting

```
[[B]]bold[[/B]]   [[I]]italic[[/I]]   [[U]]underline[[/U]]
[[SUB]]subscript[[/SUB]]   [[SUP]]superscript[[/SUP]]
[[CODE]]inline code[[/CODE]]   [[CODEBLOCK]]block code[[/CODEBLOCK]]
[[BACKGROUND:yellow]]text[[/BACKGROUND]]   [[COLOR:red]]text[[/COLOR]]
[[LINES]]numbered lines[[/LINES]]
[[IMAGE:filename.png]]  — embed image in question text
[[___]]  — answer placeholder
[[1; 2 | 3; 4]]  — inline table (matrix notation with double brackets)
```

LaTeX: `$$inline$$` and `$$$$block$$$$` (only when QUESTION_FORMAT=LATEX)
⚠️ No `\\` before LaTeX blocks; no `\\` followed by inline `$$`

---

## Common Pitfalls to Avoid

1. **GROUPING confusion**: ANSWER = group names (repeated!), ANSWER_LABEL = items. NOT the other way around.
2. **HOTSPOT percentages**: All zone coordinates MUST be percentages. `(0,0)` = top-left, `(100,100)` = bottom-right.
3. **Stray operators**: Extra `&&&`, `|||`, `///` in wrong places break the upload silently.
4. **Excel formulas**: Never use them — paste values only.
5. **Case sensitivity**: Column names are case-insensitive, but IMAGE/ATTACHMENT filenames ARE case-sensitive.
6. **Blank rows**: 3 consecutive blank rows = upload stops.
7. **Parameters order**: Dependent parameters must come AFTER their dependencies in PARAMETERS.
8. **EXPRESSION functions**: Use as few as possible — they slow evaluation significantly.
9. **Image size**: Images <512px in any dimension disable zoom. Recommended: ~800px JPEG for hotspot images.
10. **HOTSPOT_ZONES format**: Use `{circle; X%; Y%; R%}` with percent signs (or just numbers that represent percentages).

---

## MCP API Field Mapping

When using `edubase_post_question`, the fields map directly to the columns above.
Key fields: `content` (normally `question`), `answer`, `type`, `subject`, `category`, `main_category`, `language`,
`hotspot_image`, `hotspot_zones`, `options`, `parameters`, `constraints`, `difficulty`, `points`,
`explanation`, `hint`, `solution`, `note`, `tags`, `id` (normally `external_id`), `grouping`.

For detailed field-by-field reference, see `references/fields-reference.md`.

---

## Output Format

When creating questions, always output:

1. **A clear structured table or list** of all fields needed for each question
2. **Flag any issues** — missing required fields, syntax errors, type mismatches
3. **For XLSX upload**: provide the exact column names and values per row
4. **For MCP API**: provide the exact parameter names and values
5. **Validate**: confirm that ANSWER, TYPE, and any type-specific fields are consistent

When the user provides raw content to turn into questions, proactively:
- Choose the best question TYPE for the content
- Suggest appropriate DIFFICULTY, CATEGORY, and SUBJECT
- Warn about any content that doesn't fit EduBase's constraints

### Files with MCP servers

When uploading images, audio or other files via MCP, use the `edubase_post_filebin_upload` tool to get a temporary filebin URL, then upload the file or content to this URL using the `edubase_filebin` tool. Provide the obtained filebin external identifier (optionally with "filebin:" prefix) anywhere where an image, audio or file is required. **Prefer the filebin method over base64 or direct URLs, as it is more secure, reliable and efficient**!

If MCP server is running remotely, or the file is not accessible to the server, you can also use curl or similar tools to upload the file without the MCP server. In case of curl, use the following command:

```bash
curl -s -X POST -F "file=@/path/to/file" -H "Content-Type: multipart/form-data" https://the.filebin.upload.url
```

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [EduBase](https://github.com/EduBase)
- **Source:** [EduBase/skills](https://github.com/EduBase/skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-edubase-skills-edubase-question-creator
- Seller: https://agentstack.voostack.com/s/edubase
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
