MCP & AI Connections

MCP (Model Context Protocol) connects your feedback to an external AI tool. Use a hosted HTTPS connection for browser clients, or the local npm server for coding tools. The built-in AI Assistant is a separate dashboard chat.

Find MCP settings and your token

Open any project and click MCP directly in the project sidebar. It is a separate item beside Comments, Board, and Assets. From the workspace, use Workspace settings → MCP & AI connections. You can also open MCP settings directly.

Only workspace owners can authorize external connections or generate account API tokens. Team members should ask the owner to connect the workspace. Project access is selected during browser authorization; opening setup from a project does not grant access automatically.

For a token or API key, find Local API tokens, give the token a name, and click Generate token. Copy it immediately: the full value is shown once. Local tokens have account-wide read, write, and settings access. Use hosted OAuth authorization for read-only or selected-project access.

Availability and Pricing

MCP is included on supported paid plans, including Solo, Team, Pro, Agency, Enterprise, and Unlimited lifetime plans, and during the 14-day trial. It is not available on the free plan after the trial. Use get_connection_info to check the connected account's current plan and access.

There is no separate MCP subscription or per-request fee. Hosted MCP allows 120 authenticated requests per minute per connection. The local server's MCP API allows 120 requests per minute per integration token. These are MCP limits, not a plan-specific allowance; your AI provider's usage limits apply separately. See Troubleshooting for rate-limit recovery.

Hosted connection: ChatGPT and Claude

The hosted MCP route uses your existing Simple Commenter domain:

https://www.simplecommenter.com/api/mcp

Hosted MCP is enabled by default after deployment. Deployment operators can optionally disable it with MCP_ENABLED=false. Check the server status in MCP settings before connecting. Hosted connection unavailable means that hosted access is disabled or unavailable on that deployment; use the local setup below while it is unavailable. The URL by itself does not establish a working connection.

The hosted URL uses Streamable HTTP. It is the address to paste into a remote MCP client. The npm package runs locally over stdio and does not provide a URL to paste into ChatGPT. Browser setup uses OAuth sign-in; it does not require you to generate or paste a local API token.

ChatGPT

  1. Open MCP in the project sidebar and select ChatGPT.
  2. In ChatGPT, enable Developer mode under Settings → Security and login.
  3. Open Plugins, choose +, and create a developer-mode app using the hosted server URL. Choose OAuth authentication and dynamic client registration when offered.
  4. Sign in to Simple Commenter. Select the permitted projects and allowed actions, then authorize the connection.
  5. In a chat, select the app from Developer mode in the plus menu. Ask: “List my projects and show unresolved feedback.”

Custom app access depends on the ChatGPT account and workspace policy. This server supports dynamic client registration (DCR), rather than Client ID Metadata Documents (CIMD). See OpenAI's developer-mode guide for current client requirements.

Claude

  1. Open Customize → Connectors in Claude.
  2. Choose + → Add custom connector, paste the hosted URL, and add the connector.
  3. Connect and sign in to Simple Commenter, then select projects and approve the allowed actions.
  4. Enable the connector for the conversation from + → Connectors, then ask Claude to list your feedback.

Organization owners may need to add the connector first. See Claude's custom connector guide.

Choose access and disconnect

Browser authorization starts with read access and selected projects. Enable write access only when the client should create comments, reply, or triage feedback. Settings access permits administrative operations. Workspace-wide access, including future projects, is a separate explicit choice; creating projects and managing the workspace team require it as well as settings access.

AccessPermitted actionsProject scope
ReadRead feedback, search, export, report, and manage this connection's report/export jobs.Selected projects, or explicitly approved workspace access.
WriteCreate website comments, reply, upload reply files, change status/priority/tags/visibility, and archive or restore feedback.Only projects included in the connection.
SettingsRead and change supported project settings; inspect the selected project's assigned team.Only projects included in the connection.
Settings + all current and future projectsCreate projects, list the workspace team, add members, change project assignments, and remove team members.Workspace-wide administrative access.

Read access is always included. Write and settings access are optional and independent; enabling one does not enable the other. A client's tool approval dialog cannot expand the access granted in Simple Commenter.

In MCP → Connected apps, review allowed actions, permitted projects, and last use. Click Disconnect to revoke a connection. To add projects or change permissions, reconnect from the AI client and complete authorization again. Revocation also invalidates that connection's saved downloads and job results.

