Integration

Flat integration

Flat is an online music notation editor with a Flat for Education edition for schools. Create music scores (blank from a list of instruments, imported from MusicXML, MIDI, Guitar Pro, MuseScore and other files, or from Google Drive), export a revision as MusicXML, MIDI, MP3, WAV or a thumbnail, upload new revisions, organize scores in collections, share them with collaborators, comment on them and attach audio or video tracks. Convert scanned sheet music (images or PDF) into scores with optical music recognition jobs, which spend the account's AI credits. For teachers: manage classes, student groups, assignments, submissions, grades and feedback, and the resource library. Organization administration (users, invitations, LTI credentials and configurations, sign-in links and access tokens minted for other users) is not exposed. Authentication is OAuth2 (a Flat app with a client id and secret; the scopes requested cover scores, collections, classes, assignments, resources, export tasks and OMR) or a Personal Access Token created in the Flat developer dashboard under REST API > Personal tokens, sent as a Bearer token.

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in Flat.Built from the 105 Flat tools below, on the connection you add once.

What you can do with Flat

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.

Score, 9 operations

  • add_score_to_collectionAdd score to collectionPUTThis operation will add a score to a collection. The default behavior will make the score available across multiple collections.
  • create_scoreCreate scorePOSTCreates a score in the user's account in one of three ways: blank, with builderData listing the instruments (plus optional key and time signature and layout); imported, with data holding a MusicXML, MIDI, Guitar Pro, MuseScore.
  • delete_scoreDelete scoreDELETERemoves a score, with an effect that depends on the caller: for its owner or an admin, schedules the deletion of the score and its whole history (restorable with untrash_score until then); for a collaborator, unshares it from their account.
  • get_scoreGet scoreGETGet the details of a score identified by the `score` parameter in the URL. The currently authenticated user must have at least a read access to the document to use this API call.
  • list_collection_scoresList collection scoresGETLists the scores in a collection, sorted by modificationDate descending unless sort is given. Virtual collection identifiers work too: allScores lists every score of the account, trash lists the trashed ones.
  • list_group_scoresList group scoresGETGet the list of scores shared with a group.
  • list_user_scoresList user scoresGETGet the list of public scores owned by a User. If you want to access private scores, please use the Collections API.
  • remove_score_from_collectionRemove score from collectionDELETEThis method will delete a score from the collection. Unlike `delete_score`, this will not remove the score from your account, but only from the collection.
  • update_scoreUpdate scorePUTChanges a score's metadata (title, privacy, description, tags and so on); every property is optional. To change the music itself, upload a new revision with create_score_revision.

Comment, 8 operations

  • create_score_commentCreate score commentPOSTPost a document or a contextualized comment on a document. Please note that this method includes an anti-spam system for public scores.
  • create_submission_commentCreate submission commentPOSTAdd a feedback comment to a submission
  • delete_score_commentDelete score commentDELETEDeletes a comment from a score.
  • delete_submission_commentDelete submission commentDELETEDelete a feedback comment to a submission
  • list_score_commentsList score commentsGETThis method lists the different comments added on a music score (documents and inline) sorted by their post dates.
  • list_submission_commentsList submission commentsGETList the feedback comments of a submission
  • update_score_commentUpdate score commentPUTEdits a comment on a score: its text (comment, with mentions written @[id:username], plus rawComment, the same text without mentions, when mentions are used), the revision or the context it is attached to. Returns the updated comment.
  • update_submission_commentUpdate submission commentPUTReplaces the text of a feedback comment on a submission. Returns the updated comment.

