Tools
The full catalog of Setgreet MCP tools grouped by domain.
Tools
The Setgreet MCP server exposes its full platform surface, from flow authoring and screen editing to analytics, experiments, localization, and team management. Each tool requires an active OAuth session and the right scope on your role -- if your role doesn't have the scope, the tool isn't usable (and in some clients won't even appear in the tool list).
Don't see a tool you expected? Your role probably doesn't have the scope. Ask your org owner to bump your role from the dashboard, then sign out and sign in again to mint a fresh token. See Troubleshooting for the full resolution path.
Authentication (3, self-hosted stdio only)
These three tools exist only when you run the server yourself over stdio. On the hosted endpoint
(https://mcp.setgreet.com/mcp) your MCP client owns the OAuth flow, so they are not registered and will not appear
in your tool list. Nothing is missing if you don't see them.
OAuth 2.1 + PKCE driven entirely from MCP tools. The agent never touches your verifier or refresh token.
| Tool | Required scope | Description |
|---|---|---|
sign_in | (none) | Begins OAuth sign-in. Returns authorization_url + state. Optional org_id pins the new token to a specific org. |
complete_sign_in | (none) | Finishes sign-in. Accepts { code, state } or { redirect_url } (the tool parses code+state out of the redirect's query string). |
sign_out | (none) | Revokes the current refresh token and clears local session storage. Idempotent. The current access JWT stays valid until exp. |
Connectivity & identity (1)
| Tool | Required scope | Description |
|---|---|---|
whoami | (token) | Resolved user id, organization, role, granted scopes, and access-token expiry. |
Flow CRUD & lifecycle (8)
Destructive ops (unpublish_flow, delete_flow) require confirm: true.
| Tool | Required scope | Description |
|---|---|---|
create_flow | flows:write | Create an empty DRAFT flow and return its id. Start here, then add screens. |
list_flows | flows:read | Paginated list of flows in the current organization. |
get_flow_context | flows:read | High-info read: flow + graph + screens in one payload (Figma-style). |
update_flow_name | flows:write | Rename a flow. |
duplicate_flow | flows:write | Clone a flow as a clean DRAFT (appId + triggers stripped). |
publish_flow | flows:write | Promote draft to live and assign to an app. |
unpublish_flow | flows:write | Revert to DRAFT (destructive; confirm: true). |
delete_flow | flows:write | Soft-delete the flow + its screens, graph, locales (destructive; confirm). |
Screen editing (8)
Granular edit-by-chat tools that mutate a flow's DRAFT screens -- the same tools that power in-product AI editing. Reads use screens:read; mutations use screens:write. remove_component is destructive and requires confirm: true. Most mutations accept expected_version for optimistic concurrency -- if another editor changed the screen since the agent last read it, the tool returns conflict instead of silently overwriting.
| Tool | Required scope | Description |
|---|---|---|
get_screen | screens:read | Fetch one DRAFT screen: components, background, presentation style. |
update_screen | screens:write | Replace ALL components on a DRAFT screen with the provided array. Use sparingly. |
update_screen_meta | screens:write | Update screen-level metadata (name, presentation style, permission gate) on a DRAFT screen. |
add_component_to_screen | screens:write | Add one component to a DRAFT screen, appended or inserted at an index. |
update_component | screens:write | Shallow-merge new props into one component on a DRAFT screen. |
remove_component | screens:write | Remove one component by id (walks the full component tree). Destructive (confirm). |
reorder_screens | screens:write | Reorder a flow's DRAFT screens. screen_order must be a permutation of the existing draft screen ids. |
add_screen_from_pattern | screens:write | Compose a new DRAFT screen from a catalog pattern and append or insert it into the flow. |
Flow composition (4)
Generate whole flows and screens with AI. Composition spends AI credits (see Build with AI).
| Tool | Required scope | Description |
|---|---|---|
compose_flow | flows:write | Generate a complete DRAFT flow from a natural-language brief, optionally grounded on an app. |
list_patterns | (token) | List the screen-pattern catalog available to compose_flow and add_screen_from_pattern. |
describe_component | components:read | Get a component's full authorable schema: every property, its type, options, and default. |
generate_image | screens:write | Generate an image from a prompt and return a permanent URL. Spends one AI credit per call. |
Call describe_component before authoring a component you have not used before. It returns the real property names
and allowed values, which is the difference between a screen that renders and one that silently drops your props.
Flow templates (2)
Browse and preview the Flow Store: curated, ready-made example flows.
| Tool | Required scope | Description |
|---|---|---|
list_flow_templates | templates:read | Browse published templates, filtered by app category and goal. |
preview_flow_template | templates:read | Fetch one template: its screens, the patterns it is built from, and why it converts. |
Analytics escape hatch (1)
| Tool | Required scope | Description |
|---|---|---|
execute_analytics_query | sql:read | Structured query over flow impressions, user activity, SDK events. Org-scoped. |
Not raw SQL -- the input is a typed JSON DSL (collection + match + group + sort + limit + project) that compiles to a Mongo aggregation on the backend. Org scoping is a non-skippable first stage. Operators $where, $expr, $function, and $regex are rejected at compile time. Default 100 rows, max 1000, capped at 10s via maxTimeMS.
Flow analytics (1)
One tool answers the "how is this flow performing" questions, selected with a view. Requires flows:read and accepts optional from/to ISO date filters.
| Tool | Required scope | Description |
|---|---|---|
get_flow_analytics | flows:read | One analytics report for a flow, chosen with view (below). |
view | What it answers |
|---|---|
dashboard | Umbrella numbers (impressions, completions, drop-off, dismissals, time-on-screen). |
paths | How users move between screens, with per-step drop-off. "Which screen loses users?" |
components | Per-component views, clicks, conversions. "Which button or input drops users?" |
inputs | Aggregated answers users gave (NPS, star ratings, form submissions, multiselect). |
dismissals | Where and how users close the flow, and how long they stayed first. |
impressions | Reach: unique and total impressions plus the frequency distribution. |
timeseries | The same metrics bucketed over time. Takes granularity: hour|day|week. |
Start with dashboard -- it is the cheap first call -- then drill into a specific view.
Experiments (9)
Destructive ops (complete_experiment, delete_experiment) require confirm: true.
| Tool | Required scope | Description |
|---|---|---|
list_experiments | experiments:read | All experiments in the current org. |
get_experiment | experiments:read | Metadata + variants + status for one experiment. |
get_experiment_results | experiments:read | Per-variant metrics + statistical significance. |
create_experiment | experiments:write | New DRAFT experiment with weighted variants. |
update_experiment | experiments:write | Edit a DRAFT experiment (RUNNING must be paused first). |
start_experiment | experiments:write | Transition DRAFT/PAUSED → RUNNING. |
pause_experiment | experiments:write | Transition RUNNING → PAUSED. |
complete_experiment | experiments:write | Terminal -- declare winner, can't be undone (confirm). |
delete_experiment | experiments:write | DRAFT only, destructive (confirm). |
Audience segments (6)
| Tool | Required scope | Description |
|---|---|---|
list_segments | segments:read | All segments in current org, optionally filtered by app. |
get_segment | segments:read | Segment metadata + condition tree. |
create_segment | segments:write | New audience segment with condition tree. |
update_segment | segments:write | Edit name, description, conditions. |
delete_segment | segments:write | Destructive (confirm); blocked if any flow targets the segment. |
list_segment_users | endusers:read:pii | Paginated end-user profiles matching the segment. Requires the separate PII scope. |
Conversion goals (5)
| Tool | Required scope | Description |
|---|---|---|
list_conversion_goals | conversions:read | Up to 5 goals per flow. |
create_conversion_goal | conversions:write | Track an SDK event as a conversion (with optional property filter). |
update_conversion_goal | conversions:write | Rename, retarget, change attribution window, toggle active. |
delete_conversion_goal | conversions:write | Destructive (confirm). |
get_conversion_analytics | conversions:read | Per-goal counts, conversion rate, time-to-convert, trend. |
Tenant context (4, plus one stdio-only)
| Tool | Required scope | Description |
|---|---|---|
list_organizations | (token) | Lists every org the authenticated user belongs to (with role + member counts). |
create_app | app:create | Create an app in the current org. A flow must belong to an app before it can be published. |
switch_organization | (token) | Self-hosted stdio only. Returns a reauth_required envelope + authorization_url -- never quietly switches. |
list_apps | apps:read | Lists apps in the current org. |
switch_app | apps:read | Updates the in-process current-app hint and returns the resolved app profile. |
switch_organization does not make an API call, and like the authentication tools it is registered only under self-hosted stdio. The MCP token is pinned to a (user, org) pair, so org switches require a fresh PKCE round-trip. On the hosted endpoint, reconnect through your MCP client to change org. App context is session-local (not a JWT claim) and clears on sign_out.
App theme (6)
| Tool | Required scope | Description |
|---|---|---|
get_app_theme | theme:read | Full cross-platform theme document for the app. |
update_app_theme | theme:write | Upsert the full theme. |
sync_theme_from_sdk | theme:write | Merge an SDK-extracted theme payload into the stored theme. |
list_theme_tokens | theme:read | Flat resolved token map for the app. |
validate_theme_accessibility | (none) | Local WCAG 2.1 contrast check across M3 color pairs. No API call. |
compare_themes | (none) | Local token-level diff between two flat token maps. No API call. |
Localization (5)
| Tool | Required scope | Description |
|---|---|---|
list_locales | locales:read | Flat list of every (screen, locale, translations) row for a flow. Group client-side to answer "what languages?". |
translate_flow | locales:write | Translate a flow's screen text into confirmed target locales and save the result. |
get_flow_localization | locales:read | All localization documents for a flow, optionally filtered to one screen. |
set_flow_localization | locales:write | Upsert a single (screen, locale) translations dict. |
bulk_translate_flow | locales:write | Persist a full translation pass -- one locale, every screen -- in one round-trip. |
End-users (2)
| Tool | Required scope | Description |
|---|---|---|
list_end_users | endusers:read* | Paginated end-users for an app. Filter by search, segment, or identity. *PII fields require :pii. |
get_end_user | endusers:read | One end-user profile plus a paginated slice of their recent SDK events under result.events. |
get_end_user covers behavioural history as well as profile lookups -- page
through the events with events_skip / events_limit. Attribute values are
replaced with [redacted] unless the token carries endusers:read:pii.
App id is not a JWT claim -- pass app_id per call or call switch_app first to set the in-process default.
Billing (4)
Read-only from MCP -- no billing:write scope exists. Granted to every role.
| Tool | Required scope | Description |
|---|---|---|
get_billing_period | billing:read | Current subscription plan + billing cycle (monthly / yearly) + renewal anchor. |
get_usage_summary | billing:read | Current-period MAU usage, plan limit, hard cap, overage charge, plus periodStart / periodEnd boundaries. |
get_billing_history | billing:read | Historical billing periods (one entry per closed cycle). Pass limit to widen. |
list_subscription_plans | billing:read | All plans available on the platform (Free / Launch / Growth / Scale) with limits, prices, features. |
The MCP-view projection strips internal payment-provider variant ids and card metadata. The dashboard view sees the full payload.
Org & team management (5)
Destructive op (remove_member) requires confirm: true.
| Tool | Required scope | Description |
|---|---|---|
list_org_members | team:read | Roster of users in the current org with roles. |
invite_member | team:write | Send an invitation email for admin / member / viewer (owner is not invitable). Consumes a seat, so an org at its plan's seat limit gets seat_limit_reached. |
update_member_role | team:write | Change a member's role. Cannot promote to / demote from owner -- that's a separate transfer-ownership flow. |
remove_member | team:write | Remove a user's membership. Destructive (confirm). |
update_organization | (owner role, no MCP scope) | Update name, size, or transfer ownership. Owner-only on the backend -- non-owners get a forbidden error. |
Integrations (3)
| Tool | Required scope | Description |
|---|---|---|
list_integrations | integrations:read | Webhook + analytics integrations (Segment, Amplitude, Mixpanel, raw webhook) configured for the org. |
get_integration | integrations:read | One integration's config + event filter + enabled state. Resolved client-side from the list endpoint. |
dispatch_test_event | integrations:write | Fire a synthetic test event through the integration's delivery pipeline. Backend constructs the test payload server-side. Not destructive. |
Flow sharing & OneLink (3)
Destructive op (regenerate_share_token) requires confirm: true.
| Tool | Required scope | Description |
|---|---|---|
get_share_settings | share:read | Three independent toggles (public link, copy, preview), share token, share URL, OneLink preview URL, and view/copy counts. Auto-creates the share document on read. |
update_share_settings | share:write | Toggle is_public_link_enabled, is_copy_enabled, is_preview_enabled independently. Pass only the fields you want to change. |
regenerate_share_token | share:write | Rotate the share token, invalidating the live shared URL. Destructive (confirm). |
Next steps
- Use Setgreet with AI agents -- install for your client and authorize.
- Recipes -- end-to-end agent workflows that string these tools together.
- Troubleshooting -- error codes returned by these tools and how to resolve them.