Chanl

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 ChanlWith Chanl
Build a tool execution runtimetool_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 storememory_search, memory_add — customer, agent, and session scoped
Build a secret management vaultEncrypted credential storage, referenced by name in tool configs
Build a prompt versioning systemMCP 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:

PrimitiveChanl surfacePurpose
Toolstools/list, tools/callActions — search KB, run HTTP tools, list agents, consolidated workspace tools (agents, customers, scenarios, …)
Resourcesresources/list, resources/readRead-only data — kb:// knowledge documents
Promptsprompts/list, prompts/getTemplated 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.json

Guided prompts (shipped with Chanl)

These static MCP prompts are always available, independent of your workspace library:

  • create-agent — interview workflow for a new agent
  • review-customer — 360° customer review
  • triage-followups — prioritize follow-ups
  • build-tool — design an HTTP or system tool
  • create-scenario — draft a test scenario
  • improve-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.

ToolWhat It Does
kb_searchSemantic search across your knowledge base
kb_addAdd a new entry to the knowledge base
kb_listList all knowledge base entries
memory_searchFind customer memories by semantic query
memory_addStore a memory (scoped to customer, agent, or session)
memory_deleteRemove memories
tool_listList all tools in the workspace
prompt_listList prompt templates
prompt_getGet a specific prompt with resolved variables
interaction_listList recent conversations
interaction_statsConversation analytics and metrics
workspace_statsWorkspace 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

Your Agent (VAPI, Retell, Bland, Custom) Chanl Backend — acme.chanl.dev Also Automatic MCP over HTTPS Call data Conversation Engine MCP Server Knowledge Base Persistent Memory Custom Tools Prompt Templates Secret Vault Transcripts Scorecard Evaluation Analytics

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

EnvironmentURL Pattern
Productionhttps://{workspace-slug}.chanl.dev/{toolset-slug}
Staginghttps://{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.

HeaderRequiredValue
X-API-KeyYesYour workspace API key
Content-TypeYesapplication/json
AcceptYesapplication/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

On this page