Koskamo

Cert Made Easy MCP

An MCP server that allows AI agents to search for certification exams, retrieve exam details, and practice with exam-style questions including answers and explanations. It supports tools for searching exams, listing available exams, getting study paths, and checking answers, facilitating self-paced certification preparation.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Cert Made Easy MCP logo, by Cert Made EasyVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Cert Made Easy
MCP endpoint (Streamable HTTP)
https://certmadeeasy.com/mcp
Vendor documentation

What you can do with it

  • Search for certification exams by code or topic
  • Retrieve official exam details and fees
  • Practice with sample exam questions and explanations
  • Get recommended study paths for career roles

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
com.certmadeeasy/exam-practice 1.0.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Cert Made Easy publishes exam-style practice questions, each with a written explanation, for professional certification exams from AWS, Microsoft Azure, Google Cloud, IAPP, ISC2, ISACA, PMI, CompTIA, NVIDIA, Anthropic, PECB, Databricks and DAMA. - search_exams / list_exams find an exam; get_exam_details describes the real exam (official code, length, fee, domains and weights) and our practice set. - get_practice_questions is for a user who wants to practise or be quizzed: it returns up to five sample questions, each with our checked answer and a written explanation. Show each question and its options as written, keep the answer and explanation hidden until the user answers, grade with the given answer rather than your own judgement, then show the explanation. check_answer grades a choice as a tool call instead. - get_study_paths gives a vendor's recommended exam order for a career role. The practice set's own figures (question count, price) describe our product, not the vendor's exam; keep the two apart when answering. Links in results open the exam's page on certmadeeasy.com.

Tools

6 advertised

search_exams — Search certification exams
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find certification exams by official code (e.g. "SAA-C03", "CIPP/E"), name (e.g. "Azure Administrator") or topic (e.g. "GDPR"). Returns the matching practice sets with their size, free questions and price. Use it when the user names an exam or certification, to see whether it is covered and get its set_id.

