rails-markup

Rails engine · toolbar · MCP server · CLI

Point-and-click annotation for AI agents.

Mark up your Rails views right in the browser. Your AI agent reads the feedback over MCP and fixes it in the code.

$ gem install rails-markup

The loop

Feedback flows from your browser to your agent and back — no copy-pasting screenshots or describing where things are.

1

Annotate in the browser

Click any element, type what should change, pick an intent (fix / change / question / approve) and severity. Optional element screenshot with arrows & highlights.

2

Agent reads over MCP

Your AI agent lists pending annotations through the MCP server and gets the exact element, page, and your note.

3

Fix & resolve

The agent edits the code and resolves the annotation with a summary — which syncs back to the pin and the dashboard.

Try it

A live mock of the toolbar. Click the green button, then click any element in the frame to leave an annotation — exactly how it works in your app.

localhost:3000/pricing
Click the button ↙

Simple pricing

Start free. Upgrade when your team grows.

Starter$01 project
Team$29unlimited projects
Scale$99SSO + audit log

What's in the box

One Ruby gem: a mounted engine with its own dashboard, a self-contained browser toolbar, an MCP server, and a CLI.

Toolbar

Floating annotation UI

Zero-dependency overlay — no Stimulus, no importmap. Configurable FAB (show/hide, size, 4 corners) that works in any Rails app.

Dashboard

Mounted engine interface

A list dashboard with filters, search, author & page filters, load-more, CSV/JSON export — plus a drag-and-drop Kanban board.

MCP

Agent-native server

Read, watch, transition, reply, and resolve annotations over stdio MCP. Works with Claude Code, Codex, and any MCP client.

CLI

Thor-based commands

rails-markup ships server, init, mcp, watch, pending, resolve, and more.

Sync

Server-backed state

Client UUIDs, an outbox with retries, and reconciliation keep the browser, the database, and your agent converged.

Portable

SQLite · MySQL · Postgres

Adapter-aware migrations and a configurable table name. Auth is enforced through your host app's controller.

Install in three commands

Add the gem, run the generator, migrate. The generator mounts the engine, injects the toolbar, and writes an initializer.

# Gemfile
gem "rails-markup", require: "rails_markup"

# then
bundle install
bin/rails generate rails_markup:install
bin/rails db:migrate

Configure the toolbar

OptionValuesWhat it does
fab_visibletrue / falseShow or hide the floating button (pins & panel stay).
toolbar_enabledtrue / falseMaster switch for the whole toolbar system.
toolbar_positionbl / br / tl / trWhich corner the FAB sits in.
toolbar_sizeslim / compact / default32 / 40 / 48px button.
toolbar_accentindigo / amber / blue / emerald / roseAccent color for the UI.
base_controller_class"AdminController"Parent controller that enforces auth.