Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
All 94 LearnWorlds LMS API endpoints as safety-categorized MCP tools (read/write/destructive).
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
MCP_TRANSPORT, LEARNWORLDS_BASE_URL, LEARNWORLDS_API_TOKEN, LEARNWORLDS_CLIENT_ID, MCP_AUTH_TOKEN「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"learnworlds": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_TRANSPORT",
"-e",
"LEARNWORLDS_BASE_URL",
"-e",
"LEARNWORLDS_API_TOKEN",
"-e",
"LEARNWORLDS_CLIENT_ID",
"-e",
"MCP_AUTH_TOKEN",
"ghcr.io/ohneben/learnworlds-mcp:1.1.2"
],
"env": {
"MCP_TRANSPORT": "your-value",
"LEARNWORLDS_BASE_URL": "your-value",
"LEARNWORLDS_API_TOKEN": "your-value",
"LEARNWORLDS_CLIENT_ID": "your-value",
"MCP_AUTH_TOKEN": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add learnworlds --env MCP_TRANSPORT=your-value --env LEARNWORLDS_BASE_URL=your-value --env LEARNWORLDS_API_TOKEN=your-value --env LEARNWORLDS_CLIENT_ID=your-value --env MCP_AUTH_TOKEN=your-value -- docker run -i --rm -e MCP_TRANSPORT -e LEARNWORLDS_BASE_URL -e LEARNWORLDS_API_TOKEN -e LEARNWORLDS_CLIENT_ID -e MCP_AUTH_TOKEN ghcr.io/ohneben/learnworlds-mcp:1.1.2動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"learnworlds": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_TRANSPORT",
"-e",
"LEARNWORLDS_BASE_URL",
"-e",
"LEARNWORLDS_API_TOKEN",
"-e",
"LEARNWORLDS_CLIENT_ID",
"-e",
"MCP_AUTH_TOKEN",
"ghcr.io/ohneben/learnworlds-mcp:1.1.2"
],
"env": {
"MCP_TRANSPORT": "your-value",
"LEARNWORLDS_BASE_URL": "your-value",
"LEARNWORLDS_API_TOKEN": "your-value",
"LEARNWORLDS_CLIENT_ID": "your-value",
"MCP_AUTH_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"learnworlds": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_TRANSPORT",
"-e",
"LEARNWORLDS_BASE_URL",
"-e",
"LEARNWORLDS_API_TOKEN",
"-e",
"LEARNWORLDS_CLIENT_ID",
"-e",
"MCP_AUTH_TOKEN",
"ghcr.io/ohneben/learnworlds-mcp:1.1.2"
],
"env": {
"MCP_TRANSPORT": "your-value",
"LEARNWORLDS_BASE_URL": "your-value",
"LEARNWORLDS_API_TOKEN": "your-value",
"LEARNWORLDS_CLIENT_ID": "your-value",
"MCP_AUTH_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント ohneben で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:MCP_TRANSPORT, LEARNWORLDS_BASE_URL, LEARNWORLDS_API_TOKEN, LEARNWORLDS_CLIENT_ID, MCP_AUTH_TOKEN
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(1.1.2)がレジストリに届いたのは2 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにDockerも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, SwarmMemo
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Talk with agent swarms: rooms, private messages and paid tasks for AI agents
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Run your LearnWorlds school in plain language from AI assistants like Claude, Cursor, and any other MCP client.
This Model Context Protocol server exposes the LearnWorlds public API — all 94 endpoints, generated straight from the OpenAPI spec into MCP tools. Every tool is safety-categorized (🟢 read-only / 🟡 write / 🔴 destructive) so your assistant knows what an action does *before* it calls it. It runs over stdio (Claude Desktop and other local launchers) or Streamable HTTP (hosted in Docker), and ships with retries, client-side rate limiting, and request timeouts so it holds up against a live school.
Some MCP servers just forward an API. This one is built to be safe to hand to an LLM and easy to run for real:
| What you get | Why it matters |
|---|---|
| All 94 endpoints, spec-driven | Full coverage of courses, users, enrollments, payments, subscriptions, coupons, certificates, seats, community and reporting — nothing hand-picked or left behind. |
| Every tool is safety-categorized 🟢 / 🟡 / 🔴 | A banner at the top of each tool description tells the model exactly what it does — read, create, update or delete — before it acts. |
| Descriptions written for agents, not humans | Every tool spells out its side effects, auth and rate-limit behavior, return shape, error codes, when *not* to reach for it, and which sibling tools are the alternatives. |
Machine-readable MCP annotations (readOnlyHint, destructiveHint) | Hosts that honor annotations (Claude included) can auto-trust reads and demand confirmation before anything destructive. |
| Automatic retries with backoff | Transient 429 / 5xx responses are retried with jittered exponential backoff, honoring the server's Retry-After header. |
| Built-in rate limiting | Self-throttles under LearnWorlds' 30 requests / 10 s cap so a burst of tool calls never trips a 429. |
| Per-request timeouts | A hung upstream call is aborted and retried instead of freezing the server. |
| **Two transports: stdio *and* Streamable HTTP** | Use it locally in Claude Desktop, or run one always-on server that any number of MCP clients reach over HTTP. |
| Docker + docker-compose, health check, auto-restart | Production-style deployment out of the box: docker compose up and it stays up. |
| Bearer-token auth on the HTTP endpoint | Required as soon as the server is bound beyond loopback: without MCP_AUTH_TOKEN it refuses to start rather than exposing the API unprotected. |
| Your secrets never reach the model | Credentials live in the server's environment and are injected on every request — the assistant only ever sees tool inputs and API responses. |
| Drop-in spec updates | LearnWorlds ships a newer YAML? Replace one file and rebuild — new endpoints become new tools automatically, no code changes. |
At the time of writing this appears to be the only dedicated LearnWorlds MCP server. You *could* instead point a generic OpenAPI→MCP wrapper at the spec — here's what that leaves on the table:
| Capability | This project | Generic OpenAPI→MCP wrapper\* |
|---|---|---|
| All 94 LearnWorlds endpoints as tools | ✅ | ✅ |
| Per-tool 🟢 / 🟡 / 🔴 safety category + banner | ✅ | ❌ |
readOnlyHint / destructiveHint MCP annotations | ✅ | ➖ |
$ref dereferencing + recursion-safe schemas | ✅ | ➖ |
Automatic retries on 429 / 5xx (honors Retry-After) | ✅ | ❌ |
| Client-side rate limiting (stays under 30 req / 10 s) | ✅ | ❌ |
| Per-request timeout with abort | ✅ | ➖ |
stdio transport | ✅ | ✅ |
| Streamable-HTTP transport | ✅ | ➖ |
| Docker + docker-compose, health check, auto-restart | ✅ | ❌ |
| Enforced bearer-token auth on the endpoint | ✅ | ❌ |
| Credentials injected server-side, never sent to the model | ✅ | ➖ |
| License | MIT | varies |
\*Generic OpenAPI→MCP wrappers turn any Swagger/OpenAPI spec into MCP tools. They can reach the same endpoints, but treat every operation identically — no safety categories, no resilience, no deployment story, and no guardrails tuned for live school data. "➖" = varies by tool / not guaranteed. Snapshot from July 2026.
Once it's connected, ask your assistant things like:
Tools are generated automatically from the API and grouped into 🟢 read-only, 🟡 write, and 🔴 destructive — so a well-behaved host can treat each group differently.
Claude / Cursor / any MCP client ──MCP──► this server ──HTTPS──► LearnWorlds API (your school)
The server parses the bundled OpenAPI spec into MCP tools (resolving $refs and guarding against recursive schemas), tags each with its safety category, and injects your bearer token and Lw-Client header on every outgoing request. Your credentials stay in the server's environment — the model never sees or handles them.
1. Add your credentials. Copy the example config and fill it in:
cp .env.example .env
2. Start the server:
docker compose up -d --build
The bundled docker-compose.yml binds to 127.0.0.1:8765 only, so the server is reachable from your machine but not the network.
3. Confirm it's running:
curl -s http://localhost:8765/health
4. Connect your MCP client. The MCP endpoint is http://localhost:8765/mcp.
mcp-remote. Add this under mcpServers in your config, then fully quit and reopen the app: {
"mcpServers": { "learnworlds": { "command": "npx", "args": [ "mcp-remote", "http://localhost:8765/mcp", "--header", "Authorization: Bearer YOUR_MCP_AUTH_TOKEN" ] } } }
(Drop the --header line if you left MCP_AUTH_TOKEN empty.)
claude mcp add --transport http learnworlds http://localhost:8765/mcp
Every push to main publishes a ready-to-run image to the GitHub Container Registry, so you can skip the local build entirely:
docker run -d --name learnworlds-mcp -p 127.0.0.1:8765:8765 --env-file .env \
ghcr.io/ohneben/learnworlds-mcp:latest
LEARNWORLDS_API_TOKEN, and your Client ID → LEARNWORLDS_CLIENT_ID.LEARNWORLDS_BASE_URL to your school's API base: https:// .learnworlds.com/admin/api. If your school uses a custom domain, use that host instead (e.g. https://academy.example.com/admin/api).Put all three in .env. The server injects them on every request, so your assistant never sees them.
Everything is set in .env (copied from .env.example):
| Variable | Required | Default | Description |
|---|---|---|---|
LEARNWORLDS_BASE_URL | ✅ | — | Your school's API base URL |
LEARNWORLDS_API_TOKEN | ✅ | — | Bearer access token |
LEARNWORLDS_CLIENT_ID | ✅ | — | Sent as the Lw-Client header |
MCP_TRANSPORT | — | stdio | stdio or http (the Docker image defaults to http) |
PORT | — | 8765 | HTTP listen port |
HOST | — | 0.0.0.0 | HTTP bind address |
MCP_HTTP_PATH | — | /mcp | HTTP MCP route |
MCP_AUTH_TOKEN | ⚠️ | _(off)_ | Require Authorization: Bearer on /mcp. Required when HOST is not a loopback address, otherwise the server refuses to start. Renamed from MCP_SHARED_TOKEN in 1.1.0 |
MCP_ALLOWED_HOSTS | — | _(automatic)_ | Comma-separated hostnames accepted in the Host header (DNS-rebinding protection). Needed behind a reverse proxy |
MCP_ALLOW_INSECURE | — | _(off)_ | Lifts the startup refusal. Only for an endpoint nobody else can reach |
MCP_SESSION_TTL | — | 1800 | Idle seconds before a session is dropped |
MCP_MAX_SESSIONS | — | 256 | Maximum concurrent sessions |
MCP_BODY_LIMIT | — | 25mb | Largest accepted request body |
LEARNWORLDS_MAX_REQUESTS | — | 25 | Client-side requests per window (0 disables throttling) |
LEARNWORLDS_RATE_WINDOW_MS | — | 10000 | Rate-limit window in ms |
LEARNWORLDS_MAX_RETRIES | — | 3 | Retries on 429 / 5xx / network errors |
LEARNWORLDS_TIMEOUT_MS | — | 30000 | Per-attempt request timeout |
LEARNWORLDS_OPENAPI_PATH | — | _(bundled)_ | Load a different OpenAPI YAML |
After changing .env, reload with docker compose up -d --force-recreate.
Each tool's description starts with one of these banners and carries the matching MCP annotations:
| Banner | Count | readOnlyHint | destructiveHint | Meaning |
|---|---|---|---|---|
| 🟢 READ-ONLY | 59 | true | false | Fetches data only. Safe. |
| 🟡 WRITE · creates data | — | false | false | POST — creates records (not idempotent; may duplicate). |
| 🟡 WRITE · updates data | — | false | false | PUT — modifies existing records in place (idempotent). |
| 🔴 DESTRUCTIVE · deletes | 8 | false | true | DELETE — removes a record. Confirm first. |
The 🟡 write tools total 27 (17 create + 10 update). Hosts that respect annotations (Claud
冒頭だけを表示しています。続きはリポジトリで読めます