Developers
All These Scraps is built to be talked to. Everything below ships in the app today, works on the same rules as the app itself (locked scraps stay locked, shared piles keep their permissions), and needs no account with us: your scraps stay in your own iCloud. Questions and ideas: hello@allthesescraps.com.
URL scheme Siri & Shortcuts MCP server (Claude and other agents) Export Library format Your data in iCloud The web app
URL scheme
Any app, script, bookmarklet, or launcher that can open a URL can make a scrap. Mac, iPhone, and iPad. Parameters are URL-encoded query items.
Make a scrap
allthesescraps://new?title=Call%20the%20plumber&body=Kitchen%20tap%20drips&thread=House&lane=To%20Do
| Parameter | Meaning |
|---|---|
title | Required. The scrap's title. |
body | Body text. Line breaks are kept; URLs become tappable links. |
thread | Tag it with a thread (a pile). The pile is created if it doesn't exist. threads is accepted too. |
lane | Dock it in a kanban lane on that thread's board. |
check | Checklist items, separated by |. |
date | Event date, ISO 8601, for example 2026-10-01T09:00:00Z. |
tint | Card colour: yellow, pink, blue, green, orange, purple. |
Browsers ask before handing a link to the app, so nothing is created without a tap. Joining a shared pile from a link always shows the pile's name and asks first.
Open a view
allthesescraps://open?view=tasks
allthesescraps://open?view=pile&name=House
view is one of home, tasks, calendar, box, archive, attachments, or pile with name.
Accept a shared pile
allthesescraps://accept-share?url=https://www.icloud.com/share/…
Invitation links on allthesescraps.com/join do the same from a web page.
From a shell on the Mac: open "allthesescraps://new?title=Hello".
Siri & Shortcuts
The app publishes App Intents, so every action below appears in the Shortcuts app and works by voice with no setup. Say "New scrap in All These Scraps" or "Voice scrap in All These Scraps" to Siri, or build your own automations.
| Action | What it does |
|---|---|
| New Scrap | Title, body, threads, lane, and date. |
| Voice Scrap | Opens a new scrap recording, transcribed as you speak. |
| Append to Scrap | Adds text to an existing scrap's body. |
| Add Thread / Remove Thread | Tags a scrap with a pile, or takes it off one. |
| Move to Lane | Docks a scrap in a kanban lane. |
| Complete Scrap / Reopen Scrap | Archives a scrap or brings it back. |
| Pin Scrap | Pins or unpins. |
| Add Checklist Item / Check Off Item | Checklist changes. |
| Attach File | Attaches a file or picture to a scrap. |
| Find Scraps | Search by text, thread, lane, or completion; returns scraps for later actions. |
| Get Board | A pile's kanban board, or the combined Tasks board, lane by lane. |
| Open Scrap / Open Pile | Navigation. |
Scrap and pile parameters are chosen from lists in Shortcuts, so actions chain: Find Scraps → Move to Lane, for example.
MCP server for Claude and other agents
On the Mac, the app can host a Model Context Protocol server on your own machine, so Claude, or any MCP client, can read and change your scraps under your control. It listens on loopback only (127.0.0.1:8977), never off your Mac, and every request needs the bearer token the app shows you.
Turn it on
☰ menu → Claude Access…. Switch it on and copy the command it shows, which registers the server with Claude Code:
claude mcp add --transport http scraps http://127.0.0.1:8977/mcp --header "Authorization: Bearer <your token>"
Any other MCP client works the same way: streamable HTTP transport, endpoint /mcp, JSON-RPC 2.0 over POST, plain JSON responses. Regenerate the token from the same screen at any time.
Tools
| Tool | Arguments | Returns |
|---|---|---|
search_scraps | text, thread, lane, include_completed | Matches with id, title, threads, lane, completed. |
get_scrap | id | Body text, checklist, threads, dates. |
create_scrap | title (required), body, threads (array), lane, date (ISO 8601) | The new scrap. |
append_to_scrap | id, text | The scrap. |
add_thread / remove_thread | id, thread | The scrap. |
move_to_lane | id, lane, pile (omit for Home) | The scrap. |
complete_scrap | id, completed (default true) | The scrap. |
add_checklist_item | id, text | The scrap. |
check_off_item | id, text (first unchecked match) | The scrap. |
list_piles | none | Every pile with its lanes and active scrap count. |
get_board | pile (omit for the combined Tasks board) | Lanes with their scraps. |
Raw example
curl -s http://127.0.0.1:8977/mcp \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"create_scrap","arguments":{"title":"From a script","threads":["Ideas"]}}}'
Scrap ids are opaque strings returned by search_scraps, create_scrap, and get_board; pass them back unchanged. Locked scraps are never returned, and writes into piles shared with you follow the share's permission.
Export Library format
Export Library… (☰ menu, or File on the Mac) writes one zip you can open anywhere, including as an Obsidian vault:
All These Scraps Library/
README.md
Home.md scraps on the Home table, as [[links]]
Scraps/<title>.md one file per scrap
Archive/<title>.md scraps marked done
Piles/<pile>.md a page per pile: its scraps by lane
Attachments/<title>/1.jpg …
library.json everything, machine-readable
A scrap file
---
title: "Seed order"
created: 2026-03-04T15:02:11Z
modified: 2026-03-05T09:40:00Z
piles: ["Garden"]
lane: { pile: "Garden", lane: "To Do" }
date: 2026-03-10T14:00:00Z
tint: yellow
pinned: true
stitches:
- { to: "Soil test", label: "after" }
---
# Seed order
Zinnias and cosmos.
- [ ] Order seeds

