Groundbase CRM
Groundbase CRM — CRM за $9 в месяц с рассылкой SMS и email прямо из ассистента
Что умеет
- Искать, создавать и обновлять контакты
- Отправлять SMS сразу или по расписанию
- Управлять компаниями и сделками в воронке
- Двигать сделки по стадиям и назначать задачи
- Просматривать историю переписки по контакту
Какие данные видит
Ассистент действует от имени владельца аккаунта Groundbase и отправляет сообщения через его собственные подключённые Twilio и Resend.
Нужен ли аккаунт
Не нужен: сервер работает без входа
Groundbase — CRM с фиксированной ценой 9 долларов в месяц, рассчитанная на одного технического основателя. В отличие от большинства CRM-коннекторов, которые только читают записи, Groundbase умеет реально отправлять SMS и письма, ставить контакты в цепочки и запускать сценарии — через собственные аккаунты Twilio и Resend пользователя без наценки. Поддерживает OAuth 2.1 и вход по API-ключу.
Как подключить
Как подключить Groundbase CRM к Claude
Адрес сервера, который нужно вставить в настройках Claude:
https://groundbase--adam-jsdb.run.tools
- Откройте Claude (сайт claude.ai или приложение для компьютера).
- Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
- Нажмите Добавить пользовательский коннектор (Add custom connector).
- Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
- В чате нажмите + → Коннекторы и включите новый коннектор.
Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.
Авторизация
После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.
Как подключить Groundbase CRM к ChatGPT
Адрес сервера, который нужно вставить в настройках ChatGPT:
https://groundbase--adam-jsdb.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 откроет окно входа в сервис. Войдите и подтвердите доступ.
Как подключить Groundbase CRM к Cursor
Адрес сервера, который нужно вставить в настройках Cursor:
https://groundbase--adam-jsdb.run.tools
Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.
Вручную:
- В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
- Вставьте JSON, скопированный ниже, в открывшийся файл
~/.cursor/mcp.json(для одного проекта:.cursor/mcp.jsonв корне проекта). - Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.
Авторизация
Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.
Список инструментов сервера (60)
Технические названия из tools/list. Нужны только разработчикам.
| contacts_list | List the user's contacts with optional search/pagination. Use this to find a contact before calling get/update/delete, or to summarize who's in the CRM. Defaults to 50 results; pass `limit` up to 200 for more. |
| contacts_get | Fetch a single contact by id, including tags, addresses, custom fields, and recent activity. |
| contacts_create | Create a new contact. At minimum, provide first_name or last_name or email — at least one of those is required. Phone numbers should be E.164 (+1...) when known; the API will normalize. |
| contacts_update | Patch an existing contact. Only include fields you want to change — omitted fields are left as-is. Pass an empty string to clear a field (vs. omitting it which keeps the current value). |
| contacts_delete | Soft-delete a contact (the row is hidden from lists but kept for audit/restore). DESTRUCTIVE — confirm with the user before calling unless they explicitly asked to delete. |
| sms_send_now | Send an SMS message to a phone number immediately. The recipient phone must be in E.164 format (+1...). Cost is billed at $0.025/segment (160 GSM chars per segment, 70 unicode). Pass contactId when available so the message attaches to that contact's thread. |
| sms_send_scheduled | Schedule an SMS message for future delivery. `scheduledAt` must be an ISO 8601 timestamp in the future (UTC or with offset). The per-minute cron dispatches scheduled messages as their time arrives. Same billing as send_now — final balance debit happens at fire time, so a top-up between scheduling and sending works. |
| sms_list_scheduled | List the user's pending scheduled SMS messages (status='scheduled', not yet sent). Useful for showing the user what's queued up or finding a message id to cancel. |
| sms_cancel_scheduled | Cancel a scheduled SMS that hasn't been sent yet. Only works while status='scheduled' — already-delivered messages can't be unsent. Returns 404 if the id is unknown or already fired. |
| sms_list_thread | List recent SMS messages in a thread with a specific phone number — useful for showing the last few exchanges before drafting a reply. |
| companies_list | List the user's companies. Use this to find a company before linking a contact to it, or to summarize accounts in the CRM. Note: like contacts.list, the current API caps the response server-side; pagination params are advisory until the cap is lifted. |
| companies_get | Fetch a single company by id (includes employees, deals, addresses, custom fields). |
| companies_create | Create a new company. Name is required. Website should include the protocol (https://...). Tags are created on the fly if missing. |
| companies_update | Patch a company. Only include fields you want to change. |
| companies_delete | Soft-delete a company. Contacts and deals previously linked to this company become unlinked but are NOT deleted themselves. DESTRUCTIVE — confirm with the user first. |
| deals_list | List deals. Returns all open + closed deals with their stage, value, contact, and company. Use this to summarize pipeline, find a deal to update, or filter by stage / value. |
| deals_get | Fetch a single deal by id, including notes, tasks, and the contact/company linked. |
| deals_create | Create a deal. title + stageId required. valueCents is in CENTS (so $1,500 = 150000). Link to a contact via contactId or a company via companyId (you can also pass both). |
| deals_update | Patch a deal. Only include fields to change. |
| deals_move_stage | Move a deal to a different pipeline stage. Common stage names are "Lead", "Qualified", "Proposal", "Won", "Lost", but the actual stages and their UUIDs are per-user — call deal_stages.list first if you don't know the destination stage id. |
| deals_delete | Soft-delete a deal. DESTRUCTIVE — confirm first. |
| deal_stages_list | List the user's pipeline stages in order. Call this BEFORE creating a deal or moving one between stages so you have the correct stage UUIDs. Returns name, color, position, and id. |
| tasks_list | List tasks/events/meetings for the user. Filter by `kind`, `status`, `contactId`, or date range. Defaults to showing open (status=open) items of all kinds. |
| tasks_get | Fetch a single task/event/meeting by id. |
| tasks_create | Create a task, event, or meeting. • `task` — has dueAt + optional recurrence. • `event` — has startAt + endAt. • `meeting` — has startAt + endAt + location. Title is required. Link to a contact (contactId), company (companyId), or deal (dealId). |
| tasks_update | Patch a task. Only include fields to change. |
| tasks_complete | Mark a task done. For recurring tasks, the server automatically spawns the next occurrence so the series keeps going — you don't need to create it manually. |
| tasks_delete | Soft-delete a task. DESTRUCTIVE — confirm first. |
| notes_list | List notes attached to a contact, company, or deal. Use this to show recent context before drafting a follow-up. Pass exactly one of contactId / companyId / dealId. |
| notes_create | Add a note to a contact, company, or deal. Notes are plain text and appear on the entity's timeline alongside calls, texts, and emails. Provide EXACTLY ONE of contactId / companyId / dealId. |
| notes_update | Edit an existing note's text. |
| notes_delete | Soft-delete a note. DESTRUCTIVE — confirm first. |
| tags_list | List all tags the user has defined. Useful before applying a tag to find its UUID, or to see what tags already exist before creating new ones. |
| tags_create | Create a new tag. Name is required. Color is a hex string like "#B91C1C". |
| tags_update | Rename a tag or change its color. |
| tags_delete | Delete a tag. Contacts previously tagged with it lose the tag but are NOT deleted. DESTRUCTIVE — confirm first. |
| tags_apply | Apply a tag to one or more contacts in bulk. Idempotent — contacts already tagged are skipped without error. Returns count of contacts the tag was newly applied to. |
| tags_remove | Remove a tag from one or more contacts in bulk. Idempotent. |
| sms_templates_list | List the user's SMS templates. Each template has a name, body, and (for email) subject. Use this to find an existing template before drafting a new one. |
| sms_templates_get | Fetch a single SMS template by id. |
| sms_templates_create | Create a new SMS template. Use {{first_name}} / {{last_name}} / {{full_name}} / {{company}} placeholders — they're substituted at send time. Returns the new template id. |
| sms_templates_update | Edit an existing SMS template. |
| sms_templates_delete | Soft-delete a SMS template. DESTRUCTIVE — confirm first. |
| email_templates_list | List the user's EMAIL templates. Each template has a name, body, and (for email) subject. Use this to find an existing template before drafting a new one. |
| email_templates_get | Fetch a single EMAIL template by id. |
| email_templates_create | Create a new EMAIL template. Use {{first_name}} / {{last_name}} / {{full_name}} / {{company}} placeholders — they're substituted at send time. Subject is required for email templates. Returns the new template id. |
| email_templates_update | Edit an existing EMAIL template. |
| email_templates_delete | Soft-delete a EMAIL template. DESTRUCTIVE — confirm first. |
| email_send | Send an email from the user's connected email account. `to` can be a single address or a comma-separated list. Provide `bodyHtml` (preferred), `bodyText` (plain), or both — at least one is required. Pass `contactId` when sending to a Groundbase contact so merge tags like {{first_name}} and {{cf.<field_key>}} resolve and the message threads against that contact. The user's saved signature is appended automatically. |
| dashboard_summary | Get top-of-app KPI summary: total contacts, open deals + their total value, won deals + their total value, messages sent/received this period. Plus a 30-day series for charting. |
| activity_list | Recent activity feed: SMS sent/received, calls, emails, notes added, deal stage changes, task completions. Returns most recent first. Use this to summarize "what happened with X" or build a weekly digest of CRM activity. |
| workflows_list | List the user's workflows with their trigger summary, step count, active/paused state, and last-run timestamp. Use this to see what automations exist before creating new ones or before modifying an existing one. |
| workflows_get | Fetch one workflow by id, including the full step tree and condition. Use this after workflows_list to inspect details before editing. |
| workflows_create | Create a workflow. `trigger_type` is one of "entity_event" (fires on contact.created etc.), "scheduled" (cron/one-time), "inbound_webhook" (when a Groundbase inbound webhook receives a POST), or "manual" (only fired by workflows_run_now). For entity_event, set trigger_event to e.g. "contact.created", "deal.stage_changed", "task.completed". For scheduled, pass trigger_config like { recurrence: "one_time"|"daily"|"weekly"|"hourly", run_at?, time_of_day?, days_of_week?, minute_of_hour?, timezone? }. For inbound_webhook, trigger_event is the inbound webhook id from inbound_webhooks_list. Steps run sequentially. Step shapes: `send_sms` { to?, body }; `send_email` { to, subject, body_html?, body_text?, contact_id? }; `apply_tag` { tag_name, entity_id?, entity_type? }; `remove_tag` { tag_name, entity_id?, entity_type? }; `create_note` { body, entity_type?, entity_id? }; `create_task` { title, description?, due_at?, due_in_days?, kind?, location?, contact_id? }; `fire_webhook` { url, method?, headers?, body? }; `update_field` { entity_type?, entity_id?, field, value } — restricted to a safe allow-list of native columns (first_name, last_name, email, phone, position, city, source, notes, primary_phone, company_id); `set_custom_field` { entity_type?, entity_id?, field_key, value } — writes to a custom field defined in Settings → Custom fields. field_key accepts "loan_amount" or "cf.loan_amount" (the cf. prefix is optional); `delay` { delay_seconds }; `branch` { condition: { all|any: [{ field, op, value }] }, then: [Step], else: [Step] }. Templates supported in string fields: {{first_name}}, {{trigger.event}}, {{steps.<id>.output.<key>}}. Step ids auto-generated as s_<8hex> if omitted; pass an explicit "id" to make {{steps.X.output.Y}} references stable across edits. |
| workflows_update | Patch a workflow. Only include fields you want to change. Useful for tweaking step config, updating the trigger event, switching trigger types (e.g. from manual to entity_event), or rewording the name. To toggle active/paused state, prefer workflows_pause / workflows_resume. NOTE: changing triggerType to entity_event or inbound_webhook usually means you also want to pass triggerEvent in the same call — otherwise the workflow may end up in an inconsistent state where the type is set but no matching event is configured. |
| workflows_pause | Pause a workflow so it stops firing on its trigger. Existing runs continue but no new ones start. Reversible via workflows_resume. |
| workflows_resume | Resume a paused workflow so it starts firing on its trigger again. |
| workflows_delete | Soft-delete a workflow. DESTRUCTIVE — confirm with the user before calling unless they explicitly asked to delete. |
| workflows_run_now | Manually fire a workflow on a specific entity, bypassing its trigger. Useful for testing a workflow you just authored, or for one-off automations the user invokes by name (e.g. "run my onboarding workflow on John Doe"). The entity must already exist; the workflow's trigger context is synthesized as { entity_type, entity_id, payload }. |
| inbound_webhooks_manage | Manage inbound webhooks (URLs the world POSTs to so Groundbase creates contacts/deals/tasks/etc.). Dispatched by `action`: - "list": list all of the user's inbound webhooks (URL token NOT returned). No other args. - "get": fetch one by id (URL token NOT returned). Requires `id`. - "create": author a new webhook. Returns the FULL URL with token ONCE — flag this to the user; it cannot be retrieved later. Most senders use mappingMode="native"; use "mapped" only when the sender has a fixed payload shape that needs translating. signingSecret is OPTIONAL. Requires `name`. - "update": patch fields. Requires `id`. Only pass the fields you want to change. - "delete": DESTRUCTIVE. The URL stops accepting POSTs immediately. Confirm with the user first. |