# Ripostiq

> Courses that argue back: learn adaptively, build real work, then defend it to an AI stakeholder.

- name: com.ripostiq/ripostiq
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 85/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.ripostiq%2Fripostiq
- tools: https://api.protogrid.dev/v1/servers/com.ripostiq%2Fripostiq/tools

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

## Connection (mcpServers)

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


## Trust

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

## Quality 85/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### 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: 86 (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`: 24 of 24 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: teach_section (readOnlyHint, idempotentHint, openWorldHint); list_interviews (idempotentHint, openWorldHint); get_outline (idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 3,450 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

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

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

- tools: 24, about 3,450 tokens to load them all
- tool set hash: 8f5e7b8666f94d2ffbe6d292e0457122
- badge: [![protogrid quality](https://protogrid.dev/badge/com.ripostiq/ripostiq.svg)](https://protogrid.dev/servers/com.ripostiq/ripostiq)
- 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://ripostiq.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.94736844)

## Packages

_none_

## Tools (24)

- `begin_course`: Start a course. Returns the tutor protocol, intake guidance, and the module map.
Call this first, run the intake, then call teach_section to teach Module 1.
- `daily_drill`: The two-minute drill — today's spaced-recall question + the learner's day streak. Call it
to fetch today's question (deterministic per day, drawn from modules they've started); after
they answer and you reveal it, call again with done=true to log it and bump the streak. A
daily habit: one question, two minutes, keep the streak alive.
- `get_artifact`: Fetch a saved Library artifact's full content (by id, or by key+course). Use to pull a
prior deliverable forward and build on it in a new chat.
- `get_certificate`: Ripostiq certificate status. Pass `module` for that module's certificate (earned when
its boss battle is passed); omit it for the course certificate (earned when EVERY module's
boss is passed). Both are viewable at /certificate and publicly verifiable at /verify/<code>.
- `get_entitlements`: List the logged-in account's entitlements across courses (OAuth bearer or auth_token).
- `get_lesson`: Fetch a module's lesson content. Free module is open; paid modules require an
active entitlement. Returns {locked, teaser, checkout_url} when not entitled.
- `get_outline`: Full course outline — every module + its section titles — so the learner can pick ANY
module/section to start, in any order. Marks locked modules and their progress.
- `get_progress`: Return the learner's progress for a course — the raw doc plus a display-ready summary
(per-module sections done/total, boss status, overall percent, current position), and
wind_down coverage (which modules have their cheatsheet + session summary saved).
- `get_recap`: Resume briefing for a returning learner — what they've covered, mastery levels,
strong/weak topics, and recall questions to reactivate memory. Call at session start.
- `interview_prep`: Free 'Mock interview' — a realistic, calibrated interview for a role. `jd_or_skill` is the
job description (paste it) or the skill/role to interview against; `role` and `experience`
(e.g. 'senior backend engineer', '5 years') calibrate difficulty; `focus` narrows it (e.g.
'system design'). No login or course needed. Returns the interview protocol + a course
recommendation. Great when someone is prepping for an interview and wants a real grilling.
- `list_artifacts`: List the learner's saved Library artifacts (titles + metadata, newest first). Use at
session start (with get_recap) to reference prior work and continue seamlessly.
- `list_courses`: List every available Ripostiq course (no login needed). Call this FIRST when a user wants
to browse or start learning. Each course has a free Module 1 anyone can start immediately via
begin_course(course) → teach_section. Returns the `course` id to pass to other tools.
For a logged-in learner this also includes courses THEY authored (marked `mine`, with their
`visibility`) — offer those alongside the catalog.
- `list_interviews`: List the curated Interview-Prep topics (e.g. 'Agentic AI in Production'). Each is a
realistic, adaptive mock interview on a fixed topic — concept→scenario question pairs across
several areas — that ends in a candid scorecard. No login or course needed. Call this when
someone wants to prep for an interview on a topic the catalog covers, then start_interview.
- `login`: Claude Code plugin login only (auth_token flow). On the web/desktop connector, identity
comes from the connector's OAuth approval — do NOT ask the user to type their email/password
into the chat; direct them to the connector's 'Log in with Ripostiq' or ripostiq.com instead.
- `mark_progress`: Record the learner's progress server-side (shows on their account + syncs across
devices). Call when a section is genuinely completed (section_id), or after a boss battle
(boss='passed'/'failed', boss_attempt=true), or on a lab status change (lab=...).
- `recall_questions`: Return spaced-recall questions drawn from the account's completed modules.
- `roast`: Free 'Roast my work' — a single tough-but-fair stakeholder grilling of ANY artifact the
user pastes (PRD, architecture, code, pitch, resume, plan, essay…). No login or course
needed. `work` is the artifact (or a solid description); `kind` optionally hints the type
(prd/architecture/code/pitch/strategy/resume/design…) to pick the right persona; `focus` is
what they most want pushback on. Returns the roast protocol + a course recommendation. Great
as an entry point when someone wants honest, pointed feedback on real work.
- `run_boss`: Get the module's boss-battle simulation + how to run it (in-character, real stakes,
earned PASS). Gated like lessons. `difficulty` dials the intensity — 'friendly' (supportive
coach), 'standard' (default), or 'brutal' (relentless, skeptical, high bar) — and optional
`persona_style` sets a flavor (e.g. 'skeptical CTO', 'hostile board member'). The rubric is
unchanged; only how hard the stakeholder presses. Offer the learner the choice first.
- `start_exam`: Start the course's SCORED PRACTICE EXAM — a full, blueprint-aligned multiple-choice mock
that returns a scaled score against the real pass line, a per-domain breakdown, and rationale
for every question. Login + entitlement gated like the paid capstone (returns needs_login /
locked if not). Returns a drawn `form` of questions WITHOUT the answers (the key is held
server-side); proctor them one at a time, collect the learner's letters, then call
submit_exam(course, answers) to score. Never reveal or answer the questions yourself.
- `start_interview`: Begin a curated Interview-Prep session on a fixed topic. `interview` is the topic id from
list_interviews (e.g. 'agentic-ai-in-production'); `role`/`experience` calibrate difficulty.
LOGIN REQUIRED (free in the current beta, like a course): if the learner isn't logged in this
returns needs_login — ask them to log in with the connector, don't run the questions. Once
unlocked, returns the question bank + an adaptive protocol (one question at a time across ~4-5
areas, concept then scenario, hint when stuck, scorecard at the end). Save it with
save_interview.
- `submit_artifact`: Submit a lab deliverable. Stores it in the learner's Library (type='deliverable') and
returns the module rubric so it can be reviewed against the bar. Call get_review next.
For general note-taking use save_artifact instead.
- `submit_exam`: Score a practice exam started with start_exam. `answers` maps each question id to the
learner's chosen letter, e.g. {"q001": "A", "q002": "C"}; unanswered questions score as
incorrect. Returns the scaled score, PASS/FAIL vs the pass line, a per-domain breakdown, and
the per-question rationale for review. Deliver it as an honest scorecard and point them to the
weak domains' modules.
- `teach_section`: Get one lesson section's content + the teaching protocol for it. Free module is
open; paid modules require an active entitlement (returns {locked, teaser} if not).
Teach it socratically, then call again with section_index+1 to advance.
- `whoami`: Return the current logged-in user (via OAuth bearer or an auth_token).