Submission, 7 operations

  • create_submissionCreate submissionPUTUse this method as a student to create, update and submit a submission related to an assignment. Students can only set `attachments`, `playback`, `exercisesIds` and `submit`.
  • get_submissionGet submissionGETReturns one student submission: its state, attached work, submission and return dates, grade and draft grade, playback counts and feedback comments.
  • list_assignment_submissionsList assignment submissionsGETList the students' submissions
  • list_class_student_submissionsList class student submissionsGETUse this method as a teacher to list all the assignment submissions sent by a student of the class
  • list_score_submissionsList score submissionsGETThis API call will list the different assignments submissions where the score is attached.
  • reset_submissionReset submissionDELETEUse this method as a teacher to reset a submission and allow the student to start the assignment over
  • update_submissionUpdate submissionPUTUse this method as a teacher to update a submission and give feedback. Teachers can only set `return`, `draftGrade` and `grade`.

Assignment, 6 operations

  • create_assignmentCreate assignmentPOSTUse this method as a teacher to create and post a new assignment to a class.
  • delete_assignmentDelete assignmentDELETEDeletes an assignment from a class. Returns no body on success.
  • get_assignmentGet assignmentGETReturns one assignment with its attachments, toolset and grading settings. A teacher of the class sees it as authored; a student sees it without the teacher-only fields (teacherInstructions among them).
  • list_assignmentsList assignmentsGETLists the assignments of a class with their type, title, instructions, attachments, state (draft, active or archived), publication and due dates and grading settings.
  • update_assignmentUpdate assignmentPUTUpdate an assignment. Only the properties present in the request body are modified, so a partial body leaves everything else as it was.
  • update_edu_resource_assignmentUpdate edu resource assignmentPUTUpdate an education resource assignment

User, 6 operations

  • add_class_userAdd class userPUTThis method can be used by a teacher of the class to enroll another Flat user into the class.
  • add_group_userAdd group userPOSTAdd a student to the specified group (must be in the same class)
  • get_userGet userGETGet a profile of a Flat or Flat for Education User.
  • list_group_usersList group usersGETLists the users of a group with their profile (name, username, role in the organization and class), optionally filtered by the source they were synchronized from.
  • remove_class_userRemove class userDELETEThis method can be used by a teacher of the class to remove another user from it. Removing your own account is not allowed.
  • remove_group_userRemove group userDELETERemove a student from a class group

Collection, 5 operations

  • create_collectionCreate collectionPOSTThis method will create a new collection in your account.
  • delete_collectionDelete collectionDELETEThis method will schedule the deletion of the collection. Until deleted, the collection will be available in the `trash`.
  • get_collectionGet collectionGETReturns one collection: title, type (regular, app, trash, or a virtual one such as allScores, collaborations or likes), privacy, owner, the current user's rights and capabilities, and its URL on flat.io.
  • list_collectionsList collectionsGETUse this method to list the user's collections. If no sort option is provided, the collections are sorted by `creationDate` `desc`.
  • update_collectionUpdate collectionPUTUpdate a collection's metadata

Edu resource, 5 operations

  • create_edu_resourceCreate edu resourcePOSTCreate a new education resource
  • delete_edu_resourceDelete edu resourceDELETEDelete an education resource
  • get_edu_resourceGet edu resourceGETGet an education resource
  • list_edu_resourcesList edu resourcesGETList education resources in a library or folder
  • update_edu_resourceUpdate edu resourcePUTUpdate the metadata of a resource (e.g. its title). Use this method to rename education resources folders or assignments.

Group, 5 operations

  • create_groupCreate groupPOSTCreate a group of the given type, tied to a classroom, optionally with initial members.
  • delete_groupDelete groupDELETEDelete a group. Only available to teachers of the classroom.
  • get_groupGet groupGETReturns one group: its name, type, organization, class or assignment it belongs to, number of users and whether it is read-only.
  • list_groupsList groupsGETList all groups of a given type, filtered by either a classroom or an assignment.
  • rename_groupRename groupPUTRename a sub-group. Only available for class student groups.

Track, 5 operations

  • add_score_trackAdd score trackPOSTUse this method to add a new track to the score. This track can then be played on flat.io or in an embedded score.
  • delete_score_trackDelete score trackDELETERemove an audio or video track linked to the score
  • get_score_trackGet score trackGETRetrieve the details of an audio or video track linked to a score
  • list_score_tracksList score tracksGETList all audio or video tracks linked to a score.
  • update_score_trackUpdate score trackPUTUpdate an audio or video track linked to a score

