Skip to content

Connectors · Work & projects

Absorb LMS MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Absorb LMS and the rest of your systems. It gives your agent 155 Absorb LMS actions (116 reads, 37 writes and 2 that wait for a confirmation) and holds the Absorb LMS credential itself, so the agent never does. It paces Absorb LMS's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "absorb_lms.users.list",  intent: "check which Absorb LMS account is connected"}# List users · read · 1 upstream call
  • 155actionsin one signed file
  • 116readlook, never change
  • 37writecreate and update
  • 2wait for a yesdestructive, confirmed first

Set up

Connect Absorb LMS in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Absorb LMS.

    Session login. actionlake opens the session and renews it when it expires. actionlake stores what you paste write-only, sealed under your tenant's key.

    • api_keyAbsorb Integration API key
    • client_idOAuth Client ID
    • client_secretOAuth Client Secret
    • hostWhere your Absorb LMS lives: your host
    account { op: "connections.requirements", service: "absorb_lms" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "absorb_lms.users.list" }# list users · read · 1 upstream callcheck { action: "absorb_lms.groups.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Absorb LMS at a glance

Sign-in
Session login. actionlake opens the session and renews it when it expires.
You provide
api_keyclient_idclient_secret
Setup fields
host
Limits we pace to
200 calls a second, per connection
API covered
Absorb Integration API v2 (x-api-version: 2)rest.myabsorb.com
Built from
Absorb LMS's documentation, read 23 October 2026docs.myabsorb.comdocs.myabsorb.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
116 of 116 reads, for up to 5 minutes; a write clears what it affects
Shared entities
4, so ask can line Absorb LMS up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Absorb LMS.

155 actions in 71 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 116readlook, never change
  • 37writecreate and update
  • 2destructivewait for a confirmation
  1. Users

    6

    2 read · 4 write · 0 destructive

    List users · Get User · Update user · Upsert user if the username or external ID matches

  2. Custom field definitions

    4

    2 read · 2 write · 0 destructive

    Create a custom field definition and its possible values (if any) · List custom fields and their definitions · Get a specific custom field and it's definition · Update a custom field definition and its possible values (if any)

  3. Departments

    4

    2 read · 2 write · 0 destructive

    Lists all selected LMS Departments that are available to the current, authenticated administrator · Get Department · Create or update department · Create or update department

  4. Enrollment keys

    4

    2 read · 2 write · 0 destructive

    Create enrollment key · Get enrollment key · Get enrollment key by external ID · Update enrollment key

  5. External training submissions

    4

    2 read · 2 write · 0 destructive

    Create a new submission · List submissions · Get submission by ID · Update an existing submission

  6. Groups

    4

    2 read · 2 write · 0 destructive

    Get groups · Create group · Get group · Update a group

  7. Question bank questions

    4

    2 read · 2 write · 0 destructive

    Create question bank question · List question bank questions · Get question bank question · Updates a question bank question

  8. Question banks

    4

    2 read · 2 write · 0 destructive

    Create question bank · List question banks · Get question bank · Update question bank

63 more areas · 121 actions
  • Resource categories 4
  • Tags 4
  • User enrollments 4
  • Venues 4
  • Attendances 3
  • Course bundles 3
  • Courses 3
  • Curricula 3
  • Ecommerce transactions 3
  • Enrollments 3
  • Lesson attempts 3
  • User messages 3
  • User session enrollments 3
  • Categories 2
  • Chapters 2
  • Countries 2
  • Course certificates 2
  • Course chapters 2
  • Course lessons 2
  • Course resources 2
  • Course sessions 2
  • Course versions 2
  • Curriculum groups 2
  • Direct reports 2
  • External training templates 2
  • Group users 2
  • Instructor led courses 2
  • Languages 2
  • Lessons 2
  • Online courses 2
  • Provinces 2
  • Resources 2
  • Roles 2
  • Session schedules 2
  • Sessions 2
  • User certificates 2
  • User chapter enrollments 2
  • User chapter lesson enrollments 2
  • User lesson enrollments 2
  • User management settings 2
  • User manager roles 2
  • Attempts 1
  • Certificates 1
  • Competency definitions 1
  • Coupons 1
  • Course chapter lessons 1
  • Course enrollments 1
  • Credit types 1
  • Enrollment credits 1
  • Learning paths 1
  • Lesson enrollments 1
  • Manager roles 1
  • Messages 1
  • Self assessment ratings 1
  • Session details 1
  • Session enrollments 1
  • User catalog 1
  • User competencies 1
  • User courses 1
  • User enrollment resources 1
  • User grades 1
  • User resources 1
  • User session details 1

