Setell-AI/setell-mcp

๐Ÿ’ฐ Finance & Fintech
0 Views
0 Installs

๐Ÿ“‡ ๐Ÿ  - Vertical quote-to-cash agent for service businesses (machine shops, contractors, HVAC). Drive jobs, quotes, customer memory, pricing signal, follow-ups, and confirmed sends from Claude Code, Claude.ai, ChatGPT, or any MCP-aware agent. 25 tools, 6 resources, 8 prompts. npx -y @setell/mcp.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "setell-ai-setell-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "setell-ai-setell-mcp"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

@setell/mcp

Drive your Setell quote-to-cash workflow from any MCP-aware agent โ€” Claude Code, Claude.ai, ChatGPT, or any client that speaks the Model Context Protocol.

Setell is a vertical agent for small-business quote-to-cash (machine shops, contractors, HVAC, service businesses). It ingests inbound email, drafts AI quotes, applies structured revisions, sends invoices, and syncs to QuickBooks. Setell exposes the same agent across three peer surfaces: a web app, the Gmail inbox, and any MCP-aware agent. @setell/mcp is the third surface โ€” it lets you ask "what's stale?", "show me the Cooper job", or "draft a follow-up" from whatever agent you live in, without leaving it. Built for operators who run their business from Claude Code, and for bookkeepers and fractional CFOs who drive Setell on behalf of an operator.

Status: Published on npm as @setell/mcp (0.7.x) โ€” Pro-tier feature. A 25-tool surface: 16 read-only + 9 mutating (compose, send, schedule, select-tier, save-customer-memory, set-autonomy, update-shop-profile). Two transports: local stdio (npx -y @setell/mcp) and the hosted remote connector (https://go.setell.ai/api/mcp). See docs/BET-3-SETELL-MCP-V0.md in the main repo for the full design.

Requires

  • A Setell account. The Free tier covers read-only exploration; the Pro tier is required to use the agent channel end-to-end (the boot health probe fails closed with an upgrade link if your plan doesn't qualify).
  • Node.js 18 or newer.
  • An MCP-aware client. Tested with Claude Code, Claude desktop, and the Claude.ai Custom Connector flow.

Install

The server is published to npm as @setell/mcp. Most clients run it via npx so you don't have to install anything globally.

If you do want a global install:

npm install -g @setell/mcp

Configure

You need a Setell extension key. Mint one in your Setell account at Settings โ†’ Extension Key (go.setell.ai/settings). The page shows the raw key exactly once โ€” copy it into your MCP client config below. The key is per-user, revocable from the same page, and resolves directly to your Setell tenant. The same key powers the Chrome extension.

Claude Code

claude mcp add setell --command "npx -y @setell/mcp" --env SETELL_EXTENSION_KEY=setell_ext_...

Or edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) / %APPDATA%\Claude\claude_desktop_config.json (Windows) directly:

{
  "mcpServers": {
    "setell": {
      "command": "npx",
      "args": ["-y", "@setell/mcp"],
      "env": {
        "SETELL_EXTENSION_KEY": "setell_ext_..."
      }
    }
  }
}

Restart Claude Code (or the desktop app). The Setell tools, resources, and prompts will appear in the server-status panel.

Remote endpoint (no local install)

Setell also hosts the same 25-tool surface as a remote MCP server โ€” no Node, no npx, nothing local:

{
  "mcpServers": {
    "setell": {
      "url": "https://go.setell.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer setell_ext_..."
      }
    }
  }
}

Any client that supports remote MCP servers with custom headers (Claude Code, Claude Desktop, API integrations) can use it today. Auth, plan gating, and tenant scoping are identical to the stdio path โ€” same key, same backend.

Claude.ai (Custom Connector)

Claude.ai's web Custom Connector connects to the hosted endpoint above (https://go.setell.ai/api/mcp) with a browser sign-in โ€” no local install and no manual key. Prefer a local server? Claude.ai Desktop can also run the stdio npx -y @setell/mcp invocation via the config above.