Stitched to: [[Soil test]] (after)
Keys appear only when they apply. Headings, bullets, bold, italic, and links in the body come through as Markdown.
library.json
format is allthesescraps-library, version 1. piles lists each pile's name, lanes, and favorite. scraps holds one object per scrap with file, title, summary, created, modified, tint, pinned, draft, locked, date, done, piles, lanes, checklist, stitches, attachments, and body, the body's exact formatting as the app stores it (see below), so a future import restores it byte for byte.
Import Text or Markdown… reads .md and .txt files back as scraps: a leading # line becomes the title, headings and bullets become styles.
Your data in iCloud
There is no server of ours. The apps store everything in your iCloud private database through Core Data's CloudKit mirroring, and the web app reads and writes those same records with CloudKit JS. If you want to read your own library directly, this is the shape:
- Container
iCloud.com.fragmentlabs.allthesescraps, zonecom.apple.coredata.cloudkit.zone. Each pile you share out lives in its owncom.apple.coredata.cloudkit.share.<uuid>zone; piles shared with you are in the shared database under their owner's zone. - Record types
CD_Scrap,CD_Pile,CD_Placement,CD_ChecklistItem,CD_Attachment,CD_Link(a stitch),CD_ScrapStack,CD_HomeState. Fields are the attribute names prefixedCD_; booleans are INT64, relationships to one record are the target's record name in a STRING field (CD_scrap,CD_pile), and every record carriesCD_entityName. - A scrap on Home is a
CD_Scrapplus aCD_Placementwith noCD_pile. Tagging adds a placement that names the pile;CD_laneandCD_laneOrderput it in a kanban lane. CD_bodyDatais the body as Swift'sAttributedStringJSON: usually an array alternating text and attribute objects. Plain text needs no attributes; bold, italic, and sizes areSwiftUI.Fontattributes, underline isSwiftUI.UnderlineStyle, links areNSLink.
Read with change tokens (fetchRecordZoneChanges) rather than queries, and you get additions, edits, and deletions in one pass without needing any indexes.
The web app
allthesescraps.com/app is a static page that signs you in with your Apple ID through CloudKit JS and talks to your iCloud directly; nothing passes through us. It installs as an app from Edge or Chrome, and its source is served unminified if you want to see exactly how it reads and writes the records above.
Building something on this? We'd love to hear: hello@allthesescraps.com.