Announcing CIMD support for MCP Client registration
Learn more

Should you use Chili Piper MCP or Chili Piper API for building AI Agents?

Srinivas Karre
Founding Engineer

TL;DR

  • Chili Piper MCP and the Edge API are not two capability sets. Chili Piper documents that both resolve to the same backend and that MCP tool names mirror the Edge operation IDs.
  • The split is credential scope. MCP's OAuth path is Admin-only on paid plans and reaches every tool the account can use; an API access token can be limited to Read on Meetings plus Schedule on Concierge.
  • There is no non-admin OAuth grant, and every tool call is scoped to the organization tenant. Your agent's Chili Piper identity is org-level on both paths, never the individual rep's.
  • Scalekit's catalogue lists 156 tools on this connector, and Chili Piper documents that Copilot Studio silently truncates at 70. Surface size is the operational problem, not coverage.
  • Scalekit vaults the token per connected account, and a Virtual MCP server cuts 156 tools to the four a booking agent needs.

Two supported paths to the same Chili Piper backend

Your agent needs to work with Chili Piper. It needs to route an inbound lead, check which rep is up in the round robin, pull open slots, and book the meeting without a human touching a scheduling UI. Chili Piper ships an official remote MCP server and a full Edge API, and both are documented, supported, and production-ready. Unlike most tools in this series, the two paths cover roughly the same ground. That makes the decision harder, not easier, because the tradeoffs move from capability to credential scope, determinism, and how many tools you are willing to put in a context window.

What Chili Piper MCP and the Chili Piper Edge API actually are

Both surfaces are owned and hosted by Chili Piper. Neither is a community wrapper, and neither requires you to run a server. The distinction is in the transport and the credential model, not in what lives behind them.

Chili Piper MCP

Chili Piper hosts a single remote MCP endpoint over streamable HTTP. There is one server URL for every client, and Chili Piper handles hosting, scaling, and schema updates. It works with Claude Desktop, claude.ai, Claude Code, Cursor, ChatGPT, OpenAI Codex, Gemini CLI, and Microsoft Copilot Studio.

Authentication is either browser-based OAuth, which requires an Admin on a paid Chili Piper account and needs no client ID or secret because the client discovers the OAuth configuration from the server, or a bearer API access token generated in Command Center. Setup and the full client matrix are in Chili Piper's MCP connection guide, and the product surface is described on the Chili Piper MCP product page.

The Chili Piper Edge API

The Edge API is a REST surface named after the subdomain it is served from. It exposes Health, Tenant, Rule, Workspace, Team, Distribution, Availability, User, CRM, Meetings, Concierge, Scheduling Links, and Handoff. Programmatic booking follows a two-step pattern across all three entry points: one call routes or initializes and returns a session plus available slots, a second call commits the meeting.

Authentication is a bearer API access token generated under Command Center, Integrations, Credentials, API Access Tokens. Token generation, the endpoint inventory, and pagination behavior are documented in Chili Piper's Edge API References.

Why "same backend" matters here

Most articles in this series open by naming a capability gap. There is not a meaningful one to name for Chili Piper. Chili Piper's own programmatic scheduling guide states plainly that the Edge API and MCP resolve to the same backend, and that the MCP tool names mirror the Edge operation IDs.

That single sentence rewrites the decision. You are not choosing between a rich surface and a reduced one. You are choosing between letting a model pick the operation dynamically and writing the call yourself.

Comparing them where it matters for agents

The comparison below holds capability roughly constant and varies the things that actually differ in production: who the credential belongs to, how narrowly it can be scoped, and how much of the tool surface lands in your context window.

What your agent can actually do

Capability
Chili Piper MCP
Chili Piper Edge API
Concierge routing and booking
Yes: concierge-route-by-slug, concierge-schedule
Yes: same two-step pattern
Scheduling link booking
Yes: scheduling-link-init, scheduling-link-schedule
Yes: init-simple then schedule-simple
Handoff routing and booking
Yes: handoff-init, handoff-schedule
Yes: workspace init then path schedule
Availability slots for any attendee mix
Yes: availability-slots, availability_slots_v2
Yes: Availability section
Meeting query, cancel, no-show, reschedule
Yes
Yes
Meeting CSV export
Yes: meeting-export-v2-put
Yes: Meetings section
Distribution create, update, adjust, delete
Yes
Yes
Routing rule CRUD
Yes
Yes
User, workspace, and team administration
Yes
Yes
Concierge, Distro, and Chat AI logs
Yes
Partial: Concierge logs documented in Edge summary
Headless execution with a static credential
Yes: API-key path only
Yes
Per-end-user permission enforcement
No
No

