AI Certificates

Practice questions for the four Claude certifications. The assistant never sees the key.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
86%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'check_answer' description lacks action verbin check_answer

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~922Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (0.72% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "practice-exams": {
      "url": "https://aicertificates.study/api/mcp"
    }
  }
}

Remote endpoints

https://aicertificates.study/api/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_exams

The Claude certifications covered here, with exam codes, item counts, fees and the full domain list with published weights. Call this first to get valid exam slugs.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_practice_question(exam, domain, exclude_ids, focus)

Returns one original practice question with its options and no answer key. Present it to the user and let them choose before calling check_answer. Pass every id already served in exclude_ids — this server is stateless and remembers nothing.

Input Schema

{
  "type": "object",
  "properties": {
    "exam": {
      "type": "string",
      "enum": [
        "ccar-p",
        "ccdv-f",
        "ccao-f",
        "ccar-f"
      ],
      "description": "Exam slug from list_exams."
    },
    "domain": {
      "type": "string",
      "description": "Optional domain id (e.g. \"d3\") to drill one area. Domain ids come from list_exams."
    },
    "exclude_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Question ids already served in this session, so they are not repeated."
    },
    "focus": {
      "type": "string",
      "enum": [
        "hardest",
        "traps"
      ],
      "description": "Optional ordering by how everyone else answers these questions: \"hardest\" serves the highest crowd miss rates first, \"traps\" serves the questions most people get wrong the SAME way — a shared misconception rather than merely a hard question. Nothing is filtered out; questions with no crowd data simply come last."
    }
  },
  "required": [
    "exam"
  ],
  "additionalProperties": false
}
🟢my_progress(exam)

Their recorded history for one exam, broken down by blueprint domain with the weakest first, plus how their misses compare with everyone else's on the same free-form questions. Call this at the start of a study session to decide what to drill, and after a run of questions to show what moved. It names the domain to pass to get_practice_question, and when their misses follow the crowd's favorite wrong answers it says to drill those with focus: "traps". Only a signed-in account has history; anonymous callers are told so rather than shown zeros.

Input Schema

{
  "type": "object",
  "properties": {
    "exam": {
      "type": "string",
      "enum": [
        "ccar-p",
        "ccdv-f",
        "ccao-f",
        "ccar-f"
      ],
      "description": "Exam slug from list_exams."
    }
  },
  "required": [
    "exam"
  ],
  "additionalProperties": false
}
🟢open_study(exam, domain, sub_objective)

Open or resume the study page for an exam, optionally focused on a domain or a sub-objective. Use this when someone asks to study rather than to be quizzed in chat: the page gives them a visible question they answer themselves, and once it is open a richer set of tools appears for reading and steering that screen. Returns the URL; a browser agent should navigate there.

Input Schema

{
  "type": "object",
  "properties": {
    "exam": {
      "type": "string",
      "description": "Exam slug from list_exams."
    },
    "domain": {
      "type": "string",
      "description": "Optional blueprint domain, e.g. \"d3\"."
    },
    "sub_objective": {
      "type": "string",
      "description": "Optional concept, e.g. \"d1.5\". Ids are per-exam."
    }
  },
  "required": [
    "exam"
  ]
}
🟢check_answer(exam, question_id, selected)

Grades the user's choice and returns an explanation for EVERY option, including the ones they did not pick. On this exam two options are frequently defensible and only one is credited, so the reasons the wrong options lose are the part worth teaching.

Input Schema

{
  "type": "object",
  "properties": {
    "exam": {
      "type": "string",
      "enum": [
        "ccar-p",
        "ccdv-f",
        "ccao-f",
        "ccar-f"
      ],
      "description": "Exam slug."
    },
    "question_id": {
      "type": "string",
      "description": "The id from get_practice_question."
    },
    "selected": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Option letters the user chose, e.g. [\"B\"] or [\"B\",\"D\"]."
    }
  },
  "required": [
    "exam",
    "question_id",
    "selected"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools