{"id":51683336,"url":"https://github.com/gocodebox/lifterlms-mcp","last_synced_at":"2026-07-15T16:31:00.213Z","repository":{"id":361057687,"uuid":"1196269356","full_name":"gocodebox/lifterlms-mcp","owner":"gocodebox","description":"MCP Server for LifterLMS","archived":false,"fork":false,"pushed_at":"2026-05-28T22:40:00.000Z","size":156,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T04:11:27.758Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gocodebox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-30T14:33:21.000Z","updated_at":"2026-05-29T01:54:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gocodebox/lifterlms-mcp","commit_stats":null,"previous_names":["gocodebox/lifterlms-mcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gocodebox/lifterlms-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocodebox%2Flifterlms-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocodebox%2Flifterlms-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocodebox%2Flifterlms-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocodebox%2Flifterlms-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gocodebox","download_url":"https://codeload.github.com/gocodebox/lifterlms-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocodebox%2Flifterlms-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35513407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-15T16:30:59.268Z","updated_at":"2026-07-15T16:31:00.190Z","avatar_url":"https://github.com/gocodebox.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LifterLMS MCP Server\n\nAn [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects AI assistants to your LifterLMS site. Manage courses, lessons, memberships, enrollments, and student progress through natural conversation.\n\nWorks with **Claude Desktop**, **Cursor**, **Claude Code**, and any MCP-compatible client.\n\n## Quick Start\n\n### 1. Clone and install\n\nThe package is not yet published to npm. For now, install from source:\n\n```bash\ngit clone https://github.com/gocodebox/lifterlms-mcp.git\ncd lifterlms-mcp\nnpm install\n```\n\nNote the absolute path to `src/index.js` — you'll use it in your MCP client config.\n\n### 2. Create a WordPress Application Password\n\nIn your WordPress admin: **Users → Your Profile → Application Passwords**.\n\nEnter a name (e.g. \"MCP Server\") and click **Add New Application Password**. Copy the generated password (it's shown once).\n\n### 3. Configure your MCP client\n\nAdd the following to your client's MCP servers config, replacing `/absolute/path/to/lifterlms-mcp/src/index.js` with the path from step 1. The same block works for Claude Desktop, Claude Code, Cursor, and any other MCP-compatible client — only the file location of the client's config differs.\n\n```json\n{\n  \"mcpServers\": {\n    \"lifterlms\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/lifterlms-mcp/src/index.js\"],\n      \"env\": {\n        \"WP_URL\": \"https://your-site.com\",\n        \"WP_APP_USER\": \"your-username\",\n        \"WP_APP_PASSWORD\": \"xxxx xxxx xxxx xxxx xxxx xxxx\"\n      }\n    }\n  }\n}\n```\n\nCommon config file locations:\n\n- **Claude Desktop (macOS):** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Claude Desktop (Windows):** `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Claude Code:** `~/.claude/settings.json` (or use `claude mcp add` to add it interactively)\n- **Cursor:** `~/.cursor/mcp.json`\n\n### 4. Start using it\n\nAsk your AI assistant things like:\n\n- \"List all my courses\"\n- \"Create a new course called 'Introduction to Python' with 3 sections\"\n- \"Enroll student #42 in course #15\"\n- \"Show me the progress for all students in the JavaScript course\"\n- \"Create a $49/month access plan for the Photography membership\"\n\n## Tools\n\n44 tools total, organized by resource. LifterLMS tools map to `/wp-json/llms/v1/*`; WordPress page tools map to `/wp-json/wp/v2/pages` for handbook-style and landing-page content.\n\n### Courses (7 tools)\n| Tool | Description |\n|------|-------------|\n| `list_courses` | List courses with search, filtering, and pagination |\n| `get_course` | Get course details by ID |\n| `create_course` | Create a new course |\n| `update_course` | Update course title, content, status, visibility |\n| `delete_course` | Delete a course |\n| `get_course_content` | Get full course structure (sections + lessons) |\n| `get_course_enrollments` | List enrolled students |\n\n### Sections (5 tools)\n| Tool | Description |\n|------|-------------|\n| `list_sections` | List sections, filter by course |\n| `get_section` | Get section details |\n| `create_section` | Create a section in a course |\n| `update_section` | Update section title or order |\n| `delete_section` | Delete a section |\n\n### Lessons (5 tools)\n| Tool | Description |\n|------|-------------|\n| `list_lessons` | List lessons, filter by section |\n| `get_lesson` | Get lesson details |\n| `create_lesson` | Create a lesson with content, drip settings, points |\n| `update_lesson` | Update lesson properties |\n| `delete_lesson` | Delete a lesson |\n\n### Memberships (5 tools)\n| Tool | Description |\n|------|-------------|\n| `list_memberships` | List memberships |\n| `get_membership` | Get membership details |\n| `create_membership` | Create a membership |\n| `update_membership` | Update membership properties |\n| `delete_membership` | Delete a membership |\n\n### Access Plans (5 tools)\n| Tool | Description |\n|------|-------------|\n| `list_access_plans` | List pricing plans |\n| `get_access_plan` | Get plan details |\n| `create_access_plan` | Create one-time or recurring pricing |\n| `update_access_plan` | Update plan pricing or settings |\n| `delete_access_plan` | Delete a plan |\n\n### Students (5 tools)\n| Tool | Description |\n|------|-------------|\n| `list_students` | List students, filter by enrollment |\n| `get_student` | Get student details |\n| `create_student` | Create a student account |\n| `update_student` | Update student info |\n| `delete_student` | Delete a student |\n\n### Enrollments (4 tools)\n| Tool | Description |\n|------|-------------|\n| `list_enrollments` | List a student's enrollments |\n| `enroll_student` | Enroll in a course or membership |\n| `update_enrollment` | Update enrollment status |\n| `unenroll_student` | Remove enrollment |\n\n### Student Progress (3 tools)\n| Tool | Description |\n|------|-------------|\n| `get_progress` | Get progress in a course/lesson |\n| `update_progress` | Mark lessons complete |\n| `delete_progress` | Reset progress |\n\n### Pages (5 tools)\n\nGeneric WordPress page CRUD for non-LifterLMS content. Use these for handbook pages, top-level landing pages, and anything that lives outside the LifterLMS course/membership structure. Content accepts Gutenberg block markup.\n\n| Tool | Description |\n|------|-------------|\n| `list_pages` | List pages with search, parent filter, and pagination |\n| `get_page` | Get page by ID. Use `context=edit` for raw block markup |\n| `create_page` | Create a new page (Gutenberg block markup or HTML) |\n| `update_page` | Update title, slug, status, parent, content |\n| `delete_page` | Trash a page (`force=true` for permanent deletion) |\n\n## Resources\n\nThree read-only MCP resources for passive context (no tool call required):\n\n| Resource | URI | Description |\n|----------|-----|-------------|\n| Site Info | `lifterlms://site/info` | Site name, description, URL, home URL, timezone |\n| Course Catalog | `lifterlms://courses/catalog` | Summary of all courses (id, title, status, permalink) |\n| Membership Catalog | `lifterlms://memberships/catalog` | Summary of all memberships (id, title, status, permalink) |\n\n## Requirements\n\n- **Node.js 18+**\n- **WordPress** with [LifterLMS](https://lifterlms.com) active\n- **Application Passwords** enabled (default in WordPress 5.6+)\n- An admin user with LifterLMS management capabilities\n\n## Security\n\n- The MCP operates with the privileges of the configured WordPress Application Password. Treat it as a credential — keep it out of source control and rotate it if exposed.\n- Always use an `https://` WordPress URL. Sending Application Passwords over plain HTTP exposes them in transit.\n- Create a separate Application Password per MCP client / environment so you can revoke them independently.\n- To report a security vulnerability, see [`SECURITY.md`](SECURITY.md) and https://lifterlms.com/security/. Do not open a public issue.\n\n## Development\n\n```bash\ngit clone https://github.com/gocodebox/lifterlms-mcp.git\ncd lifterlms-mcp\nnpm install\n\n# Run the included smoke test against a live site\ncp test/.test.env.template test/.test.env\n# Edit test/.test.env with your credentials\nsource test/.test.env \u0026\u0026 node test/test-courses.js\n\n# Run the server locally over stdio\nWP_URL=https://your-site.com WP_APP_USER=admin WP_APP_PASSWORD=\"xxxx xxxx\" node src/index.js\n```\n\n## Architecture\n\n```\nMCP Client (Claude / Cursor / etc.)\n    │  stdio (JSON-RPC)\n    ▼\nlifterlms-mcp (Node.js)\n    │  axios + Basic Auth\n    ▼\nWordPress REST API (/wp-json/llms/v1/*)\n    ▼\nLifterLMS Plugin\n```\n\nThe server is a thin translation layer. Every tool maps to one LifterLMS REST API call. No custom PHP, no WordPress plugin — just the standard `llms/v1` API that ships with LifterLMS.\n\n## License\n\nGPL-3.0-or-later. See [`LICENSE`](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgocodebox%2Flifterlms-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgocodebox%2Flifterlms-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgocodebox%2Flifterlms-mcp/lists"}