Skip to main content
Glama
Setell-AI

Setell

Official

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SETELL_API_URLNoOverride for staging / local dev. No trailing slash.https://go.setell.ai
SETELL_EXTENSION_KEYYesPer-user bearer key minted at go.setell.ai/settings

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
setell_get_healthA

Check the Setell connection status. Returns the connected userId (opaque), the effective plan tier, and whether Gmail and QuickBooks are connected. Call this first if any other Setell tool fails — it isolates auth/plan problems from data-shape problems.

setell_find_jobsA

List Setell jobs filtered by status, customer email, or recency. Use this to find jobs by criteria; use the setell://jobs/{id} resource when you already know a specific job id. Returns up to 50 rows per call with the most-recently-updated jobs first.

setell_get_quoteA

Fetch a single Setell quote by id. Returns line items, total, version number, status, customer info, and key timestamps (sentAt, viewedAt, acceptedAt). Use this once you know the quote id — get one from setell_find_jobs or the setell://jobs/{id} resource. Read-only.

setell_find_customerA

Search Setell customers by email (exact) or name (partial). Returns each match with jobCount, lifetimeValue (sum of accepted quote totals), and lastJobAt. At least one of email or name is required. Read-only.

setell_get_morning_briefA

Today's Setell snapshot: new inbound jobs in the last 24h, quotes awaiting review, quotes sent without response for >3 days, top 3 hot prospects (recent viewers who haven't accepted), and revenue from deals won this week. Synthesize against this — the data is raw counts, not prose. Read-only.

setell_get_pricing_signalA

Get Setell's pricing-analyst verdict on a quote BEFORE you send it. Setell compares the quote's total against the operator's own history (per-customer, per-job-type, similar past jobs) and falls back to an industry benchmark when no operator data exists. Returns: verdict (PASS / WARN / FLAG), reasoning (one paragraph in the operator's voice), optional recommendedAmount counter, comparables (structured evidence), layer (which hierarchy level fired), and priceResponse (win-rate-by-price-position curve + expected-profit peak; FORMING status = withhold recommendation framing). Use this before send_quote-style actions to surface pushback in your own voice. FLAG verdicts always warrant a confirmation prompt; WARN is autonomy-mode-dependent. Read-only.

setell_propose_parts_listA

Derive a full parts-list proposal for a job from the operator's OWN history: similar past jobs are mined for co-occurring parts, adapted to this job, and each part returns priced from the operator's history with a provenance receipt and evidence support (support.jobCount / support.share). PROPOSAL ONLY — present it for the operator to confirm or edit, then create the quote as a separate call. no_history means the operator has no similar past jobs with line items yet. Read-only.

setell_get_autonomyA

Show the operator's per-action-class autonomy modes. For each action class (currently: send_quote), returns the mode: WATCH (Boxx pauses on WARN+FLAG pricing verdicts), TRUST (auto-proceed on WARN with a surfaced note, ask on FLAG), or AUTO (auto-proceed on WARN silently, ask on FLAG). FLAG always asks regardless of mode — load-bearing safety floor. Also returns canConfigure indicating whether the operator is on a paid plan (non-WATCH modes are Business+/Pro). Read-only.

setell_set_autonomyA

Set the operator's autonomy mode for one action class. WATCH pauses on every WARN/FLAG pricing-analyst verdict (maximum HITL); TRUST auto-proceeds on WARN with a surfaced note and asks on FLAG; AUTO auto-proceeds on WARN silently. FLAG always asks regardless of mode. Atomic correctness guards (preview-then-confirm tokens, single-use sends) stay in force in every mode. Confirm with the operator before flipping a mode on their behalf — this changes how Boxx behaves on future sends.

setell_get_shop_profileA

Read the operator's shop profile — the capability sheet quotes are judged against: machines (name × count, envelope notes), finishing processes (in-house vs outsourced), materials commonly run, and a free-form how-we-run note. Returns an empty sheet when the operator hasn't filled it in — offer setell_update_shop_profile when that's blocking a better estimate. Read-only.

setell_update_shop_profileA

PARTIAL patch of the operator's shop profile — only the fields you pass change; each provided list REPLACES that whole field, so read setell_get_shop_profile first and send the complete updated list (to add a machine: existing machines plus the new one). This steers how Setell judges complexity / cycle-time / finish fit on every future draft — confirm with the operator before writing.

setell_get_customer_baselineA

