AI that makes and runs your Google and Facebook ads from your own account, with a CRM behind it.
Connect Remote server
claude mcp add --transport http crm https://plyto.ai/api/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
{
"mcpServers": {
"crm": {
"url": "https://plyto.ai/api/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}
{
"servers": {
"crm": {
"type": "http",
"url": "https://plyto.ai/api/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}
Settings > Connectors > Add custom connector
URL: https://plyto.ai/api/mcp
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools 80 found in our last check
memory__saveSave (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 s…
memory__listList 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__forgetPermanently 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.
business__updateSave what you learn about the business the moment the owner says it: real name, website, industry, who their customers are, what sets them apart, the phone to show on pages, where an ad's click should go (clickTarget page or url, and conversionUrl: their signup, booking or check…
brand__scan__waitWait for the website scan business.update started (up to 45 seconds) and get what it read: industry, audience, value proposition, claims. Call it right after saving a website on a first draft, then build from the result. Returns what is on file even when the scan is still runnin…
account__profileReturn the Plyto profile this connection is signed in as: an opaque id that stays the same across token refresh and reconnection, the person's name and email for display, and the business the connection manages as a label. Takes no arguments.
documents__listList the documents the owner has given you, newest first: files attached in the chat (PDF, Word, text), long messages kept as documents, and links you read and kept. Each has an id to read it with documents.read. Use it when the owner refers to something they sent before ("the b…
documents__readRead a document the owner gave you (an attached PDF, Word or text file, a long message kept as a document, or a link you kept), 30,000 characters at a time; pass offset to go on. Read before you answer about it: never describe a document from memory.
brand__colors__setSave the brand colors the owner names in chat, as hex codes: the primary (what graphics build on) and, when they give one, an accent. They replace the colors on file (a website scan's guess, a logo's extraction), so pass both when the owner names both. Returns what the next grap…
brand__logo__setMake an image the business's logo: the one on file for ads, pages, emails and pitch decks, replacing whatever logo is there (a website scan's find or an older upload). Pass the library asset id of a logo the owner uploaded, or the logo's web address. Nothing already drawn is red…
business__claims__removeTake claims off the business profile once the owner says they no longer hold: the business moved and no longer serves the old area, an offer ended, a credential lapsed. Pass each claim as it is on file (a draft's placeClaimsNote quotes it). Only on the owner's word in this conve…
crm__contacts__createCreate 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__updateUpdate fields on an existing contact. Only pass fields you want to change. No-op fields are silently skipped.
crm__contacts__getFetch a single contact by id, with where they came from: the ad campaign and search keyword that brought them (when an ad did), where they were and on what device, what they asked for on the landing page, how many forms they submitted, and whether they have created an account. U…
crm__contacts__listList 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__searchFree-text search across contact email, first/last name, and phone. Case-insensitive substring match. Returns up to 20 contacts by default.
crm__contacts__get_propertiesReturn all custom property values for a contact as a {key: value} map.
crm__companies__createCreate 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__updateUpdate fields on an existing company. Only pass fields you want to change.
crm__companies__getFetch a single company by id. Returns null if not found.
crm__companies__listList companies in this business. For text search use crm.companies.search.
crm__companies__searchFree-text search across company name, domain, and industry. Case-insensitive substring match.
crm__companies__get_propertiesReturn all custom property values for a company as a {key: value} map.
crm__tags__createCreate a new tag (or find one with the same name; idempotent). Tags are lightweight orthogonal categories like 'VIP', 'Newsletter-only', 'Cold'.
crm__tags__listList all tags defined in this business.
crm__tags__add_to_contactApply a tag to a contact. Idempotent: adding an already-applied tag is a no-op.
crm__tags__remove_from_contactRemove a tag from a contact. Idempotent.
crm__tags__list_for_contactList all tags applied to a contact.
crm__tags__add_to_companyApply a tag to a company. Idempotent.
crm__tags__remove_from_companyRemove a tag from a company. Idempotent.
crm__tags__list_for_companyList all tags applied to a company.
crm__properties__defineDefine 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__listList custom property definitions for an entity type. Excludes archived by default.
crm__properties__archiveArchive 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_valueSet 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_valueSet the value of a custom property on a company.
crm__properties__set_deal_valueSet the value of a custom property on a deal.
crm__properties__clear_contact_valueRemove a custom property value from a contact.
crm__properties__clear_company_valueRemove a custom property value from a company.
crm__properties__clear_deal_valueRemove a custom property value from a deal.
crm__properties__get_deal_valuesReturn all custom property values for a deal as a {key: value} map.
crm__pipelines__listList all pipelines in this business (excludes archived by default).
crm__pipelines__list_stagesList the ordered stages in a pipeline. Use to look up stageIds for crm.deals.move_stage.
crm__pipelines__get_defaultGet the default pipeline for this business (the one new deals land in by default). Returns null if no default is set.
crm__deals__createCreate 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__updateUpdate 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_stageMove 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_wonClose a deal as won: moves it to the won stage in its pipeline. Sets closedAt and emits deal.won.
crm__deals__close_lostClose a deal as lost: moves it to the lost stage in its pipeline. Records lostReason and emits deal.lost.
crm__deals__getFetch a single deal by id.
crm__deals__listList 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__searchFree-text search across deal names.
crm__activities__logLog 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__listList activities, optionally filtered by entity (contact/company/deal) or owner. Returned in reverse chronological order by happenedAt.
crm__activities__getFetch a single activity by id.
crm__tasks__createCreate 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__completeMark a task as completed. Sets completedAt to now.
crm__tasks__cancelMark a task as cancelled (rejected, different from completed). Use when the user decides a task is no longer relevant.
crm__tasks__listList tasks. Open tasks sort by due date (closest first). Completed tasks sort by completion (most recent first).
crm__tasks__getFetch a single task by id.
reports__previewRun a report config WITHOUT saving. Use it 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__performanceMarketing-source attribution: for every source (ad campaigns, UTM-tagged traffic, forms, inbound webhook, manual, import…; the webhook also accepts POST {email, outcome: qualified|customer} at /outcome so an external system of record can report when a lead pays) the full funnel…
reports__createSave 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__listList the saved custom reports on the Reports dashboard.
crm__notes__addAdd 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__listList notes, optionally filtered by attached entity.
crm__lists__createCreate 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__getFetch a single list by id.
crm__lists__listList all contact lists in this business.
crm__lists__membersReturn the contacts that are members of a list. For manual lists this returns explicit memberships; for dynamic lists it evaluates the criteria filter against contacts (lazy recompute).
crm__lists__add_contactAdd a contact to a MANUAL list. Idempotent.
crm__lists__remove_contactRemove a contact from a manual list.
crm__lists__archiveArchive a list. Membership rows are preserved but the list is hidden from default queries.
forms__createCreate a form. Slug becomes the URL: /forms/<slug>. Fields are JSON-defined with type matching the contact property type system (text/email/url/number/date/checkbox/select/multi_select/textarea/phone). If captureToListId is set, every submission is auto-added to that list (use c…
forms__updateUpdate a form: rename it, replace its fields, change appearance (theme), button text, thank-you behavior, or the capture list. Omitted properties keep their current value; `fields` and `theme` replace wholesale when provided, so send the COMPLETE new array/object (use forms.get…
forms__getFetch a form by id.
forms__listList all forms in this business.
forms__list_submissionsList submissions for a form, newest first.
forms__get_embed_codeGenerate the JS embed snippet and iframe alternative for a form. Returns both; the user picks whichever fits their site.
crm__contacts__queryQuery contacts with a structured filter DSL. Use this for complex 'show me contacts where X and Y but not Z' queries. Simpler cases prefer crm.contacts.search (free text) or crm.contacts.list (single filter). Field reference forms: email, firstName, ... = stock fields custom:<ke…
Headers
| Name | Description |
|---|---|
AuthorizationRequired, secret | Bearer <your Plyto API key>. Create one in Plyto under Settings, then API keys. |
Details
| Endpoint | https://plyto.ai/api/mcp (Streamable HTTP) |
| First published | 15 Sep 2026 |
| Last updated | 15 Sep 2026 |
| Registry name | ai.plyto/crm |
More marketing and seo servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