What your AI can do

Read feedback with project context, screenshot references, replies, tags, current statuses, and direct dashboard links. Search, export, and reporting apply the connection's project permissions. Changes require the appropriate granted access.

The connection gives your AI access to feedback. Editing website code also requires access to the relevant code repository and development tools.

Try a workflow

  • “List my projects and show the current statuses for my website.”
  • “Find urgent feedback created this week, including feedback on assets.”
  • “Export all feedback from this project to CSV, including archived comments.”
  • “Create a report of feedback by project, status, and priority.”
  • “Show me the proposed changes before moving these three comments to review.”

Tool reference

The hosted and local servers share these 27 tools. Your client discovers their JSON input schemas automatically. The tables below use their exact parameter names. Supply project_id from list_projects for a single-project tool; a local configured default can supply it when omitted. Hosted setup does not set a default project. Tool availability follows the connected server version; refresh discovery after upgrading and check hosted availability in settings.

Tool Access Inputs and behavior
get_connection_info Read No inputs. Account plan, permissions, project grant, and connection details.
list_projects Read No inputs. Authorized projects, stable IDs, and dashboard links.
get_project_context Read project_id. Live statuses, custom status labels, tags, and project features.
list_comments Read project_id, optional feedback filters, limit, offset. One project's feedback.
get_comment Read project_id, comment_id, optional asset_id. Full detail, replies, file references, element context, and developer brief when available.
search_comments Read Optional feedback filters, limit, offset. Search across authorized projects.
search Read query. Up to 100 citable sources; truncated signals more matches. Use search_comments for paginated retrieval.
fetch Read id returned by search. Full source content and citation URL; arbitrary URLs are not fetched.
export_comments Read Optional feedback filters. Complete matching set as a downloadable CSV.
feedback_report Read Optional feedback filters. Complete totals and breakdowns, with a Markdown download.
update_comment_status Write project_id, comment_id, and status and/or priority; optional asset_id, idempotency_key.
update_comment Write project_id, comment_id, and at least one of status, priority, tags, visibility, archived; optional asset_id, idempotency_key.
create_comment Write project_id, page, text; optional title, status, priority, comma-separated tags, anchor_selector, anchor_text, anchor_tag, idempotency_key. Creates website feedback.
reply_to_comment Write project_id, comment_id, text; optional asset_id, attachments containing upload_id, idempotency_key.
prepare_attachment_upload Write project_id, filename, mime_type, exact byte size. Returns a signed PUT URL and upload_id.
bulk_update_comments Write items and idempotency_key. Each item specifies project_id, comment_id, optional asset_id, and one or more update fields. Maximum 100 distinct items; returns each outcome.
get_project_settings Settings project_id. Supported non-secret settings.
update_project_settings Settings project_id and settings. Changes only the supplied supported settings.
create_project Settings + workspace name, idempotency_key, optional domain. Creates a website project within plan limits.
list_team_members Settings Optional project_id. Required for a selected-project grant; omitting it lists the workspace team only with workspace-wide access.
add_team_member Settings + workspace email, idempotency_key; optional name, project_id, role (only team). Adds access without sending an invitation email.
assign_team_member Settings + workspace project_id, member_id, assigned (true to assign, false to unassign).
remove_team_member Settings + workspace member_id. Removes the member from the workspace and its projects; cannot remove the owner.
start_task Read operation (export_comments or feedback_report), arguments containing feedback filters, and idempotency_key. Starts a background job.
get_task Read task_id. Progress or final result for this connection's job.
list_tasks Read Optional limit, offset. This connection's jobs.
cancel_task Read task_id. Cancels an unfinished job; completed results remain available until expiry.

Filters and complete results

Feedback filters are project_id or project_ids (up to 50), query (search is an alias), comma-separated status, priority, and tags, exact page slug, author, created_after, created_before, include_archived, source, and asset_id. list_comments uses one project_id rather than project_ids. Dates use ISO timestamps with a timezone; both endpoints are inclusive. Tags match any supplied tag. Text search matches titles and comment text, not the reply thread.

source accepts all, website, or asset and defaults to all. include_archived defaults to false. Deleted feedback is always excluded. Without project filters, search, exports, and reports cover every project in the connection's grant, including when the local setup has a default project.

