MCP App Store
by KeenEthics

Overview

AI CRM that reasons for every user. Build audiences, draft campaigns and track results in ChatGPT. Plotline is the AI customer engagement platform that reasons for every user. Its AI Director reads each user's full live context and decides the right channel, message, format and moment for them, or whether to reach out at all. You set the goal, guardrails and brand voice. Plotline gives every user their own AI marketer across in-app nudges, widgets, gamification, videos, push and email. With the Plotline connector, you can run Plotline from ChatGPT in plain English, without logging into the dashboard: - Audiences: preview audience size and create or update segments. - Campaigns: pick from hundreds of templates, preview them and create draft campaigns. Drafts are never published automatically. You review and launch them in Plotline. - Performance: list and search campaigns and get impressions, clicks and conversions. - Feedback: pull survey responses and summarize themes. - Assets: upload and manage images and media. - Users and team: look up a user's profile and attributes, and list team members. - Docs: get answers about SDK setup and features. Access uses your Plotline login and follows your existing dashboard permissions.

Tools

analytics_query

ChatGPT
Analyze activity and performance for one authorized product using read-only SQL. First read plotline://skills/analytics and relevant schemas using get_plotline_knowledge; search_plotline_knowledge finds metric definitions and joins. Supports joins, CTEs, subqueries and aggregations. Use {name:Type} parameters for values. Queries are automatically restricted to the selected product. Results include columns, rows and queryId; requests exceeding limits return an error without partial results.

complete_upload

ChatGPT
Finish an upload started with request_upload: checks the file arrived, adds it to the product's asset library and returns the asset with its url. Call it only after the HTTP PUT to uploadUrl succeeded, with the same productId, type and key. If no file is found at the key, or the file is over the size limit, nothing is added: fix the problem and start again with request_upload. Unlike propose_changes, the asset is added straight away, so call it only for a file the user asked you to add.

generate_image

ChatGPT
Optional. Generates 1 to 3 images and hosts them on Plotline, returning {images: [{url, aspectRatio}]}. If your client can generate images itself, you may use that instead: upload the result with request_upload and complete_upload, never to another host. Give a brief (what the image is for, e.g. a Diwali sale banner for a bottom sheet) or an exact imagePrompt. Read the workspace's brand guidelines with search_plotline_knowledge first and put the relevant colours and style in the brief. Pick aspectRatio from where the image goes (see plotline://knowledge/recipes/images). referenceAssetId (an IMAGE in this product's asset library) is used as a style or content reference. The images are not added to the asset library unless saveToLibrary is true; only set it when the user asks to keep them. The returned url can be used straight away in a propose_changes draft (an IMAGE node's value or a bgImage). Show the images to the user before using them.

get_change_set

ChatGPT
Check a proposal made with propose_changes: status (PROPOSED, APPLIED, REJECTED, STALE, EXPIRED, SUPERSEDED), the reviewer's comment, and why it went stale. A STALE proposal means the data changed after it was proposed: read the documents again and propose again.

get_plotline_knowledge

ChatGPT
Read a complete Plotline knowledge document or schema by registered ID or plotline:// URI. Start with plotline://guide or search_plotline_knowledge. Returns content and versions, equivalent to native resources/read. Use the registered IDs or plotline:// URIs returned by search.

list_products

ChatGPT
List all Plotline products (apps) the authenticated user has access to. Returns each product's ID and name. Call this tool FIRST before any other tool — you need a product ID for all other operations. Returns: { products: [{ id, name }] }

propose_changes

ChatGPT
Propose edits for a person to review and approve in the Plotline dashboard. NOTHING is changed until someone approves it there. Supported today: AI Director objectives (decisioningObjectives): create, edit setup (Strategy brief = statement, Guardrails = strategy, goal events, audience, holdout/rollout), delete, and add/rename/move/remove topics and subtopics; and a subtopic's SMS, email or push copy (aiDirectorContent): add, edit or remove variants, or create the content for a subtopic that has none. Push variants have title, body and optional Android subtitle (plain text; image and deeplink are kept; a new push variant may copyFromSlot to reuse a sibling's image and deeplink). Email variants have subject, preheader and the text of the layout's blocks (read them with read_object on aiDirectorContent); a new email variant needs copyFromSlot or templateId. New copy is saved as Draft unless the reviewer also approves it for sending; approved email is re-rendered after approval. And AI Director signals (decisioningSignals): create, edit (name, question, answer type, options, audience, evaluation windows, attribute key, default value, schedule) and delete; publishing and pausing stay in the dashboard. And SQL segments (cohorts): create, edit (name, description, sqlDefinition.query, sqlDefinition.description) and delete a segment whose members are a ClickHouse SELECT returning UserRefID. Test the SQL with analytics_query first and write sqlDefinition.description in plain words; read plotline://knowledge/recipes/sql-segment. Filter segments made in the dashboard can't be changed here. Before the first call, read plotline://knowledge/recipes/propose-changes with get_plotline_knowledge; read current documents with read_object so patches target real ids. Send one user intent per proposal (many changes are fine). Use dryRun:true to check without saving. Returns {status, changeSetId?, reviewUrl?, summary, issues[]}: status INVALID means nothing was saved; fix each error (it has path and hint) and call again. When saved, share the reviewUrl with the user and say it is waiting for their approval. To revise a pending proposal, pass supersedes=<changeSetId>.

