Check LearnWorlds courses, learners, progress, grades and payments, and enroll or tag users.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: add an existing user to a user group (which may enroll them in the group's products). LearnWorlds: POST /v2/user_groups/{id}/users/{uid}.
The user's id, or their email address.
The user group id (from learnworlds_list_user_groups).
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
WRITE: add an existing user to a user group (which may enroll them in the group's products). LearnWorlds: POST /v2/user_groups/{id}/users/{uid}.
| Argument | Type | Description |
|---|---|---|
| user* | string | The user's id, or their email address. |
| group_id* | string | The user group id (from learnworlds_list_user_groups). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"group_id",
"user"
],
"properties": {
"user": {
"type": "string",
"minLength": 1,
"description": "The user's id, or their email address."
},
"group_id": {
"type": "string",
"minLength": 1,
"description": "The user group id (from learnworlds_list_user_groups)."
}
}
}WRITE: create a learner account. Deliberately no password or admin flag — set send_registration_email so the learner sets their own password. LearnWorlds: POST /v2/users.
| Argument | Type | Description |
|---|---|---|
| tags | array | Tags to attach to the new user. |
| email* | string | The user's email. |
| fields | object | Sign-up fields to set, e.g. {"company": "Acme", "phone": "+1..."}. Built-in keys include bio, location, url, phone, address, country, birthday, company, company_size, university, graduation_year and social links; custom fields use their cf_ key (e.g. cf_skill). |
| username* | string | The user's username (display name). |
| send_registration_email | boolean | Send LearnWorlds' registration email to the user. |
| signup_validation_rules | boolean | Apply the school's sign-up validation rules (default false). |
| subscribed_for_marketing_emails | boolean | Marketing-email consent. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email",
"username"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags to attach to the new user."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "The user's email."
},
"fields": {
"type": "object",
"description": "Sign-up fields to set, e.g. {\"company\": \"Acme\", \"phone\": \"+1...\"}. Built-in keys include bio, location, url, phone, address, country, birthday, company, company_size, university, graduation_year and social links; custom fields use their cf_ key (e.g. cf_skill).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"username": {
"type": "string",
"minLength": 1,
"description": "The user's username (display name)."
},
"send_registration_email": {
"type": "boolean",
"description": "Send LearnWorlds' registration email to the user."
},
"signup_validation_rules": {
"type": "boolean",
"description": "Apply the school's sign-up validation rules (default false)."
},
"subscribed_for_marketing_emails": {
"type": "boolean",
"description": "Marketing-email consent."
}
}
}WRITE: manually enroll a user in a course, bundle or subscription. This grants access and records a manual enrollment at the given price (use 0 for a free grant) — it does not charge the learner's card. Optionally emails the learner. LearnWorlds: POST /v2/users/{id}/enrollment.
| Argument | Type | Description |
|---|---|---|
| user* | string | The user's id, or their email address. |
| price* | number | Price recorded for this enrollment; 0 for a free grant. |
| duration | integer | Subscriptions only: how many duration_type units. |
| product_id* | string | The product id (for a course, its slug). |
| product_type* | string | |
| duration_type | string | Subscriptions only. |
| justification | string | A note, e.g. "Added by admin". |
| send_enrollment_email | boolean | Send the enrollment email to the learner. |
Fetch one course by id (its slug). LearnWorlds: GET /v2/courses/{id}.
| Argument | Type | Description |
|---|---|---|
| course_id* | string | The course id — the course slug, e.g. "my-first-course". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"course_id"
],
"properties": {
"course_id": {
"type": "string",
"minLength": 1,
"description": "The course id — the course slug, e.g. \"my-first-course\"."
}
}
}Course-level analytics: students, learning units, average score and success rate, total study time, average time to finish, social interactions and certificates issued. LearnWorlds: GET /v2/courses/{id}/analytics.
| Argument | Type | Description |
|---|---|---|
| course_id* | string | The course id — the course slug, e.g. "my-first-course". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"course_id"
],
"properties": {
"course_id": {
"type": "string",
"minLength": 1,
"description": "The course id — the course slug, e.g. \"my-first-course\"."
}
}
}The course outline: its sections (with drip-feed settings) and the learning activities (videos, PDFs, SCORM, assessments, certificates...) in each, with their ids. LearnWorlds: GET /v2/courses/{id}/contents.
| Argument | Type | Description |
|---|---|---|
| course_id* | string | The course id — the course slug, e.g. "my-first-course". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"course_id"
],
"properties": {
"course_id": {
"type": "string",
"minLength": 1,
"description": "The course id — the course slug, e.g. \"my-first-course\"."
}
}
}Assessment grades of the users enrolled in a course — per user and learning unit, with submission time. LearnWorlds: GET /v2/courses/{id}/grades.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | string | Field to sort by. |
| order | string | Sort direction. |
| users | string | Comma-separated user ids to filter by. |
| course_id* | string | The course id — the course slug, e.g. "my-first-course". |
| items_per_page | integer | Items per page, 1-200. |
| learning_units | string | Comma-separated learning-unit ids to filter by (from learnworlds_get_course_contents). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"course_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"enum": [
"created",
"submittedTimestamp"
],
"type": "string",
"description": "Field to sort by."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction."
},
"users": {
"type": "string",
"description": "Comma-separated user ids to filter by."
},
"course_id": {
"type": "string",
"minLength": 1,
"description": "The course id — the course slug, e.g. \"my-first-course\"."
},
"items_per_page": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page, 1-200."
},
"learning_units": {
"type": "string",
"description": "Comma-separated learning-unit ids to filter by (from learnworlds_get_course_contents)."
}
}
}Fetch one payment by payment id or transaction id. LearnWorlds: GET /v2/payments/{id}.
| Argument | Type | Description |
|---|---|---|
| payment_id* | string | The payment id or the transaction id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"payment_id"
],
"properties": {
"payment_id": {
"type": "string",
"minLength": 1,
"description": "The payment id or the transaction id."
}
}
}Fetch one user by id or email — profile, role, tags, sign-up fields, UTMs and last login. LearnWorlds: GET /v2/users/{id}.
| Argument | Type | Description |
|---|---|---|
| user* | string | The user's id, or their email address. |
| include_suspended | boolean | Also return the user if suspended. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user"
],
"properties": {
"user": {
"type": "string",
"minLength": 1,
"description": "The user's id, or their email address."
},
"include_suspended": {
"type": "boolean",
"description": "Also return the user if suspended."
}
}
}A user's progress in one course — status, progress rate, average score, time on course, completed units, and a per-section / per-activity breakdown. LearnWorlds: GET /v2/users/{id}/courses/{cid}/progress.
| Argument | Type | Description |
|---|---|---|
| user* | string | The user's id, or their email address. |
| course_id* | string | The course id — the course slug, e.g. "my-first-course". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user",
"course_id"
],
"properties": {
"user": {
"type": "string",
"minLength": 1,
"description": "The user's id, or their email address."
},
"course_id": {
"type": "string",
"minLength": 1,
"description": "The course id — the course slug, e.g. \"my-first-course\"."
}
}
}Certificates awarded, newest first (20 per page), for a course and/or a user — at least one of course_id or user_id is required. LearnWorlds: GET /v2/certificates.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| user_id | string | Only certificates of this user (id or email). |
| course_id | string | Only certificates for this course id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"user_id": {
"type": "string",
"description": "Only certificates of this user (id or email)."
},
"course_id": {
"type": "string",
"description": "Only certificates for this course id."
}
}
}The users enrolled in one course, newest first (20 per page by default). LearnWorlds: GET /v2/courses/{id}/users.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| course_id* | string | The course id — the course slug, e.g. "my-first-course". |
| items_per_page | integer | Items per page, 1-200. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"course_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"course_id": {
"type": "string",
"minLength": 1,
"description": "The course id — the course slug, e.g. \"my-first-course\"."
},
"items_per_page": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page, 1-200."
}
}
}List the school's courses, newest first, 50 per page — title, price fields, access (paid/free/draft...), categories and author. A cheap way to confirm the credentials work. LearnWorlds: GET /v2/courses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| access | array | Only courses with one of these access values. |
| categories | string | Comma-separated category names to filter by. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"access": {
"type": "array",
"items": {
"enum": [
"paid",
"free",
"coming_soon",
"private",
"draft",
"enrollment_closed"
],
"type": "string"
},
"description": "Only courses with one of these access values."
},
"categories": {
"type": "string",
"description": "Comma-separated category names to filter by."
}
}
}The school's activity log (50 per page) — registrations, logins, purchases, enrollments, course completions, certificates, subscription changes and more, filterable by user, activity and time. LearnWorlds: GET /v2/event-logs.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| sort | string | By creation time; default desc. |
| user_id | string | Only events of this user (id or email). |
| activity | string | Only this kind of event. |
| created_after | number | Created after (Unix timestamp in seconds, e.g. 1626088013). |
| created_before | number | Created before (Unix timestamp in seconds, e.g. 1626088013). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"sort": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "By creation time; default desc."
},
"user_id": {
"type": "string",
"description": "Only events of this user (id or email)."
},
"activity": {
"enum": [
"register",
"login",
"logout",
"purchase",
"manual_enrollment",
"drip_feed_section_unlocked",
"subscription_signup",
"subscription_trial",
"subscription_trial_expired",
"subscription_changed",
"subscription_renewal",
"subscription_cancelled",
"subscription_scheduled_cancellation",
"subscription_reactivated",
"failed_purchase",
"new_affiliate",
"new_affiliate_manual",
"affiliate_deactivated",
"affiliate_payout",
"follow",
"post",
"post_comment",
"post_like",
"award_certificate",
"visit_course",
"complete_course",
"installment_paid",
"payment_plan_completed",
"payment_plan_canceled",
"payment_failed",
"sca_related_events",
"session_scheduled",
"session_attended",
"session_manually_attended",
"group_session_scheduled",
"group_session_attended",
"group_session_manually_attended"
],
"type": "string",
"description": "Only this kind of event."
},
"created_after": {
"type": "number",
"minimum": 0,
"description": "Created after (Unix timestamp in seconds, e.g. 1626088013)."
},
"created_before": {
"type": "number",
"minimum": 0,
"description": "Created before (Unix timestamp in seconds, e.g. 1626088013)."
}
}
}List payments, newest first (50 per page by default) — product, price, discount, tax, coupon, affiliate, gateway and billing info. All filters are ANDed. LearnWorlds: GET /v2/payments.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| user_id | string | Only payments by this user (id or email). |
| product_id | string | Only payments for this product id. |
| affiliate_id | string | Only payments referred by this affiliate (id or email). |
| product_type | string | |
| created_after | number | Created after (Unix timestamp in seconds, e.g. 1626088013). |
| created_before | number | Created before (Unix timestamp in seconds, e.g. 1626088013). |
| items_per_page | integer | Items per page, 1-200. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"user_id": {
"type": "string",
"description": "Only payments by this user (id or email)."
},
"product_id": {
"type": "string",
"description": "Only payments for this product id."
},
"affiliate_id": {
"type": "string",
"description": "Only payments referred by this affiliate (id or email)."
},
"product_type": {
"enum": [
"course",
"bundle",
"subscription"
],
"type": "string"
},
"created_after": {
"type": "number",
"minimum": 0,
"description": "Created after (Unix timestamp in seconds, e.g. 1626088013)."
},
"created_before": {
"type": "number",
"minimum": 0,
"description": "Created before (Unix timestamp in seconds, e.g. 1626088013)."
},
"items_per_page": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page, 1-200."
}
}
}The courses a user is enrolled in, with enrollment and expiry dates (50 per page). LearnWorlds: GET /v2/users/{id}/courses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| user* | string | The user's id, or their email address. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"user": {
"type": "string",
"minLength": 1,
"description": "The user's id, or their email address."
}
}
}List the school's user groups (cohorts / B2B seats), newest first — title, products, group managers, capacity and tags. LearnWorlds: GET /v2/user_groups.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
}
}
}List the school's users, newest first (20 per page by default), filterable by status, role, tags, registration date and custom fields. All filters are ANDed. LearnWorlds: GET /v2/users.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. |
| role | string | |
| tags | string | Comma-separated tags; users with these tags. |
| status | string | |
| custom_fields | object | Custom-field filters, e.g. {"cf_skill": "Excel"}. The cf_ prefix is added if missing. |
| items_per_page | integer | Items per page, 1-200. |
| include_suspended | boolean | Include suspended users (default false). |
| registration_after | number | Registered after (Unix timestamp in seconds, e.g. 1626088013). |
| registration_before | number | Registered before (Unix timestamp in seconds, e.g. 1626088013). |
WRITE: update a user's email, username, marketing consent, sign-up fields or tags. Only the fields you pass are sent. Passing `tags` REPLACES the tag list — use learnworlds_update_user_tags to add/remove individual tags. LearnWorlds: PUT /v2/users/{id}.
| Argument | Type | Description |
|---|---|---|
| tags | array | The complete new tag list (replaces existing tags). |
| user* | string | The user's id, or their email address. |
| string | ||
| fields | object | Sign-up fields to set, e.g. {"company": "Acme", "phone": "+1..."}. Built-in keys include bio, location, url, phone, address, country, birthday, company, company_size, university, graduation_year and social links; custom fields use their cf_ key (e.g. cf_skill). |
| username | string | |
| subscribed_for_marketing_emails | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The complete new tag list (replaces existing tags)."
},
"user": {
"type": "string",
"minLength": 1,
"description": "The user's id, or their email address."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"fields": {
"type": "object",
"description": "Sign-up fields to set, e.g. {\"company\": \"Acme\", \"phone\": \"+1...\"}. Built-in keys include bio, location, url, phone, address, country, birthday, company, company_size, university, graduation_year and social links; custom fields use their cf_ key (e.g. cf_skill).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"null"
]
}
},
"username": {
"type": "string",
"minLength": 1
},
"subscribed_for_marketing_emails": {
"type": "boolean"
}
}
}WRITE: add (attach) or remove (detach) tags on a user, leaving their other tags untouched. Reversible with the opposite action. LearnWorlds: PUT /v2/users/{id}/tags.
| Argument | Type | Description |
|---|---|---|
| tags* | array | The tags to attach or detach. |
| user* | string | The user's id, or their email address. |
| action* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user",
"tags",
"action"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"description": "The tags to attach or detach."
},
"user": {
"type": "string",
"minLength": 1,
"description": "The user's id, or their email address."
},
"action": {
"enum": [
"attach",
"detach"
],
"type": "string"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user",
"product_id",
"product_type",
"price"
],
"properties": {
"user": {
"type": "string",
"minLength": 1,
"description": "The user's id, or their email address."
},
"price": {
"type": "number",
"minimum": 0,
"description": "Price recorded for this enrollment; 0 for a free grant."
},
"duration": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Subscriptions only: how many duration_type units."
},
"product_id": {
"type": "string",
"minLength": 1,
"description": "The product id (for a course, its slug)."
},
"product_type": {
"enum": [
"course",
"bundle",
"subscription"
],
"type": "string"
},
"duration_type": {
"enum": [
"months",
"weeks",
"days"
],
"type": "string",
"description": "Subscriptions only."
},
"justification": {
"type": "string",
"description": "A note, e.g. \"Added by admin\"."
},
"send_enrollment_email": {
"type": "boolean",
"description": "Send the enrollment email to the learner."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, starting at 1."
},
"role": {
"enum": [
"user",
"admin",
"instructor",
"reporter",
"license_reporter"
],
"type": "string"
},
"tags": {
"type": "string",
"description": "Comma-separated tags; users with these tags."
},
"status": {
"enum": [
"paying",
"non_paying",
"suspended",
"never_logged_in"
],
"type": "string"
},
"custom_fields": {
"type": "object",
"description": "Custom-field filters, e.g. {\"cf_skill\": \"Excel\"}. The cf_ prefix is added if missing.",
"propertyNames": {
"type": "string",
"pattern": "^(cf_)?[A-Za-z0-9_]+$"
},
"additionalProperties": {
"type": "string"
}
},
"items_per_page": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page, 1-200."
},
"include_suspended": {
"type": "boolean",
"description": "Include suspended users (default false)."
},
"registration_after": {
"type": "number",
"minimum": 0,
"description": "Registered after (Unix timestamp in seconds, e.g. 1626088013)."
},
"registration_before": {
"type": "number",
"minimum": 0,
"description": "Registered before (Unix timestamp in seconds, e.g. 1626088013)."
}
}
}