list_comments, search_comments, and list_tasks return total and next_offset. Use that offset until it is null; each page defaults to 50 records and accepts a limit of 1–100 and offset of 0–1,000,000. Search text is limited to 1,000 characters. An export or report processes the entire matching set without limit or offset. Both have a maximum of 50,000 comments and an 8 MiB generated file limit; narrow the project or date range if exceeded.

Dashboard links require sign-in and the viewer's own access. Website feedback links open the Board item when it is available in the active view; asset links open the asset viewer. Archived feedback may not open in the active Board; retrieve its detail with get_comment or restore it when appropriate.

For example, call search_comments with these arguments, then use the returned next_offset to continue:

{
  "project_ids": ["PROJECT_ID"],
  "created_after": "2026-09-01T00:00:00Z",
  "created_before": "2026-09-06T23:59:59Z",
  "priority": "high,urgent",
  "source": "all",
  "include_archived": false,
  "limit": 100,
  "offset": 0
}

Export CSV from the dashboard

Open a project → Comments or BoardExport CSV, beside Add comment. Choose All website feedback for all accessible statuses or Current filters for the complete filtered set, including records below the fold. On Board, filtered export waits for all statuses to finish loading. Both dashboard choices exclude archived and asset feedback. General → Export Feedback also exports all website feedback.

Use MCP export_comments with source: "all" and include_archived: true when you need assets and archived feedback, or cross-project exports. MCP CSV rows include project, comment, status, priority, tags, author, creation date, source, page or asset, archive state, dashboard URL, screenshot URL, and comment and reply attachment URLs. Dashboard CSV also includes the reply thread; the MCP CSV does not include reply text.

Updating feedback safely

Read get_project_context before choosing a status; custom and enabled statuses vary by project. Priorities are low, normal, high, and urgent. For updates, tags is a replacement array (up to 30 tags); [] clears tags. visibility is all or team, and changing it can change client visibility. archived: true archives feedback; false restores it. Restore archived feedback before replying or making other changes. There is no permanent-delete tool. New comments and replies accept up to 30,000 text characters; a new comment's optional title accepts up to 500. Tags contain 1–40 letters, numbers, underscores, or hyphens.

Use an idempotency_key for create/reply retries. It is required for bulk updates, project/member creation, and background jobs: 8–128 letters, digits, underscores, periods, colons, or hyphens. Reuse exactly the same key and arguments when retrying the same action; receipts last seven days. If the earlier outcome is uncertain, inspect the affected item before sending a new key. Bulk results can contain successful and failed items, so review each outcome.

Project and team administration

get_project_settings and update_project_settings support projectName, domain, active, enabledStatuses, emailNotifications, emailFrequency, notifyOnOwnComments, drawing, screenshots, uploads, commentTitle, metaData, minimized, clientAccess, and tokenAccess. Read the current settings before changing access controls. clientAccess is open, request, or invite; tokenAccess is a boolean. Status names must already exist in the project. emailFrequency accepts minute, 15minutes, hourly, daily, weekly, or monthly. Other settings and credentials are not exposed by these tools.

Adding a team member through MCP does not send an invitation email. Ask the workspace owner to arrange access through the dashboard when an invitation is needed.

Reports, tasks, and reusable workflows

Use start_task for an export or report that takes longer to produce. For example, these arguments start a CSV of website and asset feedback:

{
  "operation": "export_comments",
  "arguments": {
    "project_id": "PROJECT_ID",
    "source": "all",
    "include_archived": true
  },
  "idempotency_key": "feedback-export-2026-09-06"
}

Save the returned task_id. Call get_task with {"task_id":"TASK_ID"} no sooner than the returned poll_interval_ms (currently 3,000 ms). Status is queued, running, completed, failed, or cancelled; a completed task includes result and its download artifact. cancel_task stops an unfinished job. Jobs are private to the connection that started them and expire 24 hours after creation. New starts are rejected when the connection already has five unfinished jobs. Background processing uses the same data and file-size limits as direct exports.

Download links last 15 minutes. While a completed job and its stored artifact remain available, retrieving the job renews an expired download link. Artifact content is retained for 24 hours after creation; renewal does not extend that retention. Regenerate a direct export after its link expires, or start a new job after the old one expires. Screenshot and attachment links inside a CSV expire separately; generate a fresh export when you need new file links.

These are regular MCP tools; support for experimental protocol task APIs is not required.

Compatible clients can browse connection, project, comment, and job resources, or use the triage_feedback, release_report, and investigate_comment prompts. Hosts that support MCP Apps can display a read-only feedback browser. Other clients receive ordinary tool results and links.

Reply attachments

Attachment uploads require a client capable of uploading files to a signed URL. Call prepare_attachment_upload with these arguments (the size is the actual file size in bytes):

{
  "project_id": "PROJECT_ID",
  "filename": "review.png",
  "mime_type": "image/png",
  "size": 12345
}

Upload those bytes with HTTP PUT to the returned upload_url, using its headers, before the returned expires_at (15 minutes). Then call reply_to_comment:

{
  "project_id": "PROJECT_ID",
  "comment_id": "COMMENT_ID",
  "text": "Here is the updated screenshot.",
  "attachments": [{ "upload_id": "UPLOAD_ID" }],
  "idempotency_key": "review-reply-2026-09-06"
}

Each upload is usable once, in the same project and connection. Its declared type and size must match the uploaded object. MCP accepts files up to 100 MiB and at most 10 files per reply; plan file-size, file-count, type, storage, and retention limits may be lower. Uploads must be enabled for the project. Arbitrary remote URLs and local file paths are not imported as attachments.

Local workflow preferences

Local setup can disable AI-created comments or replies. These preferences are enforced for local tool calls. Status choices are read for the selected project; use get_project_context after changing projects to inspect its current workflow.

Local setup: Cursor and Claude Code

Step 1: Run the setup wizard

From your project's root directory, run:

npx @simple-commenter/mcp-server init

Alternatively, install the command globally and run it:

npm install -g @simple-commenter/mcp-server
simple-commenter-mcp init

Step 2: Choose the project and preferences

The wizard will:

  1. Authenticate with your email and a 6-digit code
  2. Let you pick a default project
  3. Configure status preferences for AI workflows
  4. Ask whether the agent may write replies and create comments
  5. Create a .mcp.json in your project root if one does not already exist

Email code didn't arrive?

Generate an API key in MCP settings (MCP → Local API tokens → Generate token) and pass it directly to skip the email step:

npx @simple-commenter/mcp-server init --token "$SIMPLE_COMMENTER_API_TOKEN"

Set SIMPLE_COMMENTER_API_TOKEN to your token in your local shell or secret manager first. The quotes pass its value as one argument. The wizard's --token option skips email verification; init does not automatically read the environment variable unless you pass it this way. Never include a real token in shared instructions or screenshots.

Step 3: Restart Your AI Tool

Restart Claude Code, Cursor, or whichever AI tool you use. The MCP server will be available automatically.

Verify Your Setup

simple-commenter-mcp doctor

This checks Node.js version, config file and its permissions, token, API connectivity, default project, and .mcp.json — reports pass/fail for each. Without a global installation, run npx @simple-commenter/mcp-server doctor instead.

Configuration

.mcp.json

The wizard writes a node command pointing to its installed index.js and leaves any existing .mcp.json unchanged. For a manual, portable setup, merge this entry into your client's MCP configuration:

{
  "mcpServers": {
    "simple-commenter": {
      "command": "npx",
      "args": ["-y", "@simple-commenter/mcp-server", "serve"]
    }
  }
}

Environment Variable (CI / Docker)

For automated environments, pass the token as an environment variable instead of using the config file:

{
  "mcpServers": {
    "simple-commenter": {
      "command": "npx",
      "args": ["-y", "@simple-commenter/mcp-server", "serve"],
      "env": {
        "SIMPLE_COMMENTER_API_TOKEN": "REPLACE_WITH_API_TOKEN"
      }
    }
  }
}

You can generate a token from the MCP settings or via CLI login.

Authentication Priority

The server checks for credentials in this order:

  1. --token <token> CLI flag
  2. SIMPLE_COMMENTER_API_TOKEN environment variable
  3. ~/.simple-commenter/config.json (from init command)

Managing local tokens

Open MCP → Local API tokens or go directly to MCP settings to generate named tokens, inspect last use, and revoke credentials you no longer need.

Revoking an API token disconnects every local tool using that token. Browser-authorized apps have separate credentials and are managed under Connected apps.

CLI Commands

