> For the complete documentation index, see [llms.txt](https://help.felt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.felt.com/felt-ai/mcp.md).

# MCP integrations

Set up Felt's MCP server in Claude, ChatGPT, Cursor, VS Code, Codex, or Gemini CLI. See every tool and which ones use Felt AI credits.

{% hint style="success" %}
Available on the Business and Enterprise plans. [Compare plans](https://felt.com/pricing#compare)
{% endhint %}

Connect your AI tool, such as Claude, ChatGPT, Cursor, or Codex, to Felt through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro). You can then create maps, add and query data, run analysis, and style layers from that tool. There's nothing to turn on in Felt.

If your plan doesn't include MCP, only `who_am_i`, `help_center`, and `developer_docs` work. To use Felt AI inside Felt instead, see [AI assistant](/felt-ai/ai-assistant.md).

## Connect an AI tool to Felt MCP

The Felt MCP server is at `https://felt.com/mcp`. It uses Streamable HTTP and OAuth, with no API keys. When you connect, your browser opens so you can log in to Felt and choose the workspace your AI tool works in.

### Claude

1. Open the [Felt Maps connector](https://claude.ai/directory/connectors/felt-maps) in Claude's connectors directory.
2. Click **Connect** and log in to Felt in the browser window that opens.

You can then use Felt's tools in Claude on the web, desktop, and mobile.

### Claude Code

Run this command in your terminal:

```bash
claude mcp add --transport http felt https://felt.com/mcp --scope user
```

`--scope user` adds Felt to all your projects. To check the connection, run `/mcp` in Claude Code, or run `claude mcp list` in your terminal.

### ChatGPT

1. In ChatGPT, open **Settings** > **Apps & Connectors** > **Advanced settings** and turn on **Developer Mode**.
2. In **Apps & Connectors**, click **Add new connector**.
3. Enter `Felt` as the name and `https://felt.com/mcp` as the MCP server URL, and select **OAuth** for authentication.
4. Select **I trust this application**, click **Create**, and log in to Felt.

### Cursor

1. Open **Cursor Settings** > **Tools & MCP** and click **New MCP Server**.
2. Add this to the file that opens:

   ```json
   {
     "mcpServers": {
       "felt": {
         "url": "https://felt.com/mcp"
       }
     }
   }
   ```
3. Save the file and log in to Felt in the browser window that opens.
4. Go back to **Cursor Settings** > **Tools & MCP**. A green dot next to `felt` means it's connected. Felt's tools work in Agent mode.

### VS Code (GitHub Copilot)

1. Open the Command Palette (**Shift+Cmd+P** on Mac, **Ctrl+Shift+P** on Windows) and run **MCP: Open User Configuration**.
2. Add this to the file:

   ```json
   {
     "servers": {
       "felt": {
         "type": "http",
         "url": "https://felt.com/mcp"
       }
     }
   }
   ```
3. Save the file, click **Start** above the server entry, and log in to Felt.
4. In Copilot Chat, switch to **Agent** mode and click the tools icon. Felt's tools are listed when the connection works.

### Codex

Add this to `~/.codex/config.toml`:

```toml
[mcp_servers.felt]
url = "https://felt.com/mcp"
```

Then log in:

```bash
codex mcp login felt
```

To check the connection, run `codex mcp list`.

### Gemini CLI

Run this command in your terminal:

```bash
gemini mcp add -t http felt https://felt.com/mcp
```

Restart Gemini CLI, then run `/mcp auth felt` in it to log in. To check the connection, run `/mcp`. Felt is listed as connected.

### Databricks

You need the **Managed MCP Servers** preview turned on and the `CREATE CONNECTION` privilege. Follow the Databricks guide to [install an external MCP server](https://docs.databricks.com/aws/en/generative-ai/mcp/external-mcp?language=Dynamic+Client+Registration). When you [create the connection](https://docs.databricks.com/aws/en/query-federation/http#connection), use these settings:

| Setting           | Value                         |
| ----------------- | ----------------------------- |
| Host              | `https://felt.com`            |
| Connection type   | `HTTP`                        |
| Auth type         | `Dynamic Client Registration` |
| Base path         | `/mcp`                        |
| Is mcp connection | `true`                        |

Click **Login** and log in to Felt.

### Other AI tools

Any AI tool or agent that supports remote MCP servers with Streamable HTTP and OAuth can connect. Add `https://felt.com/mcp` as a remote or HTTP server.

## What you can do with Felt MCP

Felt MCP lets your AI tool create and share maps, add data, query databases and map layers with SQL, edit features and columns, style layers, draw annotations, and export map images. It can't read or create dashboard components, or create extensions, custom HTML popups, or print layouts. To add dashboard components, use the [AI assistant](/felt-ai/ai-assistant.md). The [Tool reference](#tool-reference) lists each tool.

{% hint style="danger" %}
`delete_map`, `delete_layer`, `delete_annotation`, and `edit_features` can't be undone. If your AI tool offers confirmation before running tools, keep it on for these actions.
{% endhint %}

## Felt AI credits

Three Felt MCP tools run Felt AI inside Felt, and only these use your workspace's Felt AI credits:

* `generate_fsl`, which writes a layer's style.
* `help_center`, which answers questions from the help center.
* `developer_docs`, which answers questions from the developer docs.

Every other tool reads or changes Felt directly and uses no credits. When the workspace runs out of credits, these three tools stop until the credits reset or an admin buys more usage, and the rest keep working. See [Plan usage](/plans-and-billing/plan-usage.md).

## Felt MCP and your data

Your AI tool uses your Felt access and can see and change only what you can. Felt AI runs on frontier models through Amazon Bedrock. Data processed by Felt AI is never used to train models.

## Tool reference

The Felt MCP server has 49 tools, grouped here by purpose.

### Account and workspace

| Tool       | Description                                                          |
| ---------- | -------------------------------------------------------------------- |
| `who_am_i` | Get information about the person logged in and their Felt workspace. |

### Projects

| Tool            | Description                                                           |
| --------------- | --------------------------------------------------------------------- |
| `list_projects` | List all projects in the current workspace.                           |
| `get_project`   | Get details about a specific project, including the maps it contains. |

### Maps

| Tool               | Description                                                                                                                   |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `create_map`       | Create a new map in the user's Felt workspace. Optionally sets a title, basemap style, center coordinates, and zoom level.    |
| `list_maps`        | List the maps the current user can access, ordered by most recently visited. Supports a fuzzy title filter.                   |
| `get_map`          | Get a map's metadata, including its title, location, basemap, and layer count.                                                |
| `render_map`       | Render a map inline as an interactive widget showing a snapshot of the map when the tool is called.                           |
| `update_map`       | Update a map's title, basemap style, zoom level, or basemap label visibility.                                                 |
| `share_map`        | Set a map's public link access (None, View, or View and comment) and return its share link.                                   |
| `delete_map`       | Delete a map.                                                                                                                 |
| `export_map_image` | Export the map as a PNG, JPG, or PDF image file, with optional legend and scale bar, and return a download link that expires. |

### Find and inspect layers

| Tool                         | Description                                                                                                                                                     |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `get_map_layers`             | Get the list of layers on a map, organized by layer group. Includes layer names, IDs, visibility, and geometry types.                                           |
| `get_layer_properties`       | Get a layer's name, caption, geometry type, and style. Useful before changing the style.                                                                        |
| `inspect_layer`              | Get a layer's details: full column schema (column names, types, sample values, and summary stats), plus its visibility and legend items.                        |
| `browse_felt_library`        | List Global Library data, such as boundaries, demographics, and infrastructure, that can be added to maps.                                                      |
| `list_felt_servers`          | List the workspace's Felt Servers: named collections of layers, organized in folders and reusable across maps. Returns each server's ID, name, and description. |
| `browse_felt_server`         | Browse a single Felt Server's contents: its reusable layers and layer groups, organized into their folders.                                                     |
| `get_layer_group_properties` | Get a layer group's name, caption, legend settings, and layers.                                                                                                 |

### Create and add layers

| Tool                            | Description                                                                                                                                                                                                         |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `duplicate_layer_to_map`        | Copy a layer or layer group onto a map. The source can be a layer already on the map, a Global Library dataset, a Felt Server layer, or a layer from another map.                                                   |
| `import_layer_from_url`         | Add a new layer to a map by fetching data from a URL. Supports ArcGIS services, WMS, GeoJSON, Shapefiles, and other formats.                                                                                        |
| `prepare_file_upload`           | Get an upload slot for adding a local file to a map as a new layer, or for refreshing an existing file-backed layer in place.                                                                                       |
| `upload_contents_to_map`        | Add inline text content (CSV, TSV, GeoJSON, KML, GPX) to a map as a new layer, or refresh an existing uploaded layer, without performing a separate file upload. Best for small data already available as a string. |
| `add_data_source_table_to_map`  | Add an entire table from a connected data source to a map as a new layer.                                                                                                                                           |
| `create_layer_from_data_source` | Create a new map layer from a SQL query against a connected data source. The query must include a geometry column.                                                                                                  |
| `create_layer_from_felt_layers` | Create a new map layer from a SQL query against existing Felt layers. The query must include a geometry column.                                                                                                     |

### Update and delete layers

| Tool                            | Description                                                                                                                                |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `update_layer_properties`       | Update a layer's name, caption, or FSL style. Only the fields you supply are changed.                                                      |
| `edit_features`                 | Update, add, or delete many features at once with a single SQL `SELECT`: each row it returns is a feature's final state. There is no undo. |
| `get_sql_editing_guidance`      | Load the rules for editing features before writing a query. Use these rules alongside the dialect guidance, not instead of it.             |
| `edit_layer_attributes`         | Add, delete, rename, and reorder a layer's columns, and set their attribute settings, number formats, and form conditions.                 |
| `refresh_url_layer`             | Fetch the latest data from a URL-backed layer's source. Processing is asynchronous.                                                        |
| `refresh_data_source_layer`     | Run a layer's data source query again (or read its table again) to get the latest data. Processing is asynchronous.                        |
| `poll_layer_processing_status`  | Wait for a layer to finish processing. Returns `processing`, `completed`, or `failed`. Configurable maximum wait of 5, 10, or 30 seconds.  |
| `organize_layers`               | Group, ungroup, or reorder layers and layer groups on a map.                                                                               |
| `set_visibility`                | Show or hide layers, layer groups, and individual legend items (categories or class breaks).                                               |
| `set_layer_group_interaction`   | Set how people show or hide a group's layers in the legend (List, Slider, Single-select, or Multi-select).                                 |
| `update_layer_group_properties` | Update a layer group's name, caption, or legend settings, such as whether it's shown or collapsed in the legend.                           |
| `delete_layer`                  | Delete a layer from a map.                                                                                                                 |

### Data sources

| Tool                                | Description                                                                                                                                               |
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list_data_sources`                 | List the workspace's database sources, such as Postgres, Snowflake, and BigQuery, including their type and the SQL dialect to use.                        |
| `browse_data_source_tables`         | List the tables and saved queries available inside a connected database. Does not include column schemas.                                                 |
| `inspect_data_source_table_columns` | Get the column names and types for a specific table inside a connected database.                                                                          |
| `get_sql_guidance`                  | Load the SQL dialect reference and syntax rules for a data source or set of layers before writing queries. The correct dialect is resolved automatically. |
| `get_tabular_data_from_data_source` | Run a read-only SELECT query against a connected data source and return tabular results to the user. Does not render anything on the map.                 |
| `get_tabular_data_from_felt_layers` | Run a read-only SELECT query against existing Felt layers and return tabular results to the user. Does not render anything on the map.                    |

### Styling

| Tool           | Description                                                                                                                                                                                                         |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `generate_fsl` | Generate FSL (Felt Style Language) JSON for any layer type. Supports colors, classification, labels, popups, filters, and icons. When given a layer ID, inspects the layer's data to make informed styling choices. |

### Annotations

| Tool                 | Description                                                                                                                                                                    |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `list_annotations`   | Return the editable annotations on a map (`Place`, `Rectangle`, `Polygon`, `Circle`, `Text`, `Note`, `Link`, `Line`). Other annotation types drawn in the UI are not included. |
| `upsert_annotations` | Create or update annotations on a map. Omit `id` to create; include `id` to update an existing annotation in place.                                                            |
| `delete_annotation`  | Delete a single annotation from a map.                                                                                                                                         |

### Help

| Tool             | Description                                                                                                                                                            |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `help_center`    | Answer questions about how Felt works (features, sharing, permissions, billing, and account settings) from Felt's official help center.                                |
| `developer_docs` | Answer questions about building on Felt (the JavaScript SDK, extensions and custom popups, the REST API, and Felt Style Language) from Felt's official developer docs. |

## Troubleshooting Felt MCP

### A tool says the workspace's plan doesn't include MCP

If your AI tool says the workspace's plan doesn't include Felt's MCP server, a workspace admin can upgrade the plan; see [Billing](/plans-and-billing/billing.md). Until then, `who_am_i`, `help_center`, and `developer_docs` keep working.

### A tool returns a permission error

Your AI tool can change only what you can in Felt. For example, you need Edit access to the map to add layers. See [Permissions](/administration/permissions.md).

### A new layer is empty or missing from a rendered map

Layers finish processing after the tool returns. Ask your AI tool to wait with `poll_layer_processing_status`, then call `render_map` again.

## Frequently asked questions

<details>

<summary>Can I get a picture of a map from MCP, for a report or slide?</summary>

Yes. `export_map_image` exports the map as a PNG, JPG, or PDF file and returns a download link that expires. `render_map` shows an interactive snapshot of the map inside your AI tool and doesn't return an image file.

</details>

<details>

<summary>Do layers made from SQL over other layers update when the source changes?</summary>

No. A layer created with `create_layer_from_felt_layers` stores the result from the time the query ran. To update it, run the query again. Layers from a data source can be refreshed with `refresh_data_source_layer`. See [Refresh data](/upload-anything/refresh-data.md).

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.felt.com/felt-ai/mcp.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