Where the documentation surfaces diverge

Scalekit's catalogue lists 156 tools on the ChiliPiper MCP connector, covering assignment tables, data fields, Distro router configuration, Chat AI conversation logs, and webhook subscription management alongside the core booking tools.

Chili Piper's Edge API help article enumerates thirteen endpoint groups and points to a Swagger reference for the complete list. So the difference you will notice is in documentation density, not in reachable functionality. Treat the tool catalogue as the more current inventory of what the server will actually answer to, and verify anything load-bearing against the Swagger spec.

The 156-tool problem

A 156-tool server is not a feature for an autonomous agent. Chili Piper documents this directly for one client: Microsoft Copilot Studio truncates the tool list at 70, the org MCP endpoint exposes more than that, so some tools are silently dropped and which ones is not something you control.

The failure mode is nasty because it is quiet. The agent tells a user it cannot do something it actually supports, or reaches for a worse-fitting tool. Chili Piper's own recommendation is to build narrow, purpose-built agents rather than one general-purpose agent, and that advice generalizes well past Copilot Studio.

The token cost nobody budgets for

Every tool definition in context consumes tokens. At the common heuristic of roughly 200 tokens per tool definition, a 156-tool surface is somewhere near 31,000 tokens before your agent reads its first instruction.

Tool bloat is an accuracy problem and a cost problem at the same time. The fix is not better prompting. It is surface reduction, which is the argument made in more depth in token-efficient tool calling.

The auth path each one puts you on

This is where the two paths genuinely diverge, and it is the inverse of what you may expect if you have read the Notion or Salesforce entries in this series. For Chili Piper, the MCP path is the one that supports a static credential, and OAuth is the less flexible option.

MCP auth: OAuth or API key, and the difference is scope

The OAuth path is browser-based and Admin-only on a paid account. Chili Piper notes that a plugin authorized this way reaches every Chili Piper tool the account can use, and recommends an API key with scoped permissions when you want to hand out narrower access.

API access tokens are generated with an explicit permissions dialog: you pick Ping, Read, Modify, and Remove per section, and Schedule in the Concierge, Scheduling-links, and Handoff sections. A booking agent needs Schedule on one section plus Read where it lists assets, and nothing more.

The admin-identity ceiling

Chili Piper's OAuth path does store a per-user token, but only Admins can complete the grant. There is no non-admin OAuth flow for MCP today.

Combine that with the documented limitation that all tool calls are scoped to your organization tenant, and the conclusion is unavoidable: your agent's Chili Piper identity is an org-level admin identity on both paths. Salesforce enforces field-level security and sharing rules on every MCP tool call. Chili Piper does not have an equivalent, so a booking agent can, in principle, also delete a routing rule.

What this means for a multi-tenant agent

If you are building a B2B product where each customer connects their own Chili Piper org, the unit of isolation is the tenant, not the rep. Forty reps inside one customer share one credential surface; forty customers means forty credentials to store, scope, and revoke.

Neither path gives you least privilege at the user level, so you have to construct it yourself: one narrowly scoped token per tenant per agent role, and a tool surface that does not include the destructive operations that agent role never needs. That is an infrastructure decision, and it is the same decision regardless of which transport you pick. For a deeper look at how this credential ownership problem plays out across agent patterns, see who holds the token across agent tool-calling patterns.

What you own in production

Chili Piper manages hosting, scaling, and schema updates on the MCP path, and it versions the Edge API on its own cadence. Everything below is yours on both paths.

Session semantics on the booking path

Routing and scheduling sessions are single-use and short-lived. If the book call fails because a slot was taken, you cannot retry the same session; you start again from the route or init step.

Concierge session timeouts are configured per router path and returned in the response as timeoutInMS. Scheduling links and Handoff use a server-side TTL. Build your retry logic around re-routing, not around re-booking.

Windowing and pagination limits

Meeting list and meeting export accept a maximum span of seven days. Concierge logs, Distro call logs, and Chat AI logs each cap the window at 30 days.

Pagination differs by path in a way that catches people out. The Edge API returns 50 records by default, caps at 100 with ?pageSize=100, and supplies a nextPage value. Several MCP list tools default to page 0 with a page size of 10. An agent asked to summarize last quarter's meetings will silently under-report unless you paginate explicitly.

Client-specific traps