ChatGPT desktop and other MCP clients

Any client that supports stdio MCP servers can use the npx -y @setell/mcp invocation above. Set SETELL_EXTENSION_KEY in the client's per-server environment.

Environment variables

VariableRequiredDefaultNotes
SETELL_EXTENSION_KEYYesโ€”Per-user bearer key minted at go.setell.ai/settings.
SETELL_API_URLNohttps://go.setell.aiOverride for staging / local dev. No trailing slash.

How auth works

The MCP server reads SETELL_EXTENSION_KEY at boot, calls /api/mcp/v1/health once to verify the key, plan, and integrations, and then attaches the key to every backend request as Authorization: Bearer <key>. The Setell backend re-resolves the key on every request โ€” the MCP process never holds tenant data and never opens a database connection.

If the key is missing, malformed, revoked, or your plan doesn't qualify, the MCP server exits with a clear error message before any tool registers. The error surfaces in your MCP client's server-status panel rather than as a hung connection.

See docs/BET-3-SETELL-MCP-V0.md ยง4 for the full auth model.

What's in it

The surface is intentionally tight โ€” a small, discoverable set that we expand as we watch how external agents actually use it.

Tools (model-invoked)

Annotated with readOnlyHint and destructiveHint per the MCP spec. 25 tools: 16 read-only and 9 mutating. Of the mutators, two are marked destructive โ€” setell_send_quote (irreversible outbound email) and setell_save_customer_memory (persists a memory row). The rest (setell_set_autonomy, setell_update_shop_profile, setell_compose_quote, setell_schedule_send, setell_cancel_scheduled_send, setell_generate_quote_tiers, setell_select_quote_tier) are non-destructive configuration/draft actions.

Read-only (16)

