Scratchpad

io.github.scratchpad-shPublished by GitHub account scratchpad-shv1.0.0Updated Nov 3, 2026

Search, read, write, and organize your Scratchpad notes from any MCP client.

Overview

AI-generated overview

Connects an assistant to your Scratchpad notes so it can search, read, write, organize and restore versions of them.

What you can do
  • Search, read and list notes and folders, including full-text search with snippets
  • Read and search inside files attached to a note, page by page
  • Write notes: create, append Markdown, and propose edits as a diff before applying them
  • Organize notes: move, rename, archive, pin and duplicate
  • Manage folders: create, rename, move and delete empty ones
  • Browse a note's History and restore an earlier version
When to use it
Useful when your notes live in Scratchpad and you want an assistant to find things in them, draft or append content, tidy folders, or look up what a note used to say. It suits both quick lookups and multi-step editing where you want to review changes first.
Requirements
Either the hosted endpoint with OAuth sign-in, or the npm package run locally over stdio. The local route needs Node.js and an API token in SCRATCHPAD_TOKEN, created under Settings, API tokens; a read-scope token can search and read, while writing needs full scope. SCRATCHPAD_URL is optional and defaults to the hosted app.
Before you install
The local setup holds an API token in the client configuration, and a full-scope token allows writing to your notes. Tools can create, append, move, rename, archive and restore notes and folders, and delete empty folders; there is no tool that deletes a note. Edits are two-step and reversible through History, and password-locked notes are excluded.

Installation

In SourceWeft

  1. Open Scratchpad in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.scratchpad-sh%2Fscratchpad/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "scratchpad": {
      "type": "http",
      "url": "https://app.scratchpad.sh/api/mcp"
    }
  }
}

README

Scratchpad MCP server

Give your AI your notes. An MCP server for Scratchpad, so Claude, Cursor, Codex, and any other MCP client can search, read, write, and organize the notes you already keep.

It is small on purpose: about 2,000 lines of TypeScript, no database, and no state on disk. Every tool is one or two calls to Scratchpad's HTTPS API, so you can read the whole thing in an evening and know exactly what your assistant can do.

Two ways to connect

Remote (recommended)

No install. Point your client at the hosted server and sign in with OAuth. This is the only way that works on a phone.

https://app.scratchpad.sh/api/mcp

Claude Code:

sh
claude mcp add --transport http --scope user scratchpad https://app.scratchpad.sh/api/mcp

Cursor, in ~/.cursor/mcp.json:

json
{  "mcpServers": {    "scratchpad": { "url": "https://app.scratchpad.sh/api/mcp" }  }}

Local (stdio)

For a client that only speaks stdio, or if you would rather hold an API token than an OAuth session. Create a token in Scratchpad under Settings, API tokens.

json
{  "mcpServers": {    "scratchpad": {      "command": "npx",      "args": ["-y", "@scratchpadsh/mcp"],      "env": { "SCRATCHPAD_TOKEN": "scr_your_token" }    }  }}

Check the token before wiring it up:

sh
SCRATCHPAD_TOKEN=scr_your_token npx -y @scratchpadsh/mcp --check
Variable
SCRATCHPAD_TOKENrequiredread can search and read. full is needed for anything that writes.
SCRATCHPAD_URLoptionalDefaults to https://app.scratchpad.sh.

Tools

AreaTools
Find and readsearch_notes, read_note, list_notes, list_folders
Attachmentssearch_attachment, read_attachment
Writecreate_note, append_to_note, propose_edit, apply_edit
Organizemove_note, rename_note, archive_note, pin_note, duplicate_note
Folderscreate_folder, rename_folder, move_folder, delete_folder
Historylist_versions, read_version, restore_version

Every name carries a scratchpad_ prefix, so the tools sit cleanly beside other servers in one session.

Built so a model cannot quietly wreck your notes

  • There is no tool that deletes a note. That stays a job for you.
  • Editing is two steps. propose_edit writes nothing: it returns a diff and an id. apply_edit takes that id and no content, so the text cannot change between showing you the diff and writing it.
  • Edits check the base. If the note changed since the proposal, the edit is refused rather than overwriting what you typed.
  • Every edit is reversible. History keeps earlier versions, and restore_version keeps the current one first.
  • Password-locked notes stay invisible, to tokens and connectors alike.
  • Tools are annotated, so a client can run reads freely and stop to show you each write.

Develop

sh
npm installnpm test

License

MIT. See LICENSE.

Made by Scratchpad, the notes app your AI can actually read. More at scratchpad.sh/ai.

Source: README.md at commit 3eaf90e

Tools

22

scratchpad_search_notes

Search notes

Full-text search across the user's notes. Returns matching notes with a short snippet. Password-locked notes are never returned.

Parametersqueryrequired

scratchpad_read_note

Read note

Read the Markdown body of one note, by id. Get ids from search_notes or list_notes first. A long note comes in parts: the first ends by saying where the next begins and where each heading (each chapter, say) starts, so pass `start` to read the part wanted. Password-locked notes cannot be read: unlocking is something a browser does, and this connection has no way to do it.

Parametersstartnote_idrequired

scratchpad_list_notes

List notes

List the user's notes, pinned first and then most recently updated, as id and title, with the folder each is filed in. Use when they ask what notes exist rather than for particular words, and when a title is enough to find the one they mean. Can list one folder, or the archive. Locked notes appear with their title hidden.

