# Create an MCP server

> Source: https://elaichi.ai/docs/guides/mcp-servers/creating-an-mcp-server/

Expose one of your toolboxes as a personal MCP endpoint. Clients discover and call those tools using the open Model Context Protocol — no integration code required.

The server acts as **you**: your connections, your permissions, your restrictions. Two people using copies of the same shared toolbox get different results because each runs on their own accounts.

**Where to find it:** **MCP Servers → New MCP server**, or open a toolbox under **Toolboxes → My toolboxes** → **Create MCP server**

You need `mcp:create`.

```mermaid title="What an MCP call runs as"
flowchart LR
  Client["AI client"] --> MCP["Your MCP server"]
  MCP --> Toolbox["Your toolbox"]
  Toolbox --> Conn["Your connections"]
  Toolbox --> Perms["Your roles,<br/>shares, restrictions"]
```

## Create one

1. Open **MCP Servers** (or start from a Mine toolbox so the toolbox is preselected).
2. Choose **New MCP server** / **Create MCP server**.
3. Fill in:

| Field | Purpose |
| --- | --- |
| **Toolbox** | Which of **your** toolboxes to expose |
| **Name** | Label in the MCP Servers list |
| **Expires** (optional) | Automatic end date for the endpoint |
| **Require API token** | Clients must also send an organization API token (`Authorization: Bearer elch_…` from **Settings → API tokens**) |
| **Meta tools** | How large toolboxes are advertised (see below) |

4. Create it. The reveal dialog shows the **MCP server URL** (token embedded) **once**.
5. Copy it, check **I copied the MCP server URL**, then **Done**.

:::callout{type="warning"}
Treat the URL like a password. You can’t view the token again — use **Regenerate URL** later if it’s lost or leaked.
:::

## Connect your client

Paste the URL into your client’s MCP configuration. Product snippets cover:

| Client | Typical config |
| --- | --- |
| **Claude Desktop** | `claude_desktop_config.json` entry (often via `mcp-remote`) |
| **Cursor** | `~/.cursor/mcp.json` or project `.cursor/mcp.json` with a `url` |

Any MCP client that speaks HTTP MCP can connect the same way — including Dust and others. If you turned on **Require API token**, the client must also send a current organization API token.

After connect, the client lists your tools and can call them. Prefer the [desktop app](/guides/mcp-servers/desktop-app) if you don’t want to edit JSON by hand.

## Large toolbox helpers (meta tools)

Toolboxes with many tools can overwhelm a model’s context. When you create (or edit) a server, choose **Meta tools**:

| Mode | Behavior |
| --- | --- |
| **Auto** | When there are more than **30** tools, advertise only `search_tools` and `execute_tool` |
| **Always** | Always expose only search and execute |
| **Never** | List every tool directly |

`search_tools(query)` finds tools by name/description; `execute_tool(name, arguments)` runs one. The underlying toolbox, frozen params, and restrictions still apply.

## What the server can do

- Only tools in that user toolbox that are ready (bound, enabled, not restriction-blocked)
- Only through connections that toolbox uses
- Every call is audited

It cannot exceed your role, shares, or governance rules.

## Good to know

- Mint from **Mine** toolboxes only — not from a shared template until you’ve instantiated it.
- System connection/global toolboxes are valid sources for MCP servers.
- Optional expiry and API-token requirement are per server; edit later without changing the URL unless you regenerate.

## Related

- [Manage MCP servers](/guides/mcp-servers/manage-mcp-servers)
- [Desktop app](/guides/mcp-servers/desktop-app)
- [Your toolboxes](/guides/toolboxes/your-toolboxes)
- [API tokens](/guides/settings/api-tokens)