ToolTitleWhat it does
setell_get_healthSetell connection healthVerify the connection. Returns the connected userId (opaque), the effective plan tier, and whether Gmail / QuickBooks are connected.
setell_find_jobsFind Setell jobsFilter jobs by status, customer email, recency. Returns a paginated list with id, customerName, status, last quote version, total, updatedAt.
setell_get_quoteGet a Setell quoteFetch a single quote by id. Returns line items, total, status, and key timestamps (sentAt, viewedAt, acceptedAt).
setell_find_customerFind Setell customersSearch customers by email (exact) or name (partial). Returns id, jobCount, lifetimeValue, lastJobAt.
setell_get_morning_briefSetell morning briefToday's snapshot: new inbound jobs in the last 24h, quotes awaiting review, stale sent quotes (>3d), top 3 hot prospects, revenue this week.
setell_get_pricing_signalSetell pricing signalGet Setell's pricing-analyst verdict on a quote BEFORE you send it. Returns verdict (PASS / WARN / FLAG), one-paragraph reasoning, optional recommendedAmount counter, structured comparables, the layer of the comparable hierarchy that fired (customer-learned baseline โ†’ operator-wide โ†’ similar-jobs โ†’ industry benchmark), and priceResponse (win-rate-by-price-position curve + expected-profit peak). Surface FLAG verdicts as confirmations; WARN is autonomy-mode-dependent.
setell_propose_parts_listSetell parts-list proposalDerive a full parts-list proposal for a job from the operator's OWN history: similar past jobs mined for co-occurring parts, adapted to this job, each part priced from the operator's history with a provenance receipt and evidence support (support.jobCount / support.share). PROPOSAL ONLY โ€” the operator confirms or edits before any quote is created. no_history means no similar past jobs with line items yet.
setell_get_autonomySetell autonomy modesRead the operator's per-action-class autonomy modes. For each class (currently: send_quote): WATCH (pause on WARN/FLAG), TRUST (auto-proceed on WARN with a note, ask on FLAG), or AUTO (auto-proceed on WARN silently). FLAG always asks regardless of mode.
setell_get_shop_profileSetell shop profileRead 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.
setell_get_customer_baselineSetell customer pricing baselineRead the operator's learned pricing baseline (median / min / max / sampleSize / lastSignedAt) for a specific customer, broken out per job-type. Sampled over SIGNED quotes only โ€” reflects the operator's actual pricing for this relationship.
setell_get_learning_coverageSetell learning-loop coverageAggregate moat metrics: total SIGNED quotes, distinct customers with learned baselines, jobType-narrowed baseline count, operator-wide baseline (sampleSize + lastSignedAt), and a one-word maturityTier (cold-start / warming / mature / deep) summarizing the operator's data depth. Use for narrating analyst verdicts ("your moat for Cooper is deep โ€” 12 signed kitchens to compare against").
setell_get_pricing_calibrationSetell pricing report cardHow RIGHT has Setell's pricing memory been? Joins every draft-time price prediction to its real outcome: pointAccuracy (MAPE, median error, signed bias), bandCalibration per memory source (observed vs claimed coverage), winCurve (win rate by price position, realized margin per bucket), verdictOutcomes (did FLAG calls precede price-losses), priceResponse, and caveats you MUST repeat when summarizing (survivorship, censoring, small n).
setell_get_customer_memorySetell customer memory listList every CustomerMemory row stored for a specific customer โ€” pricing patterns, preferences, communication style โ€” with the full record shape (memory id, type, content, source job, source tag, confidence, timestamps). Audit what's known before writing via setell_save_customer_memory.
setell_get_quote_tiersList Setell quote tiersList the good/better/best option groups generated for a job (most recent first) โ€” each tier's label, summary, line items, total, and baseIsCurrent (false means select will conflict; regenerate instead).
setell_get_job_marginSetell realized job marginWhat the operator ACTUALLY made on a job. Revenue from recorded payments (fallback: the decided quote total); per-line cost from price-book provenance, a high-trust price-book match, or labor hours ร— loaded labor rate. marginPct is withheld (null) when too little line value has a sourced cost โ€” present the UNKNOWN lines honestly instead of inventing a number. OPERATOR-ONLY data: never share cost or margin with a customer.
setell_get_margin_summarySetell margin summaryRealized 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 target margin, and how many jobs could not be costed. OPERATOR-ONLY data.

Mutating (9)

