Skip to main content
Glama

Your Goodnotes, with an assistant

Find a passage, organize your notebooks, revise a card, or turn a lecture into a learning board with source images and practice questions. Goodnotes Web MCP connects a compatible AI assistant to your Goodnotes Web library through a separate local browser session.

Experimental v0.21.1, with 107 actions. Developed and live-tested on Windows with Chrome.

  • Work with your notes: read, search, organize and build editable learning materials.

  • Keep edits deliberate: explicit document permissions, saved operation receipts and reload checks.

  • Start with a copy: try a duplicated board and inspect the result before using originals.

Unofficial community project. Not affiliated with Goodnotes. Licensed for personal, noncommercial use; read the terms. The server uses its own browser profile and does not capture or control your desktop.

From a lecture to a learning board

Illustrative layout with fictional material, not a Goodnotes screenshot. Real workflows can use crops from your original lecture slides.

  1. Copy the source. Work from a separate lecture copy and read its exported pages.

  2. Plan the material. Your assistant supplies the summary, questions and page references. The MCP measures the layout and prepares a preview.

  3. Build and check. Create native text cards and images, save progress, and verify each completed step. Larger lessons can become linked boards with an overview.

Create a learning board → · Revise selected cards → · Build a linked collection →

Related MCP server: Render & Verify MCP

What you can ask your assistant

Your task

Example request

Study a lecture

“Use a copy of this lecture to make a learning board with original figures, page references, a summary and five practice questions.”

Improve an existing board

“On a copy of this managed board, shorten the summary card and add two questions. Keep my other notes.”

Find something again

“Search my indexed notes for opportunity cost and show the matching page excerpts.”

Organize your library

“List the notebooks in this folder and propose clearer names before changing them.”

Prepare revision material

“From these pages, prepare a concise study summary and an Anki-compatible TSV file.”

These are requests for your MCP assistant, not built-in one-click commands. The assistant reads the source and authors the learning content; the server handles the supported Goodnotes operations.

Also supported: PDF import/export, local English/German OCR, native handwriting recognition, text formatting, image cropping, page organization, guarded copying/moving, and resumable batches. See all capabilities or browse the action reference.

Quick start

You need Node.js 22.13+, Google Chrome or Microsoft Edge, a Goodnotes account that can access its documents on the Web, and an MCP client that can launch local programs. macOS and Linux have not been tested live.

1. Install and sign in

Download and extract the current source release, or clone this repository. Open a terminal in the project folder:

npm ci --ignore-scripts
npm run browser:install
npm run login

Sign in yourself in the separate Chrome window, then close every window belonging to that separate profile. The sign-in window runs without automation. Your normal browser profile is not imported. On Windows, setup.cmd runs the installation steps for you.

Then check the setup:

npm run doctor

Using Edge? Run npm run login -- --browser msedge. Full setup and troubleshooting.

2. Connect your assistant

Add a local stdio MCP server to your client. Replace the example path with the absolute path on your computer:

{
  "mcpServers": {
    "goodnotes-web": {
      "command": "node",
      "args": ["C:/path/to/goodnotes-web-mcp/src/server.mjs"],
      "env": { "GOODNOTES_MCP_MODE": "compact" }
    }
  }
}

This example enables compact mode: three entry tools discover the same 107 actions as needed. Omit env to expose every individual tool. Compact mode · Full-mode JSON · Codex configuration.

A cloud-only MCP client cannot launch this local server directly. Goodnotes and your AI client have their own account and usage requirements; the server does not require a separate paid AI API key.

3. Try a copied board

Duplicate a non-critical board in Goodnotes, give the copy a clear title, and authorize that exact URL and title:

node src/cli.mjs allow "https://web.goodnotes.com/s/YOUR_DOCUMENT_ID" "MCP Test Board"

Restart the MCP connection after changing CLI permissions. Existing documents are not writable by default; documents explicitly created or duplicated through the MCP are authorized automatically.

“Open my authorized test copy, read a text card, and show me its current content. After I choose the edit, update that card and verify the saved result.”

First edit and recovery guide →

