Give the review to your agent.
claude mcp add --transport http \
marklayer https://feedback.simplelocalweb.com/s/<id>/mcphttps://feedback.simplelocalweb.com/s/<id>/mcpcodex mcp add marklayer \
--url https://feedback.simplelocalweb.com/s/<id>/mcp?agent=codex{
"mcpServers": {
"marklayer": {
"url": "https://feedback.simplelocalweb.com/s/<id>/mcp?agent=cursor"
}
}
}{
"servers": {
"marklayer": {
"type": "http",
"url": "https://feedback.simplelocalweb.com/s/<id>/mcp?agent=copilot"
}
}
}claude mcp add marklayer -- npx -y marklayer-mcpOne comment, start to finish.
Priya
This still says “Submit”. It should say “Start trial” like the pricing page.
main > section.hero button.cta- Open
- In progress · claude
- Resolved
claude
Renamed the CTA in Hero.tsx:42 and the matching test. Deployed to the preview.
watch_annotationsnew comment 3, with target selector and markupacknowledgepin flips to in progress on Priya’s screen- edits
src/Hero.tsx, runs the tests resolvesummary posted as the reply abovewatch_annotationswaiting for the next one
- It knows what you clicked. Each comment arrives with the element it was left on: a selector, a text fingerprint, a snapshot, and on a React, Vue or Svelte page the component chain.
- You watch it work. Seen, replied, done. Every status change lands on the pin while the thread is still open.
- Wording fixes come back exact. A typo or a better sentence comes back as a diff to accept, never prose describing one.
Any MCP client.
- Claude Code
- Cursor
- Codex
- Copilot
- Windsurf
- Cline
- Zed
- Gemini
17 tools.
Read
marklayer_read_page- The page's headings, text, links and controls, each with the selector that finds it.
marklayer_room_info- The URL under review, the viewport it was annotated at, and timestamps.
marklayer_list_annotations- Everything left on the page, filtered by status.
marklayer_get_annotation- One annotation in full, with its reply thread and any attached images.
marklayer_get_feedback- One read of the room: counts by status, open items, checklist progress, poll tallies.
Work
marklayer_watch_annotations- Wait for new comments, and for anything assigned to the agent by name.
marklayer_acknowledge- Flip a comment to in progress so the reviewer sees it was picked up.
marklayer_resolve- Close a comment and post what changed as a reply.
marklayer_dismiss- Decline a comment. The reason is required, and the reviewer reads it.
marklayer_reply- Ask a question on the thread without moving its status.
Review
marklayer_create_annotation- Leave its own comment, pinned to an element, one per finding.
marklayer_suggest_edit- Propose exact replacement text, shown to the reviewer as a diff to accept.
Hand off
marklayer_share_preview- Open a review room on a preview URL and return the link to send a human.
marklayer_set_next_steps- Publish a checklist of planned changes, each tied to the comments it answers.
marklayer_complete_next_step- Tick a step off while the reviewers watch.
marklayer_ask- Put a multiple-choice question to the room and read the votes back.
npm only
marklayer_connect_room- Switch to another share link by URL or id.
It works the other way too.
share_preview opens a review room on the preview URL and returns the link. A later preview of the same repository and branch becomes the next version of that room, so reviewers step between them. The agent posts its plan as a checklist that ticks off as the work lands, and when it needs a decision rather than an opinion, it asks the room to vote.
Agents forget a tool exists unless something reminds them. Paste this into CLAUDE.md orAGENTS.md and yours will reach for MarkLayer on its own:
## Visual review
When I share a marklayer.app/s/... link, connect to it over MCP and work the
annotations: acknowledge each one before you start, resolve it with a one-line
summary of what changed, and dismiss it with a reason if you cannot act on it.
When you have built something for me to look at, open a review room on the
preview URL with marklayer_share_preview and send me that link instead of
describing the change.Or just say it:
Watch my MarkLayer annotations. For each one, acknowledge it, make the fix, then resolve it with a one-line summary of what changed.
Read the page in my MarkLayer room and review it for broken copy, accessibility gaps and layout bugs. Leave one comment per finding, and use a suggested edit for any exact text fix.
Frequently asked questions
- Does MarkLayer have an MCP server?
- Yes, two ways in to the same 17 tools. Every share link answers MCP over Streamable HTTP at its own address plus /mcp, so a client that supports remote servers connects with one command and nothing installed. For clients that only run local servers, the same tools ship on npm as marklayer-mcp.
- Do I need an API key or an account to connect an agent?
- No. A MarkLayer share link is its own access token: whoever holds the link can open it, and the MCP endpoint follows the same rule. There is no OAuth step and no key to paste. If the owner has locked the link with a password, send it as a header (Authorization: Bearer <password>; in Claude Code, --header) or use the npm package with MARKLAYER_PASSWORD.
- Which coding agents work with MarkLayer?
- Any MCP client. This page has setup for Claude Code, Claude, Codex, Cursor and VS Code. Windsurf, Zed, Cline, Gemini CLI and anything else that reads an mcpServers config work through either the remote URL or the npm package.
- Can the agent change the website I annotated?
- Not through MarkLayer. MarkLayer never touches the page’s source. The agent reads the comments, edits your code with its own tools, and reports back in the room. What it can change in MarkLayer is the review itself: statuses, replies, its own comments, suggested edits, a checklist and polls.
- Why connect over the remote URL instead of npm?
- You have nothing to install or update, because the endpoint ships with the site. What you give up is scope. The remote URL is bound to one share link, so a new link means a new connection. The npm package is installed once and switches between links with marklayer_connect_room.
- How do I know the connection worked?
- Seeing the server listed is not proof. Ask the agent to call marklayer_room_info: it should answer with the URL the link annotates. A 401 means the link’s owner has locked it, and it wants the password. If the agent says it has no MarkLayer tools, the session predates the config; start a new one.
Free, with no account, for everyone on the link.