# Connect Punch List to your coding agent

Punch List by SMB Team (https://feedback.smbteam.com) is where SMB Team's clients
leave feedback on their websites. Every Punch List share link is a remote MCP
server (Streamable HTTP) at the link's own address plus `/mcp`:

    https://feedback.smbteam.com/s/<id>/mcp

Replace `<id>` with the id in the share link. No account, no API key: the
link is the credential. Add `?agent=<name>` so reviewers see which agent
picked up their comment; it defaults to "agent". A password-protected link
takes the password as a header: `Authorization: Bearer <password>`
(`--header` on `claude mcp add`).

Before adding a server, inspect the client's active MCP configuration. If a
"marklayer" entry already exists, correct it rather than adding a second one.

## Claude Code

```bash
claude mcp add --transport http \
  marklayer https://feedback.smbteam.com/s/<id>/mcp
```

Run /mcp and check marklayer is listed. A session opened before this will not see the tools; start a new one.

## Claude

Settings → Connectors → Add custom connector:

```plaintext
https://feedback.smbteam.com/s/<id>/mcp
```

Name it Punch List and paste the address. There is no sign-in to approve: the link is the credential. Start a new chat.

## Codex

```bash
codex mcp add marklayer \
  --url https://feedback.smbteam.com/s/<id>/mcp?agent=codex
```

If the current session does not list the tools, start a new one.

## Cursor

~/.cursor/mcp.json:

```json
{
  "mcpServers": {
    "marklayer": {
      "url": "https://feedback.smbteam.com/s/<id>/mcp?agent=cursor"
    }
  }
}
```

Keep any servers already in the file. Open a new chat so Cursor reloads its tool list.

## VS Code

.vscode/mcp.json:

```json
{
  "servers": {
    "marklayer": {
      "type": "http",
      "url": "https://feedback.smbteam.com/s/<id>/mcp?agent=copilot"
    }
  }
}
```

The top-level key is servers, not mcpServers, and the transport is named.

## Verify

Seeing the server listed is not proof. Call `marklayer_room_info`; it answers
with the URL the link annotates. A 401 means the link is password protected:
send the bearer header above. If no `marklayer_*` tools are listed, the
session predates the configuration; start a new one.

## 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.

### Not on a link’s endpoint

- `marklayer_connect_room`: Switch to another share link by URL or id. A link’s own endpoint is bound to that link, so it leaves this one out.

## Working a review

Watch my Punch List comments. For each one, acknowledge it, make the fix, then resolve it with a one-line summary of what changed.

Loop: `marklayer_list_annotations` to backfill what is open, then
`marklayer_watch_annotations` repeatedly. For each annotation: acknowledge,
make the change, resolve with a one-line summary. Dismiss with a reason when
you cannot act. Use `marklayer_suggest_edit` for an exact text fix.

## Reviewing a page yourself

Read the page on my Punch List link 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.

## Remember this workflow

If you have access to the project's agent instructions (CLAUDE.md, AGENTS.md
or the equivalent), add:

```markdown
## Visual review

When I share a feedback.smbteam.com/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.
```