What to know before using it

  • It follows the Goodnotes Web UI. There is no supported Goodnotes editing API behind this project. UI changes can break operations, and most controls currently expect English labels.

  • Verification has a defined scope. Reload checks confirm the observed Web result. They do not prove delivery to an iPad or prevent simultaneous edits by someone else. Uncertain writes stop for review instead of being replayed.

  • Some features are outside its scope. Sharing, comments, audio, permanent deletion, lossless .goodnotes decoding and full discovery of an infinite board are not exposed. OCR and handwriting recognition are approximate.

  • Local does not mean invisible to your AI client. Browser credentials, exports and checkpoints are stored locally. Requested tool results go to your MCP client and its model provider. Explicit imports upload the selected file to Goodnotes. Data and permissions · Security.

The validation record separates automated tests, live checks and measured timings. Runtime depends on the document and Goodnotes loading; a complete board has no fixed seven-minute guarantee. Read all limitations.

Find your way around

npm run check
npm test
npm run test:integration
npm run package:release

Browser tests use a synthetic local fixture. Packaging uses an explicit source allowlist and excludes profiles, credentials and private documents. Creating a package does not upload it. Follow the development and release guide for live checks and publishing.

License

Current distributions use the Personal Noncommercial License: private use by individuals, including their own studies, with modifications and free sharing under the same terms. Professional, commercial or institutional use requires separate permission. This is source-available software with use restrictions, not an OSI-approved open-source license.

The historical v0.21.0 release was published under MIT; those existing permissions remain unaffected. Third-party components keep their own licenses. Examples and release history.


Available Tools

107 tools
goodnotes_arrange_objectC
Destructive

Apply a command returned by object_options to the guarded selection; verify its appearance and, for toggle states, its native inverse command after reload.

Inputs: command (required), operationId (required), selectionId (required).

goodnotes_batch_helpB
Read-only

Return detailed batch input schemas only for the requested action types, avoiding the cost of advertising every action schema on every tool-discovery call.

Inputs: actions (required).

goodnotes_batch_statusA
Read-only

Read batch progress, receipts, backup paths and errors after interruption. Inputs omitted by default.

Inputs: jobId (required), includeInputs.

goodnotes_board_adoption_statusC
Read-only

Read adoption copy, selected managed objects and progress without opening a browser.

Inputs: adoptionId (required).

goodnotes_board_settingsB
Read-only

Read the current whiteboard background pattern and color.

Inputs: url (required).

goodnotes_capture_board_adoptionB

Read and independently verify one selected native text box or image on the adoption COPY. Text needs exact expectedText; images retain exact source pixels and crop. No content is changed. Source page assignments are supplied by the caller.

Inputs: key (required), kind (required), pages (required), adoptionId (required), +3 more.

goodnotes_color_objectA
Destructive

Apply one color returned by object_colors to an allowed selection. Checks native color and appearance after reload. May recolor a whole selected group.

Inputs: color (required), operationId (required), selectionId (required).

goodnotes_combine_pdfA

Combine or extract selected pages from existing local PDF exports into a new local PDF, preserving supplied order. Never modifies cloud originals. Import the resulting path explicitly if desired.

Inputs: parts (required), title.

goodnotes_compare_exportsA
Read-only

Compare two PDF snapshots by page position, extracted text and optionally rendered appearance. Bounded page ranges; returns differences without modifying documents.

Inputs: leftExportId (required), rightExportId (required), visual, maxPages, +1 more.

goodnotes_convert_handwritingB
Destructive

Replace previously recognized handwriting with editable text in a writable document. Optionally correct recognition text first; verifies the resulting text after reload.

Inputs: operationId (required), handwritingId (required), text.

goodnotes_copy_image_objectB

Copy one native image into another document/page through Goodnotes Copy/Paste. Requires sourceSha256 and region from image_crop_info; checks original pixels/crop and saved appearance. Source stays intact.

Inputs: x (required), y (required), target (required), sourceUrl (required), +5 more.

goodnotes_copy_native_selectionB

Copy a guarded rectangular lasso selection to another allowed document with the native clipboard. Verifies source and saved visible appearance; does not certify exact text or hidden properties. Different backgrounds or overlaps can prevent verification.

