pesky.ai

Developers · every paid plan

Pesky MCP server

Ask your AI assistant what your competitors did this week, or have it add the one you just heard about. Pesky's remote MCP server gives Claude, Cursor, VS Code and any MCP client your dashboard as tools.

Connect

Server URL
https://www.pesky.ai/api/mcp
Transport
Streamable HTTP
Auth
Sign in with your Pesky account (OAuth) in clients that support it, or the header Authorization: Bearer pesky_… with a key from Settings → Developers on your dashboard

claude.ai and Claude Desktop

  1. Open Settings → Connectors and choose Add custom connector.
  2. Name it Pesky and paste https://www.pesky.ai/api/mcp as the URL. No key needed.
  3. Press Connect, sign in to Pesky if asked, and choose Allow.

Pesky then shows up in your chats' tools. You'll see it under Connected apps in Settings → Developers, where Disconnect ends it at once.

Claude Code

Sign in: add the server, then run /mcp in Claude Code and choose Authenticate.

Terminal
claude mcp add --transport http pesky https://www.pesky.ai/api/mcp

Or with a key instead:

Terminal
claude mcp add --transport http pesky https://www.pesky.ai/api/mcp \
  --header "Authorization: Bearer pesky_YOUR_KEY"

Cursor

In ~/.cursor/mcp.json (or .cursor/mcp.json in a project):

mcp.json
{
  "mcpServers": {
    "pesky": {
      "url": "https://www.pesky.ai/api/mcp",
      "headers": { "Authorization": "Bearer pesky_YOUR_KEY" }
    }
  }
}

VS Code

In .vscode/mcp.json; VS Code asks for the key once and keeps it out of the file:

mcp.json
{
  "inputs": [
    { "type": "promptString", "id": "pesky-key", "description": "Pesky API key", "password": true }
  ],
  "servers": {
    "pesky": {
      "type": "http",
      "url": "https://www.pesky.ai/api/mcp",
      "headers": { "Authorization": "Bearer ${input:pesky-key}" }
    }
  }
}

Claude Desktop, with a key

To use a key instead of the connector above, connect through the mcp-remote bridge (needs Node.js). In Settings → Developer → Edit Config, add to claude_desktop_config.json and restart:

claude_desktop_config.json
{
  "mcpServers": {
    "pesky": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://www.pesky.ai/api/mcp", "--header", "Authorization:${PESKY_AUTH}"],
      "env": { "PESKY_AUTH": "Bearer pesky_YOUR_KEY" }
    }
  }
}

Any other client

Point it at the server URL. Clients that support MCP sign-in find everything they need on their own; others send the header above. To check a key by hand:

curl
curl https://www.pesky.ai/api/mcp \
  -H "Authorization: Bearer pesky_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_companies","arguments":{}}}'
A key or a connection acts as you, with your plan's limits. Signing in asks you to allow two things: reading (and scanning), and changing your competitor lists. Give each assistant its own key or connection, so you can end one without breaking the rest.

Tools

Every tool takes an optional company: one of your company ids from list_companies. Without it, the tool uses the company your dashboard shows.

ToolDoesWhat it does
list_companiesreadYour companies, their ids, and which one your dashboard shows.
list_competitorsreadA company's competitor list: name, website, priority, whether you knew them, what they do, domain rating, the latest reading.
get_signalsreadWhat moved lately: competitor moves, what people say about you on LinkedIn, launches near your moat.
get_historyreadMorning by morning, which competitors moved and how (days: 1 to 60).
get_latest_briefreadThe last morning brief sent: when, its subject, and its contents.
get_launchesreadNew launches judged close to your moat, with why each came up.
scan_sitereadScan any website for its competitors: category, the closest one and up to 10 more, with why. Up to 90 seconds; five an hour.
add_competitorchangePut a company on the list by its website (and name).
set_prioritychangeSet a competitor's priority: high, medium or low.
mark_knownchangeSay whether you knew a competitor before Pesky.
remove_competitorremovesTake a competitor off the list. Your assistant should ask you first.

Each result has a one-line summary and the data as JSON (also as structured content, for clients that read it).

Things to ask

  • “What did my competitors change this week? Only the high-priority ones.”
  • “Summarize this morning's Pesky brief in three bullets.”
  • “Add rival.io as a competitor and make it high priority.”
  • “Which launches near our moat came up this month, and which look most like us?”
  • “Who's on my list that I hadn't heard of before Pesky?”
  • “Scan rival.io and tell me which of its competitors I'm not watching yet.”

Details

  • Protocol versions 2025-06-18, 2025-03-26 and 2024-11-05. Replies are plain JSON; there's no event stream and no session to keep.
  • The same keys, limits and errors as the REST API: 60 calls a minute per key, and every paid plan. On JOLT, tools answer with an error saying so.
  • A missing or revoked key gets HTTP 401; a tool that can't do what was asked answers with isError and a message saying why.
  • Sign-in is OAuth 2.1 with PKCE (S256) and dynamic client registration; pesky.ai is the authorization server. Discovery: /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server. Scopes: mcp:read and mcp:write (both when none is asked). Access tokens last an hour; refresh tokens change on every use.

Questions, or something you'd like the API to do? Email ruz@pesky.ai.

Pesky 2026 Tallinnas, Kadriorus Partners · API · Terms · Privacy · · Stats