Comment on the page.
Your agent makes the change.

A guide for Claude Code, Cursor, and Codex. Pin feedback to real elements, connect your agent over MCP, and let it read, fix, and reply.

Why your agent needs the element

A screenshot makes your agent guess which button you mean. A pinthread comment names it. Each thread carries:

  • The page URL
  • The element’s selector and visible text
  • The comment position or selected area
  • Every reply, so the agent sees what the team agreed
Page: /pricing
Target: #annual-plan-button
Element text: Choose plan

Maya: Make it clear this is billed annually.
Alex: Keep the monthly equivalent visible too.

01 · Add pinthread to your site

Sign up free, create a project, and paste one script tag into your shared layout. The install guide has the steps for each framework.

<script src="https://pinthread.dev/embed.js"
  data-project="YOUR_PROJECT_KEY" defer></script>

02 · Create an agent token

Open your project in the dashboard and choose Agent access. A read token lists and reads threads. A write token can also reply, start, resolve, and reopen threads. Store it as PINTHREAD_TOKEN, never in your repository.

03 · Connect your agent

pinthread is a remote MCP server at https://pinthread.dev/mcp. The token decides which project the agent sees.

Claude Code

claude mcp add --transport http pinthread https://pinthread.dev/mcp \
  --header "Authorization: Bearer $PINTHREAD_TOKEN"

Run it in your project with PINTHREAD_TOKEN set to your agent token.

Cursor

{
  "mcpServers": {
    "pinthread": {
      "url": "https://pinthread.dev/mcp",
      "headers": { "Authorization": "Bearer ${env:PINTHREAD_TOKEN}" }
    }
  }
}

Save it as .cursor/mcp.json in your project.

Codex

[mcp_servers.pinthread]
url = "https://pinthread.dev/mcp"
bearer_token_env_var = "PINTHREAD_TOKEN"

Add it to ~/.codex/config.toml. Codex reads the token from PINTHREAD_TOKEN.

Other MCP clients work too. See Connect your coding agent.

04 · Tell your agent how to work

Add this to your AGENTS.md or CLAUDE.md, so every session follows the same steps:

When I mention pinthread comments, use the pinthread MCP tools. List the open threads, read each one with get_thread, then make the change and check it. Reply with what you changed. Resolve a thread only when you are confident the fix is complete. If a comment is a question or needs a decision, reply and leave it open.

05 · Run the loop

  1. A reviewer pins a comment on the element that needs to change.
  2. You ask your agent to fix the open pinthread comments.
  3. The agent calls list_threads, then get_thread for each one.
  4. It edits your code and checks the change.
  5. With a write token, it replies with what it changed and resolves the thread. A question stays open for you.

To react to new feedback as it arrives, the agent can call list_events. The tool list has every tool.

No MCP? Copy the comments

Open the expanded drawer and choose Copy all comments for agent. Paste the result into any agent that can read text. Resolved threads stay out of the prompt.

Questions

Which agents work with pinthread?

Any MCP client that supports streamable HTTP. This guide covers Claude Code, Cursor, and Codex. Other agents can take the copied comments as a prompt.

Can the agent change more than I want?

A read token can only list and read threads. Give the agent a write token only when it should reply to, start, resolve, or reopen threads.

Does pinthread run the agent or change my code?

No. pinthread gives your agent the context. Your agent edits your repository. pinthread does not run an agent, upload your repository, or change your code.

Comparing tools

See how pinthread compares with Agentation and Vercel comments.