Inputs: x (required), y (required), operationId (required), selectionId (required), +2 more.

goodnotes_copy_pageA

Copy one native page into another notebook using Goodnotes in-app clipboard. Preserves editable contents; verifies page identities, text and rendered appearance. Both page-order hashes are required. Does not remove the source page.

Inputs: sourceUrl (required), sourcePage (required), operationId (required), destinationPage (required), +5 more.

goodnotes_copy_text_objectB

Copy one verified native text box or sticky into another document/page through Goodnotes Copy/Paste. Verifies editable text, formatting, kind and appearance after reload; leaves source intact.

Inputs: x (required), y (required), target (required), sourceUrl (required), +4 more.

goodnotes_createB

Create a folder, notebook or whiteboard in a library folder. Newly created documents become writable; use a unique operationId.

Inputs: kind (required), title (required), operationId (required), folderPath.

goodnotes_create_objectB

Create a sticky note, rectangle, ellipse, triangle, diamond, rounded rectangle or ink strokes in a writable document. Coordinates are relative to the current canvas. Uses current Goodnotes tool colors; verifies appearance after reload.

Inputs: kind (required), viewId (required), operationId (required), x, +6 more.

goodnotes_create_snapshotA

Create a native Goodnotes duplicate as a recovery snapshot, verify page count and save its source mapping locally. Requires a concrete title; no original contents are changed.

Inputs: title (required), itemPath (required), operationId (required).

goodnotes_create_textB

Create an editable text box at an empty canvas point. Refuses an existing non-empty text field; checks exact persistence after reload.

Inputs: x (required), y (required), text (required), viewId (required), +1 more.

goodnotes_crop_imageB
Destructive

Apply a prepared rectangle in fractions of the current source preview. Goodnotes may replace the source with cropped pixels. Saves original pixels privately and verifies cropped pixels and appearance after reload.

Inputs: cropId (required), region (required), operationId (required).

goodnotes_draw_connectorA

Draw a straight line or arrow as native ink strokes using the current pen style. Endpoints are canvas fractions. This is drawn ink, not a connector that follows moved objects.

Inputs: to (required), from (required), viewId (required), operationId (required), +2 more.

goodnotes_edit_textA
Destructive

Edit text and apply body formatting plus up to 20 nonoverlapping formatRanges in one verified save. Extra ranges address the final text after replacement and override body formatting. List/highlight require the whole field. UTF-16 offsets; end exclusive. Reload verification remains mandatory.

Inputs: targetId (required), operationId (required), end, start, +3 more.

goodnotes_expand_stickyA

Expand a sticky collapsed by this server using its saved visual checkpoint. Requires the same page/zoom/viewport and unchanged collapsed region.

Inputs: operationId (required), collapseOperationId (required).

goodnotes_exportA
Read-only

Export all pages to a private local PDF and index its text. Returns exportId and file path. Never changes the cloud document.

Inputs: url (required), format, searchableHandwriting.

goodnotes_find_objectsB
Read-only

Find visible text locations on a board using local OCR. Returns compact candidates with coordinates/confidence; no screenshot tokens. Off-screen objects require pan/zoom and another scan.

Inputs: viewId (required), query, minConfidence.

goodnotes_finish_board_adoptionB

Freeze selected objects as a managed board after checking native content/style/images and proving the complete copied PDF is unchanged. Returns baseId for selective revisions. Other objects remain unmanaged. Preview shows selected objects only.

Inputs: adoptionId (required).

goodnotes_get_folder_styleB
Read-only

Read folder color, icon and favorite state, optionally listing native color/icon choices.

Inputs: itemPath (required), expectedTitle (required), includeChoices.

goodnotes_image_crop_infoC
Read-only

Read one selected image’s native rectangular crop and full source identity. Cancels the draft and returns a short-lived cropId.

Inputs: selectionId (required).

goodnotes_import_pdfB

Import an explicitly supplied absolute local PDF path as a new notebook; verify title/page count and allow future edits. File content is uploaded to your Goodnotes account.

Inputs: title (required), filePath (required), operationId (required), folderPath.

goodnotes_insert_imageB

