> AI agents: this is one page from Mammoth Analytics documentation. The index of all pages as Markdown is https://docs.mammoth.io/llms.txt. Append `.md` to any docs URL, or send `Accept: text/markdown`, to get Markdown.

# Mammoth MCP server

> Connect an MCP client such as Claude, ChatGPT or VS Code to your Mammoth workspace at https://mcp.mammoth.io/mcp. Setup per client, OAuth sign-in, revoking access, and the full tool list.

The Mammoth MCP server lets an AI client explore, clean, transform and export your Mammoth data. It is hosted at:

```
https://mcp.mammoth.io/mcp
```

Nothing to install. The client signs you in to Mammoth with OAuth, and every tool call then runs as you, with your permissions.

## This server and the documentation server

Mammoth has two MCP servers. They do different jobs.

| | Mammoth MCP server | Documentation MCP server |
| --- | --- | --- |
| URL | `https://mcp.mammoth.io/mcp` | `https://docs.mammoth.io/mcp` |
| Sign-in | OAuth: you approve the connection on a Mammoth consent page | None |
| Reads your workspace | Yes, as you | No |
| Changes your workspace | Yes, as you | No |
| Use it for | Working on your datasets, views, pipelines, dashboards, automations and exports | Looking up how Mammoth works from these docs |