Top actions

The Absorb LMS API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 22 of Absorb LMS's 23 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
absorb_lms.users.listList usersList users.readidentity.user.list474 connectors
absorb_lms.groups.listGet groupsGet groups.readidentity.group.list262 connectors
absorb_lms.roles.listList all available rolesList all available roles.readidentity.role.list184 connectors
absorb_lms.groups.createCreate groupCreate group.writeidentity.group.create205 connectors
absorb_lms.users.getGet UserGet User.readidentity.user.get399 connectors
absorb_lms.users.updateUpdate userUpdate user.writeidentity.user.update280 connectors
absorb_lms.departments.listLists all selected LMS Departments that are available to the current, authenticated administratorLists all selected LMS Departments that are available to the current, authenticated administrator.readhr.department.list40 connectors
absorb_lms.roles.getGet an individual role by IDGet an individual role by ID.readidentity.role.get127 connectors
absorb_lms.departments.getGet DepartmentGet Department.readhr.department.get33 connectors
absorb_lms.courses.listLists coursesLists courses.readhr.training_course.list11 connectors
absorb_lms.user_enrollments.createCreate or update course enrollmentCreate or update course enrollment.writehr.training_record.create5 connectors
absorb_lms.enrollments.unenrollUn-enroll users from coursesUn-enroll users from courses.destructivethis connector

Try it

Prompts to paste into Claude.

Each one names the Absorb LMS actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Who has access in Absorb LMS? List every user and their role.

    callsabsorb_lms.users.list

  2. Writewrite

    Create group in Absorb LMS. Show me exactly what you will send before you save it.

    callsabsorb_lms.groups.create

Governance for Absorb LMS

Destructive actions wait for a yes.

2 Absorb LMS actions are destructive. These are all of them:

  • Un-enroll users from coursesabsorb_lms.enrollments.unenroll
  • Unassign users from groupabsorb_lms.group_users.unassign

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

doabsorb_lms.enrollments.unenrollconfirm_policy: human

Un-enroll users from courses?

intent: the user asked me to un-enroll users from courses

