Skip to content

MCP Server

Connect Claude, Cursor, and other AI agents to FoxReach using the Model Context Protocol (MCP).

Overview#

FoxReach provides a hosted Model Context Protocol (MCP) server that lets AI agents manage your leads, campaigns, templates, and email accounts through natural language. No local installation required. Just point your AI client at https://api.foxreach.io/mcp and sign in to FoxReach.

Supported clients: Claude Desktop, Cursor, Claude Code, VS Code, Cline, Goose, Gemini CLI, and any MCP-compatible client that supports remote servers.

FoxReach is listed in the official MCP Registry as io.foxreach/foxreach, so clients that browse the registry can find it by name. Setup for every client is also on GitHub: foxreach/foxreach-mcp.

Prerequisites#

  • A FoxReach account with an active workspace
  • A compatible MCP client installed

Setup#

Claude Desktop#

  1. Open Claude Desktop settings

    Go to Settings > Connectors > Add custom connector.

  2. Add the FoxReach MCP server

    Enter FoxReach as the name and the following remote MCP server URL:

    https://api.foxreach.io/mcp
  3. Sign in to FoxReach

    Claude Desktop opens a browser window on FoxReach. Sign in the way you usually do (Google, an emailed sign-in link, or email and password) and click Allow. Once authorized, the MCP tools icon appears in the chat input area, confirming the connection.

Cursor#

Add FoxReach to Cursor installs the server in one step. To add it by hand instead:

  1. Open Cursor settings

    Go to Settings > MCP in Cursor.

  2. Add a new MCP server

    Click Add new MCP server and configure it with the following JSON:

    JSON
    {
      "foxreach": {
        "url": "https://api.foxreach.io/mcp"
      }
    }
  3. Verify connection

    Cursor prompts you to authenticate. Sign in to FoxReach in the browser window and click Allow. The server should show a green status indicator once connected.

Claude Code#

Run this command in your terminal:

Terminal
claude mcp add foxreach \
  --transport http \
  "https://api.foxreach.io/mcp"

Then run /mcp inside Claude Code to complete the FoxReach sign-in.

VS Code#

Add FoxReach to VS Code installs the server for GitHub Copilot chat. To add it by hand, put this in .vscode/mcp.json:

JSON
{
  "servers": {
    "foxreach": { "type": "http", "url": "https://api.foxreach.io/mcp" }
  }
}

VS Code asks you to sign in to FoxReach the first time a tool runs.

Cline#

In Cline, open MCP Servers > Remote Servers, add https://api.foxreach.io/mcp with the name foxreach, then click Authenticate and sign in to FoxReach. In cline_mcp_settings.json the entry is:

JSON
{
  "mcpServers": {
    "foxreach": { "type": "streamableHttp", "url": "https://api.foxreach.io/mcp" }
  }
}

Goose#

Add FoxReach to Goose adds FoxReach as a remote extension. Goose opens the FoxReach sign-in on first use.

Gemini CLI#

Install the FoxReach extension:

Terminal
gemini extensions install https://github.com/foxreach/foxreach-gemini-extension

Then sign in to FoxReach when Gemini CLI opens the browser on the first FoxReach tool call.

Other clients#

Add a remote Streamable HTTP server with the URL https://api.foxreach.io/mcp. Clients that support MCP sign-in discover it automatically and open the FoxReach sign-in page. Clients without sign-in support can send an API key, see Connect with an API key.

Available Tools#

FoxReach exposes 89 tools across fourteen resource categories:

Leads#

ToolRead/WriteDescription
list_leadsReadList leads with optional search and status filtering, and mail provider filtering (provider: google, microsoft, zoho, yahoo, godaddy, other, gateway, unresolved)
get_leadReadGet a single lead by ID
create_leadWriteCreate a new lead (deduplicates by email), optionally with custom_fields
import_csv_leadsWriteImport leads from a CSV: pass the file contents as csv_text (for example a file attached in Claude or ChatGPT, up to 2 MB) or the upload_id of a CSV uploaded in the FoxReach chat. Unmapped columns become custom fields named after their header; optional custom_mapping renames a column ({"z123": "p234"}) or leaves it out (null)
update_leadWriteUpdate an existing lead's fields. custom_fields sets the named custom fields and keeps the rest; null removes one
delete_leadWriteDelete a lead by ID
get_lead_activityReadGet a lead's full activity timeline: sends, replies, campaigns
list_lead_tagsReadList all lead tags in the workspace with lead counts
get_lead_providersReadCount the workspace's leads by mail provider, behind a security filter, and not checked yet (starts checking in the background)

