Plyto
Plyto: CRM для малого бизнеса с контактами, сделками и задачами прямо в ассистенте
Что умеет
- Создавать и искать контакты и компании
- Управлять тегами и пользовательскими свойствами записей
- Сохранять и вспоминать заметки-правила для бизнеса
- Просматривать список задач и автоматизаций
- Запускать отчёты по данным CRM
Какие данные видит
Доступ выдаётся по API-ключу конкретного бизнеса; ассистент видит данные CRM этого аккаунта, но не может тратить средства, рассылать сообщения массово, публиковать или удалять записи.
Нужен ли аккаунт
Нужен API-ключ из настроек сервиса
Plyto — CRM для малого бизнеса, и этот сервер открывает доступ к платформе из ассистента через персональный API-ключ. Можно создавать и искать контакты и компании, вести сделки по воронке, работать с задачами, заметками и автоматизациями, запускать отчёты. Всё, что связано с тратами денег, массовыми рассылками, публикацией или удалением, заблокировано на уровне MCP и остаётся под ручным контролем в приложении Plyto.
Как подключить
Как подключить Plyto к Claude
Адрес сервера, который нужно вставить в настройках Claude:
https://plyto--grayross01.run.tools
- Откройте Claude (сайт claude.ai или приложение для компьютера).
- Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
- Нажмите Добавить пользовательский коннектор (Add custom connector).
- Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
- В чате нажмите + → Коннекторы и включите новый коннектор.
Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.
Авторизация
После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.
Как подключить Plyto к ChatGPT
Адрес сервера, который нужно вставить в настройках ChatGPT:
https://plyto--grayross01.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 откроет окно входа в сервис. Войдите и подтвердите доступ.
Как подключить Plyto к Cursor
Адрес сервера, который нужно вставить в настройках Cursor:
https://plyto--grayross01.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. Нужны только разработчикам.
| memory__save | Save (or update) a durable memory — a standing preference, playbook rule, correction, or business fact that should hold across ALL future conversations. Use when the user says "remember…", "always…", "never…", "from now on…", states a lasting preference, or corrects how you did something. One distilled rule per memory, ≤500 characters. If an existing memory covers the same topic (they're listed in your context with ids), pass its memoryId to UPDATE it instead of creating a near-duplicate. Do NOT save one-off task details, secrets, credentials, or personal contact data — contact facts belong on the contact (crm.notes.add). |
| memory__list | List every durable memory you hold for this business (business-wide plus the current user's personal ones), with ids and when each was last confirmed. Use before consolidating, when the user asks what you remember, or to find a memoryId to update/forget. |
| memory__forget | Permanently delete a saved memory. Destructive — confirm with the user first unless they just explicitly asked you to forget exactly this. Users can also remove memories themselves under Settings → Business profile. |
| crm__contacts__create | Create a contact (or find-and-update if one with the same email already exists in this business). Returns the created/updated contact. Use when the user mentions adding, capturing, or tracking a new person. Email is the natural dedup key — if you have an email, always pass it. |
| crm__contacts__update | Update fields on an existing contact. Only pass fields you want to change. No-op fields are silently skipped. |
| crm__contacts__get | Fetch a single contact by id. Returns null if not found in this business. |
| crm__contacts__list | List contacts in this business with simple filters. For free-text search use crm.contacts.search. For complex filters use crm.contacts.query (W3). |
| crm__contacts__search | Free-text search across contact email, first/last name, and phone. Case-insensitive substring match. Returns up to 20 contacts by default. |
| crm__contacts__get_properties | Return all custom property values for a contact as a {key: value} map. |
| crm__companies__create | Create a company (or find-and-update if one with the same domain already exists). Domain is the natural dedup key — always pass the bare domain like 'acme.com' (not the full URL). |
| crm__companies__update | Update fields on an existing company. Only pass fields you want to change. |
| crm__companies__get | Fetch a single company by id. Returns null if not found. |
| crm__companies__list | List companies in this business. For text search use crm.companies.search. |
| crm__companies__search | Free-text search across company name, domain, and industry. Case-insensitive substring match. |
| crm__companies__get_properties | Return all custom property values for a company as a {key: value} map. |
| crm__tags__create | Create a new tag (or find one with the same name — idempotent). Tags are lightweight orthogonal categories like 'VIP', 'Newsletter-only', 'Cold'. |
| crm__tags__list | List all tags defined in this business. |
| crm__tags__add_to_contact | Apply a tag to a contact. Idempotent — adding an already-applied tag is a no-op. |
| crm__tags__remove_from_contact | Remove a tag from a contact. Idempotent. |
| crm__tags__list_for_contact | List all tags applied to a contact. |
| crm__tags__add_to_company | Apply a tag to a company. Idempotent. |
| crm__tags__remove_from_company | Remove a tag from a company. Idempotent. |
| crm__tags__list_for_company | List all tags applied to a company. |
| crm__properties__define | Define a new custom property on contact or company. Keys must be lowercase snake_case (e.g. 'plan_tier'). For single_select / multi_select, options is required. |
| crm__properties__list | List custom property definitions for an entity type. Excludes archived by default. |
| crm__properties__archive | Archive a custom property. Existing values are preserved but the property is hidden from UI and rejected for new value sets. To 'rename', archive + redefine. |
| crm__properties__set_contact_value | Set the value of a custom property on a contact. Value type must match property type. For multi_select pass an array of option values. |
| crm__properties__set_company_value | Set the value of a custom property on a company. |
| crm__properties__set_deal_value | Set the value of a custom property on a deal. |
| crm__properties__clear_contact_value | Remove a custom property value from a contact. |
| crm__properties__clear_company_value | Remove a custom property value from a company. |
| crm__properties__clear_deal_value | Remove a custom property value from a deal. |
| crm__properties__get_deal_values | Return all custom property values for a deal as a {key: value} map. |
| crm__pipelines__list | List all pipelines in this business (excludes archived by default). |
| crm__pipelines__list_stages | List the ordered stages in a pipeline. Use to look up stageIds for crm.deals.move_stage. |
| crm__pipelines__get_default | Get the default pipeline for this business (the one new deals land in by default). Returns null if no default is set. |
| crm__deals__create | Create a deal in a pipeline. If pipelineId/stageId omitted, lands in the business's default pipeline at the first open stage. Attach to a contact and/or company for full context. valueCents is the deal size in cents (e.g. $5,000 = 500000). |
| crm__deals__update | Update fields on a deal. Use crm.deals.move_stage to change stage (it handles close events). Use crm.deals.close_won / close_lost for the won/lost transitions. |
| crm__deals__move_stage | Move a deal to a different stage in the same pipeline. If the target stage is a won/lost stage, this auto-sets closedAt and emits the appropriate close event. |
| crm__deals__close_won | Close a deal as won — moves it to the won stage in its pipeline. Sets closedAt and emits deal.won. |
| crm__deals__close_lost | Close a deal as lost — moves it to the lost stage in its pipeline. Records lostReason and emits deal.lost. |
| crm__deals__get | Fetch a single deal by id. |
| crm__deals__list | List deals with simple filters. Filter by pipeline/stage for Kanban view, or by contact/company for deal history. `open: true` returns only open-stage deals; omit for all. |
| crm__deals__search | Free-text search across deal names. |
| crm__activities__log | Log an activity — something that happened (past or scheduled). Distinguished from tasks (future intent) and notes (no structure). Use 'log a 30-min discovery call with Jane' style prompts. happenedAt defaults to now if omitted. |
| crm__activities__list | List activities, optionally filtered by entity (contact/company/deal) or owner. Returned in reverse chronological order by happenedAt. |
| crm__activities__get | Fetch a single activity by id. |
| crm__tasks__create | Create a task — future intent ('follow up with Acme by Friday'). Distinguished from activities (past event) and notes (no structure). Auto-assigns to the calling user if assignedToUserId omitted. |
| crm__tasks__complete | Mark a task as completed. Sets completedAt to now. |
| crm__tasks__cancel | Mark a task as cancelled (rejected — different from completed). Use when the user decides a task is no longer relevant. |
| crm__tasks__list | List tasks. Open tasks sort by due date (closest first). Completed tasks sort by completion (most recent first). |
| crm__tasks__get | Fetch a single task by id. |
| reports__preview | Run a report config WITHOUT saving — use to answer analytical questions ('deals by stage', 'contacts added per month', 'email opens last 30 days') and to sanity-check a config before reports.create. Returns rows + totals. Money values are in cents. |
| crm__sources__performance | Marketing-source attribution: for every source (ad campaigns, UTM-tagged traffic, forms, inbound webhook, manual, import…) the full funnel — leads acquired, deals created, deals won, won revenue — plus ad spend, CPL, CAC and ROAS where spend exists. THE tool for 'which marketing source makes me the most money'. Sorted by won revenue; money values are in cents. Mirrors the Reports → Sources view. |
| reports__create | Save a custom report as a live card on the user's Reports dashboard. Use when the user asks for a report or says yes to saving an analysis. The config is re-executed on every dashboard view (always live). Validates by running once; returns the saved report + current data. |
| reports__list | List the saved custom reports on the Reports dashboard. |
| crm__notes__add | Add a freeform note attached to a contact, company, deal, or any combination. Use for 'remember that Jane prefers email over phone' style facts. |
| crm__notes__list | List notes, optionally filtered by attached entity. |
| crm__lists__create | Create a contact list. Manual lists are curated by hand; dynamic lists have a filter DSL (DNF: {or:[{and:[conditions]}]}) that defines membership. For dynamic, pass `criteria`. For manual, omit it. |
| crm__lists__get | Fetch a single list by id. |