MCP
Give any AI agent instant access to tools, knowledge, and memory — one MCP endpoint, zero backend code
MCP Server
Your VAPI agent needs to look up an order. Your Retell agent needs to remember a caller from last week. Your Claude Desktop assistant needs to search your company's docs. Each of these requires a backend service you'd normally spend weeks building.
Chanl gives every workspace an MCP endpoint that handles all of it:
https://{workspace-slug}.chanl.dev/{toolset-slug}Connect any MCP-compatible client — and your agent instantly gets tools, knowledge search, persistent memory, and prompt templates. No backend code. No infrastructure. No RAG pipeline to build.
What Your Agent Gets
One MCP connection, five backend services:
| Without Chanl | With Chanl |
|---|---|
| Build a tool execution runtime | tool_list, tool_execute — call any HTTP endpoint, JS function, or system tool |
| Build a RAG pipeline (chunk, embed, retrieve) | kb_search, kb_add — upload docs, get semantic search instantly |
| Build a persistent memory store | memory_search, memory_add — customer, agent, and session scoped |
| Build a secret management vault | Encrypted credential storage, referenced by name in tool configs |
| Build a prompt versioning system | MCP prompts (prompts/list, prompts/get) plus prompt_list / prompt_get tools |
Quick Start
In the dashboard, go to Settings → API Keys. Create a key with tools:read and tools:execute scopes. You'll need this for the X-API-Key header.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"chanl": {
"type": "streamablehttp",
"url": "https://acme.chanl.dev/admin-tools",
"headers": {
"X-API-Key": "chanl_key_abc123..."
}
}
}
}Restart Claude Desktop. You'll see Chanl tools in the tools menu.
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"chanl": {
"type": "streamablehttp",
"url": "https://acme.chanl.dev/admin-tools",
"headers": {
"X-API-Key": "chanl_key_abc123..."
}
}
}
}Add to .mcp.json in your project root:
{
"mcpServers": {
"chanl": {
"type": "streamablehttp",
"url": "https://acme.chanl.dev/admin-tools",
"headers": {
"X-API-Key": "chanl_key_abc123..."
}
}
}
}import { Client } from '@modelcontextprotocol/sdk/client';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const transport = new StreamableHTTPClientTransport(
new URL('https://acme.chanl.dev/admin-tools'),
{
requestInit: {
headers: { 'X-API-Key': process.env.CHANL_API_KEY! },
},
},
);
const client = new Client({ name: 'my-app', version: '1.0.0' });
await client.connect(transport);
// Search your knowledge base during a call
const result = await client.callTool({
name: 'kb_search',
arguments: { query: 'refund policy for orders over 30 days', limit: 5 },
});
console.log(result.content); // Relevant policy documents
// Remember something about this customer
await client.callTool({
name: 'memory_add',
arguments: {
customerId: 'cust_123',
content: 'Prefers email follow-ups. Has 2 active subscriptions.',
},
});
await client.close();Replace acme with your workspace slug. admin-tools is the built-in toolset every workspace gets.
Try a knowledge base search or memory lookup. If your client shows Chanl tools and they return results, you're connected.
Run a test scenario in Chanl to see the MCP connection in action — your agent will call Chanl tools during the simulated conversation, and you'll see every tool call in the transcript.
MCP primitives: tools, resources, prompts
The Model Context Protocol defines three discovery surfaces. Chanl implements all three on every workspace MCP endpoint:
| Primitive | Chanl surface | Purpose |
|---|---|---|
| Tools | tools/list, tools/call | Actions — search KB, run HTTP tools, list agents, consolidated workspace tools (agents, customers, scenarios, …) |
| Resources | resources/list, resources/read | Read-only data — kb:// knowledge documents |
| Prompts | prompts/list, prompts/get | Templated instructions with argument schemas |
Workspace prompts (from your library)
Prompts you create via the Prompts API or SDK are registered on the MCP server automatically. Each prompt becomes an MCP prompt with variables as arguments. Clients call prompts/get to render Liquid templates at runtime.
# Manage the library
chanl prompts list
chanl prompts create -f greeting.jsonGuided prompts (shipped with Chanl)
These static MCP prompts are always available, independent of your workspace library:
create-agent— interview workflow for a new agentreview-customer— 360° customer reviewtriage-followups— prioritize follow-upsbuild-tool— design an HTTP or system toolcreate-scenario— draft a test scenarioimprove-agent— review and improve agent instructions
Prompt tools (tool-calling clients)
Some clients only support tools, not MCP prompts. Chanl also exposes prompt_list and prompt_get as admin tools that call the same REST API. Prefer MCP prompts when your client supports them — they are the protocol-native surface.
Built-in Tools
Every workspace gets an admin-tools toolset at slug admin-tools. No setup needed — these are available the moment you create a workspace.
| Tool | What It Does |
|---|---|
kb_search | Semantic search across your knowledge base |
kb_add | Add a new entry to the knowledge base |
kb_list | List all knowledge base entries |
memory_search | Find customer memories by semantic query |
memory_add | Store a memory (scoped to customer, agent, or session) |
memory_delete | Remove memories |
tool_list | List all tools in the workspace |
prompt_list | List prompt templates |
prompt_get | Get a specific prompt with resolved variables |
interaction_list | List recent conversations |
interaction_stats | Conversation analytics and metrics |
workspace_stats | Workspace overview — agent count, tool count, usage |
Custom Toolsets
The built-in admin-tools are a starting point. For production, you'll want toolsets scoped to specific agents or use cases.
A customer support agent doesn't need workspace_stats. It needs lookup_order, check_warranty, and create_ticket. Here's how to set that up:
# Create a scoped toolset
chanl toolsets create --name "Support Tools" --slug "support-tools"
# Add an HTTP tool that calls your order API
chanl tools create --name "lookup_order" --type http \
--method GET --url "https://api.yourshop.com/orders/{{orderId}}" \
--headers '{"Authorization": "Bearer {{secret:shop_api_key}}"}'
# Add it to the toolset
chanl toolsets add-tool --toolset support-tools --tool <tool-id>Now your support agent connects to https://acme.chanl.dev/support-tools and gets exactly the tools it needs. Nothing more, nothing less.
Notice {{secret:shop_api_key}} in the URL. Chanl's secret vault stores API keys encrypted — they never appear in logs, configs, or MCP responses. Create secrets in Settings → Secrets.
How MCP Fits In
The conversation happens on your platform. The intelligence comes from Chanl. And every call is automatically transcribed, scored, and tracked — whether it's a test simulation or a production call.
Authentication & URLs
| Environment | URL Pattern |
|---|---|
| Production | https://{workspace-slug}.chanl.dev/{toolset-slug} |
| Staging | https://{workspace-slug}.staging.chanl.dev/{toolset-slug} |
All requests require X-API-Key header. Keys are workspace-scoped — acme.chanl.dev only accepts keys from the acme workspace.
| Header | Required | Value |
|---|---|---|
X-API-Key | Yes | Your workspace API key |
Content-Type | Yes | application/json |
Accept | Yes | application/json, text/event-stream |
Troubleshooting
What's Next
Knowledge Base
Upload your docs and policies — agents search them in real-time during calls
Tools
Create custom functions your agents can call — CRM lookups, order checks, ticket creation
Memory
Give agents persistent memory — they remember customers across conversations
Toolsets
Group tools into collections for specific agents or use cases