MCP server
GenuineLink hosts a remote Model Context Protocol (MCP) server so Cursor, Claude, and other MCP clients can call your GenuineLink data with tools — using the same public API keys as the REST API. No local process to run.
Connection URL
https://developer.genuinelink.ai/mcp
Transport: Streamable HTTP (JSON-RPC). Authenticate every request with your API key in headers — the same keys you create under Account or Agency settings.
Authentication
Authorization: Bearer glc_…for a company key.Authorization: Bearer gla_…for an agency key.- Agency keys acting on a client company also need
X-Company-Idwith that company's opaque public ID (fromlist_agency_companiesor the REST endpoint).
Prefer environment-variable interpolation in client config so keys are not committed to git. Never share raw keys in chat logs.
Cursor
Add a remote Streamable HTTP server in ~/.cursor/mcp.json (or project .cursor/mcp.json). Use type: "http" (not streamable-http — that alias breaks some Cursor CLI parsers):
{
"mcpServers": {
"genuinelink": {
"type": "http",
"url": "https://developer.genuinelink.ai/mcp",
"headers": {
"Authorization": "Bearer glc_YOUR_KEY_HERE"
}
}
}
}Agency key scoped to a company:
{
"mcpServers": {
"genuinelink": {
"type": "http",
"url": "https://developer.genuinelink.ai/mcp",
"headers": {
"Authorization": "Bearer gla_YOUR_KEY_HERE",
"X-Company-Id": "YOUR_OPAQUE_COMPANY_ID"
}
}
}
}Prefer "Authorization": "Bearer ${env:GENUINELINK_API_KEY}" after exporting the key in your shell environment. Use strict JSON (no trailing commas). After saving, reload MCP from Cursor Settings → MCP, or restart Cursor.
If the server shows as errored, open Output → MCP Logs. A valid config POSTs initialize then tools/list with your Bearer header — tools stay unavailable only when auth fails or mcp.json is invalid.
Claude Desktop / remote MCP
Clients that support remote HTTP MCP use the same URL and Bearer header. Example shape:
{
"mcpServers": {
"genuinelink": {
"type": "http",
"url": "https://developer.genuinelink.ai/mcp",
"headers": {
"Authorization": "Bearer glc_YOUR_KEY_HERE"
}
}
}
}Available tools
A curated subset of the public API — list/read operations plus safe, high-value mutations. All IDs in tool input/output are opaque public IDs (not database IDs).
Auth & agency
check_api_key— Validate the configured GenuineLink API key and return its scope (COMPANY or AGENCY), key name, and resolved company/agency IDs.list_agency_companies— List client companies under the authenticated agency.
Campaigns
list_campaigns— List outreach campaigns for the company, newest first.get_campaign— Fetch a single campaign by opaque campaign ID (settings snapshot, status, linked accounts/list refs).get_campaign_sequence— Return the campaign sequence graph (nodes and edges) for inspection or explanation.get_campaign_leads— Page through leads enrolled in a campaign's list.start_campaign— Start a draft/initialize campaign (moves it to ACTIVE).pause_campaign— Pause an ACTIVE campaign.resume_campaign— Resume a PAUSED campaign back to ACTIVE.add_campaign_leads— Add one or more leads (by LinkedIn URL) into a campaign.
Lists & leads
list_lists— List lead lists (uploads) for the company.get_list— Get metadata for one lead list (name, total leads, status).get_list_leads— Page through leads inside a list.create_list— Create an empty named lead list.add_list_leads— Add leads (by LinkedIn URL) to an existing list.get_lead— Fetch one lead by opaque lead ID (profile fields, list membership, tags).get_lead_tags— List tags currently assigned to a lead.add_lead_tags— Add tag names to a lead (creates tags if missing).
Inbox & accounts
list_conversations— List LinkedIn inbox conversations for a company LinkedIn account (newest activity first).get_conversation— Fetch one conversation plus recent messages (chronological).send_message— Send a text message in an existing LinkedIn conversation.set_conversation_seen— Mark a conversation as seen (read) or unseen (unread).list_linkedin_accounts— List LinkedIn accounts connected to the company (opaque IDs, status, profile summary).get_linkedin_account— Get one LinkedIn account by opaque ID.
Stats & webhooks
get_overall_stats— Return high-level company totals: campaigns, active campaigns, lists, leads, LinkedIn accounts, and acceptance rate.list_webhooks— List outbound webhook subscriptions for the company (events, URL, enabled).create_webhook— Create an outbound webhook subscription (HTTPS URL + event list).get_webhook— Get one webhook subscription by opaque webhook ID.
Tips
- Call
check_api_keyfirst if auth looks wrong. - Prefer
list_*tools to discover IDs beforeget_*or mutations. send_messagereaches a real LinkedIn conversation — confirm intent before calling.- Full REST coverage remains at
https://app.genuinelink.ai/api/v1.