Skip to content

adammcarter/annotate

Repository files navigation

Annotate

Your agent’s pencil case.

Each Annotate tool annotating its own name — Loop looped, Underline underlined, Highlight highlighted, Point pointed at — then wiped away, then 'Install now.' circled

1. Install the app

Download the latest release →

2. Install the tools

Tell your agent:

Install the MCP tools here https://github.com/adammcarter/annotate

3. Let your agent paint

  • Learn a new app
  • Get a pointer in a game
  • Find help with a complex idea

Annotate allows your agent to draw directly on your screen.

Why

Wanted to learn Blender but found it too complex?

Not sure where to put your next drop in a tower defence game?

Working on a new idea but something’s not quite right?

Your agent could tell you the exact x and y coordinates, but that’s not very helpful...

Now your agent can point directly on your screen.

Demo

Talking of learning Blender, here’s a small demo of Claude giving a walkthrough of Blender’s tools.

Claude numbering and labelling Blender's left toolbar in turn — Select, 3D Cursor, Move, Rotate, Scale, Transform, Annotate — each one looped and captioned live on the real window

Watch the full walkthrough →

The tools

annotate_circle Loop something. The workhorse — takes a label.
annotate_underline Underline a phrase, keeping the words readable.
annotate_highlight Wash a marker over a region.
annotate_arrow Point at something you can’t draw around.
annotate_text Say something when there’s no control to indicate.
annotate_locate Find a real element’s position, so nothing is guessed.
annotate_screens Which display, and at what scale.
annotate_clear Erase everything.

Permissions

  • Permissions. Annotate needs Accessibility (System Settings → Privacy & Security → Accessibility) the first time it runs. Nothing else does.

  • Privacy. Annotate draws, and reads UI element positions. It never captures your screen and makes no network connections.

  • Trust. Drawing and reading are not held to the same standard, because they are not the same authority.

Install info for agents

Once Annotate is installed, the MCP server is already on disk — it ships inside the app bundle:

/Applications/Annotate.app/Contents/MacOS/annotate-mcp

That path is the whole configuration, and it is the same everywhere. It speaks MCP over stdio and launches the app itself if it isn’t already running.

Claude

claude mcp add annotate /Applications/Annotate.app/Contents/MacOS/annotate-mcp

Codex

[mcp_servers.annotate]
command = "/Applications/Annotate.app/Contents/MacOS/annotate-mcp"

Cursor, Windsurf, Zed and anything else using mcpServers

{
  "mcpServers": {
    "annotate": {
      "command": "/Applications/Annotate.app/Contents/MacOS/annotate-mcp"
    }
  }
}

Feedback

Found an issue? Or something you like? I’d love to know about it!

Feel free to open an issue.

For developers and contributors

  agent  ──MCP──▶  annotate-mcp  ──unix socket──▶  Annotate.app  ──▶  your screen

Packages/AnnotateCore is pure geometry and the wire protocol — no AppKit, no UI. Every mark is seeded from its annotation id, so it has its own character and is exactly reproducible, which is what lets the drawing be pinned by golden tests instead of eyeballed. Annotate/ is the app: a click-through overlay per screen, Core Animation rendering, and the control socket. Packages/AnnotateMCP is the stdio server that turns tool calls into socket commands.

docs/DESIGN.md covers why the ink looks the way it does. docs/adr/ has the decisions, including the alternatives that were tried and rejected.

Contributing

Feel free to fork, update or fix this repo — ideally open an issue first.

Runs on macOS 14+. Building requires Xcode 26, which needs macOS 26 — the app icon is an Icon Composer bundle and only that toolchain compiles it.

open Annotate.xcodeproj      # ⌘R — it appears in the menu bar
bash Tools/guided-tour.sh    # the 45-second pitch, drawn on your own screen

swift test --package-path Packages/AnnotateCore
xcodebuild -project Annotate.xcodeproj -scheme Annotate -destination 'platform=macOS' test

Two things to know before changing anything that draws:

Generator draw count and draw order are the pixel contract. Moving a draw between functions is safe; reordering one silently changes every existing mark. There’s a longer note at the top of PenStroke.swift.

An offline render is not proof. Several bugs here looked perfect in a rendered PNG and wrong on a real composited screen. Confirm by running the app.

The film at the top is film/, and it doesn’t redraw the ink by hand — Tools/export-marks.swift dumps the real AnnotateCore geometry and the reel replays it, wipe plan included.

License

MIT — see LICENSE.

About

Let an AI agent draw on your screen — a macOS menu-bar app that gives agents a pen over MCP.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages