ConnectMachine MCP
ConnectMachine MCP server: manage contacts, events, networks, and digital business cards
Что умеет
- 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
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
ConnectMachine MCP server: manage contacts, events, networks, and digital business cards
Как подключить
Как подключить ConnectMachine MCP к Claude
Адрес сервера, который нужно вставить в настройках Claude:
https://cm-mcp--connectmachine.run.tools
- Откройте Claude (сайт claude.ai или приложение для компьютера).
- Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
- Нажмите Добавить пользовательский коннектор (Add custom connector).
- Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
- В чате нажмите + → Коннекторы и включите новый коннектор.
Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.
Авторизация
После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.
Как подключить ConnectMachine MCP к ChatGPT
Адрес сервера, который нужно вставить в настройках ChatGPT:
https://cm-mcp--connectmachine.run.tools
- Откройте ChatGPT в браузере (chatgpt.com). Нужен тариф Plus, Pro, Business, Enterprise или Edu.
- Один раз включите режим разработчика: Настройки → Приложения → Дополнительные настройки → Режим разработчика (Settings → Apps → Advanced settings → Developer mode).
- Откройте Настройки → Коннекторы и нажмите Создать (Create).
- Заполните форму: Название (любое), Описание (одна фраза, что делает сервис), URL MCP-сервера (скопируйте ниже).
- В поле Аутентификация выберите OAuth, если сервис требует вход, иначе Нет. Нажмите Создать.
- В новом чате откройте + → Приложения/Коннекторы и включите коннектор.
Название раздела у OpenAI менялось (Connectors → Apps/Plugins). Если пункт называется иначе, ищите «режим разработчика» в настройках. В рабочих пространствах Business/Enterprise администратор должен разрешить пользовательские коннекторы.
Авторизация
При первом использовании ChatGPT откроет окно входа в сервис. Войдите и подтвердите доступ.
Как подключить ConnectMachine MCP к Cursor
Адрес сервера, который нужно вставить в настройках Cursor:
https://cm-mcp--connectmachine.run.tools
Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.
Вручную:
- В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
- Вставьте JSON, скопированный ниже, в открывшийся файл
~/.cursor/mcp.json(для одного проекта:.cursor/mcp.jsonв корне проекта). - Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.
Авторизация
Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.
Список инструментов сервера (40)
Технические названия из tools/list. Нужны только разработчикам.
| 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, 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_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/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_contact | Update 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_contacts | Delete 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_contacts | Search 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_contact | Resolve 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_industries | List 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_counts | Get 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_contacts | Find duplicate contact groups. Returns: List of duplicate groups, each containing the matching contacts. |
| merge_contacts | Merge 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_network | Move 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_networks | List all networks (labels / contact groups) with contact counts. Returns: Array of network objects: id, name, description, contactsCount, isDefault. |
| create_network | Create a new network (label / contact group). Args: name: Network display name (required). description: Optional description. Returns: The created network object. |
| update_network | Update 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_network | Delete a network. Contacts in this network are moved to the default network. Args: network_id: The network UUID. Returns: Confirmation. |
| reorder_networks | Set the display order of networks. Args: network_ids: Ordered list of network UUIDs (first = top). Returns: Confirmation. |
| list_events | List 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_contact | Attach 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_contact | Detach 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_session | Start 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_batch | Import 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_status | Check 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_sessions | List all import sessions for the authenticated user. Returns: Array of import session objects. |
| abort_import | Cancel an in-progress import session. Args: import_id: The import session UUID. Returns: Confirmation. |
| export_contacts_csv | Export 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_cards | List 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_card | Get 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_card | Create 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_card | Update 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_card | Delete a business card permanently. Args: card_id: The card UUID. Returns: Confirmation. |
| get_shared_card | Fetch 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_image | Extract 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_notifications | List 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_count | Get the count of unread notifications. Returns: Object with unread_count field. |
| mark_notification_read | Mark a single notification as read. Args: notification_id: The notification UUID. Returns: Confirmation. |
| mark_all_notifications_read | Mark 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_profile | Get 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_status | Get 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_data | Get 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. |