Archive, 4 operations

  • archive_assignmentArchive assignmentPOSTMarks an assignment as archived; unarchive_assignment makes it active again. Returns the assignment.
  • archive_classArchive classPOSTMark the class as `archived`. When this course is synchronized with another app, like Google Classroom, this state will automatically be updated.
  • unarchive_assignmentUnarchive assignmentDELETEMark the assignment as `active`.
  • unarchive_classUnarchive classDELETEMark the class as `active`. When this course is synchronized with another app, like Google Classroom, this state will automatically be updated.

Class, 4 operations

  • create_classCreate classPOSTClassrooms on Flat allow you to create activities with assignments and post content to a specific group.
  • get_classGet classGETGet the details of a single class
  • list_classesList classesGETList the classes available for the current user
  • update_classUpdate classPUTUpdate the meta information of the class

Collaborator, 4 operations

  • add_score_collaboratorAdd score collaboratorPOSTShare a score with a single user or a group. This API call allows you to add, invite and update the collaborators of a resource.
  • get_score_collaboratorGet score collaboratorGETGet the information about a collaborator (User or Group).
  • list_score_collaboratorsList score collaboratorsGETThis API call will list the different collaborators of a score and their rights on the document. The returned list will at least contain the owner of the document.
  • remove_score_collaboratorRemove score collaboratorDELETERemove the specified collaborator from the score

Job, 4 operations

  • create_omr_jobCreate omr jobPOSTCreates an optical music recognition (OMR) job that turns scanned sheet music into a score, spending AI credits.
  • delete_omr_jobDelete omr jobDELETEErase a job's uploaded files and recognition results now, instead of waiting for its retention deadline. Use this to serve a deletion request from your own end user.
  • get_omr_jobGet omr jobGETReturns the current state of an OMR job: status, current or pending step, progress, estimated credits, the result once done (created score, available exports) and any error. Pass wait to long-poll up to that many seconds for a state change.
  • list_omr_jobsList omr jobsGETList the caller's OMR jobs, for resuming work or cleaning up abandoned drafts.

Revision, 4 operations

  • create_score_revisionCreate score revisionPOSTUpdate a score by uploading a new revision for this one.
  • export_score_revisionExport score revisionGETDownloads a revision of a score (revision last for the current one) as a file: json (Flat JSON), xml or mxl (MusicXML), abc, midi, flat or synchronizationPoints. ABC and MIDI exports are lossy.
  • get_score_revisionGet score revisionGETWhen creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to get a specific revision metadata.
  • list_score_revisionsList score revisionsGETWhen creating a score or saving a new version of a score, a revision is created in our storage. This method allows you to list all of them, sorted by last modification.

Copy, 2 operations

  • copy_assignmentCopy assignmentPOSTCopies an assignment to another class or to the resource library. A copy whose original due date has passed is created without a due date, and a copy into a class synchronized with an external app (such as Google Classroom) is also posted there.
  • copy_edu_resourceCopy edu resourcePOSTCopy an education resource to a Resource Library

File, 2 operations

  • add_omr_job_fileAdd omr job filePOSTAdd one image or PDF to a draft job. Call once per file; files keep their upload order.
  • get_omr_job_fileGet omr job fileGETDownloads one of the job's input files (a page image or PDF) by its 0-based index. Once the job's data retention has erased it, the call is refused with OMR_JOB_EXPIRED.

History, 2 operations

  • get_submission_historyGet submission historyGETFor teachers only. Returns a detailed history of the submission. This currently includes state and grade histories.
  • list_billing_credits_historyList billing credits historyGETThe credit ledger of the authenticated account, sorted by creation date descending (most recent entry first).

Resolved, 2 operations

  • mark_score_comment_resolvedMark score comment resolvedPUTMark the comment as resolved
  • mark_score_comment_unresolvedMark score comment unresolvedDELETEMark the comment as unresolved