Parametersoffsetarchivedfolder_id

scratchpad_create_note

Create note

Create a new note. Returns its id. Never use em dashes or en dashes in anything written to a note. Use a period, colon, comma, or parentheses instead. Ordinary hyphens in compound words and numeric ranges are fine.

Parametersmarkdownrequiredfolder_id

scratchpad_list_folders

List folders

List the user's folders as a tree, with each folder's id and how many notes are filed directly in it. Folders nest three levels deep at most. Use this to find the id create_note, move_note and the other folder tools need.

Takes no parameters.

scratchpad_move_note

Move note

File a note in a folder, or take it out of every folder. Changes nothing inside the note. Password-locked notes cannot be moved from here.

Parametersnote_idrequiredfolder_id

scratchpad_rename_note

Rename note

Rename a note. The name stays even when the first line changes later, as when renaming in the app. Changes nothing inside the note. Password-locked notes cannot be renamed from here. Never use em dashes or en dashes in a note's name. Ordinary hyphens are fine.

Parameterstitlerequirednote_idrequired

scratchpad_archive_note

Archive note

Archive a note, or bring one back. An archived note is out of the list but kept whole, still searchable, and returns with archived false. This is not deleting: nothing here deletes a note, which only the user can do, in the app.

Parametersnote_idrequiredarchived

scratchpad_pin_note

Pin note

Pin a note to the top of the list, or unpin it. Changes nothing inside the note.

Parameterspinnednote_idrequired

scratchpad_duplicate_note

Duplicate note

Make a copy of a note, with its files, in the same folder, named with " copy" after the original's name. Returns the copy's id. Useful before a large change the user may want to compare against.

Parametersnote_idrequired

scratchpad_list_versions

List versions

List a note's History: the versions kept as it changed, newest first, each with its id, when it was saved, by whom, and why. Use it when the user asks what a note used to say, or to undo a change.

Parametersnote_idrequired

scratchpad_read_version

Read version

Read one version from a note's History as Markdown. A long one comes in parts, like read_note.

Parametersstartnote_idrequiredversion_idrequired

scratchpad_restore_version

Restore version

Put a note back to a version from its History. The note as it stands is saved to History first, so a restore is undone by restoring that one. Tell the user which version, from when, before calling this.

Parametersnote_idrequiredversion_idrequired

scratchpad_create_folder

Create folder

Create a folder, at the top level or inside another one as a sub-folder. Returns its id. Two folders can have the same name, so check list_folders first rather than making a second one by accident. Never use em dashes or en dashes in a folder name. Ordinary hyphens are fine.

Parametersnamerequiredparent_id

scratchpad_rename_folder

Rename folder

Rename a folder. Its notes and sub-folders stay where they are. Never use em dashes or en dashes in a folder name. Ordinary hyphens are fine.

Parametersnamerequiredfolder_idrequired

scratchpad_move_folder

Move folder

Move a folder, with everything in it, inside another folder or out to the top level. It goes last among its new neighbours. Refused if it would put anything more than three levels deep, or a folder inside itself.

Parametersfolder_idrequiredparent_id

scratchpad_delete_folder

Delete folder

Delete an EMPTY folder. A folder that still holds notes or sub-folders is refused: move them somewhere else first with move_note and move_folder, or ask the user to delete it in the app, where it can be undone.

Parametersfolder_idrequired

scratchpad_append_to_note

Append to note

Add Markdown to the end of an existing note, leaving everything already there untouched. Prefer this over propose_edit when the change is purely an addition: it needs no diff and no second call. Never use em dashes or en dashes in anything written to a note. Use a period, colon, comma, or parentheses instead. Ordinary hyphens in compound words and numeric ranges are fine.

Parametersnote_idrequiredmarkdownrequired

scratchpad_search_attachment

Search attachment

Find where something is discussed inside a file attached to a note. Returns short passages with the page each is on. Use it when a file's text was too long to be included whole, or to locate a topic before reading around it. Requires note_id.

Parametersfilerequiredqueryrequirednote_id

scratchpad_read_attachment

Read attachment

Read a range of pages out of a file attached to a note. read_note lists what a note has and how many pages each one is; this is how to read them. Use it after search_attachment to read around a match, or to work through a document a stretch at a time. Requires note_id.

Parametersfilerequirednote_idto_pagefrom_pagerequired

scratchpad_propose_edit

Propose edit

Propose a change to a note and show the diff. This does NOT write anything. It returns a proposal id, which apply_edit takes to write the change. Show the user the diff and let them decide before calling apply_edit. Prefer `edits`: each one quotes a short passage from the note in `find` (a line or two, copied exactly, enough to match only once) and gives its replacement in `replace`. To insert, quote the passage the new text goes after and repeat it at the start of `replace`. To add to the end, leave `find` empty. Send `markdown` (the COMPLETE new note body) only when rewriting most of the note. Never use em dashes or en dashes in anything written to a note. Use a period, colon, comma, or parentheses instead. Ordinary hyphens in compound words and numeric ranges are fine.

Parameterseditsnote_idrequiredsummaryrequiredmarkdown

scratchpad_apply_edit

Apply edit

Write a proposal from propose_edit to the note. Takes only the proposal id: the content cannot be changed between showing the diff and writing it.

Parametersproposal_idrequired

Version history

1
  1. v1.0.0LatestNov 1, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts