Integration

Pencil Spaces integration

Pencil Spaces is a virtual classroom and tutoring platform. Manage the users of your institution (invite, create API-managed users, update, remove), create, clone, update and delete Spaces and their hosts and participants, end live sessions, read session analytics, coaching and safeguarding reports, recordings and transcripts, schedule events with RSVPs, cancellations and attendance, and manage programs, cohorts, program cancellations, custom attributes, availability slots, alerts, audit history and the institution webhook. The route that mints short-lived login links for API-managed users is not exposed. Authentication is an institution API key sent as a Bearer token.

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in Pencil Spaces.Built from the 57 Pencil Spaces tools below, on the connection you add once.

What you can do with Pencil Spaces

Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.

Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.

Event, 6 operations

  • cancel_eventCancel eventPOSTCancel an event, with a required note (max 300 characters) saying why. The event is kept with a CANCELLED state.
  • create_eventCreate eventPOSTCreate an event (ONLINE in a Space, or OFFLINE at a location), optionally recurring with an RRULE. Returns the created event with its id.
  • delete_eventDelete eventDELETEDelete an event permanently by its id (as returned by list_events). To keep a record of it, use cancel_event instead.
  • get_eventGet eventGETGet an event by its id: title, description, start and end, organizers, attendees, linked Space, recurrence and, when cancelled, its cancellation state.
  • list_eventsList eventsGETList events. filters is required: a Base64-encoded JSON object, usually {"timeRange": {"start": ..., "end": ...}}, optionally with organizers, attendees, sites or customAttributes. Returns a list of {event} objects.
  • replace_eventReplace eventPUTReplace an event as a whole: fields left out are cleared. Read it first with get_event and send every field back with your change, or use update_event to change only some fields.

User, 6 operations

  • create_api_userCreate api userPOSTCreate an API-managed user (no email invitation) with a role, optional externalId, sites and custom attributes. Returns the user with its userId.
  • get_userGet userGETRetrieve the profile of a user in your institution by their `userId`
  • invite_userInvite userPOSTInvite a person to your institution by email, as a Student or Teacher; Pencil Spaces emails them the invitation. The vendor documents a 204 answer, so find the new user's userId with list_users.
  • list_usersList usersGETList the users of your institution, 25 per page by default (pageSize up to 100). Optional filters is a Base64-encoded JSON object (name search, roles, sites, customAttributes).
  • remove_userRemove userDELETERemove a user from your institution by userId. An API-managed user removed this way is deactivated for good and cannot be added back.
  • update_userUpdate userPATCHChange a user's name, externalId, sites, custom attributes or language. Leave out a field to keep its value.

Cancellation, 5 operations

  • create_program_cancellationCreate program cancellationPOSTAdd a cancellation (a break such as a holiday, from start to end, dates YYYY-MM-DD) to a program. The program must not be archived and the dates must fall within the program's range.
  • delete_program_cancellationDelete program cancellationDELETEDelete a program cancellation. The program must not be archived; in a published program the events it cancelled are restored.
  • get_program_cancellationGet program cancellationGETGet one cancellation of a program by its cancellationId, as returned by list_program_cancellations.
  • list_program_cancellationsList program cancellationsGETList the cancellations of a program, sorted by start date, for programs in any status including archived.
  • update_program_cancellationUpdate program cancellationPATCHChange a program cancellation's name or dates. Only for draft or ready-to-publish programs; when end is given, start must be given too.

Cohort, 5 operations

  • create_cohortCreate cohortPOSTCreate a cohort in a program with a name, at least one organizer and optional attendees (userIds). The program must not be archived.
  • delete_cohortDelete cohortDELETEDelete a cohort from a program. The program must not be archived; in a published program its future events are deleted too.
  • get_cohortGet cohortGETGet one cohort of a program, with its organizers and attendees. cohortId comes from list_cohorts.
  • list_cohortsList cohortsGETList the cohorts of a program, each with its organizers and attendees.
  • update_cohortUpdate cohortPATCHChange a cohort's name, organizers or attendees. Leave out a field to keep its value.

Session, 4 operations

  • delete_sessionDelete sessionDELETEDelete a session and its analytics permanently, by its sessionId (as returned by list_sessions).
  • end_space_sessionEnd space sessionPOSTForce-end the ongoing session in a Space, so back-to-back events get separate analytics: the session is split into one ending now and one starting now. Presence is kept, join times reset to now.
  • get_sessionGet sessionGETGet one session's analytics: title, start and end, call statistics and every attendee's join and leave times, including breakout rooms. sessionId comes from list_sessions.
  • list_sessionsList sessionsGETList sessions (time users spent in Spaces) for Spaces managed by the API key's user. Only processed sessions are returned unless filters (a Base64-encoded JSON object) sets status to inprogress.

Space, 4 operations

  • delete_spaceDelete spaceDELETEDelete a Space permanently, by its spaceId (as returned by list_spaces).
  • get_spaceGet spaceGETGet details for a particular Space.
  • list_spacesList spacesGETList the Spaces the API key's account can access, 25 per page by default (pageSize up to 100). Optional filters is a Base64-encoded JSON object (search text, hosts, owner, archive status, creation range).
  • update_spaceUpdate spacePATCHUpdate a Space's title, visibility or archived flag. Leave out a field to keep its value. Hosts and participants are changed with update_space_users.