Read the operator's learned pricing baseline for a specific customer. Returns one row per jobType scope (e.g. kitchen_remodel) plus the customer-wide row when present (jobType: null). Each row has median / min / max / sampleSize / lastSignedAt — sampled over SIGNED quotes only, so it reflects the operator's actual pricing for this relationship. Useful for "what did I charge Cooper last time?" / "how many signed quotes does this customer have?" Read-only.

setell_compose_quoteA

Draft the quote email body (AI-generated in the operator's brand voice) AND mint a single-use confirmation token bound to this quote version + recipient. Returns: quote (id, version, total, lineItems), email (to, subject, bodySnippet), portalUrl, customer, confirmationToken, confirmationExpiresAt, recipientOverride. Narrate the preview to the operator; on their explicit approval call setell_send_quote with the token verbatim. The token is single-use, expires in 15 minutes, and binds the specific quote version + recipient — any revision or recipient change requires re-composing. Plan-gated (counts against the operator's monthly AI quote quota).

setell_send_quoteA

IRREVERSIBLY sends the doorbell email to the customer (V2 outbound via DKIM-delegated Resend or SETELL_DEFAULT). Requires a valid confirmationToken returned by setell_compose_quote. Runs the pricing-analyst pre-check first — if the quote is materially off-band, returns 409 with code: pricing_pushback, a verdict (WARN / FLAG), the analyst's reasoning, an optional recommendedAmount counter, and the comparable layer that fired. Surface the pushback to the operator verbatim; retry the SAME call with acknowledgePricingWarning: true only after explicit operator confirmation. The atomic QuoteSendConfirmation guard rejects sends after a revision, recipient drift, expired/used tokens, and cross-tenant replay — the safety floor stays load-bearing.

setell_schedule_sendA

Schedule the latest quote on a job to be sent automatically at a future time. The send fires via the canonical pipeline at the next 5-minute cron tick at-or-after scheduledSendAt. Bounds: 1 minute to 30 days in the future. IMPORTANT: the scheduled send is NOT re-checked by the pricing-analyst (the operator has already approved). If pricing certainty matters, call setell_get_pricing_signal first and surface the verdict before scheduling. Use setell_cancel_scheduled_send to cancel a pending schedule before it fires.

setell_cancel_scheduled_sendA

Clear a pending scheduled send on the latest quote of a job. Returns the previous schedule time (or null if none was pending). No-op if no schedule is pending. The cron will skip the quote on its next tick regardless — the atomic claim requires scheduledSendAt to match what the cron read, which a cancel invalidates.

setell_get_learning_coverageA

How deep is the operator's vertical-moat data? Returns aggregate counts: total SIGNED quotes contributing, distinct customers with learned baselines, jobType-narrowed baseline count, the operator-wide baseline (sampleSize + lastSignedAt) if present, and a one-word maturityTier (cold-start / warming / mature / deep) that summarizes the operator's data depth. Use this when the operator asks "how much does Setell know about my pricing?" or when narrating analyst verdicts (e.g. "your moat for Cooper is deep — Setell has 12 signed kitchens to compare against"). Read-only.

setell_get_pricing_calibrationA

How RIGHT has Setell's pricing memory been? Joins every draft-time price prediction to its real outcome: pointAccuracy (MAPE, median error, signed bias — won jobs only), bandCalibration per memory source (observed vs CLAIMED coverage), winCurve (win rate by price position quoted ÷ predicted, censoring-aware, shrunk toward the pooled rate on small samples, with realized margin per bucket as profitIndex), verdictOutcomes (did FLAG calls precede price-losses), priceResponse (fitted win-rate curve + expected-profit recommendation, READY only), and caveats you MUST repeat when summarizing (survivorship, censoring, small n). Use when the operator asks "is my pricing right?", "how accurate is Setell's memory?", or "do I lose work when I price high?". Read-only.

setell_save_customer_memoryA

Persist a single learned pattern about a customer mid-conversation. Use after the operator confirms a fact about how a specific customer works that should inform future quotes/emails (e.g. "Acme only responds to Wednesday emails", "Cooper always asks for net-60"). Three types: PRICING (rates, discount patterns), PREFERENCE (quote structure / special requirements), COMMUNICATION (tone, timing, what info they expect). The memory is read back into Boxx and the agent surface the next time this customer is in scope. Mutator — creates a CustomerMemory row.

setell_get_customer_memoryA

List every CustomerMemory row Setell has stored for a specific customer — pricing patterns, preferences, communication style. Returns the full record shape (memory id, type, content, source job if any, source tag, confidence, timestamps). Useful for "what do I know about this customer?" / auditing what should be overwritten before calling setell_save_customer_memory. Read-only.