Every Gemini surface, including Gemini CLI, the Google Gen AI SDK, and the Agent Development Kit, requires the X-MCP-Schema-Dialect: gemini header. Without it, the richer tools covering rules, distributions, routers, meeting types, and Handoff fail to load, and one failed tool takes the whole tool list down. Simple tools still work, so the connection looks healthy in a quick test.

Copilot Studio's 70-tool cap sits in the same category. These are not misconfigurations you can debug from your own logs; they are client behaviors you plan around.

Schema drift and additive writes

MCP tool schemas change when Chili Piper updates the hosted server. You consume a managed contract without controlling its cadence. The Edge API gives you a stable REST contract you can pin your integration code against.

One write behavior applies to both paths and deserves a test: distribution weight adjustments are additive, not absolute. If a rep's current weight is 100 and your agent adjusts by 50, the new weight is 150. An agent that retries a failed adjustment without checking state will skew your round robin.

When to use Chili Piper MCP, when to use the Edge API

Because capability is roughly constant, this decision is about who chooses the operation: the model at runtime, or you at development time.

Use Chili Piper MCP when

  • Your agent reasons over Chili Piper rather than following a fixed script, for example a RevOps assistant asked why a lead routed to the wrong rep, which needs distro-logs then distro_log_get then rule-get in an order it works out itself
  • You are building an internal troubleshooting or reporting agent where the question shape varies per run and pre-wiring every endpoint would be wasted work
  • You want the booking flow, log inspection, and admin operations behind one interface instead of maintaining separate REST clients per Chili Piper product area
  • Your agent runs in an MCP-native host such as Claude Code or Cursor, where connecting a server is a one-line operation

Use the Chili Piper Edge API when

  • Your agent runs a deterministic booking pipeline: submit lead, take slots, book, write back to CRM, with no model discretion over which endpoint is called
  • You need a pinned contract because an unexpected schema change is an incident, not an inconvenience
  • You are handling the single-use session semantics yourself and want explicit control over the re-route retry path
  • Your latency budget cannot absorb a tool-selection round trip on every booking, which matters for voice agents and inline chat booking
  • You are calling from a runtime with no MCP client, or one whose tool cap would truncate a 156-tool server

The credential problem neither path solves

Chili Piper gives you a credential. It does not give you a vault, a rotation policy, a revocation flow, or per-tenant isolation. That work is identical whichever transport you chose, which is why the MCP-versus-API decision should not be the thing that determines your auth architecture.

One token, many tenants

In a multi-tenant agent, every customer org needs its own Chili Piper API token, stored encrypted, isolated per tenant, and never written to logs. Twenty customers is twenty credentials with twenty independent lifecycles.

The MCP path does not reduce that count and the Edge API path does not increase it. What changes is only the header you attach. The broader architecture challenge of moving from single-tenant to multi-tenant tool calling is worth reading before you commit to a credential strategy.

No refresh path for a revoked token

Chili Piper API tokens are shown once at generation and can be deleted from Command Center, which immediately revokes view, update, and manage access for that token. There is no refresh grant to fall back on.

So a revoked token is not an error you recover from in code. It is a re-authorization event that has to reach a human in the customer's org. If the first signal your system gets is a failed tool call in the middle of a booking, you have already lost the meeting. For a systematic approach to this, see how to handle token refresh for AI agents.

Where Scalekit fits

Scalekit's ChiliPiper MCP connector holds the token in a per-tenant encrypted vault, injects it into every request, and tracks connected-account state so a revoked token surfaces as a connected_account.status_updated webhook rather than a failed booking. The connector works the same way whether you call tools directly or expose them over MCP, so the transport decision stops touching your credential infrastructure.

Building a Chili Piper agent with Scalekit

Scalekit ships one Chili Piper connector today, and it fronts the vendor's own MCP server. Some tools in the connector catalogue have separate API and MCP entries; Chili Piper currently has the MCP one, backed by bearer token auth rather than an OAuth redirect.

Set up the connector

Create the connection once per environment in the Scalekit dashboard under AgentKit, Connections, then register each tenant's Chili Piper token as a connected account. Generate the token in Command Center under Integrations, Credentials, API Access Tokens, and grant only the permissions that agent role needs.

