Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Felt MCP server

Vendor MCP
Open markdown

The Felt MCP connector routes your AI agent's tool calls to Felt's own MCP server through Scalekit. Each user signs in to Felt once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 44 tools.

Tools
44
What they doRead · write · destructive
23 · 11 · 1023 read11 write10 destructive
Users sign in with
OAuth app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Felt connection

    In AgentKit > Connections, create a Felt connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Felt MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'feltmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Felt:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'feltmcp_browse_felt_library',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • feltmcp_browse_data_source_tablesList tables and saved queries inside a connected database.Read-only

    Browse Data Source Tables

    List tables and saved queries inside a connected database. Returns table names and descriptions — but not column schemas.

    Inputs

    data_source_idstringrequired
    The ID of the data source to list tables for.
  • feltmcp_browse_felt_libraryList Felt's curated public datasets to add to maps.Read-only

    Browse Felt Library

    List Felt's curated public datasets to add to maps. Categories include boundaries, demographics, and infrastructure. Distinct from the workspace library (reusable layers authored in the user's workspace). Returns each layer's layer_id, layer_group_id, name, description, category, region, keywords, geometry type, and whether it's queryable.

    Inputs

    This tool takes no inputs.

  • feltmcp_browse_felt_serverShow the contents of a Felt Server — a named, foldered library of reusable layers in this workspace.Read-only

    Browse Felt Server

    Show the contents of a Felt Server — a named, foldered library of reusable layers in this workspace. Returns layers and layer groups (groups of related layers that share metadata), nested under their containing folders.

    Inputs

    felt_server_idstringrequired
    ID of the Felt Server to browse.
  • feltmcp_generate_fslGenerate FSL (Felt Style Language) JSON for styling any map layer type.Read-only

    Generate FSL

    Generate FSL (Felt Style Language) JSON for styling any map layer type. Supports all layer types (points, lines, polygons, rasters, heatmaps, H3 hexbins) and all styling features (colors, classification, labels, popups, filters, icons). When provided with a layer ID, inspects the layer's data directly — value distribution, histograms, classification breaks, categories, and raster band info — to make informed styling decisions.

    Inputs

    descriptionstringrequired
    Description of the desired style. Include: purpose/story of the visualization, palette or color preferences, whether to include labels (and which column), whether to include popups (and which columns). Felt layers do not support styling by both color and size, or bivariate styling. Choose a single visual dimension (color OR size) to encode data — never both. If a user requests two dimensions, split into two layers rather than combining them. Examples: - 'Choropleth showing population density. Warm sequential palette. Labels from name column at zoom 10+. Popup with population and area.' - 'Proportional symbols for earthquake magnitude. Size scales small to large. Filter to magnitude > 3. Red/orange tones.' - 'NDVI from Landsat 8 (NIR=band 5, R=band 4). Continuous green gradient.'
    geometry_typestringrequired
    The geometry type of the layer: point, line, polygon, or raster.one of pointlinepolygonraster
    map_idstringrequired
    The ID of the map.
    columnsarray
    Column names relevant to the styling request.
    contextstring
    Information about other layers on the map and how this layer should relate to them visually. E.g. 'The map has a blue choropleth for population — use contrasting warm tones for this layer.'
    current_styleobject
    The layer's existing FSL style. Provide when modifying an existing style rather than creating from scratch. Output a complete FSL object that incorporates the requested changes while preserving unchanged settings.
    distributionstring
    Data distribution summary for the styling column (e.g. min/max, cardinality, common values). Useful when styling a newly created layer and the info is already available from a recent query.
    layer_idstring
    The ID of the layer being styled. Enables inspection of data distribution, histograms, classification breaks, categories, and raster band info directly.
    viz_typestring
    The FSL visualization type: simple, categorical, numeric, heatmap, h3, or hillshade. Used to load the most relevant reference docs. Omit if unsure.one of simplecategoricalnumericheatmaph3hillshade
  • feltmcp_get_layer_group_propertiesGet a layer group's name, caption, legend settings, and its layers.Read-only

    Get Layer Group Properties

    Get a layer group's name, caption, legend settings, and its layers. Only works on real layer groups, not on standalone layers.

    Inputs

    layer_group_idstringrequired
    ID of the layer group to look up. Only works on real layer groups, not on standalone layers.
    map_idstringrequired
    The ID of the map that contains the layer group.
  • feltmcp_get_layer_propertiesGet a layer's properties including its name, caption, geometry type, and current FSL style.Read-only

    Get Layer Properties

    Get a layer's properties including its name, caption, geometry type, and current FSL style. Use this to retrieve a layer's current style before modifying it.

    Inputs

    layer_idstringrequired
    The ID of the layer to retrieve properties for
    map_idstringrequired
    The ID of the map.
  • feltmcp_get_mapGet metadata about a map, including its title, location, basemap, and layer count.Read-only

    Get Map

    Get metadata about a map, including its title, location, basemap, and layer count. To display the map to the user as an interactive widget, use `render_map` instead.

    Inputs

    map_idstringrequired
    The ID of the map.
  • feltmcp_get_map_layersGet the list of layers on a map, organized by layer group.Read-only

    Get Map Layers

    Get the list of layers on a map, organized by layer group. Returns layer names, IDs, visibility, and geometry types. Groups and their layers are listed in visual stacking order, topmost first; groups with `standalone: true` are top-level layers, not user-visible groups.

    Inputs

    map_idstringrequired
    The ID of the map to fetch layers for.