Campaigns#

ToolRead/WriteDescription
list_campaignsReadList campaigns with optional status filtering
get_campaignReadGet a campaign by ID, including sequence steps
create_campaignWriteCreate a new campaign in draft status. Optional esp_matching sends each lead's first email from a mailbox on the same provider
update_campaignWriteRename a campaign or turn provider matching (esp_matching) on or off. Not editable while the campaign is active
delete_campaignWriteDelete a campaign (must be in draft status)
start_campaignWriteStart a draft campaign, begins sending
pause_campaignWritePause an active campaign
resume_campaignWriteResume a paused campaign
assign_leads_to_campaignWriteAdd leads to a campaign
remove_lead_from_campaignWriteRemove a lead from a campaign
assign_accounts_to_campaignWriteAssign sending email accounts to a campaign
remove_account_from_campaignWriteRemove a sending account from a campaign
list_campaign_leadsReadList leads enrolled in a campaign with pagination and status filtering
list_campaign_accountsReadList email accounts assigned to a campaign
get_campaign_esp_mixReadMailboxes and leads by mail provider (Google, Microsoft, other, not looked up yet), and whether provider matching is on

Sequences#

ToolRead/WriteDescription
list_sequencesReadList a campaign's sequence steps in order
create_sequenceWriteAdd a sequence step (email) to a campaign
update_sequenceWriteUpdate an existing sequence step
delete_sequenceWriteDelete a sequence step from a campaign

Templates#

ToolRead/WriteDescription
list_templatesReadList email templates with optional category filtering
get_templateReadGet a single template by ID
create_templateWriteCreate a new email template
update_templateWriteUpdate an existing template's fields
delete_templateWriteDelete a template by ID

Email Accounts#

ToolRead/WriteDescription
list_email_accountsReadList connected email accounts
get_email_accountReadGet an email account with warmup and health info
create_email_accountWriteConnect a new account via SMTP/IMAP app password
update_email_accountWriteUpdate display name, daily limit, or active status
enable_warmupWriteTurn on warmup for an account
disable_warmupWriteTurn off warmup for an account
get_email_account_healthReadGet deliverability and warmup health metrics
delete_email_accountWriteRemove an account
reconnect_email_accountWriteRe-authenticate a disconnected account with a new app password
get_email_account_warmupReadGet warmup progress, pool stats, and last 20 warmup logs for one account

Lead Finder#

search_people, search_companies, and count_lead_finder_results take filters as a typed object with named keys (not a free-form JSON string), so an unknown key is rejected with a 400 naming it instead of being silently dropped. get_lead_finder_filters lists every valid key.

ToolRead/WriteDescription
get_lead_finder_filtersReadGet valid industries, company types, countries, and the full list of filter keys
count_lead_finder_resultsReadCount people matching a set of filters
search_peopleReadSearch a licensed people database
search_companiesReadSearch the same database's company records
count_company_resultsReadCount companies matching a set of filters, without spending search budget
reveal_leadsWriteReveal work emails for people from a search (spends credits, does not add to Leads)
add_revealed_to_leadsWriteAdd people you already revealed to Leads, optionally into a campaign (free)
list_reveal_batchesReadList the workspace's reveal history for a month
get_reveal_batchReadCheck the status of a reveal batch
get_lead_finder_creditsReadGet the reveal credit balance and search budget usage
list_lead_finder_listsReadList the workspace's saved Lead Finder lists (people or company shortlists)
list_saved_searchesReadList the workspace's saved Lead Finder searches with their filters and last result

Tracking Domains#

ToolRead/WriteDescription
list_tracking_domainsReadList the workspace's custom tracking domains
add_tracking_domainWriteRegister a custom tracking domain
verify_tracking_domainWriteRe-check a tracking domain's provisioning status
delete_tracking_domainWriteRemove a custom tracking domain

Warmup#

ToolRead/WriteDescription
get_warmup_poolReadList warmup-enabled accounts with health and pool activity
get_warmup_statsReadAggregate warmup stats across the workspace's accounts
get_warmup_logsReadLast 50 warmup log entries for the workspace as sender or receiver
list_warmup_tagsReadList warmup pool tags sorted by name

Managed Mailboxes#

