On this page
MCP
MCP server that exposes the same workspace operations as Public REST, plus MCP-only helpers such as wait_for_campaign_leads. MCP only calls the Public API with the user’s API key — it does not hold mailbox or Maps provider secrets.
Host: https://mcp.notiq.io
Canonical docs: https://docs.notiq.io. White-label vanity MCP must not advertise NotiQ docs.
First-time setup runbook: Agent setup.
Auth (resolution order)
MCP accepts any of:
X-API-Key: sk_live_…Authorization: Bearer sk_live_…Authorization: Bearer mcp_at_…— OAuth access token from the consent flow
| Client | Typical method |
|---|---|
| Cursor | X-API-Key in MCP client headers |
| Claude / ChatGPT | OAuth — paste sk_… on the consent page (see Connect Claude / ChatGPT) |
Rules:
- Discovery /
initialize/tools/listmay omit a key;tools/callrequires one. - Outbound REST always uses
X-API-Keyonly (never Bearer, nevermcp_at_). - Never ask the user to paste a key into chat.
Tools ↔ REST
| MCP tool | REST |
|---|---|
get_credits | GET /credits |
validate_email | POST /tools/validate-email |
validate_emails | POST /tools/validate-emails |
enrich_website | POST /tools/enrich-website |
list_accounts | GET /accounts |
list_campaigns | GET /campaigns |
create_campaign | POST /campaigns |
get_campaign | GET /campaigns/:id |
wait_for_campaign_leads | MCP-only poll of GET /campaigns/:id until ready (extensionStatus null); keeps polling while extend is FINDING_LEADS |
get_insights_overview | GET /insights/overview |
get_recent_activity | GET /activity |
start_campaign | POST /campaigns/:id/start |
pause_campaign | POST /campaigns/:id/pause |
list_leads | GET /campaigns/:id/leads |
get_lead | GET /campaigns/:id/leads/:leadId |
add_lead | POST /campaigns/:id/leads |
add_leads_batch | POST /campaigns/:id/leads/batch |
update_lead | PATCH /campaigns/:id/leads/:leadId |
update_leads_batch | POST /campaigns/:id/leads/batch-update |
delete_leads_batch | POST /campaigns/:id/leads/batch-delete |
send_message | POST /inbox/messages |
get_setup_status | GET /setup |
list_templates | GET /templates |
get_template | GET /templates/:id |
create_template | POST /templates |
update_template | PATCH /templates/:id |
delete_template | DELETE /templates/:id |
assign_template | POST /campaigns/:id/template |
list_tags | GET /tags |
create_tag | POST /tags |
update_tag | PATCH /tags/:labelKey |
set_campaign_goal | POST /campaigns/:id/overview-goal |
list_excluded_leads | GET /excluded-leads |
add_excluded_leads | POST /excluded-leads |
remove_excluded_leads | POST /excluded-leads/remove |
list_excluded_domains | GET /excluded-domains |
add_excluded_domains | POST /excluded-domains |
remove_excluded_domains | POST /excluded-domains/remove |
create_manual_campaign | POST /campaigns/manual |
rename_campaign | PATCH /campaigns/:id |
delete_campaign | DELETE /campaigns/:id |
delete_lead | DELETE /campaigns/:id/leads/:leadId |
pause_resume_agent | POST /campaigns/:id/leads/:leadId/agent |
preview_lead | POST /campaigns/:id/leads/:leadId/preview |
update_account_limits | PATCH /accounts/:id |
delete_account | DELETE /accounts/:id |
create_mailbox_connect_link | POST /accounts/connect-link |
create_mailbox_reconnect_link | POST /accounts/:id/reconnect-link |
Count: 48 tools. Not shipped: LinkedIn tools. wait_for_campaign_leads is MCP-only (no new REST route).
wait_for_campaign_leads
MCP-only helper that polls campaign readiness after Maps create_campaign (or while UI “Add more leads” / file-import extend runs). It waits until status is ready (READY_TO_SEND / already sending / paused / done) and extensionStatus is null; keeps polling while discovering or while extensionStatus === "FINDING_LEADS". On time_budget, resume with the same campaignId. Optional bounded minLeads; default readiness is by status + extension. Discovery does not send email — still confirm before start_campaign. Use the user’s full numberOfSearch (credit-bound).
Recipes
| Goal | Tool call |
|---|---|
| First run / blockers | get_setup_status |
| Connect a mailbox | create_mailbox_connect_link with mailboxKind gmail | outlook | imap — user opens connectUrl |
| Maps find-N leads | create_campaign with full numberOfSearch → wait_for_campaign_leads until READY_TO_SEND with extensionStatus null (resume on time_budget) |
| Manual agent → campaign | create_template → assign_template → preview_lead → confirm → start_campaign |
| Overview goal | set_campaign_goal with Meeting booked (not “Meetings”) |
| Custom reply tags | list_tags / create_tag / update_tag then update_lead |
| Workspace do-not-contact | exclude-desk tools (list_* / add_* / remove_*) |
| Dry-run copy | preview_lead |
| Interested leads | list_leads(tag="Interested") |
| Set CRM slots | update_lead / update_leads_batch with custom1…custom10 (detail via get_lead) |
| Waiting on you | list_leads(needsReply=true) |
| Excluded campaign leads | list_leads(excluded=true) |
| Last reply | get_recent_activity(type="reply_received") |
| Check one address | validate_email (mode=mx is free) |
| Personalization snippet | enrich_website (0 credits) |
Argument schemas live on MCP tools/list after connect.
Credits & safety (for agents)
- At call time, credits may be charged by
add_lead/add_leads_batch(1 per create) and byvalidate_email/validate_emails(1 per full-validation API hit inmode=full;mode=mxand cache hits are free). Setup, templates, tags, goals, exclude desk, mailbox connect, campaign/lead/account ops, enrich, batch update/delete, start/pause, and send are 0 credits. Maps discovery still debits 1 per email lead found asynchronously. - Confirm with the user before:
delete_template,delete_campaign,delete_lead,delete_leads_batch,delete_account,remove_excluded_leads,remove_excluded_domains,send_message,start_campaign(real email from a connected mailbox). update_templateis echo-all — callget_templatefirst.- Start with
get_setup_status, thenlist_accounts/list_campaignsfor ids; paginate withnextCursor.
Related
- Agent setup
- GET /setup
- Templates · POST /templates
- Reply tags · Overview goal
- Exclude desk
- Mailbox connect
Discovery endpoints (no auth)
| Path | Role |
|---|---|
/health | Liveness + whether Public API base is configured |
/, /.well-known/mcp.json | Slim discovery JSON (tool names + blurbs) |
/.well-known/oauth-authorization-server | OAuth AS metadata |
/.well-known/oauth-protected-resource | OAuth resource metadata |
/llms.txt | Short machine-readable summary |
/mcp | Streamable HTTP MCP endpoint |
/authorize, /token, /register | OAuth / DCR (Claude/ChatGPT style clients) |
Connection tip (Cursor)
{
"mcpServers": {
"notiq": {
"url": "https://mcp.notiq.io/mcp",
"headers": {
"X-API-Key": "sk_live_…"
}
}
}
}
Create the key at /api-mcp.