CommandDescription
simple-commenter-mcp initSetup wizard — login + pick project
simple-commenter-mcp serveStart MCP server (default, used by AI tools)
simple-commenter-mcp doctorHealth check — verify setup + connectivity
simple-commenter-mcp statusShow account info + projects
simple-commenter-mcp resetRemove config + .mcp.json (clean slate)

login and logout still work as aliases for init and reset.

Security

  • Credentials are stored in ~/.simple-commenter/config.json with chmod 600 (owner-only)
  • The server warns if file permissions are too open
  • For shared machines, use environment variables instead of the config file
  • Add .simple-commenter/ to your .gitignore

Never commit your API token to version control. Use environment variables in CI/CD pipelines.

Troubleshooting

Hosted connection and permissions

Problem Recovery
Hosted connection unavailable Check the status in MCP settings. Hosted MCP defaults to on, but the deployment can disable it with MCP_ENABLED=false or be unavailable. Use local setup while the deployment issue is resolved.
No MCP URL in the npm instructions Use https://www.simplecommenter.com/api/mcp for a remote connection. npm/stdio is the local setup.
Cannot authorize or manage connections Sign in as the workspace owner. Team members and clients cannot create owner credentials.
Authorization request expired or invalid Restart Connect in the AI client. Old consent URLs and authorization codes cannot be reused.
OAuth registration fails Use supported DCR, or client credentials supplied for a configured static client. This server does not advertise CIMD. Check the AI client's workspace restrictions.
Connection revoked, expired, or invalid token Reconnect through the AI client and authorize again. For local tools, generate a replacement token and update the local configuration.
A project is missing or project not found Call list_projects and get_connection_info. Use a returned ID; reconnect to add missing projects. Opening MCP from a project does not grant it automatically.
A write or settings permission is required Reconnect and approve the needed scope. Read-only access permits queries, reports, and exports. Project/team administration may also require all current and future projects.
MCP unavailable on current plan Inspect get_connection_info and the account's plan. A trial may have ended; open the returned upgrade link if needed.
Too many requests / 429 Wait for the HTTP Retry-After interval when supplied, then retry with backoff. Hosted requests are limited to 120/minute per connection, local MCP API requests to 120/minute per token.
New tools missing in the AI client Refresh the app's discovered tools or reconnect. Update the installed local package when using npm.

Feedback, exports, and uploads

Problem Recovery
Only 50 or 100 comments were returned Follow next_offset until null, or use export_comments for the complete matching set.
Assets or archived comments are absent from dashboard CSV Dashboard export covers active website feedback. Use MCP with source: "all" and include_archived: true for broader exports.
Current filters export is disabled on Board Wait for all statuses to load. Reload if background loading failed.
Export exceeds size limits / 413 Narrow project or date filters. Jobs have the same 50,000-comment and 8 MiB limits as direct exports.
Download link expired Retrieve the original job again while it is available, or generate a new export. Fresh embedded screenshot/file links require a new export.
Job result says original access is unavailable The original grant, project, connection, or plan changed. Reconnect with the appropriate access and start new work.
Five unfinished jobs / 429 Wait for a job to finish or cancel an unfinished job before starting another.
Status is invalid or feedback is archived Read current project statuses. Restore archived feedback before replying or updating it.
Duplicate key or operation already running Reuse the same arguments for the same idempotency key. Inspect the earlier outcome before issuing a new key.
Upload incomplete or expired PUT the exact file bytes before replying. For an expired reference, prepare a new upload in the same project and connection.
File type, size, or storage limit rejected Check the project's upload setting and account storage/file limits; choose a permitted file.
Client cannot upload bytes to a signed URL Attach the file through the dashboard instead. A local path or web URL in tool arguments is not an upload.

Local setup

CheckFix
Config file not foundRun simple-commenter-mcp init
No authentication tokenRun init or set SIMPLE_COMMENTER_API_TOKEN
API connection failedCheck your internet connection; verify the API URL
No default project setRun init and select a project
.mcp.json not foundRun init from your project root (where package.json or .git is)

Still having issues?

Run simple-commenter-mcp doctor for local diagnostics. For hosted issues, include the client name, MCP settings status, tool name, and error code when contacting support. Leave out tokens, authorization codes, signed download URLs, and private feedback.

Next Steps

Was this page helpful?