read_object

ChatGPT
Read product objects: event definitions, attributes, campaigns, steps, journeys, segments (cohorts: SQL segments have definitionType SQL and sqlDefinition.query/description), AI Director objectives (decisioningObjectives: topics/subtopics are embedded in intentSets), AI Director signals (decisioningSignals: a question the model answers per user, saved to a signal_* user attribute), rendered email bodies (emailContentDocuments), the product's email layouts (emailTemplates: project {title:1,source:1}; content is large) and aiDirectorContent: a subtopic's copy as the flat view propose_changes edits (SMS text; push title and body; email subject, preheader and layout blocks as plain text; filter on stored fields such as parentCampaignId, type, aiDirector.intentId; no projection). For AI Director, first read plotline://knowledge/recipes/ai-director-objective (signals: plotline://knowledge/recipes/ai-director-signal). Fetch one with filter {_id: {$oid: id}}, limit 1, or list using filters, projection, sorting and pagination. Read plotline://skills/object-read and plotline://schema/objects/<collection> through get_plotline_knowledge for fields and filter examples. Access is automatically restricted to the selected product. Returns {collection,items,hasMore,nextSkip?} using Extended JSON for typed values. Read-only; no aggregation pipelines or cross-collection joins.

request_upload

ChatGPT
Start adding one image, video or Lottie file to the product's asset library. Returns {uploadUrl, key, uploadHeaders, expiresInSeconds, maxFileSizeBytes}. Send the file with an HTTP PUT to uploadUrl using exactly uploadHeaders, before expiresInSeconds runs out, then call complete_upload with the same key. Nothing is added to the library until complete_upload succeeds; an upload that is never completed is discarded. Use it only for a file the user asked you to add, and never send the user's file to any other host. Allowed: IMAGE (png, jpg, jpeg, gif, webp; SVG is not accepted) up to 1.0 MB, VIDEO (mp4) up to 50.0 MB, LOTTIE (json, lottie) up to 1.0 MB. If the file is larger, ask the user to compress it.

search_plotline_knowledge

ChatGPT
Search Plotline's analytics reference: table and object schemas, metrics, relationships and SQL examples. Returns IDs, resource URIs, snippets and versions; fetch relevant documents with get_plotline_knowledge or resources/read. These references describe how to read and interpret data; they contain no customer records.

analytics_query

Claude

complete_upload

Claude

get_change_set

Claude

get_plotline_knowledge

Claude

list_products

Claude

propose_changes

Claude

read_object

Claude

request_upload

Claude

search_plotline_knowledge

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps