Skip to content
Agentmart
Submit a tool

PowerScroll

Read and edit a live local-first PowerScroll visual notebook.

Connector by CynaCons · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/cynacons-powerscroll

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Read and edit a live local-first PowerScroll visual notebook.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
12 read · 36 write · 8 delete · 2 not yet classified
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Node.js package

Tools by what they do 58

Read from the source code; the running server may list different tools.

Read 12 · Look things up without changing anything.

  • board_list
  • board_read
  • card_check
  • card_get
  • check_update
  • get_background
  • get_block
  • list_pages
  • list_scrolls
  • read_diagram
  • read_image
  • read_page

Write 36 · Create, change, send or run things.

  • append_block
  • board_create
  • board_updates
  • bridge_status
  • card_archive
  • card_checklist_add
  • card_checklist_move
  • card_checklist_set
  • card_checklist_update
  • card_claim
  • card_create
  • card_move
Show 24 more tools
  • card_note
  • card_restore
  • card_update
  • create_diagram
  • create_diagram_drawio
  • create_diagram_mermaid
  • create_diagram_plantuml
  • create_diagram_svg
  • create_page
  • create_scroll
  • create_section
  • insert_block
  • insert_image
  • move_block
  • move_page
  • move_scroll
  • rename_notebook
  • rename_page
  • rename_scroll
  • resize_scroll
  • run_update
  • save_notebook
  • set_background
  • update_block

Delete 8 · Delete, drop, revoke or wipe things.

  • agent_leave
  • card_checklist_remove
  • card_release
  • delete_block
  • delete_diagram
  • delete_page
  • delete_scroll
  • delete_section

Not yet classified 2 · We could not tell from the name and description.

  • agent_status
  • fit_diagram

Files it touches

  • Any path the agent passes to its tools

Tools (58)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • agent_leave

    Sign off: remove me from the board's active agents. Call when you finish or stop working. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • agent_status

    Set the one-line status shown in the board agents strip. Naming a card marks you active on it. Does not change the board. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • append_block

    Append a markdown block to the bottom of a page. This is the main way to write content. The markdown is rendered live in the app: use "- " for bullets, "1. " for numbered lists, "- [ ] " for checkboxes (which the user can then click to tick), "#"/"##" for headings, **bold**, `code`, tables, and $math$. Prefer one block per logical chunk (one list, one paragraph) rather than one block per line.

  • board_create

    Create a new board page. Does NOT switch the owner's active page. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • board_list

    List every board page in the notebook: id, title, section, and card counts per column. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • board_read

    Read cards on a board: number, id, title, column, order, assignee, labels, checklist done/total, question, last note, updatedAt. Filter with column or assignee. Archived cards are omitted unless include_archived is true. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • board_updates

    Events with seq > since (omit since to receive only the cursor). mine:true limits to cards assigned to you. If none and wait_seconds > 0, this server re-asks the app every 1 s until something arrives or the wait (max 300 s) ends. Returns {events, cursor}. This is how you hear the owner's replies and moves. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wa…

  • bridge_status

    Who else is working in this notebook. Several agents may be connected at once but only one may operate at a time, so call this when a tool comes back LOCKED, or before starting a long piece of work. Reports the connected notebook, every connected agent, which one holds the notebook, how long until it frees up, and whether that is you. This tool is never blocked. Note that a free result can go stale immediately -- another agent may take the lock before your next call -- so treat the LOCKED error as the real signal and this as a way to understand it.

  • card_archive

    Archive a card (hide it from columns; it stays in the notebook and can be restored). Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_check

    Tick or untick a checklist item. `item` is the item id or a 1-based index. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_checklist_add

    Add a checklist item to a card: at the end, `under` an item (as its last sub-item), or at a 1-based `position`. Items nest up to depth 3, like PowerPlan tasks. Returns the card with `item` (the new item) and `items` (the whole list: id, index, text, done, depth). Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to …

  • card_checklist_move

    Move a checklist item (alone) to a 1-based position. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_checklist_remove

    Remove a checklist item. Its sub-items stay, one level up. `item` is the item id or a 1-based index. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_checklist_set

    Replace the whole checklist, from `items` or from PowerPlan-style `text` ("- [ ] task" / "- [x] done", two spaces per level). Items whose text is unchanged keep their id. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_checklist_update

    Edit a checklist item: new `text`, `done`, and/or `depth` (0-3; its sub-items move with it). `item` is the item id or a 1-based index. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

