Read TalentLMS users, courses, groups, branches and progress; create learners and enroll 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 group, which also enrolls them in the group's courses. Set enroll_to_courses to enroll synchronously. POST /api/v2/group-memberships.
The user id (a positive integer).
The group id (a positive integer).
Enroll the user in the group's active courses right away (synchronously).
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 group, which also enrolls them in the group's courses. Set enroll_to_courses to enroll synchronously. POST /api/v2/group-memberships.
| Argument | Type | Description |
|---|---|---|
| user_id* | integer | The user id (a positive integer). |
| group_id* | integer | The group id (a positive integer). |
| enroll_to_courses | boolean | Enroll the user in the group's active courses right away (synchronously). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"group_id"
],
"properties": {
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
},
"group_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The group id (a positive integer).",
"exclusiveMinimum": 0
},
"enroll_to_courses": {
"type": "boolean",
"description": "Enroll the user in the group's active courses right away (synchronously)."
}
}
}WRITE: create a new LEARNER account in the portal (TalentLMS may email the user, depending on the portal's settings). The user type is always the portal's built-in Learner-Type; this tool cannot create administrators, instructors or any other type (the portal's default type is never used, since it may be an admin type). If the portal has no type named Learner-Type, the tool refuses. Returns the new user's id and type. POST /api/v2/users.
| Argument | Type | Description |
|---|---|---|
| name* | string | First name. |
| email* | string | Email address. |
| login* | string | Username (must be unique in the portal). |
| locale | string | Locale, e.g. en-US. |
| surname* | string | Last name. |
| password* | string | Initial password (the portal's password rules apply). |
| timezone | string | IANA timezone, e.g. Europe/Athens. |
| description | string |
WRITE: enroll an existing user in a course (as a learner). Returns the assigned role. POST /api/v2/enrollments.
| Argument | Type | Description |
|---|---|---|
| user_id* | integer | The user id (a positive integer). |
| course_id* | integer | The course id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"course_id"
],
"properties": {
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
},
"course_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The course id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Details of one branch: URL, title, theme, default locale/timezone/user type/group, signup and verification settings, e-commerce settings. GET /api/v2/branches/{id}.
| Argument | Type | Description |
|---|---|---|
| branch_id* | integer | The branch id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"branch_id"
],
"properties": {
"branch_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The branch id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Full details of one course: description, category, status, price, capacity, time limit, start/expiration, settings. GET /api/v2/courses/{id}.
| Argument | Type | Description |
|---|---|---|
| course_id* | integer | The course id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"course_id"
],
"properties": {
"course_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The course id (a positive integer).",
"exclusiveMinimum": 0
}
}
}One user's status in one course: enrolled or not, role, completion status, completion percentage and date, score, total time, last viewed unit and certificate. GET /api/v2/course-progress?user_id=&course_id=.
| Argument | Type | Description |
|---|---|---|
| user_id* | integer | The user id (a positive integer). |
| course_id* | integer | The course id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"course_id"
],
"properties": {
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
},
"course_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The course id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Details of one group: name, description, branch, group key, max key redemptions, price. GET /api/v2/groups/{id}.
| Argument | Type | Description |
|---|---|---|
| group_id* | integer | The group id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"group_id"
],
"properties": {
"group_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The group id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Portal-wide totals (users, courses, categories, groups, branches, monthly active users) and settings (signup method, date format, branch limit). A good first call. GET /api/v2/statistics.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Recent portal events (logins, user/course/group/branch changes, course completions, certificates...) with the user and related course/group/branch/unit. Filter by event type (e.g. course_completion, user_login_user, user_create_user) and a date range. GET /api/v2/timeline.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
| created_to | string | Events on or before this ISO 8601 date-time. |
| event_type | string | Only this event type, e.g. course_completion, user_login_user, user_create_user. |
| created_from | string | Events on or after this ISO 8601 date-time, e.g. 2025-05-07T00:00:00+00:00. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
},
"created_to": {
"type": "string",
"description": "Events on or before this ISO 8601 date-time."
},
"event_type": {
"type": "string",
"description": "Only this event type, e.g. course_completion, user_login_user, user_create_user."
},
"created_from": {
"type": "string",
"description": "Events on or after this ISO 8601 date-time, e.g. 2025-05-07T00:00:00+00:00."
}
}
}Full profile of one user: login, name, email, user type, status, timezone, locale, credits, custom fields, deactivation date. GET /api/v2/users/{id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | integer | The user id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Users in a branch (id, login, name, email, user type, status, last login), paginated. GET /api/v2/branches/{id}/users.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| branch_id* | integer | The branch id (a positive integer). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"branch_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"branch_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The branch id (a positive integer).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}List the portal's branches (sub-portals: id, name, URL, description, active), paginated. GET /api/v2/branches.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}The course category tree (id, parent, name, price, children), paginated. GET /api/v2/categories.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}Users enrolled in a course with their enrollment date, completion status, completion percentage, completion date and total time: the course's progress report. GET /api/v2/courses/{id}/users.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| course_id* | integer | The course id (a positive integer). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"course_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"course_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The course id (a positive integer).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}List the portal's courses (id, name, code, category, status, price, dates, catalog visibility), paginated. Optionally only courses with a given custom course field value. GET /api/v2/courses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
| custom_field_value | string | Courses with this value in one of their custom course fields. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
},
"custom_field_value": {
"type": "string",
"description": "Courses with this value in one of their custom course fields."
}
}
}Members of a group (id, login, name, email, user type, status, last login), paginated. GET /api/v2/groups/{id}/users.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| group_id* | integer | The group id (a positive integer). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"group_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"group_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The group id (a positive integer).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}List the portal's groups (id, name, description, branch, price, key redemptions), paginated. GET /api/v2/groups.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}Learning paths (sequences of courses) with status, category, price, dates and rules, paginated. GET /api/v2/learning-paths.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| status | string | Only active or inactive learning paths. |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"status": {
"enum": [
"active",
"inactive"
],
"type": "string",
"description": "Only active or inactive learning paths."
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}The branches a user belongs to (id, name). GET /api/v2/users/{id}/branches.
| Argument | Type | Description |
|---|---|---|
| user_id* | integer | The user id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Certificates a user has earned (course, issue and expiration dates, download/public URLs). GET /api/v2/users/{id}/certificates.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| user_id* | integer | The user id (a positive integer). |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
}
}
}The courses a user is enrolled in, with their role (learner/instructor), enrollment and completion dates, completion status and percentage, score and total time. GET /api/v2/users/{id}/courses.
| Argument | Type | Description |
|---|---|---|
| user_id* | integer | The user id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
}
}
}The groups a user belongs to (id, name). GET /api/v2/users/{id}/groups.
| Argument | Type | Description |
|---|---|---|
| user_id* | integer | The user id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The user id (a positive integer).",
"exclusiveMinimum": 0
}
}
}List the portal's users (id, login, name, email, user type, status, registration, last login), paginated. Filter by keyword (name/login/email), exact email or login, status, branch, group, last-updated range or a custom field value. GET /api/v2/users.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| string | Exact email address. | |
| login | string | Exact username (login). |
| status | string | Only active or inactive users. |
| keyword | string | Search across name, surname, login and email. |
| group_id | integer | Only users in this group. |
| branch_id | integer | Only users in this branch. |
| page_size | integer | Items per page, 1-100 (TalentLMS default 10). |
| updated_to | string | Users updated on or before this ISO 8601 date-time. |
| Short bio. |
| deactivation_date | string | Date the account becomes inactive automatically (YYYY-MM-DD). |
| email_notifications | boolean | Whether the user receives email notifications. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"surname",
"email",
"login",
"password"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "First name."
},
"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": "Email address."
},
"login": {
"type": "string",
"minLength": 1,
"description": "Username (must be unique in the portal)."
},
"locale": {
"type": "string",
"description": "Locale, e.g. en-US."
},
"surname": {
"type": "string",
"minLength": 1,
"description": "Last name."
},
"password": {
"type": "string",
"minLength": 1,
"description": "Initial password (the portal's password rules apply)."
},
"timezone": {
"type": "string",
"description": "IANA timezone, e.g. Europe/Athens."
},
"description": {
"type": "string",
"description": "Short bio."
},
"deactivation_date": {
"type": "string",
"description": "Date the account becomes inactive automatically (YYYY-MM-DD)."
},
"email_notifications": {
"type": "boolean",
"description": "Whether the user receives email notifications."
}
}
}| updated_from | string | Users updated on or after this ISO 8601 date-time, e.g. 2025-01-01T00:00:00. |
| custom_field_value | string | Users with this value in one of their custom user fields. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"email": {
"type": "string",
"description": "Exact email address."
},
"login": {
"type": "string",
"description": "Exact username (login)."
},
"status": {
"enum": [
"active",
"inactive"
],
"type": "string",
"description": "Only active or inactive users."
},
"keyword": {
"type": "string",
"description": "Search across name, surname, login and email."
},
"group_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only users in this group.",
"exclusiveMinimum": 0
},
"branch_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only users in this branch.",
"exclusiveMinimum": 0
},
"page_size": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page, 1-100 (TalentLMS default 10)."
},
"updated_to": {
"type": "string",
"description": "Users updated on or before this ISO 8601 date-time."
},
"updated_from": {
"type": "string",
"description": "Users updated on or after this ISO 8601 date-time, e.g. 2025-01-01T00:00:00."
},
"custom_field_value": {
"type": "string",
"description": "Users with this value in one of their custom user fields."
}
}
}