Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,526Letters: 13Defects: 1,322counted 1 min ago
teppi

MCP serverai.plyto/crm

AI that makes and runs your Google and Facebook ads from your own account, with a CRM behind it.
UNRATEDActivestreamable-httpplyto.ai

Overview

Score?
UNRATED 0.606
of what a free look can see, on 21 looks
Looks
36
last 9 hr ago
Tools
189
changed 9 hr ago

More info

URL
plyto.ai/api/mcp
streamable-http
Says it is
plyto 0.2.0
protocol 2025-06-18
In the record since
32 days ago

Among servers18,413 with a card

0median 0.606 · this server 0.606 · highest on record 0.8561

Toolsfrom sha256:f329888401…5a3973 · +0 −0 9 hr ago

The tools this server lists, read out of the definition it returned
ToolSchema
account__profile
Return 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 b
input · output
ads__ad_set__spend_floor
Set the least a Meta campaign's shared daily budget spends on one ad set each day (a minimum spend target), so a small audience is not starved by the others in a test. Only for cam
input · no output
ads__ad_set__status
Turn one ad set of a launched Meta campaign on (live) or off (paused) while the campaign keeps running. Use for 'turn on the plumbing ad set', 'pause the dental audience'. Two step
input · no output
ads__ads__list
List every ad on a campaign with its ID, grouped by ad group. Run this BEFORE ads.creative.update or ads.creative.delete: those tools take the ad's id, never its headline text. Als
input · no output
ads__assets__delete
Permanently delete an UNUSED image or video from the creative library (the file and its record). Refused when the asset — or any of its placement-size siblings (same name, differen
input · no output
ads__assets__list
List the creative library (images, videos) for the active business, with what each asset IS: role 'site-capture' is the real picture of their website the scan saved (the hero for a
input · no output
ads__audience__create
Create a Meta audience for the business: either a custom audience from one of their Plyto contact lists, or a lookalike of an audience they already have. Use when the user wants to
input · no output
ads__audience__interests
Search Meta's interest and behavior catalog for detailed targeting, with approximate audience sizes. Use when the user wants to target people by interest, or asks what interests th
input · no output
ads__audience__list
List the Meta custom audiences and lookalikes on the connected ad account, with their approximate sizes. Use when the user asks what audiences they have, or before targeting or bui
input · no output
ads__campaign__changes
The change history of a campaign: every edit made through Plyto (budget, locations, keywords, bidding, status, ads), by whom and when, plus, for a live Google campaign, Google's ow
input · no output
ads__campaign__delete
Delete a campaign that never launched (draft or failed): the campaign, its ad groups, and its draft ads are removed permanently; images stay in the creative library. A campaign tha
input · no output
ads__campaign__draft
Create a draft ad campaign on Meta (Facebook and Instagram), Google, or ChatGPT (OpenAI's ChatGPT Ads), the platforms Plyto can actually launch and manage. Drafts are NOT live: the
input · no output
ads__campaign__get
Read ONE campaign's full setup as it is on Google or Meta right now: bidding strategy and any cap or target, daily budget, what counts as a conversion and whether any have recorded
input · no output
ads__campaign__launch
Launch a DRAFT campaign on Facebook and Instagram or Google Ads, the same way the Run it button does: checks that the ad account, payment method, Page and lead capture are in place
input · no output
ads__campaign__list
List ad campaigns for the active business, optionally filtered by status and/or platform. Use when the user asks to see their campaigns or get an overview. The status of a launched
input · no output
ads__campaign__locations__get
Where a campaign's ads show: the location targeting as the ad platform itself reports it for a live or paused campaign (Google: the places plus whether only people physically there
input · no output
ads__campaign__locations__set
Set or replace the location targeting on a campaign, DRAFT or LIVE: plain place names, applied to every ad group, plus (Google) whether the ads reach only people physically in thos
input · no output
ads__campaign__refresh
Pull the current state of launched campaigns, their ad groups and their ads straight from Google Ads and Facebook, and match Plyto's records to it: live or paused at every level, t
input · no output
ads__campaign__status__set
Pause a live campaign or resume a paused one on the ad platform, the same path as the page's pause and resume buttons (platform call, audit row, undoable). Pausing needs no confirm
input · no output
ads__campaign__update
Edit an existing ad campaign: name, objective, daily budget, plain-English audience, or Google search keywords. Draft campaigns are freely editable. For LIVE campaigns only the bud
input · no output
ads__creative__add
Add one ad (headline + primary text + CTA, plus a link except on a Meta leads campaign, where the instant form is the destination and no link is needed) to a campaign's ad set. On
input · no output
ads__creative__attach_image
Attach a creative-library image OR video clip to a draft ad (sets it as the ad's media; for image sets, launch resolves the other placement sizes by the asset's name-siblings; a vi
input · no output
ads__creative__compose_from_photo
Turn a REAL photo from the library into a finished ad set: the photo cropped for every placement size, the headline in real type, the real logo. No image model, no credits, nothing
input · no output
ads__creative__compose_graphic
Compose a DESIGNED ad graphic deterministically: real type, the real logo, the real product image, proof from the claims on file. No AI image model; the only AI step is one quick l
input · no output
ads__creative__compose_video
Turn library clips and images into a FINISHED video ad: a hook line over the opening seconds, an optional caption per clip, and a closing brand card with the real logo and a button
input · no output
ads__creative__delete
Delete a DRAFT ad outright (its images stay in the library), or PAUSE a live Google search ad (published ads can't be deleted, but a paused ad stops serving immediately). Use when
input · no output
ads__creative__draft
Create a draft ad creative attached to an existing ad set. Combines an uploaded image with copy + CTA + landing URL. The creative goes live with the ad set when the campaign is lau
input · no output
ads__creative__edit_photo
Edit one of the owner's REAL photos: take something out of it or change something in it (a coffee table, rugs, clutter, a sign, the background) while their product stays exactly as
input · no output
ads__creative__flyer
Make a flyer, poster or handout the owner can download and print, post or send: their title, the facts (when, where, what is included), how to reach them, their logo and one real p
input · no output
ads__creative__generate_images
Generate AI ad photographs from a prompt + the business's brand profile, sized for Meta placements, and save them to the creative library. For a physical business the picture is th
input · no output
ads__creative__generate_video
Render a short video clip (4, 6 or 8 seconds, vertical 9:16 or wide 16:9) for Reels, Stories, TikTok-style and feed placements. Use for ANY request for a video, promo clip, reel or
input · no output
ads__creative__update
Edit an existing ad's headline, description, or destination link. Drafts update in place. A live Google search ad gets a replacement version published and the old one paused, becau
input · no output
ads__delivery__diagnose
Explain why live campaigns are or aren't delivering: learning phase, budget too small to enter the auction, rejected ads, audience too narrow, payment problems. Use whenever the us
input · no output
ads__destination__get
Where this business's ad clicks go, or, when nobody has decided yet, the short numbered question to ask the owner (ask: one line per choice, their site's real pages checked live, a
input · no output
ads__destination__set
Record where the owner wants ad clicks to go, then do what that implies: build and host the landing page (page, or an embeddable link), point the campaign's draft ads at their site
input · no output
ads__destinations__sync
Push the landing page URLs shown in Plyto to the live ads on Google, for a campaign whose destinations were changed after launch. Use when ads are sending traffic somewhere other t
input · no output
ads__funnel__summary
The funnel behind the ad spend, by campaign, for the last N days: spend, clicks, and every stage after the click through to a paying customer, with cost per stage. Call this BEFORE
input · no output
ads__funnel__test
Send a tagged test lead through a campaign's whole funnel: landing page, form, CRM contact, conversion attribution, and a dry-run Google upload check. The test lead uses an undeliv
input · no output
ads__google__ad_groups__add
Add a complete search ad group (keywords phrase-match by default, RSA copy) to a SPECIFIC Google campaign by id. Headlines are at most 30 characters and descriptions 90, and every
input · no output
ads__google__ad_groups__remove
Remove an ad group you (or the user) no longer want. Draft groups are deleted outright along with their draft ads. Groups on a LIVE campaign are PAUSED in Google instead: delivery
input · no output
ads__google__ads__add_landing_variant
Start a landing page A/B test on the live Google campaign. In ad groups with room it adds a copy of the strongest ad pointing at the new URL; in groups already at Google's 3-ad cap
input · no output
ads__google__ads__strengthen
Fill every live responsive search ad in a Google campaign up to the full 15-headline / 4-description asset counts, keeping all existing lines and pins and adding brand and ad-group
input · no output
ads__google__bidding__set
Switch a live Google campaign between clicks bidding and conversions bidding. Use maximize_clicks when a campaign shows zero or near-zero impressions on Google Search because it is
input · no output
ads__google__conversion_tracking__repair
Set up Google conversion tracking for a business that is missing it. Use when a campaign launched without conversion tracking, or when the campaign page reports that setup failed.
input · no output
ads__google__extensions__generate
Draft sitelinks, callouts, and a structured snippet for a DRAFT Google campaign from the brand profile and the campaign's own keywords, and save them onto the draft. They are appli
input · no output
ads__google__keywords__add
Add keywords to a live Google campaign's ad group, phrase match by default. Use to feed phrasing families that are converting, for example when winning search terms are not yet cov
input · no output
ads__google__search_partners__set
Turn Google Search Partners on or off for a live campaign. Partner sites deliver cheap clicks with high click-through rates and far worse conversion than Google Search, so turning
input · no output
ads__google_audience__create
TEMPORARILY UNAVAILABLE: Google approved Plyto for conversion reporting, and approval for customer list uploads is still pending, so this tool currently refuses with an explanation
input · no output
ads__google_audience__list
List the Customer Match and remarketing audiences on the connected Google Ads account, with their sizes. Use when the user asks what Google audiences they have or before targeting
input · no output
ads__landing_pages__build
Build a landing page for every ad group in a campaign (or one ad group): a Plyto-hosted page whose headline says the ad's promise back in the visitor's words, brand-grounded bullet
input · no output
ads__landing_pages__create
Make ANOTHER landing page for an ad group: a second angle to test against the page ads.landing_pages.build made, a page for a new offer, a variant the owner asked for. You give the
input · no output
ads__landing_pages__get
Everything on one landing page, for reading back or editing: every line of copy, the photo, the accent color, whether it collects details (form) or sends people to a link, which ad
input · no output
ads__landing_pages__list
The landing pages Plyto hosts for this business's ads, with their links, which campaign and ad group each belongs to, and how many people have viewed each. Use before building page
input · no output
ads__landing_pages__update
Edit one landing page: pass ONLY what changes and everything else stays. 'Change the headline to X' is headline alone; 'I don't like the color' is accent alone; 'send people to my
input · no output
ads__lead_form__create
Create a real instant form on the business's Facebook page. It becomes a live asset on their page that collects strangers' names, emails and phone numbers, and Facebook does not le
input · no output
ads__lead_form__list
List the Facebook instant forms (lead forms) on the connected page, with how many leads each has collected. Use when the user asks about their lead forms or before pointing a campa
input · no output
ads__meta__ad_sets__publish
Create ad sets that exist only in Plyto on Meta, inside a campaign that is already launched (live or paused), PAUSED, with their finished draft ads (copy and picture) inside. Use a
input · no output
ads__meta__ads__publish
Put finished draft ads (copy and picture) onto Meta inside a campaign that is already launched, live or paused, in the ad set they were added to. Use after ads.creative.add (with c
input · no output
ads__meta__ads__refresh
Push what an ad carries NOW (its picture set, copy, button and landing page) to the ad already on Meta, as a new creative on the same ad. Use after ads.creative.compose, ads.creati
input · no output
ads__meta__goal__set
Switch what a Meta campaign aims for: landing_page_views (people who reach the page; right for an account whose pixel has no conversions yet, or when the owner asks for visits firs
input · no output
ads__meta__pixel__setup
Set up the Meta pixel on the business's connected Facebook ad account: keeps the one already chosen, adopts the account's only pixel, or creates one named after the business when t
input · no output
ads__negative_keywords__add
Block search terms on a Google campaign by adding them as negative keywords, so the ads stop showing for that traffic. Use after finding wasteful terms. This lowers wasted spend an
input · no output
ads__negative_keywords__list
List the negative keywords already blocking traffic on a Google campaign. Use before adding more, so nothing is added twice.
input · no output
ads__performance__analyze
Analyze recent performance for the active business: surface ads/ad sets that aren't getting impressions, ones spending without converting, and concentration patterns where a small
input · no output
ads__performance__summary
THE authoritative source for a campaign's spend, impressions, clicks and conversions: use this for any question about how much a campaign has spent or how it is performing. Default
input · no output
ads__query_pages__build
The query-to-page engine: cluster what people actually searched on a live Google campaign, generate one landing page per intent cluster (headline that speaks the search back, brand
input · no output
ads__search_terms__list
Show what people actually searched for before seeing the business's Google ads, with spend, clicks and conversions per term, and which terms are wasting money (spend with zero conv
input · no output
agency__client_report__preview
What this workspace's client report would say for the last 7 or 30 days: ad spend, leads, cost per lead, revenue won, by campaign, and the recent leads. Read-only; agency.client_re
input · no output
agency__clients__list
The client workspaces this agency workspace runs (each client is its own workspace under the agency's brand), with white-label state, who gets the reports and when the last one wen
input · no output
automations__connect_steps
Rewire the step graph: point a step's `next` or `branch_false` slot at another step (or null to make that path exit). Use after automations.get to see current wiring.
input · no output
automations__create
Create an automation: a trigger + a linear chain of steps. Created in DRAFT and it stays that way. Do NOT activate it as part of building it: tell the user what it does and let the
input · no output
automations__exit_contact
Force-exit an active enrollment: the contact stops at the next step boundary and receives nothing further from this automation. Use when someone asks to be left alone or was enroll
input · no output
automations__get
Fetch one automation with its full step graph (ordered), for inspection or before editing.
input · no output
automations__get_step_runs
Step-by-step execution log for one enrollment: what ran, when, with what outcome/error. The debugging tool for 'why didn't Jane get the email?'
input · no output
automations__list
List automations with status and trigger.
input · no output
automations__list_enrollments
List enrollments (who's in an automation and where they are), filterable by automation and state.
input · no output
automations__pause
Pause an active automation: no new enrollments. In-flight enrollments finish their current step and then hold (W7 executor checks status).
input · no output
automations__restore
Restore an archived automation. It comes back PAUSED (never auto-active). Activate it separately to resume enrolling. Previously-exited contacts are not re-enrolled.
input · no output
automations__retry_enrollment
Send a FAILED enrollment back to the step that failed, so the contact continues from there (nothing they already received is sent again). Use after the cause is fixed. automations.
input · no output
automations__test_run
Static dry-run: validates every step of an automation WITHOUT executing anything: action tools exist and accept their arguments (with templates resolved against dummy values), dela
input · no output
booking__bookings__list
Upcoming booked calls: who, when, their note, and the show-up task. Use for questions like "what calls do I have" or "who booked this week".
input · no output
booking__pages__create
Create a booking page and return its public URL, ready to share, link from the website, or put in a form's thank-you message. Availability is weekly windows in 24h HH:MM, keyed by
input · no output
booking__pages__list
List the business's booking pages with their public URLs, durations, and weekly availability. A booking page is where a lead picks a call time; a booked call automatically qualifie
input · no output
brand__scan__wait
Wait 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
input · no output
business__update
Save 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
input · no output
crm__activities__get
Fetch a single activity by id.
input · no output
crm__activities__list
List activities, optionally filtered by entity (contact/company/deal) or owner. Returned in reverse chronological order by happenedAt.
input · no output
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 p
input · no output
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).
input · no output
crm__companies__get
Fetch a single company by id. Returns null if not found.
input · no output
crm__companies__get_properties
Return all custom property values for a company as a {key: value} map.
input · no output
crm__companies__list
List companies in this business. For text search use crm.companies.search.
input · no output
crm__companies__search
Free-text search across company name, domain, and industry. Case-insensitive substring match.
input · no output
crm__companies__update
Update fields on an existing company. Only pass fields you want to change.
input · no output
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,
input · no output
crm__contacts__get
Fetch 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
input · no output
crm__contacts__get_properties
Return all custom property values for a contact as a {key: value} map.
input · no output
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).
input · no output
crm__contacts__query
Query 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.co
input · no output
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.
input · no output
crm__contacts__update
Update fields on an existing contact. Only pass fields you want to change. No-op fields are silently skipped.
input · no output
crm__deals__close_lost
Close a deal as lost: moves it to the lost stage in its pipeline. Records lostReason and emits deal.lost.
input · no output
crm__deals__close_won
Close a deal as won: moves it to the won stage in its pipeline. Sets closedAt and emits deal.won.
input · no output
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. v
input · no output
crm__deals__get
Fetch a single deal by id.
input · no output
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.
input · no output
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.
input · no output
crm__deals__search
Free-text search across deal names.
input · no output
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.
input · no output
crm__lists__add_contact
Add a contact to a MANUAL list. Idempotent.
input · no output
crm__lists__archive
Archive a list. Membership rows are preserved but the list is hidden from default queries.
input · no output
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
input · no output
crm__lists__get
Fetch a single list by id.
input · no output
crm__lists__list
List all contact lists in this business.
input · no output
crm__lists__members
Return 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 recomp
input · no output
crm__lists__remove_contact
Remove a contact from a manual list.
input · no output
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.
input · no output
crm__notes__list
List notes, optionally filtered by attached entity.
input · no output
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.
input · no output
crm__pipelines__list
List all pipelines in this business (excludes archived by default).
input · no output
crm__pipelines__list_stages
List the ordered stages in a pipeline. Use to look up stageIds for crm.deals.move_stage.
input · no output
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.
input · no output
crm__properties__clear_company_value
Remove a custom property value from a company.
input · no output
crm__properties__clear_contact_value
Remove a custom property value from a contact.
input · no output
crm__properties__clear_deal_value
Remove a custom property value from a deal.
input · no output
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.
input · no output
crm__properties__get_deal_values
Return all custom property values for a deal as a {key: value} map.
input · no output
crm__properties__list
List custom property definitions for an entity type. Excludes archived by default.
input · no output
crm__properties__set_company_value
Set the value of a custom property on a company.
input · no output
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.
input · no output
crm__properties__set_deal_value
Set the value of a custom property on a deal.
input · no output
crm__sources__performance
Marketing-source attribution: for every source (ad campaigns, UTM-tagged traffic, forms, inbound webhook, manual, import…; the webhook also accepts POST {email, outcome: qualified|
input · no output
crm__tags__add_to_company
Apply a tag to a company. Idempotent.
input · no output
crm__tags__add_to_contact
Apply a tag to a contact. Idempotent: adding an already-applied tag is a no-op.
input · no output
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'.
input · no output
crm__tags__list
List all tags defined in this business.
input · no output
crm__tags__list_for_company
List all tags applied to a company.
input · no output
crm__tags__list_for_contact
List all tags applied to a contact.
input · no output
crm__tags__remove_from_company
Remove a tag from a company. Idempotent.
input · no output
crm__tags__remove_from_contact
Remove a tag from a contact. Idempotent.
input · no output
crm__tasks__cancel
Mark a task as cancelled (rejected, different from completed). Use when the user decides a task is no longer relevant.
input · no output
crm__tasks__complete
Mark a task as completed. Sets completedAt to now.
input · no output
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 assignedToU
input · no output
crm__tasks__get
Fetch a single task by id.
input · no output
crm__tasks__list
List tasks. Open tasks sort by due date (closest first). Completed tasks sort by completion (most recent first).
input · no output
documents__list
List 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
input · no output
documents__read
Read 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. R
input · no output
email__campaign__create
Create a DRAFT email marketing campaign (never sends anything). Write subject/preview/body in the brand voice; the user reviews in the composer and nothing goes out without an expl
input · no output
email__campaign__get
Get one email campaign's full draft: subject, preview text, body, audience, schedule, A/B test setup and (once it has sent) its per-variant results and winner, plus the current eli
input · no output
email__campaign__list
List email marketing campaigns with status, type, subject, and audience size. Use to answer 'what campaigns do we have' or find a campaign to edit.
input · no output
email__campaign__update
Edit a draft or scheduled email campaign: name, subject, preview text, body, audience list, schedule, or A/B test. Plyto DOES support A/B testing on email campaigns: set abVariable
input · no output
email__create_template
Create a reusable email template. Body and subject are plain text and support merge tags: {{contact.firstName}}, {{contact.lastName}}, {{contact.fullName}}, {{contact.email}}, {{bu
input · no output
email__domain__status
Check the business's custom sending domain: current status, and when it is still pending, exactly which DNS records have not been found yet (record type, host name, and value to ad
input · no output
email__get_send_stats
Aggregate send counts by status (queued/sent/delivered/opened/clicked/bounced/failed), optionally for one template and/or a recent window. Use to answer 'how did that email do?'
input · no output
email__list_sends
List recent email sends, optionally filtered to one contact or template. Shows delivery status per send.
input · no output
email__list_templates
List email templates for this business.
input · no output
email__signature__set
Set or clear the CURRENT USER's personal email signature for this business (their Gmail-style sign-off, appended when they compose one-to-one emails from a contact page). ONE-TO-ON
input · no output
forms__create
Create 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_se
input · no output
forms__get
Fetch a form by id.
input · no output
forms__get_embed_code
Generate the JS embed snippet and iframe alternative for a form. Returns both; the user picks whichever fits their site.
input · no output
forms__list
List all forms in this business.
input · no output
forms__list_submissions
List submissions for a form, newest first.
input · no output
forms__update
Update 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`
input · no output
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
input · no output
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, whe
input · no output
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 "reme
input · no output
pitches__create
Generate a branded pitch deck: a full slide presentation built from the brand kit (colors, logo, voice, approved claims) and, when a deal/company/contact id is given, grounded in t
input · no output
pitches__delete
Delete a pitch deck permanently. Its share link stops working immediately. Two-step: first call returns the deck title to confirm with the user; call again with confirm:true to del
input · no output
pitches__edit_slide
Edit one slide of an existing pitch deck with an AI rewrite that keeps the deck's design. The share link updates instantly. Use when the user wants to tweak a deck: change wording,
input · no output
pitches__list
List this business's pitch decks with status, share links, and view counts. The honest source for 'has anyone opened the deck'. Status 'generating' means the deck is still building
input · no output
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 dashb
input · no output
reports__list
List the saved custom reports on the Reports dashboard.
input · no output
reports__preview
Run 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 be
input · no output
seo__blog__create_draft
Save a blog post draft. YOU write the post (600-1200 words of genuinely useful, non-generic content in the brand voice, markdown with ## headings) and pass it here. Include a meta
input · no output
seo__blog__list
List blog posts (drafts and published).
input · no output
seo__blog__update_settings
Configure the automatic blog writer: posts per week (0 disables, max 3), topic list to rotate through, and whether posts auto-publish or wait as drafts. HARD CEILING: 3 posts per w
input · no output
seo__list_audits
List recent SEO/GEO audits with scores.
input · no output
seo__run_audit
Run an SEO + GEO (generative engine optimization) audit on a URL. Fetches the page, robots.txt, sitemap.xml and llms.txt, runs ~15 deterministic checks (title, meta description, he
input · no output
websites__add_block
Add a section to a site, at the end or at a position (0 is the top; later sections shift down). Same shapes and photo rules as websites.create_site. 'Add pricing' means: ask nothin
input · no output
websites__analyze_website
Fetch and analyze an existing website (theirs or a competitor's). Returns title, description, headings, navigation links, and the page's visible text so YOU can rebuild it as a muc
input · no output
websites__check_custom_domain
Verify a site's custom domain DNS. If the records point at us, the domain goes active and the site serves on it (TLS is automatic).
input · no output
websites__create_site
Create a WEBSITE: the business's home on the web, multi-section, with a nav. NOT for landing pages: the page an ad sends people to is ads.landing_pages.build, under Marketing, Land
input · no output
websites__get_site
Get a site with its theme and every section (block ids, kinds, content) for editing. Call it before any edit so you change the right block, and read the current content back to the
input · no output
websites__list_sites
List this business's websites with status and URLs.
input · no output
websites__photos
What this business can put on a website, newest first: real photos the owner added or attached in chat (what: photo), product screenshots (product-screen), and scenes Plyto generat
input · no output
websites__remove_block
Remove a section from a site. Do it the moment they ask ('take off the pricing', 'remove the gallery'): photos stay in the library, the section can be added back, and nothing is pu
input · no output
websites__reorder_blocks
Reorder a site's sections ('move pricing above the FAQ'). Pass the COMPLETE list of block ids in the new top-to-bottom order (websites.get_site returns them). Partial lists are rej
input · no output
websites__update_block
Edit part of a section. Pass ONLY the fields that change; everything else in the section is kept, so 'shorten the headline' touches the headline and nothing else. Arrays (items, st
input · no output
websites__update_site
Change a site's settings: name, SEO title and description, accent color, font pairing, corner radius, dark or light. Omitted settings keep their value, so 'make it darker' is dark:
input · no output
Verify it yourselfnpx teppi-check https://plyto.ai/api/mcpcurl -s https://api.teppi.xyz/v1/trust/mcp/mcs_01M1FZ22HBHWWJWWVP9QHB8RK6