Task, 2 operations

  • create_score_export_taskCreate score export taskPOSTStarts an asynchronous export of a score revision to mp3 or wav audio (or to practicefirst), for exports too long for a direct download.
  • get_taskGet taskGETThis method can be used to follow the progress of a task, for example while a score is being exported.

Activate, 1 operation

  • activate_classActivate classPOSTMark the class as `active`. This is mainly used for classes synchronized from Clever that are initially with an `inactive` state and hidden in the UI.

Cancel, 1 operation

  • cancel_omr_jobCancel omr jobPOSTCancel a draft or in-flight job. Any charged credits are reversed.

Capability, 1 operation

  • get_omr_capabilitiesGet omr capabilitiesGETAdvertises the supported steps, export formats, limits, cost-per-page, remaining credits and locales, so clients can feature-detect instead of hardcoding behavior.

Copy to demo class, 1 operation

  • copy_edu_resource_to_demo_classCopy edu resource to demo classPOSTOnce a resource library can be published to a class (`Assignment.capabilities.canPublishInClass = true`), this endpoint can be used for the feature "View as student".

Create lti link, 1 operation

  • create_edu_resource_lti_linkCreate edu resource lti linkPOSTThis endpoint will return an LTI link that can be used to launch Flat for Education. The link, in a context from a class, will ensure the assignment has been copied in the class.

Csv, 1 operation

  • export_submissions_csvExport submissions csvGETExports the grades and reviews of an assignment's submissions as CSV text (one row per student).

Enroll, 1 operation

  • enroll_in_classEnroll in classPOSTUse this method to join a class using an enrollment code given by one of the teachers of this class.

Excel, 1 operation

  • export_submissions_excelExport submissions excelGETExports the grades and reviews of an assignment's submissions as an Excel (.xlsx) file.

Export, 1 operation

  • get_omr_job_exportGet omr job exportGETDownloads the finished result of an OMR job (status done) as a file in the requested format: musicxml, mxl (compressed MusicXML), midi or thumbnail.png.

Fork, 1 operation

  • fork_scoreFork scorePOSTThis API call will make a copy of the last revision of the specified score and create a new score. The copy of the score will have a privacy set to `private`.

Library, 1 operation

  • list_edu_librariesList edu librariesGETLists the education resource libraries available to the user (for example their own and their organization's). Pass a library's id as parent to list_edu_resources to browse it.

Like, 1 operation

  • list_user_likesList user likesGETLists the scores a user has liked (use me for the authenticated user), with their title, composer, owner, privacy and URLs.

Me, 1 operation

  • get_meGet meGETGet details about the current authenticated User.

Move, 1 operation

  • move_edu_resourceMove edu resourcePOSTMove an education resource

Start, 1 operation

  • start_omr_jobStart omr jobPOSTValidate the attached files, run the permission, quota and credit checks, then queue the job for processing.

Step, 1 operation

  • submit_omr_job_stepSubmit omr job stepPOSTResolves the step an OMR job is waiting on and resumes the job. The only step today is details: send step_body details plus any of title, mainLanguage and instruments to override what was detected; omitted fields keep the detected values.

Test student, 1 operation

  • create_test_student_accountCreate test student accountPOSTCreates (or resets) the class's test student account, which teachers and admins use to try assignments as a student.

Untrash, 1 operation

  • untrash_scoreUntrash scorePOSTThis method will remove the score from the `trash` collection and from the deletion queue, and add it back to the original collections.

Use in class, 1 operation

  • use_edu_resource_in_classUse edu resource in classPOSTThis endpoint will copy a resource and the underlying resources.

Use Flat from Claude Code, Cursor or Codex

Connect Flat in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Flat 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 Flat

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect Flat once

    Add your Flat 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.

Flat integration FAQ

What can you do with the Flat integration?

LiveContext exposes 105 operations on Flat, covering score, comment, submission and assignment.

Popular integrations

Browse the whole catalog