ToolRead/WriteDescription
check_domain_availabilityReadCheck if a domain is available to register, with price
suggest_domainsReadGet available domain name alternatives with prices
quote_managed_mailboxesReadPrice a set of domains and mailboxes
list_managed_mailboxesReadList the workspace's managed mailboxes
list_mailbox_ordersReadList the workspace's managed mailbox orders
get_managed_inbox_configReadPlatform pricing and limits: monthlyCents per platform, max mailboxes per domain, registration years
search_managed_inbox_domainsReadSearch for available domain names by keyword
get_mailbox_orderReadGet a single order's full detail: status, pricing, domains, and mailboxes

Analytics#

ToolRead/WriteDescription
get_workspace_overviewReadWorkspace-level stats: accounts, campaigns, leads, sends, reply rate
get_campaign_statsReadSent, delivered, bounced, replied, and opened counts for a campaign

Inbox#

ToolRead/WriteDescription
list_inbox_threadsReadList inbound reply threads with category filtering and search
get_inbox_conversationReadGet the full conversation for an inbox thread
send_inbox_replyWriteSend a reply to an inbox thread
get_inbox_statsReadInbox totals, unread count, and category breakdown
get_inbox_threadReadGet one thread's summary record by ID; never marks it read (use update_inbox_thread)
update_inbox_threadWriteChange a thread's category, read status, or starred status
delete_inbox_threadWritePermanently delete a thread from the inbox and IMAP server
get_inbox_categorize_statsReadReply category breakdown per variant, step, or day for research

Email Verification#

ToolRead/WriteDescription
get_verification_creditsReadGet the workspace's email verification credit balance and nearest expiry date
verify_emailWriteVerify a single email address; charges 1 credit for a billable result
verify_emails_bulkWriteVerify up to 10,000 emails in one call; charges one credit per billable result

Webhooks#

ToolRead/WriteDescription
list_webhooksReadList the workspace's registered webhook subscriptions
list_webhook_event_typesReadList all valid event type strings that can be subscribed to
create_webhookWriteRegister a new webhook endpoint for event delivery; returns the signing secret (an active duplicate returns the existing one). MCP clients only, not available in Fenn
delete_webhookWritePermanently remove a webhook subscription

Leads import#

ToolRead/WriteDescription
import_leadsWriteBulk-import up to 1,000 leads from a structured list; deduplicates by email

Example Prompts#

Once connected, you can use natural language to interact with FoxReach:

  • "List all my active campaigns": calls list_campaigns with status filter
  • "Create a lead for john@acme.com at Acme Inc": calls create_lead
  • "Pause the campaign named Q1 Outreach": calls list_campaigns to find it, then pause_campaign
  • "Show me all email templates": calls list_templates
  • "Draft a cold outreach template and save it": AI writes the copy, then calls create_template

Authentication#

The MCP server authenticates with OAuth, with FoxReach itself as the identity provider. Your MCP client opens a browser window on FoxReach's sign-in page; use Google, an emailed sign-in link, or your email and password, then approve the connection. Behind the scenes, FoxReach mints a short-lived session API key scoped to your personal workspace, so tool calls carry the same permissions and plan limits as the REST API.

All communication is encrypted via HTTPS.

Connect with an API key#

Hosts that cannot complete a browser-based sign-in flow (the Claude Messages API MCP connector, headless agents, CI, and most server-to-server integrations) can authenticate with a FoxReach API key instead of OAuth. Create one in Settings > Integrations > API Keys, then send it as either:

Authorization: Bearer otr_...

or, for hosts that only let you configure arbitrary headers:

X-API-Key: otr_...

Tool calls made with an API key run against that key's own workspace, and its scopes and plan limits apply exactly as they do for the REST API. A read-only key can still list tools, but gets a clear error back from any write tool.

Troubleshooting#

Tools not appearing in Claude Desktop Make sure the URL in your config is exactly https://api.foxreach.io/mcp. Restart Claude Desktop after making changes.

"401 Unauthorized" error Your session has expired or the tokens are stale. Clear the server's authentication in your MCP client and reconnect to sign in again.

"No FoxReach account found" error The account you signed in with has no FoxReach workspace. Sign in with the email you use for FoxReach, or create an account first.

Connection drops or timeouts Streamable HTTP connections are long-lived. Some network environments or proxies may drop idle connections. Your MCP client will automatically reconnect.

Tool calls returning errors The MCP tools call the FoxReach REST API under the hood. Check the error message. It follows the same error format as the API (e.g., 404 for not found, 409 for duplicate email).

Was this page helpful?
View as MarkdownLast updated November 3, 2026