Show 43 more tools
  • card_claim

    Assign the card to me. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_create

    Create a card on a board. Returns the card including its number. Default column is todo. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_get

    Read one card in full, including notes, checklist and history events. `card` accepts the id or the number (15 or "#15"). Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_move

    Move a card to todo, doing, waiting or done. `question` is required when moving to waiting. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_note

    Add a signed note on a card. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_release

    Clear the card assignee. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_restore

    Restore an archived card into its previous column, at the end. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • card_update

    Update a card title, description or labels. Workflow: board_read the board, card_claim a card, card_move it to doing, work and call card_check/card_note as you go (card_checklist_* to edit the checklist), agent_status for what you are doing now, card_move to waiting WITH a question when you need the owner, board_updates {mine:true, wait_seconds} to hear back, then card_move to done.

  • check_update

    Check whether a newer PowerScroll release exists on GitHub. Reports the running version and the latest one. Note "checked": when false the API was unreachable or rate limited and the status is unknown — that is not the same as up to date.

  • create_diagram

    DEPRECATED - use create_diagram_plantuml, create_diagram_mermaid, create_diagram_svg or create_diagram_drawio instead, which name the language they take and each document their own subset. This name still works and sniffs the format from the source, but it will be removed. Behaviour is otherwise identical.

  • create_diagram_drawio

    Description is built at runtime.

  • create_diagram_mermaid

    Draw a diagram on the page from MERMAID source. (For PlantUML source, use create_diagram_plantuml instead.) A DOCUMENTED SUBSET is read, and anything outside it comes back as a diagnostic instead of being drawn wrong. (1) FLOWCHART: "flowchart TD" / "flowchart LR" / "graph LR" as the first line, then nodes A[Label], A(Label) and A{Label}, and edges A --> B, A -->|guard| B and A --- B. Chains such as A --> B --> C work. (2) SEQUENCE: "sequenceDiagram" as the first line, then participant X (optionally "participant X as Label") and messages A->>B: text and A-->>B: reply. TWO THINGS TO EXPECT. Nod…

  • create_diagram_plantuml

    Draw a UML diagram on the page from PLANTUML source. (For Mermaid source, use create_diagram_mermaid instead - this tool refuses it rather than half-drawing it.) Two PlantUML dialects are supported, and the right one is detected automatically. (1) COMPONENT / COMPOSITE STRUCTURE: components, nested components, ports (port / portin / portout), provided and required interfaces, and assembly and delegation connectors. A composite-structure part puts its role in the label, as component "role : Type [multiplicity]" as alias. Nesting uses braces. (2) ACTIVITY / SWIMLANE FLOWCHARTS: |Lane| switches t…

  • create_diagram_svg

    Draw an SVG onto the page as native PowerScroll shapes. Every element becomes an ordinary rectangle, circle, line or text run that the user can select and drag afterwards -- it is transpiled, NOT embedded as an image. THIS TOOL IS THE OPPOSITE OF THE OTHER TWO: create_diagram_plantuml and create_diagram_mermaid want semantics and compute every coordinate for you, whereas here YOU have already done the layout and the coordinates are the payload. Use this when you want exact placement, and one of the others when you want a diagram laid out well without doing the geometry yourself. Supported: svg…

  • create_page

    Create a new page and open it. By default also writes the title onto the canvas as an H1 block so the page reads as a titled note.

  • create_scroll

    Create a new named scroll on a page — a fresh vertical column to the right of the existing ones, with its title shown at the top on the canvas. Use this to keep a separate workstream (say "Open questions" beside "Research log") from interleaving with what is already there. Returns a scrollId to pass to append_block.

  • create_section

    Create a new section (a tab in the notebook sidebar). Sections contain pages. A first empty page is created along with it.

  • delete_block

    Delete a single markdown block by id. Use read_page first to get block ids and check you are removing the right one. Passed a diagram FRAME id, this cascades to the frame's members and grouped strokes — same primitive as delete_diagram, which names the act and reports the counts. Passed a diagram MEMBER id (a node whose groupId is owned by a diagram frame), the call is refused (UNSUPPORTED) naming the owning diagram and pointing at delete_diagram or the redraw path.

  • delete_diagram

    Delete a diagram frame and everything that belongs to it: every node whose groupId is the frame id, and every stroke grouped with it. Use this when you placed a diagram you no longer want — delete_block on the frame id does the same cascade, but this tool names the act and reports how many members and strokes went. Occupants below the frame in the same scroll close the gap. An unknown id is NOT_FOUND. Passing a non-diagram node id is refused (the message names the type and points at delete_block). The bridge has no undo, so pass confirm:true once the user has agreed. Returns deletedMembers and…

  • delete_page

    Delete a page and everything on it. Cannot be undone from here — the app has no agent-facing undo — so ask the user before calling, then pass confirm:true. Refuses when the page is the last one in its section.

  • delete_scroll

    Delete a named scroll (a column band). When the band holds ANY content — nodes, group members, or ink — content is REQUIRED: "delete" removes them with the band, "keep" closes the gap and leaves them where they are. There is deliberately no default. The old default was keep (confirm:true used to be a safe trim); a default flip would silently destroy callers that never passed the flag. An empty band needs no content param. Membership is group-aware: a diagram belongs to the band of its frame origin, and its members and grouped ink follow that verdict. A page must keep at least one scroll: a pla…

  • delete_section

    Delete a section AND every page inside it. This is the widest-reaching delete available — confirm the page list with the user first (list_pages shows what would go). Refuses when it is the notebook's only section.

  • fit_diagram

    Refit an existing diagram to the scroll band its frame sits in. Unlike placement-time fit (shrink-only), this scales BOTH directions: up to fill band-width minus padding when the diagram is under-width, down with the same 0.45 floor when over. Works on member diagrams (members rescale) and on renderMode 'snapshot' diagrams (the frame rescales; the image follows). Out-of-band frames are refused (PRECONDITION, naming the diagram). Discover ids from read_page diagrams[]. One undo in the app.

  • get_background

    Read the canvas look a page is actually drawn with: which guide style is active and which background colour. A page may override the notebook default, so the reply also carries "source" (whether each value came from the page or the notebook) and "notebookDefault". Call before set_background when you intend to restore the previous look afterwards.

  • get_block

    Re-fetch a single markdown block by id (BlockSummary plus page location). Use this after read_page hits the size cap. A block larger than the 20000-character budget is returned in slices: the response carries markdownTruncated {fullLength, notice} and nextOffset — pass nextOffset back as offset to continue. Any block, any size, is fully readable in bounded calls. Unknown or non-block ids are NOT_FOUND.

  • insert_block

    Insert a markdown block into a scroll at a chosen position, shifting every occupant below it (text, diagram frames, images, shapes, ungrouped ink) down by the new block's height + 12px. Frame members ride the frame. Prefer after (a block or diagram-frame id): ids survive reordering, indices do not. Exactly one of after or index. index 0 is the top of the column (ceiling-clamped when a titled scroll arms the page ceiling). index counts packed occupants of the scroll, not read_page blocks[] — prefer after. Returns the new block plus displacedCount.

  • insert_image

    Insert an image into a scroll at a chosen position, shifting every occupant below it (text, diagram frames, images, shapes, ungrouped ink) down by the image's display height + 12px. Frame members ride the frame. Source is exactly one of data (a data:image/...;base64, URI) or path (a local png/jpg/jpeg/gif/webp file this server reads and encodes — the app never sees paths). Both or neither is an error. Placement matches insert_block: prefer after (an occupant id); exactly one of after or index. index 0 is the column top (ceiling-clamped when a titled scroll arms the page ceiling). Optional alt …

  • list_pages

    List every section and page in the connected notebook, with the number of text blocks on each and which page is currently open. Call this first to discover page ids.

  • list_scrolls

    List the scrolls (named vertical columns) on a page, with how many blocks each holds. Call this before writing when a page may have more than one workstream on it: passing the returned scrollId to append_block keeps your blocks in their own column instead of stacking under someone else's. A block belongs to whichever scroll it physically sits in, so a block the user drags to another scroll moves with it.

  • move_block

    Move a markdown block or diagram frame inside a scroll or across scrolls on the same page. Occupants below the source close up; occupants at the target open a gap. Diagram members ride the frame. ONE undo. Prefer after (a block or diagram-frame id) over index: ids survive reordering. scrollId is optional and defaults to the block's current scroll; when given it must be on the same page. Exactly one of after or index. Diagram members, shapes and images as the move target are refused by name. Returns the block plus displacedCount.

  • move_page

    Move a page into a different section. Section ids come from list_pages. A section must keep at least one page, so moving the only page out of a section is refused — create another page there first.

  • move_scroll

    Move a scroll (named column band) left or right, or to an absolute column. Members, grouped ink and the band's own width travel with it; neighbouring scrolls shift to make room and cumulative offsets are recomputed. A diagram belongs to the band of its frame origin — the whole group moves, it is never split. Refuses with NOT_FOUND on an unknown id and PRECONDITION when the scroll is already at the named edge.

  • read_diagram

    Read one diagram: id, title, format, source, bounds, memberCount, and a page of members [{id, type, x, y, w, h, label?}]. member_limit + member_cursor page members (cursor = last member id; same style as read_page). Default member_limit is derived from the 20000-character budget so a typical page sits well under it. If the serialized response still exceeds the budget, members trim at an entry boundary (truncated {at, notice}). Source counts toward the budget; if source alone blows it, source is cut (sourceTruncated {fullLength, notice}) and the notice names the full length and suggests exporti…

  • read_image

    Export one image by node id so you can look at it. Discovers ids from read_page images[].id. The notebook returns the embedded bytes over the bridge; this server decodes them and writes a local file. Optional out_path (absolute) names the destination — parent dirs are created; an existing file is overwritten. When omitted, the file lands in os.tmpdir()/powerscroll-images/<id>.<ext>. The response is {path, format, bytes, naturalWidth, naturalHeight, alt} — NEVER the base64 payload. Unknown id is NOT_FOUND. A non-image id is UNSUPPORTED naming the type. Then open the file with your vision tools.

  • read_page

    Read a page. DEFAULT CHANGED in v0.54: blocks[] is free-standing markdown only — diagram labels (text nodes with a groupId) no longer leak in as fake content, and diagrams are collapsed to diagrams[] {id, title, format, memberCount, bounds} with NO members and NO source. Images are a compact images[] index {id, alt, x, y, w, h, naturalWidth, naturalHeight, bytes, mini, scrollId} — never the base64 payload. Discovery flow: read_page → diagrams[].id → read_diagram / delete_diagram / fit_diagram; read_page → images[].id → read_image (writes a local file you open with vision). include defaults to …

  • rename_notebook

    Rename the notebook itself (the title shown in the app and used for future Save As filenames). This does NOT rename the .html file already on disk — that keeps its current name until the user saves to a new location. The result reports the bound filename so you can tell them.

  • rename_page

    Retitle a page in the sidebar. If the page still opens with the "# Old title" heading block that create_page wrote, that block is retitled too so the two do not drift apart; a hand-edited heading is left alone.

  • rename_scroll

    Rename a scroll. The new title appears immediately at the top of that column on the canvas. Naming a previously untitled scroll is how its header first appears. Pass an empty title to untitle it: the header disappears and the page ceiling disarms — a plain page is one untitled scroll, not zero scrolls.

  • resize_scroll

    Resize a scroll band by stable id. The width is clamped to PowerScroll's shared limits, persists on that page, and every node or stroke in bands to the right moves by the same delta. The resized band's own content stays fixed. One undo restores width and positions. list_scrolls reports the effective width.

  • run_update

    Install the latest PowerScroll release into the current notebook file. This rewrites the .html on disk and reloads the app, which drops this bridge connection until the notebook reconnects. Ask the user before calling it, then pass confirm:true. A safety backup is downloaded first where the browser allows it. Run check_update first.

  • save_notebook

    Write the notebook back to the file it was opened from. Only works when the notebook is already bound to a file: the Save As picker needs a click from the user, which an agent cannot supply. Call this after a batch of edits so the work is on disk.

  • set_background

    Change the notebook's canvas look. "scroll" renders each column as one continuous vertical sheet with light page separators — best for long reading and for notes an agent is filling in. "pages" shows detached A4 cards, "grid" a dot grid, "none" a blank canvas. The setting is stored in the notebook itself, so it survives closing and reopening. Pass at least one of guideStyle or color. Scope defaults to "notebook" (every page that has not overridden it). Pass scope:"page" to change one page only — useful when a notebook wants a scrolling page of notes next to a grid page of diagrams.

  • update_block

    Replace the markdown of an existing block, found via read_page. Use this to revise content or tick a checkbox ("- [ ]" to "- [x]") rather than appending a duplicate block. If the block grows or shrinks, every occupant below it in the scroll (text, diagram frames, images, shapes, ungrouped ink) shifts by the height delta; frame members ride the frame. One undo. Returns displacedCount. A diagram-member id is refused (UNSUPPORTED) naming the owning diagram — redraw the source instead.

Signals

Stars
0
Forks
0
Open issues
0
Last commit
Oct 23, 2026 (5 days ago)
Last release
Oct 23, 2026 (5 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.CynaCons/powerscroll
Version
0.67.1
Auth
No auth
Packages
npm powerscroll-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from CynaCons

Cite this page

PowerScroll MCP server. Agent Mart. https://agentmart.dev/connectors/cynacons-powerscroll (last updated 2026-10-24)