Plyto
AI that makes and runs your Google and Facebook ads from your own account, with a CRM behind it.
使えるツール
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 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__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 checkout link), and durable facts copy may rely on (addClaims: an offer, a price, financing, a response time, a credential, in their words). A workspace created from a signup carries a placeholder name until you set the real one, and the placeholder would otherwise end up in their ads and emails. Setting a website starts a background scan that fills the brand profile (industry, audience, voice, logo, colors) and, for a workspace with nothing in it yet, stages a starter kit (lead form, welcome email, follow-up automation, all as drafts); tell the user the scan takes about a minute. Pass only the fields you actually learned.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 running or failed, with a note saying which.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 brand doc", "my course outline").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 graphic will use. Nothing is redrawn: pictures already on the ads keep their colors, and a campaign whose pictures are on hold stays on hold. A color named in words only ("navy and cream") is not enough: ask for the codes or their logo, never guess a hex.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 redrawn: a draft's pictures are remade when the owner asks. Use when the owner uploads or names a logo, says the logo on file is wrong or old, or asks to change it.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 conversation, never on your own judgment. Every ad, picture and page is checked against the claims, so a removed claim is never used again; it is marked dismissed, so the website scan does not bring it back, and the owner can add it again on the business profile page.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. Use this, not source_detail alone, to say how someone arrived. Returns null if not found in this business.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.
Claude / Cursor への設定
{
"mcpServers": {
"remote-ai-plyto-crm": {
"type": "http",
"url": "https://plyto.ai/api/mcp"
}
}
}出典
この項目を含むまとめ
同じ分類の他の MCP
资料来自官方仓库与 MCP 接口探测,以官方最新文档为准;安装第三方 MCP server 前请自行评估安全风险。