# QuizGen

> Create hosted quizzes, forms and surveys, send them, and read the responses.

- name: dev.quizgen/quizgen
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 90/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/dev.quizgen%2Fquizgen
- tools: https://api.protogrid.dev/v1/servers/dev.quizgen%2Fquizgen/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "quizgen": {
      "type": "http",
      "url": "https://quizgen.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${QUIZGEN_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${QUIZGEN_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-3d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 90/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list carries no ttlMs, so clients re-fetch it

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 14 of 14 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- warn `tools.token_cost`: about 11,955 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 2 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 14, about 11,955 tokens to load them all
- tool set hash: 111e2a27af199cb84b784f53a5eec852
- badge: [![protogrid quality](https://protogrid.dev/badge/dev.quizgen/quizgen.svg)](https://protogrid.dev/servers/dev.quizgen/quizgen)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://quizgen.dev/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (14)

- `check_account`: Return the connected account's email, plan, and limits. Call this to verify that QuizGen authorization (OAuth or API key) is active. (Formerly named check_api_key; the old name still works.)
- `create_quiz`: Create a live, hosted quiz/form/survey and get its shareable URL. Without authorization this creates a temporary sandbox quiz (72 hours, 10 responses) with a secret claim_url to keep it. The definition schema below is the complete quiz format — only the 19 documented question types exist, and unknown fields are rejected.
- `delete_quiz`: Delete a quiz. Its URL stops working and responses become inaccessible. Confirm with your user before calling this.
- `get_quiz`: Get one quiz including its full definition. Requires an authorized account that owns the quiz.
- `get_quiz_stats`: Get a quiz's funnel stats: views, started, finished, completion rate, and outcome counts.
- `get_response`: Get a single response by id.
- `get_responses`: List a quiz's responses (answers, outcome, score, timestamps), newest first (default 50 per page; the result includes total and has_more). Requires an authorized account that owns the quiz.
- `get_sends`: Delivery status for a quiz's email sends: sent / started / completed per recipient, plus reminder counts and opt-outs.
- `list_quizzes`: List quizzes owned by the connected QuizGen account, newest first (default 50 per page; the result includes total and has_more). Requires authorization.
- `send_quiz_by_email`: Email the quiz to recipients — each gets a unique tracked link so responses tie back to them (see get_sends). Any account with a confirmed email address; capped per month and per 24 hours (Free: 200/mo, 50/day; Plus: 5,000/mo). Confirm the recipient list with your user before calling: this sends real email immediately.
- `set_follow_up`: Set (or clear with rule: null) automatic email reminders for recipients who haven't completed the quiz. Stops on completion, opt-out, or max_reminders.
- `set_quiz_status`: Open ("live") or close ("closed") a quiz. Closed quizzes stop accepting responses but keep their data.
- `set_webhook`: Set (url) or clear (url: null) the webhook for a quiz. Completed responses POST to the url; with a secret, requests carry an X-QuizGen-Signature HMAC-SHA256 header.
- `update_quiz`: Replace a quiz's definition (full replacement, not a patch — send the complete new definition). The quiz keeps its URL and responses. Requires an authorized account that owns the quiz.