Insert an explicitly supplied local PNG/JPEG into an allowed document and verify its appearance after reload. Uploads this image to Goodnotes. Returns a selection for moving/resizing.

Inputs: viewId (required), filePath (required), operationId (required).

goodnotes_inspectB
Read-only

Open an existing Goodnotes Web document URL and prepare a view. No screenshot by default.

Inputs: url (required).

goodnotes_listC
Read-only

List one library folder. Returns itemPath values for opening documents.

Inputs: limit, offset, folderPath.

goodnotes_list_outlinesB
Read-only

List native outline entries with stable entry/page identities and conflict hashes. Paginated; reports incomplete scans. Nested/imported outline structures are not supported for editing.

Inputs: url (required), limit, offset.

goodnotes_list_pagesC
Read-only

Read native page identities, count and order fingerprint. Refuses incomplete/virtualized sidebars. Invalidates canvas handles.

Inputs: url (required).

goodnotes_list_templatesC

Read native paper/cover templates for one page using the current size/color filter. Returns exact IDs and page-order guards.

Inputs: url (required), kind, page.

goodnotes_list_trashA
Read-only

List a bounded part of the native Trash, including document and page IDs. Never empties Trash.

Inputs: limit, offset.

goodnotes_manage_documentB
Destructive

Duplicate a document, or rename/move a writable document. Duplicates become writable. Uses library itemPath values; no permanent deletion or sharing.

Inputs: action (required), itemPath (required), operationId (required), title, +1 more.

goodnotes_manage_folderA
Destructive

Rename or move one explicitly authorized folder. MCP-created folders are authorized automatically. Verifies folder identity, parent and direct children; refuses a move into itself.

Inputs: action (required), itemPath (required), operationId (required), expectedTitle (required), +2 more.

goodnotes_manage_outlineA
Destructive

Rename or delete one flat native outline entry using its exact old title, outline hash and page-order hash. Rename requires title. Saves private metadata and verifies every exposed outline entry and page order after reload. Never deletes a page.

Inputs: url (required), command (required), outlineId (required), operationId (required), +4 more.

goodnotes_manage_pagesB
Destructive

Duplicate, add, reorder, rotate, outline or trash one page in an allowed document. Requires expected count; provide order hash to guard concurrent changes. Deletion first saves a PDF/order checkpoint for restore_page. Verifies native identities after reload.

Inputs: url (required), page (required), command (required), operationId (required), +4 more.

goodnotes_move_native_objectA
Destructive

Move one text box/sticky or image from a whiteboard or notebook page to another allowed document. Saves a source PDF, verifies a native copy, reacquires the unchanged original before deleting it, and rechecks both ends. Separate operations, not atomic; failure can leave two copies.

Inputs: x (required), y (required), target (required), content (required), +4 more.

goodnotes_navigateA
Read-only

Open a page, zoom in/out by steps, or pan the document by scroll pixels. Returns a fresh viewId; all previous targets expire.

Inputs: viewId (required), page, panX, panY, +1 more.

goodnotes_object_colorsA
Read-only

Read the native color palette for the current guarded selection. Colors depend on its type: text, sticky, ink or shape. No custom color/palette writes.

Inputs: selectionId (required).

goodnotes_object_optionsB

Read supported front/back, lock, collapse and author-display commands for the exact current selection.

Inputs: selectionId (required).

goodnotes_ocrA
Read-only

Recognize 1–10 exported pages locally in English/German. Adds approximate OCR text to reads/searches; handwriting, formulas and tables require visual checking.

Inputs: exportId (required), endPage, replace, startPage.

goodnotes_openA
Read-only

Open an itemPath returned by goodnotes_list; return a compact view handle.

Inputs: itemPath (required).

goodnotes_operation_statusA
Read-only

Read a local operation receipt after a timeout or restart. Pending/uncertain means inspect the document; do not repeat a write with a new ID.

Inputs: operationId (required).

goodnotes_plan_batchA

Save a concrete batch plan without changing Goodnotes. Use batch_help for the fields of up to three action types. Steps are flat objects with action plus its fields; all are strictly validated before saving. Typed references to verified earlier results are supported. Run separately; private inputs persist locally.

Inputs: steps (required), title (required), backup.

