MCP — embed Seny in any AI tool

Newer dashboard workflows also have named connector tools. Call list_dashboard_operations to see the operations your token can execute, including imports, saved views, caller IDs, meetings and role templates. See Dashboard operations for permissions, confirmation fields and external effects. The full current tool list comes from tools/list; the dashboard Help assistant intentionally uses a narrower ceiling.

Seny ships two Model Context Protocol servers so Claude, ChatGPT, Cursor, and anything else MCP-aware can talk to your agents natively — no proxying, no API wrappers, no glue code.

  • Per-widget public MCP— every widget gets a public MCP URL. Anyone (with or without a Seny account) can add it to their AI tool and chat with that widget's agent using the same persona and knowledge.
  • Workspace admin MCP — a Bearer- or OAuth-authenticated server exposing 160+ management tools: create and configure agents, edit transfer rules and knowledge, run campaigns, manage white-label client workspaces, fetch conversation transcripts, and everything else the REST API can do.

Per-widget public MCP

Every active widget exposes a public MCP endpoint at:

https://broker.seny.ai/v1/mcp/<public_key>

You can find the per-widget URL on the Channels tab of any widget in the dashboard, under AI assistants (the old /distribution route redirects there). The endpoint speaks MCP Streamable HTTP (JSON-RPC 2.0).

What's exposed

The MCP server returns the widget's configured tool list on every tools/list call:

  • chat — send a message to the agent and get its reply. Same persona, same knowledge base, same conversation memory as the embedded widget on the live site.
  • search — semantic search across every page Seny indexed during the crawl. Returns the top-N matching pages with title, URL, and excerpt.
  • Every per-widget integration tool — eDealer inventory, AutoVerify forms, Twilio SMS, custom HTTP integrations, webhooks. If the agent has it, the MCP client gets it.

Authentication & rate limits

No API key required. Each call goes through the widget's org credit balance — abuse is bounded by what the operator has paid for. Browser-action tools (navigate, click, fill) are not exposed; they only make sense in a live DOM.

Add to Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent path on Windows / Linux:

{
  "mcpServers": {
    "your-widget": {
      "url": "https://broker.seny.ai/v1/mcp/wgt_XXXXXXXX"
    }
  }
}

Restart Claude Desktop after saving.

Add to Claude Code

claude mcp add --transport http your-widget https://broker.seny.ai/v1/mcp/wgt_XXXXXXXX

Add --scope user to install globally instead of per-project.

Add to Cursor / Continue / other IDEs

Same JSON shape as Claude Desktop. Cursor reads from ~/.cursor/mcp.json; Continue stores it in its own settings. Most MCP-aware editors accept this format unchanged.

Add to ChatGPT

ChatGPT MCP support is in rollout — currently available on Business / Enterprise / Edu plans. In ChatGPT settings → Connectors, add a new MCP server with the URL above. See OpenAI's MCP docs for the latest UI.

The MCP discovery pill

Every embedded chat widget renders a small MCPbadge in its header. Visitors who click it see the same copy-paste configs above, pre-filled with the current site's widget URL. The pill is on by default — operators can disable it from Channels → AI assistants → Public MCP server in the dashboard. Disabling the pill hides it from visitors; the MCP endpoint itself stays publicly reachable.

Workspace admin MCP

Use this when you want an LLM (your own Claude session, an internal agent, a CI bot) to manage your Seny workspace — create widgets, edit personas, pull conversation transcripts. Authenticated with a Seny API key.

Connect from the dashboard (fastest)

The admin server runs in the app itself at a single Bearer-authenticated endpoint:

https://app.seny.ai/api/v1/mcp

The quickest way to wire it up is the Manage Seny from your AI panel in the dashboard — on the first-run card, or any time under Settings → API keys. Pick a key scope (read-only or full), generate it, and copy the pre-filled config for Claude Code, Claude Desktop, Cursor, ChatGPT / claude.ai, or the npxbridge. The freshly minted key is dropped straight into the snippet, so there's nothing to paste by hand.

Connecting by hand instead? Claude Code is one command:

claude mcp add --transport http seny \
  https://app.seny.ai/api/v1/mcp \
  --header "Authorization: Bearer seny_..."

Every tool is scoped to the key's permissions — a read-only key can inspect everything but change nothing. Tighten or revoke a key from Settings → API keys and it takes effect immediately.

Claude Code plugin

Prefer not to touch config files? Install the official Seny plugin — it bundles the server config and reads your key from SENY_API_KEY:

/plugin marketplace add devlift/seny-mcp
/plugin install seny@seny

Then export your key (shell profile or project .env):

export SENY_API_KEY=seny_...

Install via npx

SENY_API_KEY=seny_... npx @seny/mcp-server

Add to Claude Desktop

{
  "mcpServers": {
    "seny": {
      "command": "npx",
      "args": ["@seny/mcp-server"],
      "env": { "SENY_API_KEY": "seny_..." }
    }
  }
}

Tools exposed

The admin server exposes everything the REST API can do — over 160 tools, one-to-one with the endpoints in the OpenAPI reference. If the dashboard can change it, there's a tool for it. The tools are grouped by domain:

DomainRepresentative tools
Agentslist_agents, get_agent, create_agent, update_agent (persona, voice, greeting, channels, branding, goals, tracking, prompt modules…), delete_agent, clone_agent, promote_agent, export_agent / import_agent, connect_agent_site, draft publish/discard.
Call routingcreate_transfer_rule, update_transfer_rule, list_transfer_rules, delete_transfer_rule, SIP trunks, phone numbers.
Knowledge & dataknowledge bases + entries, KB website sources, document upload, data tables, attach_data_table, pronunciations, prompt-module library.
Conversations & analyticslist_conversations, get_conversation, calls, analytics, reports, simulations + scenarios.
Campaignsfull campaign lifecycle — lists, contacts, templates, CRM sources, write-back rules, approvals.
Channels & integrationsemail inboxes, webhooks, post-call webhooks, org integrations + per-agent links, notifications.
Workspace & clientsteam, API keys, branding, billing (read), audit log, and white-label create_client / update_client / start_client_trial / set_client_plan and friends.

Call tools/listfor the live, complete set — it reflects your key or connector's permissions exactly.

Permissions & hidden tools

Every tool is gated on a capability (the same catalog used for API keys). Tools whose capability your key or connector doesn't hold are hidden from tools/list — so if a tool you expect is missing, the fix is almost always to grant the capability, not a bug. Two things to know:

  • Client-workspace tools (create_client and friends) need clients.access. Grant it on the key, or — for an OAuth connector — tick "Access client workspaces" on the consent screen. (These used to require org.write, which OAuth connectors can never hold; clients.access is the connector-friendly capability.)
  • The tool list is snapshotted when a session connects.After changing a key's permissions or reconnecting a connector, restart / reconnect the MCP session so the new tools appear.

Generate an API key from Settings → API keys in the dashboard. Keys are shown once at creation; store them in a password manager.

Rich responses (MCP-UI cards)

Tool results aren't limited to plain text — Seny's MCP servers return MCP-UI cards alongside the text fallback. Compatible clients (Claude Desktop's web view, Smithery's hosted gateway) render them inline; other clients see the text and ignore the resource entry. Always-on by default, per-widget toggle in Channels → AI assistants → Public MCP server → Rich UI card responses.

Card kinds

  • vehicle_card — emitted by search_inventory and get_vehicle_details (eDealer integration). Shows hero image, year/make/model, price, mileage, color, drivetrain, VIN, stock number, and a "View on dealer site" button.
  • page_result — emitted by the built-in search tool. Shows page title, URL, snippet, and OpenGraph thumbnail when the crawler captured one.
  • booking_card — emitted by book_test_drive on success. Shows the booked vehicle, datetime, location, and confirmation number.
  • conversation_summary — admin MCP's get_conversation returns one of these. Shows transcript preview, duration, outcome, extracted-data chips, and criteria pass/fail.
  • form_preview — reserved for upcoming form-fill integrations. Shows submitted field values + a confirmation state.

How it works

Each card is encoded as an HMAC-signed token. The operator preview route at app.seny.ai/cards/<token> validates the signature and JIT-renders self-contained HTML — no DB lookup, no card-storage table, no cleanup. The token format is stateless and sized to fit comfortably in a URL (typically 600–1500 bytes after base64-encoding the JSON payload). The card actually delivered to MCP clients carries that same HTML inline in the resource entry (see above).

Cards are returned as MCP resource content entries with uri ui://seny/card/<token> and mimeType: text/html;profile=mcp-app, carrying the self-contained HTML inline in the resource's text field — the host srcdoc-loads it into a sandboxed iframe. The text fallback is always the first entry in the content[] array, so non-rendering clients still get a useful answer.

Theming

Cards inherit dark mode by default. On the operator preview route you can append ?theme=light to the app.seny.ai/cards/<token>URL to switch. The card returned to MCP clients is pre-themed inline HTML — the theme is baked in at render time, so a client can't switch it by editing a URL.

Action callbacks

Card buttons currently deep-link to URLs (the dealer site, the Seny dashboard, etc.) rather than firing follow-up MCP tool calls. Cross-client callback round-trip support isn't yet stable across MCP clients; deep-linking is universal and delivers the visitor back to the live widget pre-loaded with context.

Listing in MCP catalogs

Each widget gets a generated server.json manifest you can submit to public MCP catalogs so AI users find your widget without you handing them a URL. Download from Channels → AI assistants → List in public MCP catalogs in the dashboard.

  • Official MCP Registry — Anthropic-backed canonical registry. Submit by publishing server.json with a verified GitHub or DNS namespace.
  • Smithery — most-used community catalog + hosted gateway. Paste the MCP URL into the "Add Server" form.
  • Glama — auto-indexes server.json files in public GitHub repos.
  • PulseMCP — curated directory with weekly newsletter. Manual submission.

llms.txt

Every widget also serves an llms.txt at app.seny.ai/llms/<public_key>.txt— the emerging convention for telling LLMs what your site is about and where to look. We auto-generate it from your widget's crawled pages and persona. The full body (...-full.txt) is bigger and meant for indexing; the short index is meant for quick orientation.

Why this matters

MCP is becoming the standard interface between LLMs and external systems. By shipping per-widget MCP servers, every Seny customer gets distribution into the AI tools their own customers already use — not just a chat bubble on their site, but a callable agent that fits inside Claude, ChatGPT, Cursor, and the dozens of MCP-aware tools shipping every month. The discovery pill in the embedded widget makes that surface visible without anyone needing to read these docs.