See [Use Mammoth with Claude](https://docs.mammoth.io/agents/claude) for the documentation server. To act on a workspace from a terminal instead, use the [CLI](https://docs.mammoth.io/agents/).

## Set up your client

### Claude on the web and Claude Desktop

Add a custom connector with this URL, then sign in to Mammoth when Claude asks:

```
https://mcp.mammoth.io/mcp
```

Anthropic's [guide to custom connectors](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) has the current steps, including how an organization owner adds a connector on Team and Enterprise plans.

**Fewer approval prompts.** By default Claude asks you before every tool call. In the connector's settings, set **Read-only tools** and **Interactive tools** to **Always allow**. Claude then runs reads and uploads without asking, and still asks before a tool that changes, deletes or sends out data.

### Claude Code

```bash
claude mcp add --transport http mammoth https://mcp.mammoth.io/mcp
```

Then run `/mcp` inside a session and choose **mammoth** to sign in. Add `--scope user` to use the server in every project.

### ChatGPT

On the web, in ChatGPT:

1. Go to ChatGPT Plugins, select the plus button, and choose **Add custom MCP server**.
2. Enter a name. Under **Connection**, enter the Server URL:

   ```
   https://mcp.mammoth.io/mcp
   ```

3. Set authentication to **OAuth**. Choose Client ID Metadata Documents (CIMD) if ChatGPT offers the choice: Mammoth supports CIMD and not Dynamic Client Registration (see below).
4. Review the risk warning and confirm with **I understand and want to continue**, then select **Create as a plugin**.
5. Install the plugin. You must install it before you can use it in a conversation, then sign in to Mammoth when ChatGPT asks.

OpenAI's [guide to adding a custom MCP server](https://developers.openai.com/api/docs/guides/custom-mcp-server) has the current steps.

### Cursor

Cursor cannot sign in to the Mammoth MCP server yet. It supports only Dynamic Client Registration, which Mammoth does not offer. In Cursor, use the [Mammoth CLI and its skill](https://docs.mammoth.io/agents/) instead.

### VS Code

Add the server to `.vscode/mcp.json`:

```json
{
  "servers": {
    "mammoth": {
      "type": "http",
      "url": "https://mcp.mammoth.io/mcp"
    }
  }
}
```

Neither file holds a credential: the client gets its own token through the sign-in below.

## Which clients can connect

Mammoth identifies a client in one of two ways:

- **Client ID Metadata Documents (CIMD).** The client's `client_id` is an `https://` URL that serves a small JSON document naming the client and its redirect URIs. Mammoth fetches that document when the client starts the sign-in. The client sends a PKCE `S256` challenge and needs no secret.
- **The built-in Mammoth CLI client.** The [CLI](https://docs.mammoth.io/agents/) signs in as `mammoth-cli`.

Mammoth does not offer Dynamic Client Registration: its authorization server metadata has no registration endpoint. A client that can only register itself dynamically cannot connect. A client that supports Client ID Metadata Documents can.

Verified to connect: ChatGPT and VS Code. Claude on the web, Claude Desktop and Claude Code are set up above and use the same sign-in. Not yet supported: Cursor, which supports only Dynamic Client Registration.

## Sign in

1. The client calls the server with no token. The server answers `401` and points the client at Mammoth's authorization server.
2. The client opens a Mammoth consent page in your browser. Sign in to Mammoth if you are not already.
3. Choose the workspace and a project (or all projects) the client may use, and approve.
4. The client receives a token for this server and keeps it. From then on, each tool call reaches Mammoth with that token, as you.

A token belongs to one workspace. A tool call for another workspace is refused.

### How long sign-in lasts

- **Access tokens last one hour.** Your client refreshes them automatically, so you do not sign in again every hour.
- **Refresh tokens do not expire on a timer.** Each refresh issues a new refresh token and the old one stops working, so your client must keep the newest one.
- **A reused old refresh token revokes the connection.** Mammoth treats it as a possible theft. The client then has to sign in again. One exception: the token that the last refresh replaced still works once for 60 seconds, in case the response never reached the client.

**Hand-made `mm_` tokens are refused.** The server accepts only tokens issued by this OAuth sign-in. An API token made in **Workspace settings → API Tokens** was issued for no server, so it does not work here. Use that token with the [REST API, the SDK or the CLI](https://docs.mammoth.io/build/auth) instead.

## Revoke access

Open **Settings → Connected apps** in the Mammoth web app and choose **Revoke** next to the client. It loses access at once, including to anything it is doing at that moment. You can connect it again from the client.

## Uploading a file

A tool argument carries only text, so a spreadsheet or a large CSV cannot go through the model. `request_upload` returns a one-time link; you open it (or drop the file on the uploader some clients draw under the call) and the file goes straight from your browser to Mammoth. The link expires after 30 minutes and works for one upload. `check_upload` then reports whether the file arrived. [Blast radius and safety](https://docs.mammoth.io/agents/safety#the-inverse-case-data-entering-mammoth-through-a-link-not-an-argument) explains why this is safe.

## The tools

The server has 47 tools. Each declares what it does to your data as an MCP annotation, so a client can run a read-only tool freely and ask you before a destructive one. The list below is read from the server's tool registry.

### Tools that only read (`readOnlyHint`): 23 tools

| Tool | What it does |
| --- | --- |
| `check_upload` | Find out whether the user has uploaded their files yet. |
| `get_automation` | Get one automation: what it does, when it runs, and how it last went. |
| `get_automation_schema` | Get what one kind of automation task needs, and the conditions there are. |
| `get_dashboard` | Get one dashboard: its title, its views, and who it is shared with. |
| `get_data` | Read rows from a view. |
| `get_dataset` | Get one dataset with its columns, row counts and status. |
| `get_export` | Get one export of a view, including how its last run went. |
| `get_export_schema` | Get the settings one export destination needs. |
| `get_file` | Get one file, with its status and what Mammoth read from it. |
| `get_help` | Explain how Mammoth works. Read this before a first transformation. |
| `get_pipeline` | Get a view's pipeline: its state and its steps, in order. |
| `get_transformation_schema` | Get the arguments one transformation takes, as a JSON schema. |
| `get_view` | Get one view with its columns and their types. |
| `list_automations` | List a project's automations. |
| `list_dashboard_tags` | List the tags dashboards in a workspace are filed under. |
| `list_dashboards` | List the dashboards the signed-in user can open. |
| `list_datasets` | List the datasets in a project. |
| `list_exports` | List a view's exports. |
| `list_files` | List the files uploaded to a project. |
| `list_projects` | List the projects in a workspace. |
| `list_views` | List the views of a dataset. |
| `list_workspaces` | List the workspaces the signed-in user can open. |
| `preview_transformation` | Show what a transformation would do to a sample of a view, without adding it. |

### Tools that add or change something that can be put back: 11 tools

| Tool | What it does |
| --- | --- |
| `add_transformations` | Add transformations to a view, and run its pipeline once. |
| `create_dashboard` | Create an empty dashboard on a view, and return it. |
| `create_view` | Create a view of a dataset, empty or as a copy of another view. |
| `extract_sheets` | Bring the chosen sheets of an uploaded workbook in, one dataset each. |
| `generate_dashboard` | Have Mammoth's AI build a dashboard on a view from a description. |
| `interpret_file` | Say how a file is meant to be read, when Mammoth found more than one way. |
| `request_upload` | Let the user upload files from their own machine. |
| `set_dashboard_tags` | File a dashboard under a set of tags, replacing the tags it had. |
| `set_date_format` | Say which way round a file's dates read, and finish the dataset. |
| `unlock_file` | Open a file that is password protected, so Mammoth can read it. |
| `upload_file` | Create a dataset in a project from text you have. |

### Tools that delete, send data out, publish, or run work (`destructiveHint`): 13 tools

| Tool | What it does |
| --- | --- |
| `add_export` | Add an export to a view's pipeline and wait for it to run. |
| `create_automation` | Create an automation in a project and return it. |
| `delete_automation` | Move an automation to the trash, where it can still be restored. |
| `delete_dashboard` | Move a dashboard to the trash, where it can still be restored. |
| `delete_export` | Delete one export of a view. Rows already sent are not taken back. |
| `delete_file` | Delete a file from a project. |
| `delete_transformation_step` | Delete one step of a view's pipeline and wait for the view to run again. |
| `delete_views` | Delete views of a dataset. |
| `manage_draft` | Stage a view's transformations instead of running each one as it is added. |
| `publish_dashboard` | Publish a dashboard, decide who can open it, and return its link. |
| `review_unreadable_rows` | Show the lines of a file that did not fit, and discard them on request. |
| `run_pipeline` | Run all of a view's steps again, e.g. after its dataset got new data. |
| `update_automation` | Rename an automation, or stop and start it. Returns it afterwards. |

A client decides how to act on these annotations. Whether a given client asks you before a destructive tool is that client's setting.

---

**Next up:** [API authentication](https://docs.mammoth.io/build/auth) for the credential each surface uses · [Blast radius and safety](https://docs.mammoth.io/agents/safety) for the CLI's mutation classes · [Use Mammoth with Claude](https://docs.mammoth.io/agents/claude).

---
Source: https://docs.mammoth.io/agents/mcp.md · Updated: 2026-10-14