import os from scalekit import ScalekitClient scalekit_client = ScalekitClient( env_url=os.environ["SCALEKIT_ENV_URL"], client_id=os.environ["SCALEKIT_CLIENT_ID"], client_secret=os.environ["SCALEKIT_CLIENT_SECRET"], ) actions = scalekit_client.actions # Never hard-code credentials; read from your secrets manager or the user's input chilipiper_token = get_tenant_chilipiper_token("acme") actions.upsert_connected_account( connection_name="chilipipermcp", # must match the name in AgentKit > Connections identifier="acme_revops_agent", # your app's stable identifier for this tenant credentials={"username": chilipiper_token}, )

The Node.js equivalent uses the same connection name and credential shape.

import { ScalekitClient } from '@scalekit-sdk/node'; const scalekit = new ScalekitClient( process.env.SCALEKIT_ENV_URL!, process.env.SCALEKIT_CLIENT_ID!, process.env.SCALEKIT_CLIENT_SECRET!, ); const chilipiperToken = await getTenantChilipiperToken('acme'); await scalekit.actions.upsertConnectedAccount({ connectionName: 'chilipipermcp', identifier: 'acme_revops_agent', credentials: { username: chilipiperToken }, });

Retrieve the authorized tool surface before you call anything

Chili Piper's tool names are not uniformly formatted. Some use underscores throughout, such as chilipipermcp_availability_slots_v2, and others keep the hyphenated Edge operation ID, such as chilipipermcp_concierge-route-by-slug.

Do not type them from memory. Retrieve the authorized surface for the current identifier and execute only names that come back.

from google.protobuf.json_format import MessageToDict scoped_response, _ = actions.tools.list_scoped_tools( identifier="acme_revops_agent", filter={"connection_names": ["chilipipermcp"]}, page_size=100, # the default page will not cover a 156-tool connector ) for scoped_tool in scoped_response.tools: definition = MessageToDict(scoped_tool.tool).get("definition", {}) print(definition.get("name"))

Execute a booking in two calls

The Concierge flow maps directly onto the Edge two-step pattern. Route first to get a session and slots, then commit one slot.

routing = actions.execute_tool( tool_name="chilipipermcp_concierge-route-by-slug", connection_name="chilipipermcp", identifier="acme_revops_agent", tool_input={ "routerSlug": "inbound-demo-request", "body": { "form": { "PersonEmail": "jamie@prospect.com", "PersonFirstName": "Jamie", }, # Always pass options.trigger; a router with several triggers # will otherwise pick one your form keys were not written for "options": {"trigger": "InAppButton"}, "interval": {"startsAt": "2026-09-15T00:00:00Z", "duration": "7 days"}, }, }, ) session = routing.data routing_id = session["routeId"] first_slot = session["schedulingData"]["startTimes"][0] booking = actions.execute_tool( tool_name="chilipipermcp_concierge-schedule", connection_name="chilipipermcp", identifier="acme_revops_agent", tool_input={ "routingId": routing_id, "body": {"startTime": first_slot}, # pass the UTC timestamp back verbatim }, ) print(booking.data)

Sessions are single-use, so a failed booking means re-running the route call, not retrying this one. Log the full wrapper once when you wire a new tool, then read fields from data, because response keys vary per tool.

Python: a LangChain RevOps agent

For an agent that reasons over routing decisions rather than following a script, the LangChain adapter returns native tool objects with no schema reshaping.

from langchain_openai import ChatOpenAI from langchain.agents import create_agent all_tools = actions.langchain.get_tools( identifier="acme_revops_agent", connection_names=["chilipipermcp"], page_size=100, ) # 156 tools is a tool-selection problem, not a capability win. # Keep only what this agent role needs. ALLOWED = { "chilipipermcp_distro_logs", "chilipipermcp_distro_log_get", "chilipipermcp_distro_list_routers", "chilipipermcp_distribution-list-put", "chilipipermcp_rule_list", } tools = [t for t in all_tools if t.name in ALLOWED] agent = create_agent( model=ChatOpenAI(model="gpt-4o"), tools=tools, system_prompt=( "You audit Chili Piper lead routing. Start from distro logs, " "then drill into a single log to explain the routing decision. " "Never modify distributions or rules." ), ) result = agent.invoke({ "messages": [{ "role": "user", "content": "Why did inbound leads from Germany route to the SMB team yesterday?", }], }) print(result["messages"][-1].content)

The in-process filter above is a stopgap. It trims what the model sees, but the connected account is still authorized for all 156 tools, so a bug or a prompt injection can reach past the list.

Scope the surface properly with a Virtual MCP server

A Virtual MCP server enforces the restriction at the endpoint instead of in your process. You declare which connections and which tools an agent role can see, once, and get back a static mcp_server_url. Every run mints a short-lived session token bound to one identifier.

from datetime import timedelta from scalekit.actions.models.mcp_config import McpConfigConnectionToolMapping vmcp = actions.mcp.create_config( name="chilipiper-booking-agent", connection_tool_mappings=[ McpConfigConnectionToolMapping( connection_name="chilipipermcp", tools=[ "chilipipermcp_concierge-list-routers", "chilipipermcp_concierge-route-by-slug", "chilipipermcp_concierge-schedule", "chilipipermcp_availability_slots_v2", ], ), ], ) config_id = vmcp.config.id mcp_server_url = vmcp.config.mcp_server_url # Mint a fresh token before every run; never reuse one across sessions token_response = actions.mcp.create_session_token( mcp_config_id=config_id, identifier="acme_revops_agent", expiry=timedelta(minutes=30), ) token = token_response.token

Four tools instead of 156 is the difference between an agent that books meetings and an agent that might delete a routing rule. The booking agent cannot reach distribution-delete because that tool is not on its endpoint, not because the prompt asked it not to.

TypeScript: a Mastra agent over the scoped endpoint

Mastra has native MCP support, so it discovers the scoped tool list and schemas directly from the endpoint. Generate the per-user URL on your backend and pass it into the agent for the authenticated tenant only.

# Backend (Python): one pre-authenticated MCP URL per tenant inst_response = actions.mcp.ensure_instance( config_name="chilipiper-booking-agent", user_identifier="acme_revops_agent", ) mcp_url = inst_response.instance.url
import { Agent } from '@mastra/core/agent'; import { MCPClient } from '@mastra/mcp'; import { openai } from '@ai-sdk/openai'; // Per-tenant URL fetched from your backend. A process-wide URL runs // every request as one tenant, which is a cross-tenant data leak. const mcpUrl = await getChiliPiperMcpUrl(currentTenantId); const mcp = new MCPClient({ servers: { chilipiper: { url: new URL(mcpUrl) }, }, }); const tools = await mcp.getTools(); const agent = new Agent({ name: 'chilipiper_booking_agent', instructions: 'Route inbound leads through the correct Concierge router and book the ' + 'earliest slot the prospect accepts. Routing sessions are single-use: if ' + 'a booking fails, re-run the routing call before trying again.', model: openai('gpt-4o'), tools, }); const result = await agent.generate( 'Route jamie@prospect.com through the inbound-demo-request router and book the first slot this week.', ); console.log(result.text); await mcp.disconnect();

Observability: attribution on every downstream call

Chili Piper's own logs answer why a lead routed somewhere. They do not answer which agent run initiated the call, on whose authorization, or from which tenant's credential.

Because every Scalekit tool call resolves through a connected account, the downstream call carries that attribution. When an auditor asks who cancelled 40 meetings last Tuesday, the answer is a query, not a forensic exercise. The reasoning behind that design is covered in agent tool observability and audit trails for agent auth.

Connected-account state is part of the same picture. Subscribing to connected_account.status_updated means a revoked Chili Piper token pages your system, not a prospect staring at a failed booking form.

Which one to build against

If your agent's job is investigative, where the next call depends on what the last one returned, use the MCP server and let the model choose the operation. If your agent's job is a booking pipeline that runs the same five calls every time, write against the Edge API and pin the contract; the model has nothing useful to decide there.

Most production Chili Piper agents end up doing both. A booking path that must not drift, and a reasoning path for the RevOps questions nobody can enumerate in advance. What does not change across either is that Chili Piper's credential is org-level, unscoped by default, and revocable with no refresh path. That is the part worth building on infrastructure rather than in your application.

Where to start

Start from the ChiliPiper MCP connector docs, or from a working blueprint: the CRM AI agent, the meeting prep agent, the sales call prep agent, and the email to calendar agent all sit in the same GTM surface as Chili Piper. The full set is under GTM and RevOps agent templates, and usage-based limits are on the agent gateway pricing page.

Talk to other Chili Piper agent builders

If you are wiring Chili Piper routing into an agent and hitting the tool-surface or token-scoping problems above, come compare notes in the Scalekit Slack community.

For a scoping conversation about multi-tenant Chili Piper agents, per-tenant token isolation, or Virtual MCP server design, talk to us directly.

No items found.
Agent
Auth Quickstart
On this page
Share this article
Agent
Auth Quickstart

Acquire enterprise customers with
‍zero upfront cost.

Every feature unlocked. No hidden fees.