Attribute, 3 operations

  • create_attributeCreate attributePOSTCreate a custom attribute: a key (its name) and a list of values. Returns the key and values with their ids.
  • list_attributesList attributesGETList the institution's custom attributes, each with its key and values (id and display text). The ids are what customAttributes fields take, as <keyId>:<valueId>.
  • rename_attributeRename attributePATCHRename a custom attribute's key. id is the attribute key id from list_attributes.

Recording, 3 operations

  • delete_recordingDelete recordingDELETEDelete a recording from a Space permanently. Needs the spaceId and the recordingId, both returned by list_space_recordings.
  • list_recordingsList recordingsGETList recordings across all your Spaces, optionally in a time range (startingAfter, endingBefore). Each recording has its recordingId, spaceId, start time, duration and size; use get_recording_download_link to fetch one.
  • list_space_recordingsList space recordingsGETList the recordings of one Space, optionally in a time range. Use get_recording_download_link with a recordingId to get the file, and get_transcription for its transcript.

Webhook config, 3 operations

  • delete_webhook_configDelete webhook configDELETEDelete the institution's webhook configuration, which stops every delivery.
  • get_webhook_configGet webhook configGETGet the institution's webhook configuration (the receiving url), or an empty object when none is set. The secret is not returned here: it is the value you chose when setting it.
  • set_webhook_configSet webhook configPOSTSet the institution's webhook url and secret, replacing any previous configuration. Each delivery is a POST carrying the secret as a Bearer token in the Authorization header, so your receiver can verify it.

Availability slot, 2 operations

  • get_availability_slotsGet availability slotsGETGet a user's weekly availability slots (day, start, end) and timezone. A user with no availability returns only userId and an empty slots list.
  • upsert_availability_slotsUpsert availability slotsPOSTSet a user's weekly availability: every stored slot and the timezone are replaced by the ones sent (created when the user has none).

Program, 2 operations

  • get_programGet programGETGet a program by its programId: name, description, site, start and end, timezone, weekly schedule, cohort count, custom attributes and status.
  • list_programsList programsGETList the programs across all sites, 25 per page by default: name, dates, timezone, weekly schedule, cohort count and status (draft or published).

Update, 2 operations

  • update_attendanceUpdate attendancePATCHSet one user's attendance status or notes on a past event. Ongoing and future events cannot be updated.
  • update_eventUpdate eventPATCHChange only the given fields of an event (title, description, organizers, attendees, type, spaceId, location, customAttributes); every other field keeps its value. Times are changed with replace_event.

Alert, 1 operation

  • get_alertGet alertGETGet a Control Center alert by its alertId: type (TEACHER_DECLINED_EVENT or EVENT_NO_SHOW), status, priority, linked event, who triggered it, assignee and resolution (null when absent).

Attendance, 1 operation

  • get_attendanceGet attendanceGETGet the attendance of every participant of a past event: name, email, role, status (Present, Late, Absent, Left, Excuse), notes and join time. Only for events that already took place.

Audit, 1 operation

  • get_audit_historyGet audit historyGETGet the full change history of an event or cohort: each entry says whether it was created or updated, who made the change, when, and each field's old and new value.

Create, 1 operation

  • create_spaceCreate spacePOSTCreate a Space (a virtual classroom), or clone one with spaceToCloneId. Returns the Space with its spaceId and join link. notifyInvitees decides whether invited hosts and participants are emailed.

Download, 1 operation

  • get_recording_download_linkGet recording download linkGETGet a short-lived download link for a recording (recordingId from list_recordings or list_space_recordings). The API key's user must be a host of the recording's Space.

Event rsvp, 1 operation

  • rsvp_eventRsvp eventPOSTRecord a user's RSVP (YES or NO) to an event, with an optional note. user_id is the userId of the responding user, as returned by list_users.

Session report, 1 operation

  • get_session_reportsGet session reportsGETGet the coaching and safeguarding reports available for a session, derived from its recordings. sessionId comes from list_sessions.

Settings, 1 operation

  • update_space_settingsUpdate space settingsPATCHChange a Space's settings: always-on recording (when available to the institution) and the default Waiting Room. Leave out a setting to keep its current value.

Site, 1 operation

  • list_sitesList sitesGETList the sites of the institution (id and name). Only for site-enabled institutions; site ids are what siteId and siteIds fields take.

Space user, 1 operation

  • update_space_usersUpdate space usersPATCHAdd users to a Space, change their role (host or participant) or remove them. Users are given by email or userId. notifyInvitees emails the added users.

Transcription, 1 operation

  • get_transcriptionGet transcriptionGETGet a recording's transcript, the users on the call and, when enabled, the transcript summary. Answers TRY_AGAIN_LATER while the transcript is still processing.

Update attribute, 1 operation

  • update_attribute_valuesUpdate attribute valuesPATCHAdd values to a custom attribute, or rename existing values. id is the attribute key id from list_attributes.

Use Pencil Spaces from Claude Code, Cursor or Codex

Connect Pencil Spaces in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Pencil Spaces operations become tools the client can call, next to every other integration you connected.

Claude Code
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"
Codex (~/.codex/config.toml)
[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"

[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"
Cursor, Claude Desktop and other JSON configs
{
  "mcpServers": {
    "livecontext": {
      "type": "http",
      "url": "https://livecontext.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Set up the MCP server step by step

How to connect Pencil Spaces

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect Pencil Spaces once

    Add your Pencil Spaces connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.

  3. Describe the job in chat

    The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.

Pencil Spaces integration FAQ

What can you do with the Pencil Spaces integration?

LiveContext exposes 57 operations on Pencil Spaces, covering event, user, cancellation and cohort.

Popular integrations

Browse the whole catalog