Skip to Content
MCP server

MCP server

WebPinch ships an MCP  server (@webpinch/mcp) that exposes your tasks, projects, site audits, and stats to Claude Code, Cursor, and any other MCP client.

It’s a thin client over the REST API — same auth, same authorization, same response data. Where the REST API gives you raw HTTP endpoints, MCP gives you tools the model can call directly.

What you get

  • 13 tools for reading and writing tasks, projects, audits, and stats
  • 4 resources for browseable, mention-able data (projects, tasks, audit reports)
  • 3 prompts for common workflows (triage, audit summary, weekly status)
  • Pre-flight scope checks so write attempts fail fast with a clear message instead of an HTTP 403

Install

You’ll need:

  1. A WebPinch personal access token. Mint at Dashboard → API Tokens.
  2. Node 18+ on the machine running the MCP client.

Edit ~/.claude.json and add to (or merge with) your mcpServers block:

{ "mcpServers": { "webpinch": { "command": "npx", "args": ["-y", "@webpinch/mcp"], "env": { "WEBPINCH_TOKEN": "wp_pat_...", "WEBPINCH_API_URL": "https://www.webpinch.com" } } } }

Fully restart Claude Code (quit, don’t just close the window). Run /mcpwebpinch should be listed as connected with 13 tools, 4 resources, 3 prompts.

Local development? Replace WEBPINCH_API_URL with http://localhost:3000. If you’re running the MCP server from a checkout (not yet published to npm), swap the command/args to node /absolute/path/to/mcp-server/src/index.js.

Environment variables

VarDefaultNotes
WEBPINCH_TOKEN(required)Your wp_pat_… token
WEBPINCH_API_URLhttps://www.webpinch.comBase URL of the WebPinch instance
WEBPINCH_TRANSPORTstdioSet to http to self-host over Streamable HTTP instead — see Hosted HTTP transport
PORT8787Only used when WEBPINCH_TRANSPORT=http

The token is read at server startup and never logged or echoed in tool output. Network errors redact it explicitly.

Tools

Read

ToolArgsReturns
whoamiUser, token name + scopes, accessible orgs and projects
list_projectsorgSlug?Project list, optionally scoped to one org
get_projectprojectIdProject detail incl. columns + members
list_tasksprojectId?, status?, priority?, assigneeId?, label?, q?, limit?, page?Compact task list
get_tasktaskIdFull task incl. comments, checklists, attachments, screenshot/pin
list_auditsprojectId? or orgSlug?, limit?Audit summaries
get_auditauditIdFull audit report
dashboard_statsorgSlug?Counts by status/priority, recent projects

Write

ToolArgsScope
create_taskprojectId, title, description?, priority?, status?, labels?, assigneeIds?, pageUrl?, dueDate?tasks:write
update_tasktaskId, any of title/description/status/priority/assigneeIds/labels/dueDate/dueDateCompletetasks:write
comment_on_tasktaskId, bodytasks:write
start_auditprojectId, maxDepth?, maxPages?audits:run
reanalyze_auditauditIdaudits:run

Output is pruned for token efficiency. List tools never include descriptionHtml or full activity logs — call the matching get_* tool when you need detail.

Scope pre-flight

Write tools fetch your scopes once via whoami and cache them. If you ask the model to do something your token can’t do, the tool throws before any HTTP request:

This action requires the “tasks:write” scope. Your token does not have it. Mint a new token with that scope at /dashboard/settings/api.

Server-side scope enforcement still runs as the source of truth — pre-flight is purely a UX optimization to give the model a useful error message instead of an opaque HTTP 403.

Resources

Resources are URIs the model can pull without you naming a tool. In Claude Code’s resource picker / Cursor’s @-mention:

URITypeContent
webpinch://projectsJSONAll accessible projects
webpinch://projects/{projectId}/tasksJSONTask list for a project
webpinch://tasks/{taskId}JSONSingle task detail
webpinch://audits/{auditId}/report.mdMarkdownAudit rendered as a Markdown report — sections for Crawl, Links, SEO, General checks

The Markdown audit report is the friendliest way to feed audit results into a chat — it’s pre-formatted, prioritized, and short.

Prompts

Prompts are saved instructions that compose tools. They show up as slash commands or prompt picks in your client.

triage_new_tasks

Args: projectId?, sinceHours? (default 24).

Pulls tasks created in the last N hours, walks each for context (description, screenshot, reporter), and proposes priority + assignee + a one-sentence rationale as a markdown table. Doesn’t mutate anything — review before applying.

summarize_audit

Args: projectId.

Fetches the latest audit for the project, categorizes findings (Critical / High / Medium / Low), and writes a fix list with affected URLs and one-sentence fixes. Ends with a “Top 3 actions for this week” section.

weekly_status

Args: orgSlug?.

Pulls stats and recent activity, drafts a < 200-word status note in Markdown — what’s new, what’s at risk, per-project progress, what’s coming due.

Hosted HTTP transport

The MCP spec supports both stdio (process-per-client) and Streamable HTTP (hosted) transports. WebPinch runs both, and they expose the same tools, resources and prompts — pick whichever your client supports.

Use ours (no install)

WebPinch hosts an MCP endpoint at https://www.webpinch.com/api/mcp. Nothing to install and nothing to keep running — useful for clients that accept a remote MCP URL, such as the Claude.ai and ChatGPT connectors.

{ "mcpServers": { "webpinch": { "url": "https://www.webpinch.com/api/mcp", "headers": { "Authorization": "Bearer wp_pat_..." } } } }

Authentication is per request via the Authorization header rather than an environment variable, so the same endpoint serves every user — the token decides what you can see. The endpoint is stateless and CORS-enabled.

A GET returns a small discovery document, which is a quick way to confirm reachability:

curl https://www.webpinch.com/api/mcp # {"ok":true,"name":"webpinch-mcp","version":"0.2.1","transport":"http","endpoint":"/api/mcp"}

Self-host it

If you’d rather run it inside your own network, the same server speaks HTTP:

WEBPINCH_TRANSPORT=http PORT=8787 WEBPINCH_TOKEN=wp_pat_... npx -y @webpinch/mcp

It listens on POST /mcp (and /v1/mcp for compatibility).

stdio remains the right default for local editors — Claude Code, Cursor and Windsurf all launch the process themselves, so there’s nothing to host and the token stays in your local config.

Troubleshooting

SymptomLikely cause
Server shows “disconnected” in /mcpThe startup command failed. Run npx -y @webpinch/mcp manually with the same env vars — the error message is the bug.
WEBPINCH_TOKEN is requiredThe env var isn’t being passed by the MCP client. Check the env block in your config — env vars from your shell are NOT inherited.
INSUFFICIENT_SCOPE after pre-flight passesThe whoami cache is stale because you re-minted the token mid-session. Fully restart the MCP client.
Project has no URL configured on start_auditSet the project URL in Dashboard → Project Settings.
Read tools work but everything is emptyToken is valid but inherits no project access. Run whoami to verify what’s visible.

See also

Last updated on