_ registry / mcp streamable-http · checked 3m ago

learnworlds-mcp

https://learnworlds.usefulapi.io

Registry code: a225fc0d2d63c189

api record

Check LearnWorlds courses, learners, progress, grades and payments, and enroll or tag users.

from a public catalogue that lists it, not from the operator

endpoint
https://learnworlds.usefulapi.io/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing
karma
0 · newcomer
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
370ms

last good check

priced tools
0

of 20 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ used through this hub 30 days

The one measurement on this page that an operator cannot produce by editing a file on its own server: somebody else chose it, and paid to. Read the accounts before the calls — volume from one account is one relationship, and calling yourself is the cheap half. Both are what the ranking is built from, printed so the order can be checked rather than taken on trust.

accounts
0

distinct, expensive to fake

calls served
0

successful, last 30 days

_ what it can do 20 tools
20 auth-required 20 of 20 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • learnworlds_get_course_analytics auth-required never probed

    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.

    mcp-tool

    {
      "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\"."
        }
      }
    }
    arguments 14 lines
  • learnworlds_list_course_users auth-required never probed

    The users enrolled in one course, newest first (20 per page by default). LearnWorlds: GET /v2/courses/{id}/users.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 26 lines
  • learnworlds_get_course_grades auth-required never probed

    Assessment grades of the users enrolled in a course — per user and learning unit, with submission time. LearnWorlds: GET /v2/courses/{id}/grades.

    mcp-tool

    {
      "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)."
        }
      }
    }
    arguments 50 lines
  • learnworlds_update_user auth-required never probed

    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}.

    mcp-tool

    {
      "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"
        }
      }
    }
    arguments 46 lines
  • learnworlds_get_course auth-required never probed

    Fetch one course by id (its slug). LearnWorlds: GET /v2/courses/{id}.

    mcp-tool

    {
      "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\"."
        }
      }
    }
    arguments 14 lines
  • learnworlds_get_payment auth-required never probed

    Fetch one payment by payment id or transaction id. LearnWorlds: GET /v2/payments/{id}.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 14 lines
  • learnworlds_list_user_groups auth-required never probed

    List the school's user groups (cohorts / B2B seats), newest first — title, products, group managers, capacity and tags. LearnWorlds: GET /v2/user_groups.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 12 lines
  • learnworlds_update_user_tags auth-required never probed

    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.

    mcp-tool

    {
      "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"
        }
      }
    }
    arguments 32 lines
  • learnworlds_add_user_to_group auth-required never probed

    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}.

    mcp-tool

    {
      "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)."
        }
      }
    }
    arguments 20 lines
  • learnworlds_list_event_logs auth-required 3m ago

    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.

    mcp-tool

    {
      "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)."
        }
      }
    }
    arguments 77 lines
  • learnworlds_list_certificates auth-required 3m ago

    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.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 20 lines
  • learnworlds_list_courses auth-required 3m ago

    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.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 31 lines
  • learnworlds_list_user_courses auth-required never probed

    The courses a user is enrolled in, with enrollment and expiry dates (50 per page). LearnWorlds: GET /v2/users/{id}/courses.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 20 lines
  • learnworlds_get_course_contents auth-required never probed

    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.

    mcp-tool

    {
      "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\"."
        }
      }
    }
    arguments 14 lines
  • learnworlds_list_users auth-required never probed

    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.

    mcp-tool

    {
      "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)."
        }
      }
    }
    arguments 66 lines
  • learnworlds_get_user auth-required never probed

    Fetch one user by id or email — profile, role, tags, sign-up fields, UTMs and last login. LearnWorlds: GET /v2/users/{id}.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 18 lines
  • learnworlds_get_user_course_progress auth-required never probed

    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.

    mcp-tool

    {
      "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\"."
        }
      }
    }
    arguments 20 lines
  • learnworlds_list_payments auth-required never probed

    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.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 48 lines
  • learnworlds_create_user auth-required never probed

    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.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 53 lines
  • learnworlds_enroll_user auth-required never probed

    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.

    mcp-tool

    {
      "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."
        }
      }
    }
    arguments 58 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/a225fc0d2d63c189/badge.svg)](https://brick.blue/agent/a225fc0d2d63c189)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Own the domain? Prove it and the listing carries a verified badge here too: passport.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.

_ also on usefulapi.io 25 entries

Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.

17 more sit on this domain. All of them.