Labs MCP connects AI tools to iximiuz Labs, where they can coach you through hands-on learning, build custom playgrounds from plain-text prompts, and give coding agents real Linux servers for real server-side work.
$https://labs.iximiuz.com/mcp
Works with Claude, ChatGPT, Codex, Cursor, opencode — any MCP client. And you decide exactly what it's allowed to do. Connection instructions ↓
agent ▸ ixlabs
› Spin up a Docker playground and run nginx on port 80.
Tell your assistant what you're trying to learn. It searches the Labs catalog, assembles a plan that fits your background and your schedule — and when you get stuck, it acts like an infinitely patient mentor: right there in the same VM, nudging you forward with hints, not answers.
search
Find the right material
Your assistant can search the entire Labs catalog — tutorials, challenges, courses, skill paths. Tell it what you're after, and it'll pick the materials that match your level.
try saying
› Find me hands-on material about container networking — I already know the Docker basics.
plan
A path built for you
There's no one-size-fits-all approach to learning. Tell your assistant where you are and where you want to get, and it'll assemble a personal learning path from Labs materials and pace you through it.
try saying
› Build me a two-week plan to get comfortable with Kubernetes — one hour a day, hands-on only.
coach
Get unstuck, spoiler-free
Stuck mid-challenge, or a tutorial step isn't clicking? Your coach checks your task state, runs diagnostics in the same VM, and nudges you toward the next step — hints first, never the full solution.
try saying
› I'm stuck on the NAT challenge — the container pings the host but nothing outside. Hint please.
Progress is recorded server-side — streaks, completions, and daily practice stay in sync whether you learn in the browser or through your assistant.
chapter 02 · practice
Describe the lab. Practice in it minutes later.
Preparing a practice environment used to be a chore: writing init scripts, baking rootfs images, debugging the boot. Now it's a sentence: name the machines, the software, even the failure you want to debug — and your agent assembles the playground for you.
simple
A Docker host, app included
One VM, Docker preinstalled, a sample app already running behind a reverse proxy — ready for you to explore, break, and rebuild.
try saying
› Give me a Docker host with a small web app behind nginx — I want to practice tweaking reverse proxies.
cluster
A cluster, batteries included
A real K3s cluster with the tooling you asked for installed and wired up before you even open the terminal.
try saying
› Start the K3s playground, helm-install Argo CD, and give me the UI URL and the admin password.
chaos
Broken on purpose
Nothing teaches better than fixing a broken system. Ask your agent to sabotage a deployment, then debug it yourself — and let the agent verify your fix.
try saying
› Deploy a demo microservice app on K0s and break it in three subtle ways. Don't tell me what you broke.
Liked a setup? Ask your agent to save it as a reusable playground and start it again with one call.
chapter 03 · build
Give your agent real servers to work on.
Your agent can stay right where it is — in a coding tool, a chat assistant, CI, or its own sandbox. When it needs somewhere real to run things, Labs MCP gives it up to 5 remote Linux machines wired into any topology — to build on, deploy to, test against, and leave behind in a reproducible state.
portability
Test it everywhere
One script, many Linux distros. Let the agent run the same code against Ubuntu, Fedora, Debian, Rocky, Alpine, NixOS, and other real distro environments instead of guessing whether a fix is portable.
try saying
› This script works on Ubuntu but fails on Fedora. Test it across the mainstream Linux playgrounds and make it portable.
full VMs
More machine than the sandbox
Sometimes the agent has a tiny container, a constrained runtime, the wrong kernel — or no execution environment at all. Give it a full Linux VM with the resources and capabilities the job actually needs.
try saying
› Build and run this application server on a fresh Linux VM, then expose it with a public URL so I can test it.
topologies
Build the whole system
A server-side project is often more than one process. Give the agent several VMs, multiple networks, a Kubernetes cluster, external clients, databases, or whatever topology the system needs.
try saying
› Deploy this app to a K3s cluster, add the worker jobs and database, and test the service from a separate client VM.
isolation
One environment per branch
Git worktrees isolate source trees, not CPUs, ports, databases, or dev servers. Let different branches — or different agents — use separate remote environments instead of competing for the same laptop.
try saying
› Deploy these three feature branches independently and give me a URL for each one.
reproducibility
Reproduce it. Keep it. Share it.
Clone a repository, check out the exact commit, reproduce the failure, and preserve the resulting machine state. The repro can live beyond the agent session and be reopened later instead of reduced to a list of reproduction steps.
try saying
› Check out commit 8ac21f, reproduce issue #423, and save the working repro as a reusable playground.
chapter 04 · create PRO
Create on Labs — with an assistant at your side.
iximiuz Labs isn't just for learners — authors publish hands-on tutorials and challenges here, and trainers run whole courses and workshops. Labs MCP brings an assistant into that workflow, too.
PROavailable now
Author content with an assistant
Publishing on iximiuz Labs? Draft tutorials, challenges, courses, and blog posts straight from your AI tool — the author tools work against your real author profile, and drafts land in your usual review flow.
try saying
› Draft a challenge where the student fixes a crashing systemd service — write the description and tasks, I'll review.
Labs MCP is a standard remote MCP server (Streamable HTTP) — if your AI tool speaks MCP, it can connect. Two ways to authenticate it:
recommended Sign in with OAuth
Add the URL and your client takes you through a browser sign-in — it registers itself and gets its own credentials, so there's nothing to copy around. Pick your client:
Claude
claude.ai · desktop · mobile
›Open Settings → Connectors.
›Click Add custom connector.
›Paste the connector URL and confirm.
›Approve access on the consent screen.
First protected action shows a consent screen listing exactly what's requested. Revoke anytime under Account → Connected apps.
alternative Use an access token
For sandboxes, remote VMs, and CI — and for clients that don't speak OAuth.
▾
An OAuth sign-in can end up redirecting to http://localhost:<port>/callback, where your client is expected to listen. That breaks on a remote VM or container (the browser redirects to the "wrong" localhost) and in CI or other headless environments (there may be no browser at all). As a workaround, you can mint a token once and pass it to the client as a plain header.
Other clients: add an Authorization: Bearer <token> header to the server config — check your client's docs for the exact key.
Permissions
Eight scopes. You grant only what you want.
Commands run only in playgrounds you own — your own sandbox — and every token is revocable.
account
read
Profile, progress, and daily practice
write
Change practice and email settings
author
read
Your author profile
write
Manage your author profile and create content drafts
learning
read
See what you're working on and coach you
write
Start and complete content for you
playground
read
List and inspect playgrounds and runs
write
Run VMs and commands, expose ports, author playgrounds
The toolbox
Plain MCP tools, from search to shell access.
Everything above boils down to plain MCP tools. Expand to browse the full list — with example prompts for each.
▾
changes something — starts plays, runs commands, edits your settings read-only — searches and inspects, never modifies anything
Discover
Public — no sign-in.
Open access
search_contentFind tutorials, challenges, courses and lessons, blog posts, and more by keyword - or browse by collection, author, category, tags, difficulty, and (signed in) your completion status.▾
› Find beginner-friendly Kubernetes challenges on iximiuz Labs.
› Is there anything hands-on about eBPF on Labs?
› Which official networking challenges haven't I solved yet?
get_contentRead a piece of content's metadata and, on request, its page markdown.▾
› What's the 'Reproduce a Docker Bridge Network' challenge about — and how hard is it?
search_playgroundsFind official, community, or your own custom playgrounds by keyword, collection, author, or category.▾
› Which official Kubernetes playgrounds are there?
› List my custom playgrounds.
get_playgroundInspect a playground: its machines, networks, and full manifest.▾
› How many nodes does the k3s playground have, and what's preinstalled?
search_docsSearch the iximiuz Labs documentation.▾
› How does playground persistence work? Check the Labs docs.
get_docRead a iximiuz Labs documentation page.▾
› Read the Labs docs on custom playgrounds and walk me through making one.
list_tagsList the tags used across the content, most used first - the vocabulary for tag-based searches.▾
› What topics does Labs cover around containers? Show me the tags.
list_authorsList the content authors with their published content counts - the vocabulary for author-based searches.▾
› Who writes the Kubernetes material on Labs? Find me more from that author.
Learning
Coach through and track your progress.
Read learning:read
assist_with_contentCoach you through a running challenge or lesson — checks your tasks, explains the next step, spoiler-free.▾
› I'm on task 2 of the NAT challenge and iptables looks right to me — what am I missing?
› Explain what this task actually wants from me.
Write learning:write
start_contentStart a challenge, tutorial, course lesson, skill path, or roadmap.▾
› Start the 'Set Up NAT for a Container' challenge.
› Enroll me in the Docker The Hands-On Way roadmap.
complete_contentMark a tutorial, lesson, skill path, or roadmap complete.▾
› I've finished the bridge networking tutorial — mark it done.
Playground
Start VMs, run commands, expose ports, build custom playgrounds.
Read playground:read
list_kernel_sourcesList the VM kernels you can pick.▾
› I need kernel 6.1 for eBPF stuff — which kernels are available?
list_rootfs_sourcesList the base OS images available.▾
› Any RHEL-like base images — Rocky or Alma?
list_playsList your running and stopped playgrounds, or recent runs.▾
› Do I still have that K3s playground from yesterday?
get_playA running play's live status: machines, conditions, expiry.▾
› Is my playground done booting? When does it expire?
get_play_tasksYour task progress in a running challenge (spoiler-free).▾
› How far am I in this challenge — which tasks are still failing?
scan_portsScan a machine for listening ports without exposing them.▾
› What's listening on this playground VM?
get_playground_accessSee who can list, read, and start your custom playground.▾
› Who can start my custom playground right now?
Write playground:write
start_playSpin up a fresh playground VM with internet access.▾
› Start the Docker playground.
› Give me a clean Ubuntu 24.04 VM.
run_shell_commandRun a shell command inside your VM.▾
› Install nginx and curl localhost to check it's up.
› Run kubectl get pods -A and tell me what's crashlooping.
write_fileWrite a config, manifest, or script into your VM.▾
› Drop a docker-compose.yml with the app and Redis into /root.
expose_portPublish a known port as an HTTPS URL.▾
› Expose port 3000 so I can open the app on my phone.
expose_shellShare a browser terminal into your VM via a URL.▾
› Give me a browser terminal to this VM — I want to poke around myself.
persist_playKeep a play's state instead of destroying it at expiry.▾
› Don't let this playground vanish when the timer runs out.
stop_playStop a play, preserving its state.▾
› I'm done for today — stop the playground but keep my work.
restart_playRestart a stopped play.▾
› Bring back the cluster I stopped on Friday.
destroy_playPermanently delete a play and its state.▾
› I don't need this scratch VM anymore — destroy it.
set_play_titleRename a play.▾
› Title this run 'issue #423 repro'.
set_play_lifetimeExtend how long a play runs before expiring.▾
› The demo is at 5pm — give this play two more hours.
create_playgroundCreate a reusable custom playground from a base and manifest.▾
› Make me a reusable playground: Ubuntu with Go, Docker, and my dotfiles.
update_playgroundReplace a custom playground's manifest.▾
› Add a second VM to my custom playground for the database.
remove_playgroundDelete a custom playground.▾
› Delete my scratch custom playground.
save_play_as_playgroundSnapshot a stopped play into a new reusable playground.▾
› Snapshot this setup as a playground so my study group can start from it.
set_playground_accessMake a custom playground public, private, or shared with specific people.▾
› Make my k3s playground public.
Account
Your profile, streaks, practice, and email settings.