goodnotes_plan_layoutA

Plan a grid of existing text/sticky objects identified by unique text queries. Saves a batch; no movement until run_batch. Centers must fit in the current viewport. Does not resize objects or guarantee no overlap.

Inputs: url (required), items (required), title, startX, +4 more.

goodnotes_plan_study_boardB

Plan a source-based native learning board locally before writing: summaries, original PDF figure crops, questions and answers. Measures text, wraps lines, rejects overflow/overlap and saves a preview plus an immutable execution plan. Semantic content is supplied by the caller.

Inputs: materials (required), workflowId (required).

goodnotes_plan_study_collectionB

Plan up to 240 source-based cards and 120 original figures into bounded, linked boards. Measures real text/figure geometry, preserves figure-caption groups and source pages, produces previews before writing. The caller supplies explanations and exercises.

Inputs: materials (required), collectionId (required), limits.

goodnotes_plan_study_revisionA

Plan selected card updates, bounded object moves and new sections below an existing managed board. Retains untouched objects, checks source pages and intermediate geometry, saves a preview and freezes the plan. Optional sourceExportId reports text/page changes but still needs diagram review. Preview excludes unmanaged personal notes.

Inputs: changes (required), revisionId (required).

goodnotes_prepare_board_adoptionB

Prepare a verified native COPY of an older whiteboard, preserving all content. Bind a source PDF snapshot for citations. Then select and capture individual native text boxes/images at 100% zoom; this is not exhaustive board enumeration.

Inputs: title (required), itemPath (required), requestId (required), expectedTitle (required), +1 more.

goodnotes_prepare_study_boardB

Begin a resumable lecture-to-board workflow: verify the chosen lecture title, duplicate it, export the copy and return source-page excerpts. Stable requestId prevents duplicate preparation. Originals remain unchanged.

Inputs: title (required), requestId (required), sourceItemPath (required), expectedSourceTitle (required), +1 more.

goodnotes_prepare_study_collectionB

Copy a lecture and export a stable source snapshot for multiple automatically sized learning boards. Reuses the verified study preparation; a stable requestId prevents duplicate copies.

Inputs: title (required), requestId (required), sourceItemPath (required), expectedSourceTitle (required), +1 more.

goodnotes_prepare_study_revisionA

Prepare a selective revision of a completed managed learning board or prior revision. Defaults to an independently verified native COPY including personal additions. copy=false keeps a verified native backup and targets the authorized original. A stable request ID prevents duplicate copies. Returns managed block IDs and current source references.

Inputs: title (required), baseId (required), requestId (required), copy, +1 more.

goodnotes_prepare_unlockA

Select a locked sticky, text box, image or shape at a preview point (use the border for unfilled shapes). Verify its native unlock control and prepare a content/appearance guard. Does not unlock it.

Inputs: x (required), y (required), viewId (required), kind, +1 more.

goodnotes_previewB
Read-only

Return one image of the current document viewport, only when visual positioning is needed.

Inputs: viewId (required).

goodnotes_read_documentB
Read-only

Read cached PDF pages, with bounded automatic local OCR for pages without text. Continue with nextPage/nextOffset; OCR/formulas need visual checking. Refresh explicitly for current content.

Inputs: url, endPage, refresh, exportId, +7 more.

goodnotes_read_handwritingB

Read real ink strokes in a visible rectangular region using Goodnotes native conversion preview, then cancel. Does not replace the handwriting. Background images/PDF text are not native ink.

Inputs: region (required), viewId (required), language.

goodnotes_read_textA

Read typed text at a point relative to the preview canvas. Set expectedKind to sticky or shape to enter its native text editor; an unfilled shape requires a point on its border. Returns a targetId for guarded replacement or rich-text edits. No handwriting OCR.

Inputs: x (required), y (required), viewId (required), expectedKind.

goodnotes_recall_objectB

Return to a saved board or notebook-page object and reselect it only if its appearance still matches. Returns a new guarded selection handle.

Inputs: objectId (required).

goodnotes_refresh_indexB

Build/resume a private recursive library index in bounded steps. Reuse jobId until complete. Refreshes snapshots using visible metadata hints and max age; force=true rereads all. Does not change cloud notes.