setell_generate_quote_tiersA

Generate good/better/best options around a job's current quote (proven close-rate lifter): GOOD is a leaner lower-priced option, BETTER is the existing baseline (recommended, mirrored verbatim), BEST is an expanded premium option. Stores the options as a group and does NOT change the active quote — call setell_select_quote_tier once the operator or customer picks one. Plan-gated (counts against the operator's AI quota). no_quote means the job has no quote yet.

setell_select_quote_tierA

Make a chosen good/better/best tier the job's active quote. GOOD/BEST create a new quote version from that tier's line items via the deterministic revision engine; BETTER is a no-op (it already IS the baseline). A 409 with code stale means the quote changed since the options were generated — regenerate first. After selecting, compose/send operate on the chosen tier.

setell_get_quote_tiersA

List the good/better/best option groups generated for a job (most recent first) — each tier's label, summary, line items, total, and whether the base quote is still current (baseIsCurrent: false means select will conflict; regenerate instead). Read-only.

setell_get_job_marginA

What the operator ACTUALLY made on a job (realized margin). Revenue from recorded payments (fallback: the decided quote total); per-line cost from the operator's price-book provenance, a high-trust price-book match, or labor hours × their loaded labor rate. marginPct is WITHHELD (null) when too little line value has a sourced cost — present the breakdown's UNKNOWN lines honestly instead of inventing a number. OPERATOR-ONLY data: never share cost or margin with a customer. Read-only.

setell_get_margin_summaryA

Realized margin across the operator's recent WON jobs: revenue-weighted overall margin (honestly-costed jobs only), per-jobType averages (worst first), the 3 worst jobs, the count below their target margin, and how many jobs could not be costed. Use for 'how are my margins?' or monthly profitability check-ins. OPERATOR-ONLY data. Read-only.

Prompts

Interactive templates invoked by user choice

NameDescription
setell-triage-inboxSurface every new job from the last 24 hours, summarize the ask, propose a price band from pricing history, and recommend NEW vs needs-clarification. Prioritized by inferred customer importance.
setell-stale-jobsList sent quotes that haven't moved in N days. For each, attach the customer's history and propose a follow-up that matches the customer's preferred cadence. Does NOT send — proposing only.
setell-weekly-revenueProduce a one-paragraph trailing-7-day revenue summary: signed, paid, in-pipeline, week-over-week deltas, the largest open opportunity. Flag anomalies.
setell-customer-historyResolve a customer by name + attach their full Setell context (profile, past jobs, customer memory) so the next question lands with all of it loaded.
setell-draft-followupDraft a follow-up email for a specific job in the operator's voice. Returns the draft only — does NOT send. The send is a separate deliberate action via setell_send_quote_followup.
setell-pricing-checkRun Setell's pricing-analyst on a job before sending. Surfaces the verdict (PASS / WARN / FLAG), the analyst's reasoning, any recommended counter-amount, and which comparable layer fired (customer-learned / operator-wide / similar-jobs / industry benchmark). Does NOT send — the operator picks the next action.
setell-moat-coverageSummarize how deep the operator's customer-data learning loop is. Returns a one-paragraph narrative covering maturity tier, customer breadth, sample-size depth, and the next-tier threshold. Use when answering 'how much does Setell know about my pricing?' or when sizing up whether to trust analyst pushback on a new account.
setell-send-quoteOrchestrate the full compose → pricing-check → confirm → send flow on a job. Drafts the email, narrates the preview, runs the pricing-analyst, and only sends after explicit operator confirmation in the same conversation. The send is IRREVERSIBLE; this prompt ensures the operator sees everything before the doorbell email goes out.

Resources

Contextual data attached and managed by the client

NameDescription
healthCurrent Setell connection state: effective plan, integration status (Gmail, QuickBooks), and the connected user identifier. Read this if the agent needs to know what Setell can do right now.
autonomyCurrent per-action-class autonomy modes (WATCH / TRUST / AUTO) for the operator. WATCH = pause on every pricing pushback; TRUST = auto-proceed on WARN with a note, ask on FLAG; AUTO = auto-proceed on WARN silently. FLAG always asks regardless of mode. Read this when you need to reason about how Boxx will behave on the next send.
learning-coverageVertical-moat metrics: total SIGNED quotes, distinct customers with learned baselines, jobType-narrowed baseline count, the operator-wide baseline if present, and a one-word maturityTier (cold-start / warming / mature / deep) summarizing the operator's data depth. Use when sizing up how much weight to give pricing-analyst verdicts on a new account.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Setell-AI/setell-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server