Felt MCP Server
Connect AI tools to Felt to turn natural language into maps, apps, and analysis.

Felt MCP Server uses the Module Context Protocol (MCP) to connect to AI agents and unlock the full power of Felt. Create maps, query your data warehouse, run spatial analysis, and style your data – all from natural language prompts, using your existing Felt workspace permissions.
This feature is only available to customers on the Enterprise plan. Get in touch for access.
What can do you with Felt MCP?

Make maps. Create, update, and organize maps and projects.
Bring in data. ArcGIS services, WMS, GeoJSON, Shapefiles, your workspace library, Felt's curated public library, or your cloud data sources.
Write SQL. Query Snowflake, BigQuery, Databricks, Postgres, or Redshift. Dialect-aware guidance is built in, so the agent doesn't have to guess.
Run spatial analysis. Query layers already on the map, join them, filter them, and generate new layers from the results.
Style automatically. Categorical, numeric, heatmap, H3. All in Felt Style Language (FSL), with no hand-authored JSON.
Collaborate. Pins, routes, polygons, and notes via GeoJSON. Permissions are inherited from your workspace, so anything the agent produces is immediately shareable under the access controls you already have.
Connecting to Felt MCP
The Felt MCP Server uses Streamable HTTP transport with OAuth authentication.
Server URL: https://felt.com/mcp
When you first connect, your browser will open and prompt you to log in to Felt and authorize access. There are no API keys to manage.
Claude Code
Run this command in your terminal:
--scope usermakes Felt available across all projects. Omit it to scope to the current project, or use--scope projectto commit it to a shared.mcp.json.
Verify in Claude Code with /mcp or:
Claude Desktop
Open Claude Desktop and go to Settings → Connectors.
Scroll to the bottom and click Add custom connector.
Enter:
Name:
FeltRemote MCP server URL:
https://felt.com/mcp
Click Add, then click Connect and complete the OAuth login in your browser.
Custom connectors require a Free, Pro, Max, Team, or Enterprise plan. On Team/Enterprise, an Owner must add the connector at the organization level first.
ChatGPT
Open ChatGPT and go to Settings → Apps & Connectors → Advanced settings.
Toggle Developer Mode on.
Return to Apps & Connectors and click Add new connector.
Fill in:
Name:
FeltMCP Server URL:
https://felt.com/mcpAuthentication: OAuth
Check I trust this application
Click Create and complete the Felt OAuth login.
Developer Mode is available on Plus, Pro, Business, Enterprise, and Edu plans. On Business/Enterprise/Edu, only admins can enable Developer Mode and publish the connector for the workspace.
Codex
Edit ~/.codex/config.toml (or run codex mcp add) and add:
Then authenticate:
Verify in Codex with /mcp or:
Gemini CLI
Edit ~/.gemini/settings.json (user-level) or .gemini/settings.json (project-level) and add:
Restart Gemini CLI. Inside the CLI:
This launches the Felt OAuth flow. Once authorized, run /mcp to confirm Felt is connected.
You can also use the equivalent CLI command:
gemini mcp add -t http felt https://felt.com/mcp
VS Code (GitHub Copilot)
Open the Command Palette (
Cmd/Ctrl+Shift+P) and run MCP: Open User Configuration (for global) or create.vscode/mcp.jsonin your project (for workspace-scoped).Add:
Save the file. A Start CodeLens appears above the server entry — click it to connect and complete OAuth in your browser.
Open Copilot Chat, switch to Agent mode, and click the tools icon to confirm Felt's tools are listed.
Cursor
Open Cursor Settings → Tools & MCP and click + New MCP Server, or create
~/.cursor/mcp.json(global) or.cursor/mcp.json(project) directly.Add:
Save the file. Return to Settings → Tools & MCP — Cursor will start the connection and prompt you for OAuth in a browser window.
A green dot next to
feltconfirms it's connected. Felt's tools are then available in Agent mode (Cmd/Ctrl+I).
Tool Reference
A reference of every tool exposed by the Felt MCP server, grouped by purpose.
Account & workspace
who_am_i
Get information about the currently logged-in user and their Felt workspace.
Projects
list_projects
List all projects in the current workspace.
get_project
Get details about a specific project, including the maps it contains.
Maps
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.
update_map
Update a map's title, basemap style, viewport (center and zoom), or sharing/visibility setting.
delete_map
Delete a map.
Layers – discovery & inspection
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, description, geometry type, and style. Useful before modifying styling.
inspect_layer_columns
Get the full column schema for a layer: column names, types, sample values, and summary stats. Returns a queryable table name when applicable.
browse_felt_library
List Felt's curated library data — boundaries, demographics, infrastructure, and more — that can be added to maps.
browse_workspace_library
List layers published to the workspace library, available for use on multiple maps.
Layers – creating & adding
duplicate_layer_to_map
Copy a layer onto a map. The source can be a Felt library dataset, a workspace library layer, or a layer from another map.
import_layer_from_url
Add a new layer to a map by fetching from a URL. Supports ArcGIS services, WMS, GeoJSON, Shapefiles, and other formats.
prepare_file_upload
Get a presigned S3 upload slot for adding a local file to a map as a new layer.
upload_contents_to_map
Add inline text content (CSV, TSV, GeoJSON, KML, GPX) to a map as a new 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.
Layers – updating & deleting
update_layer_properties
Update a layer's name, description, or FSL style. Only the fields you supply are changed.
refresh_url_layer
Re-fetch a URL-backed layer's source to pick up the latest data. Processing is asynchronous.
refresh_data_source_layer
Re-run a data-source-backed layer's query (or re-read its table) to pick up the latest data. Processing is asynchronous.
poll_layer_processing_status
Wait for a layer to finish processing. Returns in_progress, completed, or failed. Configurable maximum wait of 1, 5, 10, or 30 seconds.
delete_layer
Delete a layer from a map.
Data sources
browse_data_sources
List external databases connected to the workspace (Postgres, Snowflake, BigQuery, etc.), 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.
Styling
generate_fsl
Generate FSL (Felt Style Language) JSON for any layer type (points, lines, polygons, rasters, heatmaps, H3 hexbins). Supports colors, classification, labels, popups, filters, and icons. When given a layer ID, inspects the layer's data to make informed styling choices.
Annotations
list_annotations
Return the editable annotations on a map (Place, Rectangle, 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.
Last updated
Was this helpful?