ToolTitleWhat it does
setell_set_autonomySet Setell autonomy modeMutator (idempotent). Change the operator's mode for one action class. WATCH allowed for all plans; TRUST and AUTO require Business or Pro. Confirm with the operator before flipping a mode on their behalf โ€” this changes how Setell behaves on future sends.
setell_update_shop_profileUpdate Setell shop profileMutator (idempotent). PARTIAL patch of the shop profile โ€” only the fields you pass change, but each provided list REPLACES that whole field, so read setell_get_shop_profile first and send the complete updated list. Steers how Setell judges complexity / cycle-time / finish fit on every future draft โ€” confirm with the operator before writing.
setell_compose_quoteCompose a Setell quote emailMutator (idempotent-ish). Drafts the quote email body (AI-generated in the operator's brand voice) AND mints a single-use confirmation token bound to this quote version + recipient. Returns the preview shape (quote, email, portalUrl, customer, confirmationToken, confirmationExpiresAt). Token TTL: 15 minutes. Plan-gated.
setell_send_quoteSend a Setell quoteMutator (destructive โ€” IRREVERSIBLE). Sends the doorbell email via DKIM-delegated Resend (or SETELL_DEFAULT fallback). Requires a valid confirmationToken from setell_compose_quote. Runs the pricing-analyst pre-check first: on WARN/FLAG with WATCH mode, or any FLAG, returns 409 + pricing_pushback for the calling agent to surface; retry with acknowledgePricingWarning: true only after operator confirmation. Same atomic guard as the in-app send_quote โ€” drift (revision, recipient change, expiry, replay) fails closed.
setell_schedule_sendSchedule a Setell quote sendMutator (idempotent). Stamps scheduledSendAt on the latest quote of a job; the 5-min cron picks it up and dispatches via the canonical pipeline. Bounds: 1 minute to 30 days in the future. Does NOT re-run pricing-analyst (operator already approved) โ€” call setell_get_pricing_signal first if pricing certainty matters.
setell_cancel_scheduled_sendCancel a scheduled Setell sendMutator (idempotent). Clears a pending scheduled send on the latest quote of a job. Returns the previous schedule time (or null if none was pending).
setell_save_customer_memorySetell save customer memoryMutator (destructive โ€” persists a row). Persist a single operator-confirmed pattern about a customer mid-conversation. Three types: PRICING (rates, discount patterns), PREFERENCE (quote structure / special requirements), COMMUNICATION (tone, timing, expected info). Read back into Studio and the agent surface the next time this customer is in scope.
setell_generate_quote_tiersGenerate Setell quote tiersMutator. Generate good/better/best options around a job's current quote (proven close-rate lifter): GOOD is a leaner lower-priced option, BETTER mirrors the existing baseline verbatim (recommended), BEST is an expanded premium option. Stores the options as a group โ€” does NOT change the active quote; call setell_select_quote_tier once the operator or customer picks one. Plan-gated.
setell_select_quote_tierSelect a Setell quote tierMutator. Make a chosen 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.

Resources (user-attached via @-mention)

URIReturnsMIME
setell://healthCurrent connection + plan + integration snapshot. Read this first to verify the MCP server is healthy.application/json
setell://jobs/{id}Full job state: customer, every quote version (summaries), recent emails, customer-memory snapshot. Pivot to setell_get_quote for line items on a specific version.application/json
setell://autonomyCurrent per-action-class autonomy modes (WATCH / TRUST / AUTO). Read this when reasoning about how Setell will behave on the next send.application/json
setell://learning/coverageVertical-moat metrics + maturity tier (cold-start / warming / mature / deep). Use when sizing up how much weight to give pricing-analyst verdicts.application/json
setell://customers/{id}/baselinePer-customer learned pricing baseline rows (one per jobType plus customer-wide). Sampled over SIGNED quotes โ€” reflects the operator's actual pricing for this relationship.application/json
setell://customers/{id}/memoryEvery CustomerMemory row stored for a specific customer โ€” pricing patterns, preferences, communication style, each with source tag, confidence, and timestamps. Read before writing via setell_save_customer_memory.application/json

Prompts (slash commands)

Slash commandArgumentsWhat it expands into
/setell-triage-inboxnoneNew inbound jobs from the last 24h: customer ask, proposed price band, NEW-vs-needs-clarification recommendation, prioritized by inferred importance.
/setell-stale-jobsolder_than_days?: number = 7Sent quotes whose last touch is older than {older_than_days} days. For each, attaches customer history and proposes a follow-up matching the customer's historical cadence.
/setell-weekly-revenuenoneTrailing 7-day revenue summary: signed, paid, in-pipeline, week-over-week deltas, the largest open opportunity, anomalies flagged.
/setell-customer-historycustomer: stringResolves a customer by name, attaches their full history, then answers your next question with that context loaded.
/setell-draft-followupjob_id: stringDrafts a follow-up email in your brand voice for the given job. Does not send โ€” sending requires a separate, deliberate action.
/setell-pricing-checkjob_id: stringRuns setell_get_pricing_signal and narrates the verdict in the operator's voice (PASS / WARN / FLAG + reasoning + recommended counter). Does not send โ€” operator picks the next action.
/setell-moat-coveragenoneOne-paragraph narrative of the operator's Setell vertical-moat depth (maturity tier, customer breadth, sample-size, next milestone). Pulls from setell_get_learning_coverage.
/setell-send-quotejob_id: stringOrchestrates the full compose โ†’ pricing-check โ†’ confirm โ†’ send flow. Stops for operator confirmation before the irreversible send. Uses the same safety stack as the in-app send_quote tool.

Example queries

Once installed and running, ask your agent any of:

  • "Show me my stale jobs from the last two weeks and rank them by how likely they are to close."
  • "Draft a follow-up for the Cooper roof-replacement job in my voice โ€” don't send it yet."
  • "Pull up @setell://jobs/clx8h3p9a000 and tell me what changed between version 1 and version 2."
  • "Use /setell-triage-inbox to walk me through this morning's new requests, and flag anything that looks like a repeat customer."
  • "What's my revenue this week vs. last week? Use /setell-weekly-revenue."
  • "Before I send this quote for $1,800 on job clx8h3p9a000, call setell_get_pricing_signal and tell me what my pricing-analyst says."
  • "What does Setell know about how I price kitchen jobs for Cooper? Use setell_get_customer_baseline."
  • "Flip my send_quote autonomy to Trust so Setell auto-proceeds on routine WARN pushback. Use setell_set_autonomy."
  • "Compose a quote for job clx8h3p9a000 with setell_compose_quote, show me the preview, then send it with setell_send_quote after I confirm."
  • "Schedule the Cooper quote to go out tomorrow at 9am Pacific โ€” use setell_schedule_send."
  • "Actually cancel the schedule on that one, let me look at it again โ€” setell_cancel_scheduled_send."
  • "How much pricing brain does Setell have built up for me? Use setell_get_learning_coverage and summarize."

Current limitations

  • The hosted remote connector exposes the tool surface; resources and prompts are served over the local stdio server (npx -y @setell/mcp).

Troubleshooting

"Setell-MCP requires the SETELL_EXTENSION_KEY environment variable." โ€” The key isn't reaching the spawned process. In Claude Code, check that your claude_desktop_config.json has the key under the env block (not just exported in your shell โ€” the spawned npx process doesn't inherit your shell env).

