noteful-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NOTEFUL_OPEN | No | Set to 0 to only write the output file without opening it in Noteful. | |
| NOTEFUL_ROOTS | No | Folders scanned for .noteful files, separated by ':' (';' on Windows). Defaults to iCloud Drive's Noteful, Downloads and Noteful MCP; or ~/Noteful without iCloud Drive. | |
| GEMINI_API_KEY | No | Optional Google AI Studio API key for design_mockup. | |
| NOTEFUL_LIBRARY | No | Noteful for Mac's library (its container Documents folder). | |
| NOTEFUL_OUTPUT_DIR | No | Where written notebooks go. Defaults to iCloud Drive/Noteful MCP. | |
| NOTEFUL_IMAGE_MODEL | No | Image model used for design mockups. | gemini-3.1-flash-lite-image |
| NOTEFUL_VERTEX_PROJECT | No | Optional Google Cloud project used through Vertex AI with your Google credentials, instead of GEMINI_API_KEY. | |
| NOTEFUL_VERTEX_LOCATION | No | Vertex AI location used with NOTEFUL_VERTEX_PROJECT. | global |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| live_libraryA | Folder / notebook tree of the live Noteful library (iCloud sync, same as the iPad). |
| search_textA | Search the live library's indexed text: pdf text, typed text boxes, outlines, bookmarks. |
| list_notebooksB | List .noteful notebooks (with folder paths from archive.json when present). |
| library_treeC | Folder / notebook tree from a Noteful export's archive.json. |
| notebook_infoC | Title, dates, folder and per-page details (background, ink stroke count, images). |
| render_pageA | Render a page (1-based) as PNG so you can read the handwriting and drawings. |
| render_regionC | Zoomed crop of a page. Coordinates are page units (A4 page = 1091 x 1543). |
| page_inkC | Ink statistics of a page: stroke count, colours, pen widths, written area. |
| page_marksB | Highlighter and tape marks of a page (1-based). |
| page_layoutA | Where the handwriting is: the page's ink grouped into numbered items (words and phrases on one line) with bounding boxes in page units, in reading order. |
| export_pdfB | Render the whole notebook (backgrounds + ink + images) into a PDF. |
| extract_filesC | Save embedded PDFs and images (backgrounds, pasted pictures) to a folder. |
| create_notebookA | Create a new notebook whose pages are written in natural handwriting ink. look: 'study' (default: composed study notes, docs/STYLE.md) or 'classic' (plain notebook). theme: light (ivory page) for summaries | dark (black page, neon) for question/tree pages. Study markdown, one block per line: '# THE CARDIAC CYCLE' thick title with shadow, the ** word in colour (add ':heart:' / sun, star, atom, drop, bolt, cloud, leaf for a doodle); '# SOLAR & TERRESTRIAL // RADIATION' two-line title on a marker band; 'subtitle' line; '## Section' or '## SMOOTH muscle' coloured caps on a rule (next accent each time); '### Label'; body is mixed case: 'term' colour, '==phrase==' highlighter ('=={pink}..=='), '[[tag]]' pill, '((detail))' grey; items '- ', '* ' star, '-> ' arrow, '1. ' circled; '> [sky] TITLE: text ((detail))' card; '>> A: text || B: text' cards side by side; '!columns 55' ... '!col' ... '!end' two columns (put a !draw on one side); '!zone [sky]' ... '!end' pale full-width band; '!sticky [yellow] TITLE: text'; '!stat 30 reflected (albedo)'; '!map TOPIC | question?' then '- BRANCH.' and indented ' - leaf' lines (tree, best on dark); '!draw [width]' '!end'; '---'; '\pagebreak'. Colours: coral, amber, sky, purple, teal, pink; keep 2-3 per page. Fill the page (~90 %): a diagram + text in columns, cards, a zone with stats and a sticky. Classic markdown: '# ' '## ' headings, '- ' bullets, '[ ] ' checkboxes, '> ' box, '{color:red} ' line colour, '==text==', '!tape mint'. paper: dot|grid|ruled|blank. font: patrick (default), caveat, readability, felix, allure, elfin, nixish. hand: neat | natural | messy. pen: fineliner (study default) | ballpoint. Science: Greek letters, T^4, m^{-2}, CO_2, → ⇄ ≈ ± ° work. Read an example first: example_pages. Drawings (organs, cells, models, circuits, graphs): write a plain SVG with a viewBox 400-650 wide. It is scaled to the width given ('!draw 480' = 480 page units, the page is 1091 wide; inside '!columns' it is capped by the column), so labels need font-size 18-22 in that viewBox to stay readable. Outlines: stroke="#1f2233" stroke-width="2" become hand-drawn ink. Fills become pastel highlighter colouring, even dark ones, so separate stacked parts with outlines, not with darker fills; later shapes cover earlier ones (draw the organ, then its parts). Labels: become handwriting, placed outside the drawing and joined to the part with a . Use curves (C/Q/A) for organic shapes; keep it schematic like a textbook sketch. See the drawing examples. |
| add_pagesB | Copy a notebook and add handwritten pages (at the end, or after page N, 1-based). look: 'study' (default: composed study notes, docs/STYLE.md) or 'classic' (plain notebook). theme: light (ivory page) for summaries | dark (black page, neon) for question/tree pages. Study markdown, one block per line: '# THE CARDIAC CYCLE' thick title with shadow, the ** word in colour (add ':heart:' / sun, star, atom, drop, bolt, cloud, leaf for a doodle); '# SOLAR & TERRESTRIAL // RADIATION' two-line title on a marker band; 'subtitle' line; '## Section' or '## SMOOTH muscle' coloured caps on a rule (next accent each time); '### Label'; body is mixed case: 'term' colour, '==phrase==' highlighter ('=={pink}..=='), '[[tag]]' pill, '((detail))' grey; items '- ', '* ' star, '-> ' arrow, '1. ' circled; '> [sky] TITLE: text ((detail))' card; '>> A: text || B: text' cards side by side; '!columns 55' ... '!col' ... '!end' two columns (put a !draw on one side); '!zone [sky]' ... '!end' pale full-width band; '!sticky [yellow] TITLE: text'; '!stat 30 reflected (albedo)'; '!map TOPIC | question?' then '- BRANCH.' and indented ' - leaf' lines (tree, best on dark); '!draw [width]' '!end'; '---'; '\pagebreak'. Colours: coral, amber, sky, purple, teal, pink; keep 2-3 per page. Fill the page (~90 %): a diagram + text in columns, cards, a zone with stats and a sticky. Classic markdown: '# ' '## ' headings, '- ' bullets, '[ ] ' checkboxes, '> ' box, '{color:red} ' line colour, '==text==', '!tape mint'. paper: dot|grid|ruled|blank. font: patrick (default), caveat, readability, felix, allure, elfin, nixish. hand: neat | natural | messy. pen: fineliner (study default) | ballpoint. Science: Greek letters, T^4, m^{-2}, CO_2, → ⇄ ≈ ± ° work. Read an example first: example_pages. Drawings (organs, cells, models, circuits, graphs): write a plain SVG with a viewBox 400-650 wide. It is scaled to the width given ('!draw 480' = 480 page units, the page is 1091 wide; inside '!columns' it is capped by the column), so labels need font-size 18-22 in that viewBox to stay readable. Outlines: stroke="#1f2233" stroke-width="2" become hand-drawn ink. Fills become pastel highlighter colouring, even dark ones, so separate stacked parts with outlines, not with darker fills; later shapes cover earlier ones (draw the organ, then its parts). Labels: become handwriting, placed outside the drawing and joined to the part with a . Use curves (C/Q/A) for organic shapes; keep it schematic like a textbook sketch. See the drawing examples. |
| clean_copyA | Clean copy: insert a neat handwritten rewrite right after the given page. First call render_page and read the messy page yourself; then pass the cleaned, well structured content as markdown. look: 'study' (default: composed study notes, docs/STYLE.md) or 'classic' (plain notebook). theme: light (ivory page) for summaries | dark (black page, neon) for question/tree pages. Study markdown, one block per line: '# THE CARDIAC CYCLE' thick title with shadow, the ** word in colour (add ':heart:' / sun, star, atom, drop, bolt, cloud, leaf for a doodle); '# SOLAR & TERRESTRIAL // RADIATION' two-line title on a marker band; 'subtitle' line; '## Section' or '## SMOOTH muscle' coloured caps on a rule (next accent each time); '### Label'; body is mixed case: 'term' colour, '==phrase==' highlighter ('=={pink}..=='), '[[tag]]' pill, '((detail))' grey; items '- ', '* ' star, '-> ' arrow, '1. ' circled; '> [sky] TITLE: text ((detail))' card; '>> A: text || B: text' cards side by side; '!columns 55' ... '!col' ... '!end' two columns (put a !draw on one side); '!zone [sky]' ... '!end' pale full-width band; '!sticky [yellow] TITLE: text'; '!stat 30 reflected (albedo)'; '!map TOPIC | question?' then '- BRANCH.' and indented ' - leaf' lines (tree, best on dark); '!draw [width]' '!end'; '---'; '\pagebreak'. Colours: coral, amber, sky, purple, teal, pink; keep 2-3 per page. Fill the page (~90 %): a diagram + text in columns, cards, a zone with stats and a sticky. Classic markdown: '# ' '## ' headings, '- ' bullets, '[ ] ' checkboxes, '> ' box, '{color:red} ' line colour, '==text==', '!tape mint'. paper: dot|grid|ruled|blank. font: patrick (default), caveat, readability, felix, allure, elfin, nixish. hand: neat | natural | messy. pen: fineliner (study default) | ballpoint. Science: Greek letters, T^4, m^{-2}, CO_2, → ⇄ ≈ ± ° work. Read an example first: example_pages. Drawings (organs, cells, models, circuits, graphs): write a plain SVG with a viewBox 400-650 wide. It is scaled to the width given ('!draw 480' = 480 page units, the page is 1091 wide; inside '!columns' it is capped by the column), so labels need font-size 18-22 in that viewBox to stay readable. Outlines: stroke="#1f2233" stroke-width="2" become hand-drawn ink. Fills become pastel highlighter colouring, even dark ones, so separate stacked parts with outlines, not with darker fills; later shapes cover earlier ones (draw the organ, then its parts). Labels: become handwriting, placed outside the drawing and joined to the part with a . Use curves (C/Q/A) for organic shapes; keep it schematic like a textbook sketch. See the drawing examples. |
| write_on_pageA | Copy a notebook and draw on an existing page (1-based) in handwriting ink. |
| design_mockupA | Draw a picture of a study page with an image model on the user's own Google account (GEMINI_API_KEY or NOTEFUL_VERTEX_PROJECT; see imagegen.py), to copy into ink with design_page. content: what the page holds and roughly where (title, sections, a drawing, cards, a zone...), quoting the exact title and labels. look: 'calm' (default: ordinary notes, one pen, underlined headings, a little highlighter) or 'rich' (only for a visual summary page: cards, a drawing, a sticky note). Most pages, course notes and worked problems included, are calm; a notebook full of rich pages looks overdone. theme: light | dark. reference: a gallery example name to imitate (default: clean-copy for rich light, answers-tree for dark, none for calm) or the path of the previous page's mockup, which keeps a multi-page note consistent. Returns the mockup's path, the mockup and a grid. |
| mockup_gridB | A mockup (or any page picture) with a labelled pixel grid, to read the coordinates a design_page spec needs. region [x, y, w, h] zooms in with a finer grid. |
| design_pageA | Write pages that copy page designs (mockups) in real ink. pages: one spec per page. Either title (a new notebook) or path (add to that notebook after after_page, 1-based; live notebooks too). Copy a page design into real ink. Workflow: design_mockup (or any picture of a page the user gives) -> mockup_grid to read coordinates -> design_page with one spec per page -> render_page to compare with the mockup and fix what is off. In the spec list every block of the mockup in its own pixels: text lines with the CORRECT words (image models garble body text; the layout, sizes and colours are what you copy), cards, bands, highlighter, sticky notes, arrows, circled numbers; trace the drawings straight from the mockup (erase their labels and write the labels as text). Match each text's 'h' (cap height) and 'w' (line length) to the mockup. Spec format: Copy a page design (an image model's mockup) into real Noteful ink. The agent looks at the mockup and lists what is on it, in the mockup's own pixels; this module draws each item at the same place and size: text as handwriting (the agent supplies the correct words, so the mockup's typos never reach the page), cards, colour bands, highlighter, sticky notes, arrows and circled numbers as pen and highlighter strokes, and drawings traced straight out of the mockup (trace.py) so they keep its quality. Spec (JSON): {"size": [896, 1200], "theme": "light", "mockup": "", "items": [ {...}, ... ]} items are drawn in order; colours are "#rrggbb" or "auto" (sampled from the mockup at that spot) text {"t": "text", "x", "y" (baseline), "h" (cap height), "text", "color", "pen" (line weight, default 1.15), "w" (fit width), "align": left|center|right, "lh" (line spacing, for several lines split by \n), "wmax" (shrink only if wider)} inline: {#e9573f:PHOT} colours a run, ==ATP== highlights it ({hl:#ffd27a} first to pick the colour), CO_2 and C_6H_{12} are subscripts, T^4 superscripts rect {"t": "rect", "x", "y", "w", "h", "fill", "stroke", "r" (corner radius), "pen", "dots" (dotted inner border colour), "angle" (degrees)} band {"t": "band", "y", "h", "fill"} full-width colour zone hl {"t": "hl", "x", "y", "w", "h", "color"} highlighter swipe sticky {"t": "sticky", "x", "y", "w", "h", "fill", "angle", "tape": "#c9b9a0", "text": [text items, placed relative to the page as usual]} line {"t": "line", "pts": [[x, y], ...], "color", "pen", "head": none|open|hollow|block, "size" (head length), "width" (block arrow)} circle {"t": "circle", "cx", "cy", "r", "color", "pen", "fill", "text", "h"}; "rx"/"ry" make it an ellipse (around a chosen answer) any item may carry "g": the group its strokes belong to (design_groups) lines {"t": "lines", "x", "y" (first baseline), "h", "lh" (baseline step), "lines": [...], plus any text keys} a paragraph or list, one text item per line trace {"t": "trace", "box": [x, y, w, h], "erase": [[x, y, w, h], ...] (labels to drop, in mockup pixels), "colors": 8} |
| rename_notebookD | Copy a notebook under a new title. |
| output_folderC | Where written notebooks go (import them in Noteful via Files). |
| example_pagesA | Example pages and drawings to imitate, with their source and how they look. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| summary_page | Turn notes or a topic into a study summary page |
| quiz | Write a multiple-choice quiz from notes |
| grade_quiz | Grade a quiz page I answered on the iPad |
| clean_copy_page | Rewrite a messy page neatly, step by step |
| designed_pages | Design pages with an image model, then copy them in ink |
| tree_page | Classify a topic as a tree diagram on black paper |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| examples | Index of example pages and drawings |
| style-guide | How to write a good study page |
TDQS
Scored across 22 tools
Most tools target distinct operations, but there are overlapping clusters: live_library, list_notebooks, and library_tree all enumerate notebooks, while create_notebook, add_pages, clean_copy, write_on_page, and design_page all produce handwritten pages. The detailed descriptions help, but an agent can still misselect among these similar-purpose tools.
All tool names use snake_case, but the naming pattern mixes verb_noun (render_page, create_notebook), noun_noun (page_layout, notebook_info), and adjective_noun (clean_copy). It is readable but not a single predictable convention.
22 tools is on the heavy side for a notebook server; while the domain is broad, several auxiliary tools (output_folder, example_pages, mockup_grid) and overlapping write tools make the surface feel larger than necessary. It is borderline but still within a plausible range for the feature set.
The surface covers search, read/render, create/write, design, export, and extraction, but lacks delete/remove operations and true rename/move; rename_notebook only copies. These are notable lifecycle gaps, though the non-destructive design may be intentional.