Inputs: ocr, force, jobId, maxSteps, +4 more.

goodnotes_remember_objectA

Save a labeled visual bookmark for a guarded selected object, including shapes/images. Persists measured board or notebook-page coordinates and an appearance fingerprint; changes invalidate the bookmark.

Inputs: label (required), selectionId (required).

goodnotes_render_pageB
Read-only

Render one exported PDF page for reading handwriting, scans, diagrams and layout. No desktop capture.

Inputs: page (required), exportId (required), maxDimension.

goodnotes_restore_documentB

Recover one document using its verified trash operation receipt. Checks original identity, folder and PDF content baseline.

Inputs: operationId (required), trashOperationId (required).

goodnotes_restore_pageA

Restore one page deleted by this MCP using its saved pre-delete PDF checkpoint. Requires unchanged remaining pages and authorization, recovers the exact native page and verifies original order/content. Never restores arbitrary historical pages.

Inputs: operationId (required), deleteOperationId (required).

goodnotes_restore_snapshotB

Restore a saved native snapshot into a NEW independently editable document. Keeps the original and snapshot intact. Checks snapshot title/page identities; does not overwrite originals.

Inputs: title (required), snapshotId (required), operationId (required).

goodnotes_retry_rejected_stepA

Prepare a fresh attempt only when the old receipt proves NO mutation was sent. Preserves the old receipt and attempt history. Rejects uncertain, pending or missing receipts; run_batch executes the prepared retry.

Inputs: jobId (required), stepIndex (required).

goodnotes_review_study_boardB

Independently verify an interrupted study block from its saved native checkpoint. Only a proven matching result advances the workflow; original uncertain receipts stay unchanged and no mutation is replayed. Audit-only failures can be safely repeated.

Inputs: workflowId (required).

goodnotes_review_study_collectionB

Review one interrupted collection creation or child step using existing independent evidence. Never repeats uncertain mutations. Unproven creation needs individual inspection.

Inputs: collectionId (required).

goodnotes_review_study_revisionC

Independently inspect an interrupted revision from complete matching evidence, including unchanged visible surroundings. Preserves uncertain receipts and never replays mutations. Missing checkpoints require individual inspection.

Inputs: revisionId (required).

goodnotes_run_batchA
Destructive

Execute/resume a saved batch in bounded steps, with PDF snapshots before destructive edits by default. Verified operations never repeat; ambiguous writes stop for review.

Inputs: jobId (required), maxSteps.

goodnotes_run_study_boardA

Execute bounded steps of a prepared native learning board. Each block verifies text/style/layout/appearance after reload; verified receipts resume without duplicate writes. Uncertain writes stop for review. Returns progress and timings.

Inputs: workflowId (required), maxSteps.

goodnotes_run_study_collectionC

Run one bounded creation or independently verified native block. Creates overview and previous/next native text links. Durable child plans and operation receipts prevent replay after crashes. Stops on uncertain writes.

Inputs: collectionId (required).

goodnotes_run_study_revisionA

Run one saved revision step. Rechecks exact original content/style/appearance, rejects occupied visible destinations, verifies native persistence and unchanged visible surroundings. Never automatically repeats uncertain writes. Exports a final preview.

Inputs: revisionId (required).

goodnotes_scan_boardB

Scan a bounded grid of a whiteboard using measured native viewport coordinates and local OCR. Resumable by scanId; returns compact progress. Does not claim complete coverage of an infinite board.

Inputs: url, rows, scanId, columns, +4 more.

goodnotes_search_board_scanB
Read-only

Search saved text locations across scanned whiteboard viewports without opening the browser.

Inputs: scanId (required), limit, query, offset.

goodnotes_search_documentB
Read-only

Search exported pages, using bounded local OCR where text is missing. Reports incomplete coverage and OCR provenance; absence is not proof about handwriting.

Inputs: query (required), url, limit, refresh, +4 more.

goodnotes_search_libraryB
Read-only

Search persistent local document titles and indexed text across folders. Reports snapshot timestamps and gaps. Empty query lists known items. Does not open the browser.

