Goodnotes Web MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Goodnotes Web MCP Turn my lecture PDF into a resumable study board with summaries and exercises."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Copy the source. Work from a separate lecture copy and read its exported pages.
Plan the material. Your assistant supplies the summary, questions and page references. The MCP measures the layout and prepares a preview.
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 loginSign 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 doctorUsing 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
.goodnotesdecoding 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
Start here | Go deeper |
npm run check
npm test
npm run test:integration
npm run package:releaseBrowser 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 toolsgoodnotes_arrange_objectCDestructive
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_helpBRead-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_statusARead-only
Read batch progress, receipts, backup paths and errors after interruption. Inputs omitted by default.
Inputs: jobId (required), includeInputs.
goodnotes_board_adoption_statusCRead-only
Read adoption copy, selected managed objects and progress without opening a browser.
Inputs: adoptionId (required).
goodnotes_board_settingsBRead-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_objectADestructive
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_exportsARead-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_handwritingBDestructive
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_imageBDestructive
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_textADestructive
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_exportARead-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_objectsBRead-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_styleBRead-only
Read folder color, icon and favorite state, optionally listing native color/icon choices.
Inputs: itemPath (required), expectedTitle (required), includeChoices.
goodnotes_image_crop_infoCRead-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_inspectBRead-only
Open an existing Goodnotes Web document URL and prepare a view. No screenshot by default.
Inputs: url (required).
goodnotes_listCRead-only
List one library folder. Returns itemPath values for opening documents.
Inputs: limit, offset, folderPath.
goodnotes_list_outlinesBRead-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_pagesCRead-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_trashARead-only
List a bounded part of the native Trash, including document and page IDs. Never empties Trash.
Inputs: limit, offset.
goodnotes_manage_documentBDestructive
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_folderADestructive
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_outlineADestructive
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_pagesBDestructive
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_objectADestructive
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_object_colorsARead-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_ocrARead-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_openARead-only
Open an itemPath returned by goodnotes_list; return a compact view handle.
Inputs: itemPath (required).
goodnotes_operation_statusARead-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_previewBRead-only
Return one image of the current document viewport, only when visual positioning is needed.
Inputs: viewId (required).
goodnotes_read_documentBRead-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_pageBRead-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_batchADestructive
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_scanBRead-only
Search saved text locations across scanned whiteboard viewports without opening the browser.
Inputs: scanId (required), limit, query, offset.
goodnotes_search_documentBRead-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_libraryBRead-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_styleADestructive
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_styleADestructive
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_templateBDestructive
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_styleADestructive
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_infoBRead-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_statusBRead-only
Check the isolated Goodnotes login and list explicitly writable documents.
Inputs: no named parameters.
goodnotes_study_board_statusARead-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_statusARead-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_statusARead-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_statusBRead-only
Report visible Web connectivity/sync messages. Cannot confirm delivery to another device or force iPad synchronization.
Inputs: url.
goodnotes_text_box_style_infoARead-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_objectADestructive
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_documentADestructive
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_restoreBRead-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_documentARead-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_pageARead-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_textADestructive
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
Scored across 107 tools
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.
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.
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.
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
Related MCP Connectors
Online office suite for AI agents: edit docs, sheets, slides and PDFs in browser or via MCP.
Cloud browser, web extraction, screenshots, and remote CDP tools for AI agents.
A collaborative whiteboard your AI assistant can read, fill and show live, with changes you review.
Documents to Markdown and PDF, OCR, transcription, TTS, screenshots, domain checks, video frames.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to collaboratively read, write, draw, and diagram on a shared real-time whiteboard canvas with live human edits.1MIT
- AlicenseAqualityCmaintenanceEnables AI coding agents to open and exercise web applications in an isolated Chromium browser, capture screenshots and runtime/network diagnostics, and run deterministic page checks with linked evidence.121MIT
- AlicenseAqualityCmaintenanceConnects 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.2124 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables 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 npmMIT