Ripostiq
Courses that argue back: learn adaptively, build real work, then defend it to an AI stakeholder.
사용해야 할까요
품질 및 안전성
발견 사항 (2)
- HIGH
- MEDIUMroast에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"ripostiq": {
"url": "https://ripostiq.com/mcp"
}
}
}원격 엔드포인트
https://ripostiq.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (24)
⚪login(email, password)
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.
입력 스키마
{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"password": {
"type": "string"
}
},
"required": [
"email",
"password"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢whoami(auth_token)
Return the current logged-in user (via OAuth bearer or an auth_token).
입력 스키마
{
"type": "object",
"properties": {
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢get_entitlements(auth_token)
List the logged-in account's entitlements across courses (OAuth bearer or auth_token).
입력 스키마
{
"type": "object",
"properties": {
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢get_lesson(course, module, section, auth_token)
Fetch a module's lesson content. Free module is open; paid modules require an active entitlement. Returns {locked, teaser, checkout_url} when not entitled.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"module": {
"type": "string"
},
"section": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course",
"module"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢list_courses(auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}⚪begin_course(course, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}⚪roast(work, kind, focus, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"work": {
"type": "string"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"focus": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"work"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}⚪interview_prep(jd_or_skill, role, experience, focus, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"jd_or_skill": {
"type": "string"
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"experience": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"focus": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"jd_or_skill"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢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.
입력 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟡start_interview(interview, role, experience, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"interview": {
"type": "string"
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"experience": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"interview"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢teach_section(course, module, section_index, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"module": {
"type": "string"
},
"section_index": {
"default": 0,
"type": "integer"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course",
"module"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢run_boss(course, module, difficulty, persona_style, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"module": {
"type": "string"
},
"difficulty": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"persona_style": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course",
"module"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢daily_drill(course, done, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"done": {
"default": false,
"type": "boolean"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟡start_exam(course, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟡submit_exam(course, answers, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"answers": {
"additionalProperties": true,
"type": "object"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course",
"answers"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢get_outline(course, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟡mark_progress(course, module, section_id, boss, boss_attempt, ...)
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=...).
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"module": {
"type": "string"
},
"section_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"boss": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"boss_attempt": {
"default": false,
"type": "boolean"
},
"lab": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course",
"module"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢get_recap(course, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢get_progress(course, auth_token)
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).
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢recall_questions(auth_token, course, count)
Return spaced-recall questions drawn from the account's completed modules.
입력 스키마
{
"type": "object",
"properties": {
"auth_token": {
"type": "string"
},
"course": {
"type": "string"
},
"count": {
"default": 2,
"type": "integer"
}
},
"required": [
"auth_token",
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢list_artifacts(course, type, module, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"module": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢get_artifact(artifact_id, key, course, auth_token)
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.
입력 스키마
{
"type": "object",
"properties": {
"artifact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null
},
"key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"course": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟡submit_artifact(course, module, type, content_text, repo_ref, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"module": {
"type": "string"
},
"type": {
"type": "string"
},
"content_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"repo_ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course",
"module",
"type"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}🟢get_certificate(course, module, auth_token)
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>.
입력 스키마
{
"type": "object",
"properties": {
"course": {
"type": "string"
},
"module": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"auth_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"course"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"additionalProperties": true
}커뮤니티
증거