ConnectMachine MCP

ConnectMachine MCP server: manage contacts, events, networks, and digital business cards

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • List Contacts: List contacts with pagination, search, and filtering. Args: page: Page number (1-indexed). limit: Results per page (max 100). search: Free-text search across name, company, job title, e
  • Get Contact: Get full details for a single contact. Args: contact_id: The contact UUID. Returns: Contact object with infos, tags, notes, location, and meeting details.
  • Create Contact: Create a new contact. Args: first_name: Contact first name (required). last_name: Contact last name. company: Company name. job_title: Job title / designation. network_id: Network/labe

What data it sees

Do you need an account

No: the server works without sign-in

ConnectMachine MCP server: manage contacts, events, networks, and digital business cards

How to connect

How to connect ConnectMachine MCP to Claude

The server address to paste into Claude settings:

https://cm-mcp--connectmachine.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect ConnectMachine MCP to ChatGPT

The server address to paste into ChatGPT settings:

https://cm-mcp--connectmachine.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect ConnectMachine MCP to Cursor

The server address to paste into Cursor settings:

https://cm-mcp--connectmachine.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (40)

Raw names from tools/list. Only developers need these.

list_contactsList contacts with pagination, search, and filtering. Args: page: Page number (1-indexed). limit: Results per page (max 100). search: Free-text search across name, company, job title, email, phone, notes, location, meeting location, and event names. E.g. "founder" matches job titles, "WebSummit" matches events. network_id: Filter by network/label ID. network_name: Filter by network/label name (Consumer API). status: Filter by contact status (e.g. active). industry_ids: Filter by industry IDs (see list_industries). country: Filter by country name(s), comma-separated. state: Filter by state name(s), comma-separated. city: Filter by city name(s), comma-separated. sort: Sort field — created_at, first_name, last_name, company. order: Sort direction — asc or desc. Returns: Paginated list of contacts with total count.
get_contactGet full details for a single contact. Args: contact_id: The contact UUID. Returns: Contact object with infos, tags, notes, location, and meeting details.
create_contactCreate a new contact. Args: first_name: Contact first name (required). last_name: Contact last name. company: Company name. job_title: Job title / designation. network_id: Network/label ID to assign the contact to (default network when omitted). notes: Free-text notes about the contact. bio: Short bio / description of the contact. industry_id: Industry ID to assign (see list_industries). emails: List of email objects, e.g. [{"value": "j@co.com", "label": "Work"}]. phones: List of phone objects, e.g. [{"value": "+1555123", "label": "Mobile"}]. events: List of event names where you met the contact (created if missing). Returns: The created contact object.
update_contactUpdate an existing contact's fields, contact info, and events. Only provided (non-empty) fields are changed. `emails`/`phones` REPLACE the contact's existing emails/phones respectively; other contact info types (websites, socials) are preserved. If you only have the contact's name (not their ID), call find_contact first. If it returns multiple matches, ask the user which one before calling this tool — never guess when contacts share a name. Args: contact_id: The contact UUID (required — from find_contact or a prior list/search call). first_name: New first name. last_name: New last name. company: New company. job_title: New job title. notes: New notes (replaces existing). bio: New bio (replaces existing). network_id: Move contact to this network/label. industry_id: Set the contact's industry (see list_industries). emails: Full new list of email objects, e.g. [{"value": "j@co.com", "label": "Work"}]. phones: Full new list of phone objects, e.g. [{"value": "+1555123", "label": "Mobile"}]. add_events: Event names to attach, e.g. where you met (created if missing). remove_events: Event names to detach from the contact. Returns: The updated contact object.
delete_contactsDelete one or more contacts. This is irreversible. If you only have a contact's name, call find_contact first. If it returns multiple matches, ask the user which one before deleting — never guess when contacts share a name. Args: contact_ids: List of contact UUIDs to delete (from find_contact or a prior list/search call). Returns: Confirmation with count of deleted contacts.
search_contactsSearch contacts by name, company, job title, email, phone, notes, location, meeting location, or event name. Examples: "founder" (job title), "Acme" (company), "WebSummit" (event where you met), "Berlin" (location / meeting location). This is a convenience wrapper around list_contacts with search; use list_contacts for industry or country/state/city filters. Args: query: Search text. limit: Max results to return (default 10). Returns: Matching contacts.
find_contactResolve a contact's name to a contact_id before calling update_contact, delete_contacts, or any tag/network tool that takes a contact_id. ALWAYS call this before acting on a contact by name. If two or more contacts share that name, this returns status="ambiguous" with every match — STOP and ask the user which one they mean before doing anything else. Never guess based on which one looks more "recent" or "complete"; a wrong guess edits/deletes/tags the wrong person's data. Args: name: Full name to look up, e.g. "Meraj Ansari". company: Optional company to narrow an ambiguous result. Returns: status="found" with a single `contact`, status="ambiguous" with a `matches` list (ask the user to pick one, then call this tool again with company set, or use the chosen contact_id directly), or status="not_found".
list_industriesList all industries (predefined + user-created) with their IDs. Use the IDs with list_contacts(industry_ids=...) to filter contacts by industry, or with create_contact/update_contact to set a contact's industry. Returns: Array of industry objects: id, name.
get_contact_countsGet how many contacts you have and where they came from. Returns the all-time total plus a breakdown by source, e.g. "ai" (added through an AI tool like this one), "manual", "qr", "import", "link", "nfc", "share_back". Returns: total, onboarded, and by_source counts. When the network is larger than the scan limit, `by_source` covers the most recent contacts and `breakdown_note` says how many were scanned.
get_duplicate_contactsFind duplicate contact groups. Returns: List of duplicate groups, each containing the matching contacts.
merge_contactsMerge duplicate contacts into one. Runs the required merge-preview step first (the backend builds the merge plan from it), then executes the merge with the previewed contact, optionally overridden by `fields`. Args: group_id: The numeric duplicate group ID from get_duplicate_contacts. contact_ids: The contact UUIDs in the group to merge (min 2). fields: Optional overrides for the merged contact, e.g. {"first_name": "Jane", "company": "Acme"}. Returns: The merged contact object.
assign_contacts_to_networkMove one or more contacts to a different network/label. Args: contact_ids: List of contact UUIDs to move. network_id: Target network UUID. Returns: Confirmation of the update.
list_networksList all networks (labels / contact groups) with contact counts. Returns: Array of network objects: id, name, description, contactsCount, isDefault.
create_networkCreate a new network (label / contact group). Args: name: Network display name (required). description: Optional description. Returns: The created network object.
update_networkUpdate a network's name or description. Args: network_id: The network UUID (required). name: New name (if non-empty). description: New description (if non-empty). Returns: The updated network object.
delete_networkDelete a network. Contacts in this network are moved to the default network. Args: network_id: The network UUID. Returns: Confirmation.
reorder_networksSet the display order of networks. Args: network_ids: Ordered list of network UUIDs (first = top). Returns: Confirmation.
list_eventsList the user's events, e.g. conferences and meetups where contacts were met. To see who you met at an event, search contacts by the event name. Returns: Array of event objects: id, name, type, created_at, updated_at.
add_events_to_contactAttach one or more events to a contact — e.g. where you met them. Event names are resolved to existing events or created if missing. If you only have the contact's name, resolve it with find_contact first — ask the user which contact if it's ambiguous. Args: contact_id: The contact UUID. event_names: Event names to attach, e.g. ["Web Summit 2026"]. Returns: Confirmation.
remove_events_from_contactDetach events from a contact by name. Args: contact_id: The contact UUID. event_names: Event names to remove from the contact. Returns: Confirmation, or a no-op note if none of the names matched.
create_import_sessionStart a new contact import session. The session tracks import progress and can be used for batch imports. Args: label: Human-readable label for this import batch (e.g. "Salesforce Q1 2026"). source: Import source identifier — "csv", "phonebook", or "crm". Returns: Import session object with id and status.
import_contacts_batchImport a batch of contacts into an existing import session. Each contact should have: first_name, last_name, company, job_title, and an infos array with {type, value, label} entries. Max 500 contacts per batch. Call multiple times for larger imports. Args: import_id: The import session UUID from create_import_session. contacts: Array of contact objects to import. Example: [{"first_name": "Jane", "last_name": "Doe", "company": "Acme", "infos": [{"type": "email", "value": "jane@acme.com", "label": "Work"}]}] Returns: Import progress with records_imported and records_skipped counts.
get_import_statusCheck the status of an import session. Args: import_id: The import session UUID. Returns: Session object with status (pending/in_progress/completed), records_imported, records_skipped, started_at, finished_at.
list_import_sessionsList all import sessions for the authenticated user. Returns: Array of import session objects.
abort_importCancel an in-progress import session. Args: import_id: The import session UUID. Returns: Confirmation.
export_contacts_csvExport contacts as CSV. Requires ConnectMachine Premium — free accounts get a clear upgrade message instead of the export. Args: network_id: Optional — export only contacts from this network/label. Omit to export all contacts from every network. Returns: Export result with download_url and expires_at.
list_cardsList the authenticated user's business cards. Args: include_archived: True returns every card, archived ones included. False (default) returns only active, non-archived cards. Returns: Array of card objects with id, label, first_name, last_name, company, job_title, social_links, profile_pic_url.
get_cardGet full details for a single business card. Args: card_id: The card UUID. Returns: Card object with all fields, infos, social links, and share settings.
create_cardCreate a new business card. Args: label: Card display label (required). first_name: First name on the card (required). last_name: Last name on the card. company: Company name. job_title: Job title / designation. emails: Email entries, e.g. [{"value": "j@co.com", "label": "Work"}]. phones: Phone entries, e.g. [{"value": "+1555123", "label": "Mobile"}]. websites: Website entries, e.g. [{"value": "example.com", "label": "Website"}]. A missing scheme is normalized to https://. social_links: Social profile entries, e.g. [{"value": "https://linkedin.com/in/jane", "label": "LinkedIn"}]. `label` should be the platform name (LinkedIn, Twitter/X, Instagram, GitHub, YouTube, TikTok, WhatsApp, etc.) — the web/App Clip card picks the icon from it. `value` may be a full URL or a bare handle; for a known platform a handle is expanded to the full profile URL. Returns: The created card object.
update_cardUpdate a business card's fields. Only non-empty fields are updated. Args: card_id: The card UUID (required). label: New card label. first_name: New first name. last_name: New last name. company: New company. job_title: New job title. emails: Full new list of email objects, e.g. [{"value": "j@co.com", "label": "Work"}]. Replaces existing emails; other info types are preserved. phones: Full new list of phone objects, e.g. [{"value": "+1555123", "label": "Mobile"}]. Replaces existing phones; other info types are preserved. websites: Full new list of website objects, e.g. [{"value": "example.com", "label": "Website"}]. A missing scheme is normalized to https://. Replaces existing websites; other info types are preserved. social_links: Full new list of social profile objects, e.g. [{"value": "https://linkedin.com/in/jane", "label": "LinkedIn"}]. `label` should be the platform name (drives the web/App Clip icon); `value` may be a full URL or a bare handle (expanded for known platforms). Replaces existing social links; other info types are preserved. Returns: The updated card object.
delete_cardDelete a business card permanently. Args: card_id: The card UUID. Returns: Confirmation.
get_shared_cardFetch a business card's public details via its share link ID. This does not require authentication — used when a CRM receives a ConnectMachine share link. Args: share_id: The short share ID from a mycm.ai link. Returns: Public card details: name, company, title, contact info, social links.
read_card_imageExtract contact information from a business card image using AI/OCR. Provide either image_base64 (the card photo) or ocr_text (pre-extracted text), or both for best accuracy. Args: image_base64: Base64-encoded card image (JPEG/PNG). ocr_text: Pre-extracted OCR text from the card. latitude: Optional — current latitude for location enrichment. longitude: Optional — current longitude for location enrichment. Returns: Extracted contact fields: first_name, last_name, company, job_title, infos (emails, phones, websites), and location.
list_notificationsList notifications for the authenticated user. Args: notification_type: Filter by type — system, card_share, connection_request, netsend. is_unread: Only return unread notifications. limit: Results per page (max 100). offset: Offset for pagination. Returns: Paginated list of notifications.
get_unread_countGet the count of unread notifications. Returns: Object with unread_count field.
mark_notification_readMark a single notification as read. Args: notification_id: The notification UUID. Returns: Confirmation.
mark_all_notifications_readMark all notifications as read, optionally filtered by source. Args: source: Optional — only mark notifications from this source as read. Returns: Confirmation with count of notifications marked.
get_profileGet the authenticated user's profile. Returns: User object: id, first_name, last_name, email, phone, company, designation, bio, subscription status, profile_pic_url.
get_subscription_statusGet the user's current subscription status and available plans. Lists the monthly and yearly subscriptions only. One-off purchases and trial details are left out, so an assistant does not offer them as if they were plans. Returns: Subscription details: whether the account is paid, the active and previous subscriptions, and the monthly/yearly plans with prices.
get_enrichment_dataGet auto-enrichment data for the authenticated user. Uses public data to suggest profile completions: name, company, designation, social profiles. Returns: Enrichment suggestions with confidence scores.
ConnectMachine MCP: connect to Claude, ChatGPT, Cursor · Connectors.fun