"Setell rejected the extension key." โ€” The key is revoked, malformed, or belongs to a different environment. Mint a fresh one at go.setell.ai/settings.

"Setell-MCP requires the Pro plan." โ€” Upgrade at go.setell.ai/settings/billing.

Tools list is empty. โ€” The boot health probe failed before tools registered. Check your MCP client's server-status panel for the stderr message; the server logs every fatal error there.

Links

License

MIT โ€” see LICENSE.

Related MCP Servers

@agentfund/mcp

๐Ÿ“‡ โ˜๏ธ - Fundraising infrastructure for AI agents on Solana โ€” campaigns, x402 donations, and on-chain reputation. MCP tools for registering agents, creating campaigns, and donating via the x402 pay-to-call flow, backed by Anchor programs (agentregistry, escrow, reputation). npx -y @agentfund/mcp

๐Ÿ’ฐ Finance & Fintech1 views
@asterpay/mcp-server

๐Ÿ“‡ โ˜๏ธ - EUR settlement for AI agents via x402 protocol. Market data, AI tools, crypto analytics โ€” pay-per-call in USDC on Base. SEPA Instant EUR off-ramp.

๐Ÿ’ฐ Finance & Fintech1 views
@czagents/cnb

๐Ÿ“‡ โ˜๏ธ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - Czech National Bank (ฤŒNB) daily FX rates: fetch official CZK exchange rates, convert between currencies, fetch historical rates. Cached 10 min to ease upstream load. npm @czagents/cnb or HTTP at cnb.cz-agents.dev/mcp.

๐Ÿ’ฐ Finance & Fintech1 views
@arbitova/mcp-server

๐Ÿ“‡ โ˜๏ธ - Non-custodial on-chain escrow + AI dispute arbitration for agent-to-agent USDC payments on Base. Seven tools covering the full EscrowV1 contract surface: create escrow, mark delivered with on-chain content hash, confirm or dispute, arbiter resolves with signed verdict, cancel/escalate on timeout. npx @arbitova/mcp-server

๐Ÿ’ฐ Finance & Fintech0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

No check timestamp yet.

Unclaimed listing (imported or pending owner verification). Claim it โ†’
โ˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.