kodekloud-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kodekloud-mcpCheck my CKA exam readiness and weak areas."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kodekloud-mcp
A production-quality, open-source Model Context Protocol (MCP) server that connects your personal KodeKloud learning account to AI assistants—including Claude Desktop, Claude Code, Cursor, and ChatGPT.
Review course completion, inspect syllabus outlines, view active hands-on labs, track certification exam readiness (CKA, CKAD, CKS, Terraform), and generate personalized weekly study schedules directly from inside your AI chat client.
DISCLAIMER & TERMS OF SERVICE NOTICE
kodekloud-mcp is an independent, unofficial community project. It is not affiliated, associated, authorized, endorsed by, or in any way officially connected with KodeKloud, its subsidiaries, or its affiliates. The official KodeKloud website is available at https://kodekloud.com.
This tool is intended solely for personal educational use by authenticated KodeKloud account holders querying their own learning statistics. Users must strictly abide by KodeKloud's Terms of Service. Do not use this tool to scrape unauthorized content, share subscription access, or bypass platform safeguards.
Table of Contents
Related MCP server: argocd-mcp
Features
Read-Only by Default: Safeguards your account against unintentional state changes.
Offline Mock Mode (
KODEKLOUD_USE_MOCK=true): Ships enabled by default so you can test the entire server, inspect tool structures, and run tests immediately without real credentials.Dual Transport Protocols:
stdio: Lightning-fast, private local communication for Claude Desktop, Claude Code, and Cursor.sse/streamable-http: Modern streaming HTTP transport for remote agents, webhooks, and ChatGPT connectors.
Credential Auto-Detection: Accepts either a raw browser
Cookiestring or aBearerJWT token. Formats appropriate headers automatically.Strict Credential Redaction: Automatically scrubs authentication cookies, bearer tokens, and JWTs from all logs and error messages.
Resilient Network Handling:
Automatic exponential backoff with jitter on HTTP 429 (Rate Limiting), respecting upstream
Retry-Afterheaders.Graceful degradation on schema drift (API structural variations never crash the server).
In-memory async-safe TTL caching (default 60s) to avoid spamming KodeKloud servers.
User-friendly error messaging for expired sessions (HTTP 401/403).
Architecture & Security Principles
flowchart LR
subgraph AI Clients
CD[Claude Desktop]
CC[Claude Code]
CR[Cursor]
CG[ChatGPT]
end
subgraph kodekloud-mcp Server
direction TB
CLI[CLI Entrypoint\nkodekloud-mcp]
FMCP[FastMCP Engine\nstdio / sse]
CACHE[(In-Memory\nTTL Cache)]
CONF[Config & Secret Redactor\nBearer vs Cookie Detect]
MOCK{Mock Mode?}
MD[Mock Data Generator\nRealistic CKA / Labs]
CLIENT[KodeKloudClient\nBackoff & Drift Tolerance]
end
subgraph Upstream
KK[(KodeKloud Platform\nlearn.kodekloud.com)]
end
CD -->|stdio JSON-RPC| FMCP
CC -->|stdio JSON-RPC| FMCP
CR -->|stdio JSON-RPC| FMCP
CG -->|HTTP / SSE /mcp| FMCP
FMCP --> CONF
FMCP --> CACHE
CONF --> MOCK
MOCK -- Yes --> MD
MOCK -- No --> CLIENT
CLIENT -->|HTTPS + Session Credential| KKStdio Protocol Sanctity: MCP clients communicate with the server over
stdout. All operational logs, warnings, and error traces are strictly written tostderr.Zero Persistent Storage of Secrets: The server does not write session credentials to disk, databases, or cache files. Credentials live exclusively in runtime process memory.
Endpoint Isolation: Upstream endpoints and response parsers are isolated in
src/kodekloud_mcp/kodekloud_client.pywith clearly designatedTODOmarkers.
MCP Tools & Prompts Reference
Available Tools
KodeKloud Learn Tools (learn.kodekloud.com)
Tool Name | Type | Description | Key Arguments |
| Read | Fetch percentage completed, labs completed vs total, and last activity timestamp. |
|
| Read | List enrolled courses, categories, difficulty, and status ( | None |
| Read | Retrieve syllabus modules, lectures, lab exercises, and the immediate next suggested lesson. |
|
| Read | Check currently running, paused, or stopped interactive labs with remaining time. | None |
| Read | View active certification paths (CKA, CKAD, Terraform) and exam readiness percentages. | None |
| Read | Compact study digest: current & longest daily streak, total hours, and next suggested lesson. | None |
| Write | Launch/provision an interactive hands-on lab environment. (Disabled by default) |
|
| Write | Terminate an active lab session and clean up resources. (Disabled by default) |
|
KodeKloud Engineer Tools (engineer.kodekloud.com / Project Nautilus)
Tool Name | Type | Description | Key Arguments |
| Read | Fetch active assigned ticket, scenario requirements, target servers (e.g. | None |
| Read | Retrieve current engineering role (DevOps, SysAdmin), total XP/points, global leaderboard rank, success rate, and promotion eligibility. | None |
| Read | Inspect past completed, failed, or expired tasks, points earned, and completion timestamps. |
|
Write tools (start_lab, stop_lab) are registered only when KODEKLOUD_ENABLE_WRITE_TOOLS=true is set. In read-only mode, they do not appear in the tool catalog.
Available Prompts
study_plan(goal: str): Directs the LLM to inspect your current progress (get_learning_summary), enrolled courses (get_course_progress), remaining syllabus outline (get_course_outline), and exam readiness (get_certifications) to generate a customized, week-by-week study roadmap with hands-on lab milestones.troubleshoot_engineer_task(): Instructs the LLM to act as a Senior DevOps Tech Lead & Mentor for your active KodeKloud Engineer ticket. Inspects the task requirements and target servers viaget_engineer_task()and provides step-by-step diagnostic workflows without spoiling the solution.
Authentication & Session Credential Guide
KodeKloud relies on authenticated browser sessions. You provide your credential via the KODEKLOUD_SESSION_COOKIE environment variable. The server auto-detects:
Tokens starting with
Beareror matching a JWT (eyJ...) are sent viaAuthorization: Bearer <token>.Any other string is sent as a
Cookieheader.
Extracting Credentials in Google Chrome
Open Google Chrome and log into your account at learn.kodekloud.com.
Press
F12(orCmd+Option+Ion macOS) to open DevTools.Select the Network tab, check the Fetch/XHR filter, and refresh the page (
Ctrl+R/Cmd+R).Click on any authenticated request (e.g.
me,progress, orcourses).In the Headers pane on the right:
Scroll down to Request Headers.
Look for
authorization: If present, copy the full value starting withBearer eyJ...Look for
cookie: If no Authorization header is present, copy the entire string aftercookie:(e.g.,_session_id=...; remember_token=...).

Extracting Credentials in Firefox
Open Firefox and log into learn.kodekloud.com.
Press
F12(orCmd+Option+Ion macOS) to open the Web Developer Tools.Go to the Storage tab -> expand Cookies -> select
https://learn.kodekloud.com.Copy the values of your session authentication cookies, or inspect the Network tab headers as described above.
Discovering Endpoints & Sanitizing HAR Traces
Because KodeKloud does not have an official public REST documentation, community members can discover active endpoints:
In the browser DevTools Network tab, perform an action (e.g. view a course or check active labs).
Right-click the request list and select Save all as HAR with content.
CRITICAL SANITIZATION STEP: Open the
.harfile in a text editor. Use find-and-replace to sanitize:Search for
Bearerand replace the token withBearer REDACTED_TOKEN.Search for
cookieand replace session values withREDACTED_COOKIE.Search for your email address, real name, and IP address.
Compare your sanitized payload with the models in
src/kodekloud_mcp/models.py, and submit an issue or PR!
Installation & Quick Start
1. Run Instantly with uvx (Recommended)
uv runs the MCP server directly in an isolated temporary virtual environment without requiring a manual install:
# Test in offline Mock Mode (default)
uvx kodekloud-mcp
# Connect with live session cookie (Linux / macOS)
export KODEKLOUD_SESSION_COOKIE="your_cookie_or_jwt_here"
export KODEKLOUD_USE_MOCK=false
uvx kodekloud-mcp
# Connect with live session cookie (Windows PowerShell)
$env:KODEKLOUD_SESSION_COOKIE="your_cookie_or_jwt_here"
$env:KODEKLOUD_USE_MOCK="false"
uvx kodekloud-mcp2. Install via pip
# Install package from repository
pip install git+https://github.com/Maghav/kodekloud-mcp.git
# Verify installation
kodekloud-mcp --help3. Run with Docker & Docker Compose
The included Dockerfile builds a non-root, minimal runtime image.
Using Docker CLI:
# Build the container
docker build -t kodekloud-mcp .
# Run locally in stdio mode (interactive)
docker run -i --rm \
-e KODEKLOUD_USE_MOCK=true \
kodekloud-mcp --transport stdio
# Run as an HTTP/SSE server on port 8000
docker run -d --rm \
-p 8000:8000 \
-e KODEKLOUD_USE_MOCK=true \
-e KODEKLOUD_SESSION_COOKIE="your_cookie" \
kodekloud-mcp --transport sse --host 0.0.0.0 --port 8000Using Docker Compose:
# Start background SSE server
docker compose up -d
# Check server logs
docker compose logs -fClient Configuration
Claude Desktop
To connect kodekloud-mcp to Claude Desktop, edit your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"kodekloud": {
"command": "uvx",
"args": ["kodekloud-mcp"],
"env": {
"KODEKLOUD_SESSION_COOKIE": "your_cookie_or_jwt_here",
"KODEKLOUD_USE_MOCK": "false",
"KODEKLOUD_ENABLE_WRITE_TOOLS": "false",
"KODEKLOUD_CACHE_TTL_SECONDS": "60"
}
}
}
}If you do not haveuv installed, replace "command": "uvx" with "command": "python" and pass "-m", "kodekloud_mcp.cli" in "args".
Claude Code CLI
Add kodekloud-mcp directly to your Claude Code workspace:
claude mcp add kodekloud -- uvx kodekloud-mcpOr with live credentials:
claude mcp add kodekloud -e KODEKLOUD_SESSION_COOKIE="your_cookie" -e KODEKLOUD_USE_MOCK="false" -- uvx kodekloud-mcpCursor IDE
In Cursor:
Open Settings -> Features -> MCP Servers.
Click Add New MCP Server.
Configure:
Name:
KodeKloudType:
commandCommand:
uvx kodekloud-mcpSet environment variables
KODEKLOUD_SESSION_COOKIEandKODEKLOUD_USE_MOCKin your project.envor system environment.
ChatGPT (Remote SSE Connector)
For remote LLMs and ChatGPT Custom GPT Actions that require an HTTPS/SSE streaming URL:
Launch
kodekloud-mcpin SSE mode behind a TLS reverse proxy (e.g., Caddy or Cloudflare Tunnel):kodekloud-mcp --transport sse --host 0.0.0.0 --port 8000Endpoint URL for client connection:
https://mcp.yourdomain.com/sse(orhttps://mcp.yourdomain.com/mcpfor streamable HTTP).
Deployment Guide
Personal Deployment
For individual learners:
Recommended: Run locally over
stdio. It runs as a private subprocess on your computer, requires zero open ports, and keeps your session credentials strictly local.Remote Personal Host: If you prefer accessing your server from mobile or ChatGPT, deploy the Docker container to a personal VPS, Fly.io, or Google Cloud Run behind Caddy/Nginx enforcing HTTPS and basic auth.
Architecture for the KodeKloud Community
Zero Multi-Tenancy Guarantee:
kodekloud-mcp is intentionally designed as an open-source package where every learner runs their own instance with their own credential.
DO NOT build or host a shared multi-tenant service storing other users' session cookies. Storing third-party session tokens introduces severe liability, risk of credential harvesting, and violates user trust.
If an organization or community team ever provides a hosted proxy service:
In-Memory Per-Request Authentication Only: Never write cookies to disk or databases. Transmit credentials per-request via client headers.
Mandatory HTTPS: Reject unencrypted plain HTTP connections.
Per-User Rate Limiting: Apply token-bucket rate limiting per IP/user to prevent upstream blocks.
Privacy & Data Minimization: Never record student learning histories or PII in centralized logging aggregators.
Open Source Publishing Checklist
When releasing or maintaining community distributions:
Semantic Versioning: Adhere strictly to
MAJOR.MINOR.PATCHinpyproject.tomlandCHANGELOG.md.Git Release Tags: Create signed git tags (
git tag -s v0.1.0 -m "Release v0.1.0").PyPI Trusted Publishing: Use GitHub Actions OIDC Trusted Publishing (no static API tokens stored in repository secrets).
Community Templates: Include
.github/ISSUE_TEMPLATE/for bug reports and feature requests.Security Disclosures: Maintain SECURITY.md with a clear vulnerability reporting route.
Contribution Guide: Maintain CONTRIBUTING.md detailing test suites and sanitization procedures.
Troubleshooting & Logs
1. Viewing Server Logs
Because stdout is reserved for JSON-RPC messages in stdio mode, all operational messages are emitted to stderr.
In Claude Desktop: View logs at:
macOS:
tail -f ~/Library/Logs/Claude/mcp-server-kodekloud.logWindows:
Get-Content "$env:APPDATA\Claude\logs\mcp-server-kodekloud.log" -Wait
In CLI / Shell: When running directly, logs appear in your console terminal in real-time.
2. Session Expired (HTTP 401 / 403)
Symptom:
KodeKloud session expired or rejected (HTTP 401/403). Your browser session credential is no longer valid.Cause: KodeKloud sessions expire periodically or when you log out from another browser tab.
Solution: Open Chrome/Firefox, log in to KodeKloud, copy the fresh cookie or Bearer token, and update
KODEKLOUD_SESSION_COOKIE.
3. Rate Limit Exceeded (HTTP 429)
Symptom:
KodeKloud API rate limit exceeded (HTTP 429). The request was automatically retried 3 times...Solution: The server retries automatically with exponential backoff. Increase
KODEKLOUD_CACHE_TTL_SECONDS=120to cache responses longer and reduce request frequency.
4. Claude Desktop Does Not Detect the Server
Solution: Check that
uvorpythonis in your systemPATH. Restart Claude Desktop completely (Cmd+Qon macOS, or right-click tray icon and exit on Windows).
Security Best Practices
Treat Your Cookie as a Password: Anyone with your session cookie can access your KodeKloud account. Never paste it in public forums, GitHub issues, or chat screenshots.
Instant Invalidation: If you suspect your cookie was exposed, simply log out of KodeKloud in your browser. This immediately terminates the server session.
Never Commit
.envFiles: The.gitignorefile is pre-configured to ignore all.envfiles. Verify withgit statusbefore committing.Principle of Least Privilege: Keep
KODEKLOUD_ENABLE_WRITE_TOOLS=falseunless you specifically require lab automation.
License
This project is licensed under the MIT License. See LICENSE for full details.
Available Tools
9 toolsget_active_labsB
List active interactive hands-on labs with status and remaining lease time.
Inspects currently provisioned or running lab sessions (Running, Paused, Stopped), remaining time before automatic expiration, and access URLs.
Returns: ActiveLabsResponse with active lab session details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Count of currently active or provisioned labs. |
| error | No | Error message if the operation or upstream request failed. |
| warning | No | Diagnostic warning or configuration guidance message. |
| active_labs | No | List of active lab sessions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully enumerates the states inspected (Running, Paused, Stopped) and mentions automatic expiration, which signals this is a read-only listing. However, it does not state that it is non-mutating, nor does it cover pagination or rate/scope limits, which would matter for an agent deciding how to call it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence, then a compact breakdown of what is inspected, then the return type. It is slightly longer than strictly necessary because the 'Returns' block largely restates what the first two sentences already covered, but it is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return structure in depth, and it correctly keeps return description light. For a zero-parameter read listing, the remaining gap is the absence of usage guidance and any statement of the operation's read-only nature, but coverage is otherwise adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description correctly adds no parameter noise and instead documents return fields, which is appropriate for a parameterless listing tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (active interactive hands-on labs) with the returned fields named (status, remaining lease time). It does not reference any sibling tool, but the resource is specific enough that an agent can distinguish it from get_course_progress or list_enrolled_courses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given. The description explains what the tool returns but never says under what circumstances an agent should prefer this over other lab/session related calls, or what triggers its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_certificationsB
Track active certification paths, mock exams, and exam readiness scores.
Provides exam preparation progress for certifications like CKA, CKAD, CKS, HashiCorp Terraform Associate, and AWS, including mock exam completion rates and target exam dates.
Returns: CertificationsResponse with tracked certifications and readiness.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of certification tracks tracked. |
| error | No | Error message if the operation or upstream request failed. |
| warning | No | Diagnostic warning or configuration guidance message. |
| certifications | No | List of tracked certifications and learning paths. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation through 'Returns', but never states read-only status, side effects, authentication needs, or rate limits. For a zero-parameter read tool the risk is low, yet the disclosure remains incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence and second sentence overlap by both conveying that certification preparation progress is provided, and the 'Returns:' block restates information already covered by the output schema. The core purpose is front-loaded, but redundancy keeps it from being tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an existing output schema, the description provides sufficient context about what data is retrieved, including certification types and readiness metrics. It omits sibling routing guidance, but the call mechanics are fully covered by the empty schema and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the input schema is an empty object, so there are no parameter semantics to document. Per the calibration rule for zero-parameter tools, the baseline is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens by naming the specific resource and data domains: active certification paths, mock exams, and exam readiness scores, with concrete examples like CKA and AWS. It does not differentiate from siblings such as get_course_progress or get_learning_summary, but the certification focus is distinct enough to identify the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does not state when to use this tool versus alternatives like get_course_progress or get_learning_summary, nor does it provide exclusions or prerequisites. The agent must infer usage entirely from the resource name and description content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_outlineA
Retrieve course modules, lessons, and labs with completion status.
Provides a detailed syllabus breakdown showing which lectures and hands-on labs have been completed, and indicates the next suggested lesson to help the learner identify exactly what to study next.
Args: course_name: Title, slug, or ID of the course (e.g. 'CKA', 'Docker').
Returns: CourseOutlineResponse with modules, lessons, and next suggested item.
| Name | Required | Description | Default |
|---|---|---|---|
| course_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message if the operation or upstream request failed. |
| modules | No | List of modules with lesson breakdowns. |
| warning | No | Diagnostic warning or configuration guidance message. |
| course_id | Yes | Identifier of the course. |
| course_title | Yes | Title of the course. |
| total_lessons | Yes | Total number of lessons across all modules. |
| total_modules | Yes | Total number of modules. |
| completed_lessons | Yes | Number of completed lessons. |
| next_suggested_lesson | No | The immediate next uncompleted lesson to guide the learner's study plan. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read-only retrieval and discloses that completion status and a next suggested lesson are included, which is useful context, but says nothing about authentication requirements, whether enrollment is required, caching, or error behavior for an unknown course.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first sentence, followed by a clarifying sentence and tidy Args/Returns blocks. It is slightly redundant in restating the return type already covered by the output schema, but overall tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema present, the description covers the required input semantics, the returned artifacts, and the study-planning use case. The main gap is the absence of any differentiation from the closely related sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: course_name is documented as accepting a title, slug, or ID with concrete examples ('CKA', 'Docker'). That is genuine semantic value the bare 'string' schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve course modules, lessons, and labs with completion status') and names the concrete artifacts returned, so the agent knows this is a syllabus/structure tool. It does not, however, explicitly distinguish itself from the very similar sibling get_course_progress.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the stated motivation ('help the learner identify exactly what to study next'), which does suggest a study-planning context. There is no explicit when-to-use, no exclusion, and no routing to the sibling get_course_progress, which overlaps heavily in purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_progressA
Get completion percentage, completed vs total labs, and last activity.
Fetches overall progress metrics across all enrolled courses or filters specifically for a given course name or ID (e.g. 'CKA' or 'Kubernetes').
Args: course_name: Optional course title or slug to filter progress for. If omitted, returns progress for all enrolled courses.
Returns: CourseProgressResponse with completion percentages and lab counts.
| Name | Required | Description | Default |
|---|---|---|---|
| course_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message if the operation or upstream request failed. |
| courses | No | List of course progress records matching the query. |
| warning | No | Diagnostic warning or configuration guidance message. |
| raw_data | No | Raw upstream payload if schema drift was detected. |
| total_courses_enrolled | Yes | Total number of enrolled courses. |
| average_progress_percent | Yes | Overall completion percentage across all courses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The 'Get' framing and the read-only nature of progress metrics imply a safe read, and the description discloses the returned fields, but it says nothing about auth requirements, pagination, or whether missing/unenrolled courses error out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the metric summary, then a compact Args/Returns block. Efficient overall, though the 'Returns' section partly restates what the output schema already covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return-value explanation is largely redundant but harmless. The description covers the single optional parameter and the scope of the query well enough to call the tool correctly; only edge-case behavior is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that course_name is optional, accepts a title or slug, gives concrete examples ('CKA', 'Kubernetes'), and states the default behavior when omitted. It could still clarify matching semantics (partial vs exact).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get completion percentage, completed vs total labs, and last activity') and names the concrete metrics returned. It is clearly a progress-read tool, but it never explicitly distinguishes itself from close siblings like get_learning_summary or list_enrolled_courses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: omit course_name for all courses, pass a name/ID to narrow scope. There is no explicit when-to-use versus siblings such as get_learning_summary, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_engineer_profileA
Retrieve user profile, career track level, XP, and rank on KodeKloud Engineer.
Returns current engineering role (e.g. 'DevOps Engineer', 'System Administrator'), total points/XP, global leaderboard rank, tasks completed, tasks failed, success rate, and promotion eligibility.
Returns: EngineerProfileResponse with standing and career metrics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message if the operation or upstream request failed. |
| warning | No | Diagnostic warning or configuration guidance message. |
| username | Yes | KodeKloud Engineer username or handle. |
| next_level | No | Next role in career progression path (e.g. 'Senior DevOps Engineer'). |
| global_rank | No | Position on the global leaderboard. |
| streak_days | No | Consecutive daily task completion streak. |
| tasks_failed | No | Total failed or expired tasks. |
| total_points | Yes | Total cumulative XP/points earned. |
| current_level | Yes | Current engineering role/level (e.g. 'DevOps Engineer', 'System Administrator'). |
| tasks_completed | No | Total successfully validated tasks. |
| success_rate_percent | No | Success rate percentage (0.0 to 100.0). |
| eligible_for_promotion | No | Whether learner meets criteria to advance to the next level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. 'Retrieve' implies a read-only operation and the text enumerates the data returned, but it says nothing about authentication requirements, whose profile is fetched (self vs arbitrary user), or any rate/permission constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and resource, and reasonably short. The trailing 'Returns:' block restates the return fields a second time after already listing them, which is mild redundancy rather than harmful bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, yet it is complete enough for an agent to call a zero-parameter read tool correctly. The main omission is the absence of any usage/routing context relative to its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema has no semantics to document and the baseline of 4 applies. There is no parameter ambiguity for the description to resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Retrieve user profile, career track level, XP, and rank on KodeKloud Engineer') and scopes the domain to the Engineer track. It does not name any sibling tool, so the boundary versus get_learning_summary or get_course_progress is left to inference, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, prerequisites, or alternatives are given. The narrow scope ('on KodeKloud Engineer', profile/rank/XP metrics) lets an agent infer it is the tool for viewing one's own engineering standing, but there is no routing guidance against sibling metrics tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_engineer_taskA
Fetch the current active assigned task/ticket on KodeKloud Engineer.
Retrieves the active ticket scenario (SysAdmin, DevOps, Cloud, Kubernetes), including task description, acceptance criteria, target servers (e.g. stapp01, jump_host), assigned credentials/usernames, points, and remaining deadline hours.
Returns: EngineerTaskResponse with active task details or empty notification.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | Active task details if present. |
| error | No | Error message if the operation or upstream request failed. |
| message | No | Informational message if no task is active. |
| warning | No | Diagnostic warning or configuration guidance message. |
| has_active_task | Yes | True if an active ticket is currently assigned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses scope ('current active' only, with an empty notification when none) and the response contents, but says nothing about auth requirements or whether any state is affected beyond the read framing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in one sentence, which is good. However, the trailing 'Returns: EngineerTaskResponse with active task details or empty notification' partly duplicates the output schema, so a small amount of space is not fully earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema present, the description need not enumerate return fields in detail and is complete enough to call correctly. The only gap is the absence of any usage routing against sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies; there is no parameter semantics to document or mis-document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the current active assigned task/ticket on KodeKloud Engineer') and enumerates the content returned (scenario type, acceptance criteria, servers, credentials, points, deadline). It is clearly distinguishable from siblings like get_engineer_profile or list_engineer_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'current active assigned task', but the description never says when to call this versus alternatives such as list_engineer_history or get_engineer_profile, and gives no prerequisites or exclusions. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_learning_summaryA
Get a compact digest of learning streaks, recent activity, and study stats.
Designed specifically for constructing personalized study schedules. Includes current consecutive study streak in days, total hours learned, recent activity history, count of pending labs, and next suggested lesson.
Returns: LearningSummaryResponse compact learner profile digest.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message if the operation or upstream request failed. |
| streak | Yes | Current and best study streak metrics. |
| warning | No | Diagnostic warning or configuration guidance message. |
| learner_name | No | Display name of the learner. |
| recent_activities | No | List of recent learning actions (up to 5). |
| pending_labs_count | No | Number of unfinished labs in active in-progress courses. |
| total_hours_learned | Yes | Total cumulative hours spent learning on KodeKloud. |
| total_completed_labs | Yes | Total hands-on labs successfully completed. |
| next_suggested_course | No | Recommended course for the next study session. |
| next_suggested_lesson | No | Recommended next lesson or lab to continue with. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the payload contents and the fact that it is a digest read, but says nothing about permissions, caching, or rate limits, and the enumerate-then-'Returns' structure partially duplicates the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and resource, followed by content enumeration and a usage note. The trailing 'Returns:' block restates the enumeration already given in sentence two and duplicates the output schema, which is mild waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-arg read tool with an output schema present, the description covers purpose, contents, and intended use adequately; return-value structure is correctly left to the schema. The only shortfall is the absence of any behavioral note (auth, freshness) in lieu of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description correctly avoids inventing parameter detail that does not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('learning summary'), then enumerates the digest contents: streak days, total hours, recent activity, pending labs, next suggested lesson. That enumeration implicitly distinguishes it from siblings like get_course_progress and get_active_labs, though it never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case: 'Designed specifically for constructing personalized study schedules.' That tells the agent when to reach for this tool rather than a per-course tool, but offers no when-not condition or named alternative among the eight siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_engineer_historyA
List historical tasks, tickets, and results on KodeKloud Engineer.
Inspects past completed, failed, or expired tasks, tracks, points awarded, and completion timestamps.
Args: limit: Maximum number of historical task records to return (default: 10). status: Optional filter by status: 'Success', 'Failed', or 'Expired'.
Returns: EngineerHistoryResponse with historical task records.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Total count of historical tasks returned. |
| error | No | Error message if the operation or upstream request failed. |
| tasks | No | Historical task records. |
| warning | No | Diagnostic warning or configuration guidance message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. It makes the read-only nature clear via 'List'/'Inspects' and documents the default limit and the status filter, but says nothing about authentication, rate limits, result volume beyond the limit, or ordering of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded summary sentence followed by clearly labelled Args and Returns sections; every line carries information. The Returns line is slightly redundant given an output schema exists, but overall it is tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two optional parameters, an output schema present, and a status enum supplied in prose, an agent has what it needs to invoke the tool correctly. The remaining gap is behavioral context such as ordering and result-window semantics, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning — and it delivers: limit is defined as the max records with a default of 10, and status enumerates the accepted values 'Success', 'Failed', 'Expired'. That enum list is genuine added value, since the schema itself declares only an untyped anyOf string/null with no allowed values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: it lists historical tasks, tickets and results on KodeKloud Engineer, and scopes them as past completed/failed/expired tasks. It is clearly distinct in intent from the singular get_engineer_task sibling, though it never names that sibling to reinforce the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Inspects past completed, failed, or expired tasks, tracks, points awarded, and completion timestamps', which tells the agent this is the historical-record retrieval path. There is no explicit statement of when to prefer this over get_engineer_task or any other sibling, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_enrolled_coursesA
List all courses the user is currently enrolled in on KodeKloud.
Returns titles, categories (Kubernetes, Cloud, Linux, IaC), difficulty levels, and current enrollment status (In Progress, Completed, Not Started).
Returns: EnrolledCoursesResponse containing the list of enrolled courses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Total count of enrolled courses. |
| error | No | Error message if the operation or upstream request failed. |
| courses | No | List of enrolled courses. |
| warning | No | Diagnostic warning or configuration guidance message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'List' implies a safe read, and it discloses the shape of what comes back (titles, categories, difficulty, enrollment status). It says nothing about authentication scope, pagination, or ordering, which are the remaining behavioral gaps for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, purpose front-loaded, no filler. The field list is compact and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be spelled out; the description still names the key fields, which is helpful. For a zero-argument read tool it is nearly complete, missing only ordering/pagination expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to convey; baseline 4 applies. The description correctly makes no claims about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List all courses the user is currently enrolled in on KodeKloud') and scopes it to the current user's enrollments, which separates it from get_course_outline and get_course_progress in spirit. It never names a sibling explicitly, so differentiation must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of the obvious alternatives (get_course_progress for per-course detail, get_course_outline for a course's structure). The agent must guess when this list is the right starting point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
get_active_labs - First observed
get_certifications - First observed
get_course_outline - First observed
get_course_progress - First observed
get_engineer_profile - First observed
get_engineer_task - First observed
get_learning_summary - First observed
list_engineer_history - First observed
list_enrolled_courses
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes: course progress, outline, enrolled courses, active labs, certifications, learning summary, and engineer-specific resources. However, get_course_progress, get_course_outline, and get_learning_summary all touch on course completion and next-lesson guidance, creating mild overlap. Descriptions help differentiate them, so misselection is unlikely but possible.
All tool names follow a consistent snake_case verb_noun pattern using get_ or list_. The convention is predictable throughout, with no mixing of styles or vague verbs. This makes the tool set easy to scan and understand.
Nine tools is well within the ideal range for a focused learning-platform MCP. Each tool covers a distinct area: courses, progress, labs, certifications, summaries, and KodeKloud Engineer tasks. No tool feels redundant or excessive for the scope.
The surface covers the main read-only areas learners care about: enrolled courses, progress, outlines, labs, certifications, study summaries, and engineer tasks/profile/history. Minor gaps exist around lab session control (e.g., starting or stopping labs) and task submission actions, but core monitoring and discovery workflows are well supported.
Maintenance
Related MCP Connectors
Read and write KukGit repositories, files, issues and pull requests from an AI assistant.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Your apps, skills, MCP servers and keys from ahel.ai, served to Claude, ChatGPT, Cursor and Codex.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables LLMs like Claude to securely execute Kubernetes CLI tools (kubectl, helm, istioctl, argocd) across multiple clusters through dynamic kubeconfig support, allowing natural language Kubernetes management and operations.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Argo CD applications through natural language, providing tools for cluster, project, application, and resource management via stdio and HTTP transports.Apache 2.0
- AlicenseAqualityBmaintenanceConnects AI agents to New Relic observability data through the NerdGraph GraphQL API, running locally over stdio with a standard User API key. Enables NRQL queries, entity and alert lookups, log and trace investigation, deployment correlation, and metric comparisons while staying read-only by default.14Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents such as Claude Code, Cursor, Codex, and OpenCode to query local token usage, costs, quotas, projects, and models through six strictly read-only tools. All data stays on the local machine, drawn from passively parsed session logs rather than uploaded telemetry.MIT