run suspended · waiting for a named person · key absorb-lms-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "absorb-lms-agent",  allowed_actions: ["absorb_lms.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "absorb_lms.enrollments.unenroll", approver: "[email protected]" },    { match: "absorb_lms.group_users.unassign", approver: "[email protected]" }  ]}
Illustrative. Scoped to Absorb LMS only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Absorb LMS costs on actionlake.

Every Absorb LMS action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Absorb LMS refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 155 Absorb LMS actions
  • 155actions pageeach page of a long list is one call
  • 116reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Absorb LMS action.

155 actions by area: the id your agent calls, what it does, and its effect.

Users6
  • absorb_lms.users.getGet Userread
  • absorb_lms.users.listList usersread
  • absorb_lms.users.updateUpdate userwrite
  • absorb_lms.users.uploadCreates and/or updates Users from a List of Userswrite
  • absorb_lms.users.upsertUpsert user if the username or external ID matcheswrite
  • absorb_lms.users.upsert_via_create_accountUpsert user if the username or external ID matcheswrite
Custom field definitions4
  • absorb_lms.custom_field_definitions.createCreate a custom field definition and its possible values (if any)write
  • absorb_lms.custom_field_definitions.getGet a specific custom field and it's definitionread
  • absorb_lms.custom_field_definitions.listList custom fields and their definitionsread
  • absorb_lms.custom_field_definitions.updateUpdate a custom field definition and its possible values (if any)write
Departments4
  • absorb_lms.departments.getGet Departmentread
  • absorb_lms.departments.listLists all selected LMS Departments that are available to the current, authenticated administratorread
  • absorb_lms.departments.upsertCreate or update departmentwrite
  • absorb_lms.departments.upsert_via_create_departmentCreate or update departmentwrite
Enrollment keys4
  • absorb_lms.enrollment_keys.createCreate enrollment keywrite
  • absorb_lms.enrollment_keys.getGet enrollment keyread
  • absorb_lms.enrollment_keys.get_by_external_idGet enrollment key by external IDread
  • absorb_lms.enrollment_keys.updateUpdate enrollment keywrite
External training submissions4
  • absorb_lms.external_training_submissions.createCreate a new submissionwrite
  • absorb_lms.external_training_submissions.getGet submission by IDread
  • absorb_lms.external_training_submissions.listList submissionsread
  • absorb_lms.external_training_submissions.updateUpdate an existing submissionwrite
Groups4
  • absorb_lms.groups.createCreate groupwrite
  • absorb_lms.groups.getGet groupread
  • absorb_lms.groups.listGet groupsread
  • absorb_lms.groups.updateUpdate a groupwrite
Question bank questions4
  • absorb_lms.question_bank_questions.createCreate question bank questionwrite
  • absorb_lms.question_bank_questions.getGet question bank questionread
  • absorb_lms.question_bank_questions.listList question bank questionsread
  • absorb_lms.question_bank_questions.updateUpdates a question bank questionwrite
Question banks4
  • absorb_lms.question_banks.createCreate question bankwrite
  • absorb_lms.question_banks.getGet question bankread
  • absorb_lms.question_banks.listList question banksread
  • absorb_lms.question_banks.updateUpdate question bankwrite
Resource categories4
  • absorb_lms.resource_categories.createCreate resource categorywrite
  • absorb_lms.resource_categories.getGet resource categoryread
  • absorb_lms.resource_categories.listLists resource categoriesread
  • absorb_lms.resource_categories.updateUpdate resource categorywrite
Tags4
  • absorb_lms.tags.createCreate tagwrite
  • absorb_lms.tags.getGet tagread
  • absorb_lms.tags.listList tagsread
  • absorb_lms.tags.updateUpdate tagwrite
User enrollments4
  • absorb_lms.user_enrollments.createCreate or update course enrollmentwrite
  • absorb_lms.user_enrollments.create_for_courseCreate enrollment for user and coursewrite
  • absorb_lms.user_enrollments.getGet user's enrollment for specific courseread
  • absorb_lms.user_enrollments.listList course enrollments for specific userread
Venues4
  • absorb_lms.venues.createCreate venuewrite
  • absorb_lms.venues.getGet venueread
  • absorb_lms.venues.listList venuesread
  • absorb_lms.venues.updateUpdate venuewrite
Attendances3
  • absorb_lms.attendances.createCreate attendance recordwrite
  • absorb_lms.attendances.listList attendance recordsread
  • absorb_lms.attendances.updateUpdate attendance recordwrite
Course bundles3
  • absorb_lms.course_bundles.getGet course bundleread
  • absorb_lms.course_bundles.listList available course bundlesread
  • absorb_lms.course_bundles.list_for_saleList course bundles for saleread
Courses3
  • absorb_lms.courses.getGet courseread
  • absorb_lms.courses.listLists coursesread
  • absorb_lms.courses.list_for_saleList courses for saleread
Curricula3
  • absorb_lms.curricula.getGet an individual curriculum by IDread
  • absorb_lms.curricula.listGet all available curricularead
  • absorb_lms.curricula.list_for_saleGet all available curricula for saleread
Ecommerce transactions3
  • absorb_lms.ecommerce_transactions.getGet e-commerce transactionread
  • absorb_lms.ecommerce_transactions.listList e-commerce transactionsread
  • absorb_lms.ecommerce_transactions.set_statusApproves or denies an e-commerce transactionwrite
Enrollments3
  • absorb_lms.enrollments.getGet course enrollmentread
  • absorb_lms.enrollments.list_bulkList course enrollments for bulk user listread
  • absorb_lms.enrollments.unenrollUn-enroll users from coursesdestructive
Lesson attempts3
  • absorb_lms.lesson_attempts.finishFinish attemptwrite
  • absorb_lms.lesson_attempts.listList user's attempts for specific lessonread
  • absorb_lms.lesson_attempts.startStart attempt for active lesson enrollmentwrite
User messages3
  • absorb_lms.user_messages.listList user messagesread
  • absorb_lms.user_messages.list_receivedList user received messagesread
  • absorb_lms.user_messages.list_sentList user sent messagesread
User session enrollments3
  • absorb_lms.user_session_enrollments.createCreate ILC enrollment for userwrite
  • absorb_lms.user_session_enrollments.getGet user's session enrollment for specific courseread
  • absorb_lms.user_session_enrollments.listList user's session enrollments for specific courseread
Categories2
  • absorb_lms.categories.getGet categoryread
  • absorb_lms.categories.listList categoriesread
Chapters2
  • absorb_lms.chapters.getGet chapterread
  • absorb_lms.chapters.listLists chaptersread
Countries2
  • absorb_lms.countries.getGet countryread
  • absorb_lms.countries.listList countriesread
Course certificates2
  • absorb_lms.course_certificates.getGet certificate for a courseread
  • absorb_lms.course_certificates.listLists certificates for a courseread
Course chapters2
  • absorb_lms.course_chapters.getGet chapter from a courseread
  • absorb_lms.course_chapters.listLists chapters of a courseread
Course lessons2
  • absorb_lms.course_lessons.getGet lesson from a specific courseread
  • absorb_lms.course_lessons.listList lessons from a specific online courseread
Course resources2
  • absorb_lms.course_resources.getGet resource from a specific courseread
  • absorb_lms.course_resources.listList resources from a specific courseread
Course sessions2
  • absorb_lms.course_sessions.getGet session from a specific ILCread
  • absorb_lms.course_sessions.listList sessions from a specific ILCread
Course versions2
  • absorb_lms.course_versions.getGet course versionread
  • absorb_lms.course_versions.listList course versionsread
Curriculum groups2
  • absorb_lms.curriculum_groups.getGet curriculum groupread
  • absorb_lms.curriculum_groups.queryGets multiple curriculum groupsread
Direct reports2
  • absorb_lms.direct_reports.listRetrieves a list of direct reports for a managerread
  • absorb_lms.direct_reports.updateUpdates a list of direct reports for a managerwrite
External training templates2
  • absorb_lms.external_training_templates.getGet template by IDread
  • absorb_lms.external_training_templates.listList templatesread
Group users2
  • absorb_lms.group_users.assignAssign users to groupwrite
  • absorb_lms.group_users.unassignUnassign users from groupdestructive
Instructor led courses2
  • absorb_lms.instructor_led_courses.getGet ILCread
  • absorb_lms.instructor_led_courses.listList ILCsread
Languages2
  • absorb_lms.languages.getGet languageread
  • absorb_lms.languages.listList available languagesread
Lessons2
  • absorb_lms.lessons.getGet lessonread
  • absorb_lms.lessons.listList lessonsread
Online courses2
  • absorb_lms.online_courses.getGet online courseread
  • absorb_lms.online_courses.listList online coursesread
Provinces2
  • absorb_lms.provinces.getGet provinceread
  • absorb_lms.provinces.listList provinces in countryread
Resources2
  • absorb_lms.resources.getGet resourceread
  • absorb_lms.resources.listList resourcesread
Roles2
  • absorb_lms.roles.getGet an individual role by IDread
  • absorb_lms.roles.listList all available rolesread
Session schedules2
  • absorb_lms.session_schedules.getGet session scheduleread
  • absorb_lms.session_schedules.listList session schedulesread
Sessions2
  • absorb_lms.sessions.getGet sessionread
  • absorb_lms.sessions.listList sessionsread
User certificates2
  • absorb_lms.user_certificates.getGet certificate for the userread
  • absorb_lms.user_certificates.listLists certificates for the userread
User chapter enrollments2
  • absorb_lms.user_chapter_enrollments.getGet chapter enrollment for a specified courseread
  • absorb_lms.user_chapter_enrollments.listList chapter enrollments for a specified courseread
User chapter lesson enrollments2
  • absorb_lms.user_chapter_lesson_enrollments.getGet lesson enrollmentread
  • absorb_lms.user_chapter_lesson_enrollments.listList user's lesson enrollments from specific chapterread
User lesson enrollments2
  • absorb_lms.user_lesson_enrollments.getGet user's lesson enrollmentread
  • absorb_lms.user_lesson_enrollments.listList user's lesson enrollments from specific courseread
User management settings2
  • absorb_lms.user_management_settings.getGet a user's management settingsread
  • absorb_lms.user_management_settings.updateUpdate user management settingswrite
User manager roles2
  • absorb_lms.user_manager_roles.listList a specified manager's manager rolesread
  • absorb_lms.user_manager_roles.updateUpdate a specified manager's manager roleswrite
Attempts1
  • absorb_lms.attempts.finishFinish attemptwrite
Certificates1
  • absorb_lms.certificates.getGet certificateread
Competency definitions1
  • absorb_lms.competency_definitions.getGets a single competency definition by IDread
Coupons1
  • absorb_lms.coupons.getGet an individual coupon by IDread
Course chapter lessons1
  • absorb_lms.course_chapter_lessons.getGet lesson from a specific course and chapterread
Course enrollments1
  • absorb_lms.course_enrollments.listList enrollments for specific courseread
Credit types1
  • absorb_lms.credit_types.listList credit types available for enrollmentsread
Enrollment credits1
  • absorb_lms.enrollment_credits.listList credits from a specific user's course enrollmentread
Learning paths1
  • absorb_lms.learning_paths.getGets a user's current learning pathread
Lesson enrollments1
  • absorb_lms.lesson_enrollments.listLists enrollments for a lessonread
Manager roles1
  • absorb_lms.manager_roles.listRetrieves a list of manager rolesread
Messages1
  • absorb_lms.messages.getGet messageread
Self assessment ratings1
  • absorb_lms.self_assessment_ratings.getReturns user's self assessment ratingsread
Session details1
  • absorb_lms.session_details.queryList available session details from specific ILCsread
Session enrollments1
  • absorb_lms.session_enrollments.listList an ILC's session enrollmentsread
User catalog1
  • absorb_lms.user_catalog.listList user's available coursesread
User competencies1
  • absorb_lms.user_competencies.listLists the competencies for a userread
User courses1
  • absorb_lms.user_courses.listList user's available coursesread
User enrollment resources1
  • absorb_lms.user_enrollment_resources.listList resources associated with a specified enrollment for a specific userread
User grades1
  • absorb_lms.user_grades.getGet user's enrollment for specific courseread
User resources1
  • absorb_lms.user_resources.listList resources available to a specific userread
User session details1
  • absorb_lms.user_session_details.listList sessions from a specific user's ILC enrollmentsread

Questions

The Absorb LMS MCP server, answered.

Is there an Absorb LMS MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 155 Absorb LMS actions across users, custom field definitions, departments and enrollment keys, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Absorb LMS.

What do I need to connect Absorb LMS?

Absorb Integration API key, OAuth Client ID and OAuth Client Secret. Plus your host. The free call account { op: "connections.requirements", service: "absorb_lms" } lists exactly what to paste.

Can an AI agent delete or change things in Absorb LMS?

Only if its key allows it, and only with an explicit confirmation. 2 Absorb LMS actions are destructive, including un-enroll users from courses and unassign users from group. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Absorb LMS API limit?

actionlake paces every call to the limits in the Absorb LMS service file: 200 calls a second per connection. Repeated reads are answered from cache (116 Absorb LMS actions can be), which never reaches Absorb LMS.

What does an Absorb LMS action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (155 Absorb LMS actions page). Cache hits, searches, dry runs and calls Absorb LMS refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Absorb LMS API does it cover?

The Absorb Integration API v2 (x-api-version: 2) at rest.myabsorb.com by default, or the base URL set when you connect. It is built from Absorb LMS's documentation as read on 23 October 2026. 155 actions in 71 areas, each one in the signed service file (version 1.0.0).

Does actionlake keep my Absorb LMS data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Absorb LMS credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Absorb LMS today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.