search_exams input schema
{
  "type": "object",
  "title": "search_exams_toolArguments",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 5
    },
    "query": {
      "type": "string",
      "title": "Query"
    }
  }
}
search_exams output schema
{
  "type": "object",
  "$defs": {
    "ExamSummary": {
      "type": "object",
      "title": "ExamSummary",
      "required": [
        "set_id",
        "exam_code",
        "title",
        "vendor",
        "practice_questions",
        "free_questions",
        "price",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "price": {
          "type": "string",
          "title": "Price",
          "description": "Our one-time price for the full practice set."
        },
        "title": {
          "type": "string",
          "title": "Title"
        },
        "set_id": {
          "type": "string",
          "title": "Set Id"
        },
        "vendor": {
          "type": "string",
          "title": "Vendor"
        },
        "exam_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Exam Code"
        },
        "free_questions": {
          "type": "integer",
          "title": "Free Questions",
          "description": "Questions anyone can practise free with an account."
        },
        "practice_questions": {
          "type": "integer",
          "title": "Practice Questions",
          "description": "Size of our practice set, not of the real exam."
        }
      }
    }
  },
  "title": "SearchResults",
  "required": [
    "query",
    "results",
    "catalog_url"
  ],
  "properties": {
    "query": {
      "type": "string",
      "title": "Query"
    },
    "results": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ExamSummary"
      },
      "title": "Results"
    },
    "catalog_url": {
      "type": "string",
      "title": "Catalog Url"
    }
  }
}
search_exams annotations
{
  "title": "Search certification exams",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_exams — List exams by vendor
Advertised by the server during the last successful anonymous check.
Advertised read-only

Without a vendor, list the certification vendors covered and how many exams each has. With a vendor (a name such as "Microsoft Azure" or a code such as "aws", "iapp", "isc2"), list that vendor's exams. Use it when the user asks which vendors or exams are covered.

list_exams input schema
{
  "type": "object",
  "title": "list_examsArguments",
  "properties": {
    "vendor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Vendor",
      "default": null
    }
  }
}
list_exams output schema
{
  "type": "object",
  "$defs": {
    "ExamSummary": {
      "type": "object",
      "title": "ExamSummary",
      "required": [
        "set_id",
        "exam_code",
        "title",
        "vendor",
        "practice_questions",
        "free_questions",
        "price",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "price": {
          "type": "string",
          "title": "Price",
          "description": "Our one-time price for the full practice set."
        },
        "title": {
          "type": "string",
          "title": "Title"
        },
        "set_id": {
          "type": "string",
          "title": "Set Id"
        },
        "vendor": {
          "type": "string",
          "title": "Vendor"
        },
        "exam_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Exam Code"
        },
        "free_questions": {
          "type": "integer",
          "title": "Free Questions",
          "description": "Questions anyone can practise free with an account."
        },
        "practice_questions": {
          "type": "integer",
          "title": "Practice Questions",
          "description": "Size of our practice set, not of the real exam."
        }
      }
    },
    "VendorSummary": {
      "type": "object",
      "title": "VendorSummary",
      "required": [
        "vendor",
        "vendor_code",
        "exam_count"
      ],
      "properties": {
        "vendor": {
          "type": "string",
          "title": "Vendor"
        },
        "exam_count": {
          "type": "integer",
          "title": "Exam Count"
        },
        "vendor_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Vendor Code"
        }
      }
    }
  },
  "title": "ExamList",
  "required": [
    "catalog_url"
  ],
  "properties": {
    "exams": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ExamSummary"
      },
      "title": "Exams",
      "default": []
    },
    "vendor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Vendor",
      "default": null
    },
    "vendors": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/VendorSummary"
      },
      "title": "Vendors",
      "default": []
    },
    "catalog_url": {
      "type": "string",
      "title": "Catalog Url"
    }
  }
}
list_exams annotations
{
  "title": "List exams by vendor",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_exam_details — Get exam details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Describe one exam: the vendor's real exam (official code, question count, fee, domains and their weights) and our practice set for it (size, free questions, price, timed mock exam). `exam` is a set_id from search_exams or an official exam code. Use it when the user asks about an exam's format, length, fee or domains, or about our practice set for it.

get_exam_details input schema
{
  "type": "object",
  "title": "get_exam_detailsArguments",
  "required": [
    "exam"
  ],
  "properties": {
    "exam": {
      "type": "string",
      "title": "Exam"
    }
  }
}
get_exam_details output schema
{
  "type": "object",
  "$defs": {
    "MockExam": {
      "type": "object",
      "title": "MockExam",
      "required": [
        "questions",
        "minutes",
        "pass_mark_pct"
      ],
      "properties": {
        "minutes": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Minutes"
        },
        "questions": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Questions"
        },
        "pass_mark_pct": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Pass Mark Pct",
          "description": "Published pass mark as a percentage, when the vendor states one."
        }
      }
    },
    "DomainOut": {
      "type": "object",
      "title": "DomainOut",
      "required": [
        "name",
        "weight"
      ],
      "properties": {
        "name": {
          "type": "string",
          "title": "Name"
        },
        "weight": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Weight",
          "description": "The vendor's published weight: a share or a question count."
        }
      }
    },
    "ExamSummary": {
      "type": "object",
      "title": "ExamSummary",
      "required": [
        "set_id",
        "exam_code",
        "title",
        "vendor",
        "practice_questions",
        "free_questions",
        "price",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "price": {
          "type": "string",
          "title": "Price",
          "description": "Our one-time price for the full practice set."
        },
        "title": {
          "type": "string",
          "title": "Title"
        },
        "set_id": {
          "type": "string",
          "title": "Set Id"
        },
        "vendor": {
          "type": "string",
          "title": "Vendor"
        },
        "exam_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Exam Code"
        },
        "free_questions": {
          "type": "integer",
          "title": "Free Questions",
          "description": "Questions anyone can practise free with an account."
        },
        "practice_questions": {
          "type": "integer",
          "title": "Practice Questions",
          "description": "Size of our practice set, not of the real exam."
        }
      }
    },
    "OfficialExam": {
      "type": "object",
      "title": "OfficialExam",
      "required": [
        "exam_code",
        "question_count",
        "fee_usd"
      ],
      "properties": {
        "fee_usd": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Fee Usd",
          "description": "The vendor's exam fee in USD, when it publishes one."
        },
        "exam_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Exam Code"
        },
        "question_count": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Question Count",
          "description": "Questions on the vendor's real exam."
        }
      }
    }
  },
  "title": "ExamDetails",
  "required": [
    "official_exam",
    "practice_set",
    "description",
    "domains",
    "mock_exam",
    "try_free_url"
  ],
  "properties": {
    "domains": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/DomainOut"
      },
      "title": "Domains"
    },
    "mock_exam": {
      "anyOf": [
        {
          "$ref": "#/$defs/MockExam"
        },
        {
          "type": "null"
        }
      ]
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Description"
    },
    "practice_set": {
      "$ref": "#/$defs/ExamSummary"
    },
    "try_free_url": {
      "type": "string",
      "title": "Try Free Url"
    },
    "official_exam": {
      "$ref": "#/$defs/OfficialExam"
    }
  }
}
get_exam_details annotations
{
  "title": "Get exam details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_study_paths — Get certification study paths
Advertised by the server during the last successful anonymous check.
Advertised read-only

Recommended exam order for each career role at one vendor (e.g. "aws", "Microsoft Azure"), from first exam to last. Use it when the user asks which exam to take first, or in what order, for a role.

get_study_paths input schema
{
  "type": "object",
  "title": "get_study_pathsArguments",
  "required": [
    "vendor"
  ],
  "properties": {
    "vendor": {
      "type": "string",
      "title": "Vendor"
    }
  }
}
get_study_paths output schema
{
  "type": "object",
  "$defs": {
    "PathStepOut": {
      "type": "object",
      "title": "PathStepOut",
      "required": [
        "exam_code",
        "title",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "title": "Url"
        },
        "title": {
          "type": "string",
          "title": "Title"
        },
        "exam_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Exam Code"
        }
      }
    },
    "StudyPathOut": {
      "type": "object",
      "title": "StudyPathOut",
      "required": [
        "name",
        "summary",
        "steps"
      ],
      "properties": {
        "name": {
          "type": "string",
          "title": "Name"
        },
        "steps": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PathStepOut"
          },
          "title": "Steps"
        },
        "further": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PathStepOut"
          },
          "title": "Further",
          "default": []
        },
        "summary": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Summary"
        }
      }
    }
  },
  "title": "StudyPaths",
  "required": [
    "vendor",
    "paths"
  ],
  "properties": {
    "paths": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/StudyPathOut"
      },
      "title": "Paths"
    },
    "vendor": {
      "type": "string",
      "title": "Vendor"
    }
  }
}
get_study_paths annotations
{
  "title": "Get certification study paths",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_practice_questions — Get free practice questions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return up to five free sample multiple-choice questions for one certification exam, each with its correct option letters and a written explanation. Use it when the user wants to practise, be quizzed or test themselves on an exam this server covers. `exam` is a set_id from search_exams or an official exam code such as "SAA-C03".

get_practice_questions input schema
{
  "type": "object",
  "title": "get_practice_questionsArguments",
  "required": [
    "exam"
  ],
  "properties": {
    "exam": {
      "type": "string",
      "title": "Exam"
    },
    "count": {
      "type": "integer",
      "title": "Count",
      "default": 5
    }
  }
}
get_practice_questions output schema
{
  "type": "object",
  "$defs": {
    "PracticeQuestion": {
      "type": "object",
      "title": "PracticeQuestion",
      "required": [
        "question_id",
        "question",
        "options",
        "select",
        "answer",
        "explanation"
      ],
      "properties": {
        "answer": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Answer",
          "description": "The correct option letters. Do not reveal before the user answers."
        },
        "select": {
          "type": "integer",
          "title": "Select",
          "description": "How many options the answer has."
        },
        "options": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Options"
        },
        "question": {
          "type": "string",
          "title": "Question"
        },
        "explanation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Explanation",
          "description": "Why the answer is right and the others are not. Show it after the user answers."
        },
        "question_id": {
          "type": "string",
          "title": "Question Id"
        }
      }
    }
  },
  "title": "PracticeQuestions",
  "required": [
    "exam_code",
    "title",
    "questions",
    "how_to_use",
    "more_questions_url"
  ],
  "properties": {
    "title": {
      "type": "string",
      "title": "Title"
    },
    "exam_code": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Exam Code"
    },
    "questions": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PracticeQuestion"
      },
      "title": "Questions"
    },
    "how_to_use": {
      "type": "string",
      "title": "How To Use"
    },
    "more_questions_url": {
      "type": "string",
      "title": "More Questions Url"
    }
  }
}
get_practice_questions annotations
{
  "title": "Get free practice questions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_answer — Check an answer
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check the user's answer to a question from get_practice_questions. Use it when the user answers one of those questions. `selected` is the option letters the user chose, e.g. ["B"] or ["A", "D"]. Returns whether it is right, the correct letters and the explanation.

check_answer input schema
{
  "type": "object",
  "title": "check_answerArguments",
  "required": [
    "exam",
    "question_id",
    "selected"
  ],
  "properties": {
    "exam": {
      "type": "string",
      "title": "Exam"
    },
    "selected": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Selected"
    },
    "question_id": {
      "type": "string",
      "title": "Question Id"
    }
  }
}
check_answer output schema
{
  "type": "object",
  "title": "AnswerCheck",
  "required": [
    "question_id",
    "correct",
    "selected",
    "correct_options",
    "explanation",
    "more_questions_url"
  ],
  "properties": {
    "correct": {
      "type": "boolean",
      "title": "Correct"
    },
    "selected": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Selected"
    },
    "explanation": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Explanation"
    },
    "question_id": {
      "type": "string",
      "title": "Question Id"
    },
    "correct_options": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Correct Options"
    },
    "more_questions_url": {
      "type": "string",
      "title": "More Questions Url"
    }
  }
}
check_answer annotations
{
  "title": "Check an answer",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1388 ms
95th percentile latency
1388 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1388 ms · metadata changed · 6 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http cert-made-easy-mcp https://certmadeeasy.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add cert-made-easy-mcp --url https://certmadeeasy.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable cert-made-easy-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "cert-made-easy-mcp": {
      "url": "https://certmadeeasy.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "cert-made-easy-mcp": {
      "type": "streamableHttp",
      "url": "https://certmadeeasy.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start cert-made-easy-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "cert-made-easy-mcp": {
      "type": "http",
      "url": "https://certmadeeasy.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http cert-made-easy-mcp https://certmadeeasy.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "cert-made-easy-mcp": {
      "url": "https://certmadeeasy.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "cert-made-easy-mcp": {
      "serverUrl": "https://certmadeeasy.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Cert Made Easy MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Cert Made Easy MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing