> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cekura.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Model Context Protocol (MCP)

> Connect your AI assistant to Cekura for instant access to documentation and APIs

export const CopyPageButton = () => {
  if (typeof window !== 'undefined') {
    setTimeout(function () {
      if (document.getElementById('ck-tools')) return;
      var anchor = document.getElementById('content-area') || document.querySelector('.mdx-content');
      if (!anchor) return;
      if (!document.getElementById('ck-style')) {
        var s = document.createElement('style');
        s.id = 'ck-style';
        s.textContent = '#ck-tools{position:absolute;top:6px;right:0;z-index:100;font-family:inherit;}' + '.ck-row{display:inline-flex;align-items:stretch;border:1px solid rgba(0,0,0,0.15);border-radius:8px;overflow:hidden;background:#fff;}' + ':root.dark .ck-row{background:rgba(255,255,255,0.06);border-color:rgba(255,255,255,0.12);}' + '.ck-btn{padding:5px 12px;border:none;background:none;cursor:pointer;font-size:13px;font-weight:500;font-family:inherit;color:#374151;}' + ':root.dark .ck-btn{color:#d1d5db;}' + '.ck-btn:hover{background:rgba(0,0,0,0.04);}' + ':root.dark .ck-btn:hover{background:rgba(255,255,255,0.06);}' + '.ck-chevron{padding:5px 8px;border:none;background:none;cursor:pointer;font-size:14px;font-family:inherit;color:#374151;}' + ':root.dark .ck-chevron{color:#d1d5db;}' + '.ck-chevron:hover{background:rgba(0,0,0,0.04);}' + ':root.dark .ck-chevron:hover{background:rgba(255,255,255,0.06);}' + '.ck-divider{width:1px;background:rgba(0,0,0,0.12);flex-shrink:0;}' + ':root.dark .ck-divider{background:rgba(255,255,255,0.12);}' + '.ck-dd{position:absolute;top:calc(100% + 4px);right:0;min-width:180px;background:#fff;border:1px solid rgba(0,0,0,0.12);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);padding:4px;display:none;z-index:200;}' + ':root.dark .ck-dd{background:#1f2937;border-color:rgba(255,255,255,0.1);box-shadow:0 4px 16px rgba(0,0,0,0.35);}' + '.ck-item{display:block;width:100%;padding:7px 12px;border:none;background:none;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit;text-align:left;color:#374151;}' + ':root.dark .ck-item{color:#d1d5db;}' + '.ck-item:hover{background:rgba(0,0,0,0.05);}' + ':root.dark .ck-item:hover{background:rgba(255,255,255,0.07);}';
        document.head.appendChild(s);
      }
      var wrap = document.createElement('div');
      wrap.id = 'ck-tools';
      var row = document.createElement('div');
      row.className = 'ck-row';
      var mainBtn = document.createElement('button');
      mainBtn.className = 'ck-btn';
      mainBtn.textContent = 'Copy page';
      var divider = document.createElement('span');
      divider.className = 'ck-divider';
      var chevron = document.createElement('button');
      chevron.className = 'ck-chevron';
      chevron.textContent = '▾';
      var dd = document.createElement('div');
      dd.className = 'ck-dd';
      function closeDD() {
        dd.style.display = 'none';
      }
      function openDD() {
        dd.style.display = 'block';
      }
      chevron.onclick = function (e) {
        e.stopPropagation();
        if (dd.style.display === 'block') {
          closeDD();
        } else {
          openDD();
        }
      };
      document.addEventListener('click', function (e) {
        if (!e.target.closest('#ck-tools')) {
          closeDD();
        }
      });
      document.addEventListener('keydown', function (e) {
        if (e.key === 'Escape') {
          closeDD();
        }
      });
      function makeItem(label, fn) {
        var b = document.createElement('button');
        b.className = 'ck-item';
        b.textContent = label;
        b.onclick = function () {
          fn();
          closeDD();
        };
        return b;
      }
      function getMarkdown() {
        var walk = function (node) {
          if (!node) return '';
          if (node.nodeType === 3) return node.textContent || '';
          if (node.nodeType !== 1) return '';
          var tag = node.tagName.toLowerCase();
          var skip = ['script', 'style', 'svg', 'noscript', 'button', 'iframe'];
          if (skip.indexOf(tag) !== -1) return '';
          if (node.id === 'ck-tools') return '';
          var ch = Array.from(node.childNodes).map(walk).join('');
          if (tag === 'h1') return '\n# ' + ch.trim() + '\n\n';
          if (tag === 'h2') return '\n## ' + ch.trim() + '\n\n';
          if (tag === 'h3') return '\n### ' + ch.trim() + '\n\n';
          if (tag === 'p') return '\n' + ch.trim() + '\n\n';
          if (tag === 'pre') return '\n```\n' + node.textContent.trim() + '\n```\n\n';
          if (tag === 'li') return '- ' + ch.trim() + '\n';
          if (tag === 'code') return '`' + ch.trim() + '`';
          return ch;
        };
        var content = document.querySelector('.mdx-content') || document.getElementById('content-area') || document.body;
        return walk(content).replace(/\n\n\n+/g, '\n\n').trim();
      }
      function copyMd() {
        var md = getMarkdown();
        navigator.clipboard.writeText(md).then(function () {
          mainBtn.textContent = 'Copied!';
          setTimeout(function () {
            mainBtn.textContent = 'Copy page';
          }, 2000);
        });
      }
      function viewMd() {
        var md = getMarkdown();
        var safe = md.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;');
        var html = '<!DOCTYPE html><html><head><meta charset="utf-8"><style>body{font-family:monospace;max-width:860px;margin:40px auto;padding:0 24px;line-height:1.7;white-space:pre-wrap;word-wrap:break-word}</style></head><body>' + safe + '</body></html>';
        window.open(URL.createObjectURL(new Blob([html], {
          type: 'text/html'
        })), '_blank');
      }
      function openClaude() {
        var prompt = 'Can you read this Cekura docs page ' + window.location.href + ' so I can ask you questions?';
        window.open('https://claude.ai/new?q=' + encodeURIComponent(prompt), '_blank');
      }
      mainBtn.onclick = copyMd;
      dd.appendChild(makeItem('Copy page', copyMd));
      dd.appendChild(makeItem('View as Markdown', viewMd));
      dd.appendChild(makeItem('Open in Claude', openClaude));
      row.appendChild(mainBtn);
      row.appendChild(divider);
      row.appendChild(chevron);
      wrap.appendChild(row);
      wrap.appendChild(dd);
      anchor.style.position = 'relative';
      anchor.insertBefore(wrap, anchor.firstChild);
    }, 50);
  }
  return null;
};

<CopyPageButton />

<Note>
  **One Connection, Complete Access:** Cekura's MCP server provides both documentation search and API operations in a single endpoint. Ask questions about Cekura, search integration guides, create agents, run tests, and analyze results—all through natural language with your AI assistant.
</Note>

## Quickstart — OAuth in one click

For most users, MCP setup is two commands and a browser sign-in. No API keys, no env vars, no config files.

<Tabs>
  <Tab title="Claude Code">
    ```bash theme={null}
    claude mcp add --transport http cekura --scope user https://api.cekura.ai/mcp
    ```

    On first use, Claude Code opens a browser window — sign into your Cekura dashboard, click **Authorize**, and you're done. The session token is managed by Claude Code automatically.

    Verify:

    ```bash theme={null}
    claude mcp list
    ```
  </Tab>

  <Tab title="Claude Desktop">
    1. **Settings → Connectors → Add custom connector**
    2. Name: `Cekura`, URL: `https://api.cekura.ai/mcp`
    3. Save → browser opens → sign in → done.

    No config files, no Node.js, no keys.
  </Tab>
</Tabs>

That's the entire setup. Skip to **Verify Connection** below.

For Cursor, VS Code, Codex, or other clients, see the full configuration matrix below. For API-key-based auth (only needed for project-scoped credentials or shared CI access), expand the **API Key** path.

## Prerequisites

Before setting up MCP, ensure you have:

1. Access to the [Cekura Dashboard](https://dashboard.cekura.ai)
2. **Node.js 20.18.1 or higher** installed — *only* if you're configuring Cursor, VS Code, or another client that uses the `mcp-remote` shim. Claude Code and Claude Desktop don't need Node.js.
   * Check your version: `node --version`
   * Download from: [nodejs.org](https://nodejs.org/)

## Configure MCP Server (full matrix)

OAuth is the recommended path for nearly every user. Pick the API Key tab only if you need a project-scoped credential, want to share access via a key, or your client doesn't support OAuth.

<Tabs>
  <Tab title="OAuth (recommended)">
    No header required. On first use, your client opens a browser window — sign into Cekura, click Authorize, and the session token is managed automatically.

    <Tabs>
      <Tab title="Claude Code">
        ```bash theme={null}
        claude mcp add --transport http cekura --scope user https://api.cekura.ai/mcp
        ```

        Verify:

        ```bash theme={null}
        claude mcp list
        ```
      </Tab>

      <Tab title="Claude Desktop">
        Use the in-app Connectors UI — no config file editing required.

        1. Open Claude Desktop → **Settings** → **Connectors**.
        2. Click **Add custom connector**.
        3. Set **Name** to `Cekura` and **URL** to `https://api.cekura.ai/mcp`.
        4. Save. Claude Desktop opens a browser window to authorize against your Cekura dashboard account.
        5. Once authorized, Cekura tools appear in the connector list and are available in any new chat.

        No Node.js required for this path — Claude Desktop's native connector handles the remote MCP transport directly.
      </Tab>

      <Tab title="Cursor / VS Code">
        Add to your Cursor MCP config or `.vscode/mcp.json`:

        ```json theme={null}
        {
          "mcpServers": {
            "cekura": {
              "command": "npx",
              "args": ["mcp-remote", "https://api.cekura.ai/mcp"]
            }
          }
        }
        ```
      </Tab>

      <Tab title="Codex">
        Add to `~/.codex/config.toml`:

        ```toml theme={null}
        [mcp_servers.cekura]
        url = "https://api.cekura.ai/mcp"
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="API Key">
    Use this if you want a project-scoped credential, want to share access via a key, or your client doesn't support OAuth. Replace `YOUR_API_KEY_HERE` with the key from **Settings → API Keys**.

    <Tabs>
      <Tab title="Claude Code">
        ```bash theme={null}
        claude mcp add --transport http cekura --scope user https://api.cekura.ai/mcp --header "X-CEKURA-API-KEY:YOUR_API_KEY_HERE"
        ```

        Verify:

        ```bash theme={null}
        claude mcp list
        ```
      </Tab>

      <Tab title="Claude Desktop">
        <Tip>
          If you don't specifically need an API key, use the OAuth tab above — Claude Desktop has a much simpler Connectors-UI flow that doesn't require editing config files.
        </Tip>

        ```json theme={null}
        {
          "mcpServers": {
            "cekura": {
              "command": "npx",
              "args": [
                "mcp-remote",
                "https://api.cekura.ai/mcp",
                "--header",
                "X-CEKURA-API-KEY:${CEKURA_API_KEY}"
              ],
              "env": {
                "CEKURA_API_KEY": "YOUR_API_KEY_HERE"
              }
            }
          }
        }
        ```
      </Tab>

      <Tab title="Cursor">
        ```json theme={null}
        {
          "mcpServers": {
            "cekura": {
              "command": "npx",
              "args": [
                "mcp-remote",
                "https://api.cekura.ai/mcp",
                "--header",
                "X-CEKURA-API-KEY:${CEKURA_API_KEY}"
              ],
              "env": {
                "CEKURA_API_KEY": "YOUR_API_KEY_HERE"
              }
            }
          }
        }
        ```
      </Tab>

      <Tab title="VS Code">
        Create or edit `.vscode/mcp.json`:

        ```json theme={null}
        {
          "mcpServers": {
            "cekura": {
              "command": "npx",
              "args": [
                "mcp-remote",
                "https://api.cekura.ai/mcp",
                "--header",
                "X-CEKURA-API-KEY:${CEKURA_API_KEY}"
              ],
              "env": {
                "CEKURA_API_KEY": "YOUR_API_KEY_HERE"
              }
            }
          }
        }
        ```
      </Tab>

      <Tab title="Codex">
        **CLI:**

        ```bash theme={null}
        codex mcp add cekura --env CEKURA_API_KEY=YOUR_API_KEY_HERE -- sh -c 'npx -y mcp-remote https://api.cekura.ai/mcp --header "X-CEKURA-API-KEY:$CEKURA_API_KEY"'
        ```

        **Or, native HTTP via `~/.codex/config.toml`:**

        ```toml theme={null}
        [mcp_servers.cekura]
        url = "https://api.cekura.ai/mcp"
        http_headers = { "X-CEKURA-API-KEY" = "YOUR_API_KEY_HERE" }
        ```
      </Tab>
    </Tabs>
  </Tab>
</Tabs>

## Verify Connection

Restart your AI assistant and ask:

```plaintext theme={null}
"List my Cekura agents"
```

If configured correctly, your assistant returns your agents from the Cekura API.

## How MCP Works

<Steps>
  <Step title="Unified Access">
    One connection exposes 84+ tools spanning documentation search and API operations.
  </Step>

  <Step title="Documentation Search (no auth)">
    Search Cekura's knowledge base for guides, schemas, and examples without an API key.
  </Step>

  <Step title="API Operations (auth required)">
    Create agents, run tests, analyze results, and manage your workspace via natural language.
  </Step>

  <Step title="Smart Tool Selection">
    Your assistant picks the right tool based on intent—answers questions or takes action.
  </Step>

  <Step title="Secure Authentication">
    OAuth uses a session-bound Bearer token your client manages automatically. API-key clients send `X-CEKURA-API-KEY`.
  </Step>
</Steps>

## Working with MCP

<AccordionGroup>
  <Accordion title="Learn, then execute">
    Ask your assistant a question first, then take action with the same context:

    ```plaintext theme={null}
    "How do I integrate with Retell?" → searches docs
    "Create a Retell agent named 'Support Bot' with assistant ID abc123" → creates it
    ```
  </Accordion>

  <Accordion title="Combine documentation with your data">
    "Show me how custom metrics work, then list the metrics on my Support Bot agent" — your assistant reads docs and your live workspace in one turn.
  </Accordion>

  <Accordion title="Run scenarios over the right connection">
    Each `scenarios_run_*` tool drives one connection type — telephony (`scenarios_run_voice`), SIP (`scenarios_run_sip`), provider WebRTC (`scenarios_run_vapi_webrtc`, `scenarios_run_retell_webrtc`, …), chat (`scenarios_run_text`) — and only works if that connection is configured on the agent. Just like the dashboard's Connections picker, retrieve the agent first (`aiagents_retrieve`) and check `provider.type` and the `telephony` block to see which connections are set up.
  </Accordion>
</AccordionGroup>

For deeper end-to-end walkthroughs, see the [Claude Code Guide](/mcp/claude-code-guide) or the [Claude Desktop Guide](/mcp/claude-desktop-guide) (covers Connectors, Skills, and authoring custom skills).

## Request Headers

| Header                           | Used by      | Description                                        |
| -------------------------------- | ------------ | -------------------------------------------------- |
| `Authorization: Bearer <token>`  | OAuth        | Set automatically by your MCP client after sign-in |
| `X-CEKURA-API-KEY`               | API key path | Required header when using an API key              |
| `Content-Type: application/json` | Both         | Request payload format                             |

## Tool Configuration

Tools are auto-generated from Cekura's OpenAPI spec — every documented endpoint becomes an MCP tool with a typed `inputSchema`. You don't author them; the server handles registration and stays in sync with the API. See the [API Reference](/api-reference) for endpoint details.

## Best Practices

<AccordionGroup>
  <Accordion title="Auth hygiene">
    * **OAuth (preferred):** Re-authorize when your session expires; revoke MCP access from the dashboard if a device is lost.
    * **API key:** Never commit keys to version control. Use environment variables. Rotate regularly. Use separate keys per environment. If you're using an API key only because OAuth wasn't obvious, switch — OAuth is simpler to revoke and avoids leaks via config files.
  </Accordion>

  <Accordion title="Handle rate limits">
    Cekura enforces per-plan rate limits. If you hit `429`, slow down or upgrade your plan. Check usage in **Settings → API Usage**.
  </Accordion>

  <Accordion title="Test before production">
    Start with read-only operations (list agents, fetch results), then move to writes. Test in dev with a separate account or API key before pointing at production data.
  </Accordion>
</AccordionGroup>

<Warning>
  Large responses (detailed transcripts, full call logs) consume context. Ask for filtered or summarized results when possible.
</Warning>

## Available Tools

Cekura's MCP server provides 84+ tools across four categories:

<CardGroup cols={2}>
  <Card title="Documentation Search" icon="magnifying-glass" color="#A6A7EA">
    **No auth required**

    * Search integration guides
    * Find API schemas and examples
    * Understand features and workflows
  </Card>

  <Card title="Testing" icon="flask" color="#A6A7EA">
    **Auth required**

    * Create and manage agents
    * Run test scenarios and evaluators
    * Define custom metrics
    * View and analyze results
  </Card>

  <Card title="Observability" icon="eye" color="#A6A7EA">
    **Auth required**

    * List and search call logs
    * Send calls for evaluation
    * Analyze call performance
  </Card>

  <Card title="Automation" icon="clock" color="#A6A7EA">
    **Auth required**

    * Create scheduled jobs
    * Manage cronjobs
    * Automate recurring tests
  </Card>
</CardGroup>

For per-endpoint details, see the [API Reference](/api-reference).

## Other MCP Clients

The Cekura MCP server speaks standard HTTP MCP, so any MCP-compatible client (Make.com, Zapier, custom servers, etc.) can connect to `https://api.cekura.ai/mcp` using the same OAuth or API-key flow.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Auth failed">
    **Error**: `401 Unauthorized`

    * **OAuth:** Re-run the sign-in flow (your client usually re-prompts automatically). Confirm you're signed into the right Cekura account in your browser.
    * **API key:** Verify the header name is `X-CEKURA-API-KEY` (case-sensitive) and the key is active in the dashboard. Generate a fresh key if needed.
  </Accordion>

  <Accordion title="Tools Not Showing Up">
    **Issue**: AI assistant doesn't see Cekura tools

    * Restart your AI assistant after configuration
    * Verify the URL is `https://api.cekura.ai/mcp`
    * Check your config file syntax is valid JSON / TOML
    * Look for connection errors in the assistant's logs
  </Accordion>

  <Accordion title="Node.js Version Error (Windows)">
    **Error**: `Unsupported engine` or `ReferenceError: File is not defined`

    **Cause**: Multiple Node.js versions installed, wrong version being used.

    **Solution**:

    1. List Node installs: `where node`
    2. Find your Node v20+ path: `node -e "console.log(process.execPath)"`
    3. Use the absolute path in your config:
       ```json theme={null}
       {
         "mcpServers": {
           "cekura": {
             "command": "C:\\Full\\Path\\To\\node.exe",
             "args": [
               "C:\\Full\\Path\\To\\npx-cli.js",
               "-y",
               "mcp-remote",
               "https://api.cekura.ai/mcp"
             ]
           }
         }
       }
       ```
    4. Or uninstall older Node.js versions.
  </Accordion>

  <Accordion title="Rate Limit Exceeded">
    **Error**: `429 Too Many Requests`

    * Check current usage in **Settings → API Usage**
    * Throttle requests in your workflow
    * Upgrade your plan or contact support for higher limits
  </Accordion>
</AccordionGroup>

## References

<CardGroup cols={2}>
  <Card title="API Reference" icon="book" href="/api-reference">
    Complete API documentation
  </Card>

  <Card title="Cekura Skills" icon="sparkles" href="/mcp/skills">
    Install Cekura skills into your AI coding agent
  </Card>

  <Card title="Dashboard" icon="gauge" href="https://dashboard.cekura.ai">
    Manage auth, projects, and API keys
  </Card>

  <Card title="Support" icon="life-ring" href="mailto:support@cekura.ai">
    Get help with MCP setup
  </Card>
</CardGroup>