Inputs: kind, limit, query, offset, +3 more.

goodnotes_select_board_matchA

Return to a saved board location, verify its visible and editable text, and select it. Stops if the location or contents changed.

Inputs: scanId (required), matchId (required), expectedText.

goodnotes_select_matchA

Select a previously found text object after checking its pixels and reading its actual editable text. Rejects non-editable PDF/handwriting matches; returns text and selection handles.

Inputs: matchId (required), expectedText.

goodnotes_select_objectB

Select one visible board object by point, or a group using a rectangular region. Returns a guarded selectionId; preview to check what was selected.

Inputs: viewId (required), x, y, region.

goodnotes_set_board_backgroundB

Change whiteboard pattern/color with current-state guards; verify saved native settings after reload.

Inputs: url (required), operationId (required), expectedColor (required), expectedPattern (required), +2 more.

goodnotes_set_document_favoriteB

Set one authorized notebook/board favorite flag. Requires its exact title and previous favorite flag from the library; checks identity and state after reload.

Inputs: favorite (required), itemPath (required), operationId (required), expectedTitle (required), +1 more.

goodnotes_set_folder_styleA
Destructive

Change one authorized folder color, icon or favorite flag. Requires its current value and checks all three settings after reload.

Inputs: value (required), itemPath (required), property (required), operationId (required), +2 more.

goodnotes_set_shape_styleA
Destructive

Set a prepared native shape fill opacity (0 to 100 in steps of 10; 0 disables fill) and/or stroke thickness (0.10 to 2.00 mm). Preserves existing color, pattern and geometry; verifies values and appearance after reload.

Inputs: style (required), styleId (required), operationId (required).

goodnotes_set_templateB
Destructive

Replace a page background or cover with a listed native template. Saves a PDF backup, verifies picker selection and page identities, and compares exported appearance/text across reload.

Inputs: url (required), page (required), templateId (required), operationId (required), +3 more.

goodnotes_set_text_box_styleA
Destructive

Set prepared text-box background/border colors (hex or none), border/corner/padding points and shadow. Preserves exact text and character formatting; verifies native settings and appearance after reload.

Inputs: style (required), styleId (required), operationId (required).

goodnotes_shape_style_infoB
Read-only

Read one guarded native shape fill opacity and stroke thickness. Excludes ink and groups; returns a short-lived styleId.

Inputs: selectionId (required).

goodnotes_skip_batch_stepB

Skip an unfinished step after inspecting its uncertain outcome. Does not undo it. Remaining work can then resume.

Inputs: jobId (required), reason (required), stepIndex (required).

goodnotes_statusB
Read-only

Check the isolated Goodnotes login and list explicitly writable documents.

Inputs: no named parameters.

goodnotes_study_board_statusA
Read-only

Read saved study progress, output board, final preview, per-stage timings and errors without opening a browser. Compact by default; includeEvidence returns full saved block receipts and source-export details.

Inputs: workflowId (required), includeEvidence.

goodnotes_study_bundleB

Save source text, assistant-supplied summary/tasks and Anki-compatible TSV cards locally with source references. The assistant must supply the learning content. Does not call another AI or import into task/flashcard apps.

Inputs: exportId (required), cards, tasks, summary.

goodnotes_study_collection_statusA
Read-only

Read collection progress, source pages, previews, overview URL and child workflows. Completed child IDs support selective study revisions.

Inputs: collectionId (required).

goodnotes_study_revision_statusA
Read-only

Read saved revision progress, backup, selected changes, source impact, previews and stable managed block IDs. includeContent adds saved text for planning; saved content is not a fresh read of manual edits.

Inputs: revisionId (required), includeContent.

goodnotes_sync_statusB
Read-only

Report visible Web connectivity/sync messages. Cannot confirm delivery to another device or force iPad synchronization.

Inputs: url.

goodnotes_text_box_style_infoA
Read-only

Probe selected text-box styling. Returns supported:false without writing if the native whiteboard menu lacks it; otherwise returns settings and a short-lived guarded styleId.

Inputs: selectionId (required).

goodnotes_transform_objectA
Destructive

Move, resize, duplicate or delete the guarded selection in a writable document. dx/dy are fractions of canvas size; scale factors are relative. Keeps local before/after evidence and checks after reload.

Inputs: action (required), operationId (required), selectionId (required), dx, +3 more.

goodnotes_trash_documentA
Destructive

Move one explicitly writable document to Trash after saving a PDF backup. Binds its current title and verifies its exact ID in Trash.

Inputs: itemPath (required), operationId (required), expectedTitle (required).

goodnotes_unlock_objectC

Unlock a prepared native sticky, text box, image or shape position/size lock. Checks unchanged content/view, appearance and native unlocked state after reload.

Inputs: unlockId (required), operationId (required).

goodnotes_unlock_stickyB

Unlock one previously prepared native sticky. Refuses changed content/view and verifies unlocked state and unchanged appearance after reload.

Inputs: unlockId (required), operationId (required).

goodnotes_verify_copied_objectA

Verify an existing native text/sticky/image or lasso-selection paste from its saved local checkpoint. Reacquires its page across zoom changes, performs type-specific content checks or compares captured source appearance, and checks saved appearance; never pastes again or rewrites the old receipt.

Inputs: operationId (required).

goodnotes_verify_moved_objectA

Audit a saved native move after interruption: requires verified copy/deletion receipts, checks the deleted source region and native destination copy, and preserves old receipt status. Never repeats paste or delete.

Inputs: operationId (required).

goodnotes_verify_restoreB
Read-only

After an interrupted restore, verify the already-created native copy against its saved snapshot baseline without repeating any write. Preserves the old uncertain receipt.

Inputs: snapshotId (required), restoreOperationId (required).

goodnotes_verify_restored_documentA
Read-only

Independently check whether a trashed document has returned with its original identity and content. Never sends Recover again or rewrites old receipts.

Inputs: trashOperationId (required).

goodnotes_verify_restored_pageA
Read-only

Independently verify a page restoration against its saved deletion checkpoint: exact native identities/order and full PDF content baseline. Does not repeat recovery or change the original receipt.

Inputs: deleteOperationId (required).

goodnotes_write_textA
Destructive

Replace the text of a previously read target, only in a locally allowed document. An empty string clears only an explicitly read native shape label, keeping its shape. Verifies exact text and native kind after reload. Use a unique operationId; never retry an uncertain write with a new ID.

Inputs: text (required), targetId (required), operationId (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 107 tools

    Disambiguation2/5

    The tool set is organized into several near-identical workflow families (prepare/plan/run/status/review for study_board, study_collection, study_revision, board_adoption, and batch) whose boundaries are hard to distinguish without deep reading. Many read/select/copy/restore tools also overlap (select_object vs select_match vs select_board_match; restore_page vs verify_restored_page; copy_page vs copy_text_object vs copy_native_selection), inviting misselection.

    Naming Consistency4/5

    Almost all names use a snake_case goodnotes_ prefix with a verb_noun structure, and the workflow suffixes (prepare/plan/run/status/review) are applied consistently. Minor deviations like board_settings, operation_status, object_colors, image_crop_info and batch_help use noun phrases rather than verbs, but the overall convention is predictable.

    Tool Count1/5

    107 tools is far beyond a reasonable agent-facing surface for a single server, even for a feature-rich app like Goodnotes. The workflow families multiply into dozens of near-duplicate entry points, and an agent must carry an enormous schema just to choose a tool.

    Completeness4/5

    Coverage is broad: library browsing, document/page management, templates, trash/restore, boards, text/object editing, OCR, handwriting, exports, snapshots, outlines, folders, and batch/study workflows. Gaps are minor — no sharing/collaboration, no permanent deletion, no custom palette writes, and nested outline editing is explicitly unsupported.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Connects AI assistants to local workspaces for searching and reading notes, documents, objectives, and media assets, even offline. When the workspace app is open, it enables secure real-time creation and editing of notes, documents, objectives, and canvas highlighting.
      21
      24 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables external AI agents to operate on the live PDF session open in the browser, reading documents, locating text, applying edits like text replacement and redaction, rendering pages, and undoing batches. Changes appear in the open tab within seconds through a shared tool surface.
      18 npm
      MIT