Skip to main content
Glama

Felt MCP

An MCP server for interacting with Felt maps programmatically.

Prerequisites

Related MCP server: geocontext

Configuration

Set your Felt API token as an environment variable:

export FELT_API_TOKEN=felt_pat_...

Running locally

uv sync
uv run python -m felt_mcp.main

The server uses stdio transport by default, which is the standard for MCP servers launched as subprocesses by an MCP client.

Running with Docker

docker build -t felt-mcp .
docker run -e FELT_API_TOKEN felt-mcp

MCP client configuration

Add this to your MCP client config (e.g. Claude Desktop claude_desktop_config.json):

{
  "mcpServers": {
    "felt": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/felt-mcp", "python", "-m", "felt_mcp.main"],
      "env": {
        "FELT_API_TOKEN": "felt_pat_..."
      }
    }
  }
}

Or with Docker:

{
  "mcpServers": {
    "felt": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "FELT_API_TOKEN", "felt-mcp"],
      "env": {
        "FELT_API_TOKEN": "felt_pat_..."
      }
    }
  }
}

Available tools

list_maps

Lists all maps accessible to the authenticated Felt user. Returns maps from all projects with their id, title, URL, project, and access level.

get_map_details

Get details for a specific Felt map, including its layers, elements, and settings.

Parameter

Type

Required

Description

map_id

string

Yes

The ID of the map to retrieve

get_map_layers

List all layers on a specific Felt map.

Parameter

Type

Required

Description

map_id

string

Yes

The ID of the map whose layers to list

create_new_map

Create a new Felt map with an optional title and initial viewport.

Parameter

Type

Required

Description

title

string

No

Title for the new map

lat

float

No

Initial latitude

lon

float

No

Initial longitude

zoom

int

No

Initial zoom level

Development

uv sync                # install all dependencies including dev
just lint              # format, lint, and type check
just test              # run test suite
just test-failed       # re-run previously failed tests

License

See LICENSE.md.

Available Tools

4 tools
create_new_mapA

Create a new Felt map.

Args: title: Optional title for the new map. lat: Optional initial latitude. lon: Optional initial longitude. zoom: Optional initial zoom level.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
zoomNo
titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. It discloses the core behavior of creating a new map and the optional initial viewport parameters, but it does not mention persistence, authentication, side effects, idempotency, or constraints on lat/lon/zoom values. The disclosure is minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose followed by a terse Args list covering all four parameters. Every sentence contributes useful information, and there is no filler or redundant restatement of schema types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity create tool with no required parameters and an output schema, the description covers the purpose and all parameters adequately. The output schema handles return-value expectations, so the main gaps are the absence of explicit usage guidance and behavioral constraints, but the core calling contract is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% property descriptions, so the Args section compensates by explaining each parameter: optional title, initial latitude, initial longitude, and initial zoom level. It adds the meaningful 'initial' semantics to lat/lon/zoom, but it does not provide value ranges, coordinate formats, or examples, leaving partial but not complete compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: 'Create a new Felt map.' It uses a specific verb and indicates a new instance, which makes its purpose obvious. It does not explicitly differentiate itself from the sibling read-only tools, but the create verb already separates it from get/list operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: use this when creating a new Felt map rather than retrieving details or listing maps. However, the description does not explicitly state when to use this tool versus siblings, nor does it mention any prerequisites or alternative conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_map_detailsA

Get details for a specific Felt map, including its layers and elements.

Args: map_id: The ID of the map to retrieve.

ParametersJSON Schema
NameRequiredDescriptionDefault
map_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It discloses that the result includes layers and elements and that retrieval is by map ID, which communicates the basic read behavior. It does not mention auth, error handling, or response details, but for a simple 'get' operation this level is minimally adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and adds only the necessary parameter explanation. No sentence is wasted and the structure is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with an output schema present, the description gives the core purpose, the parameter meaning, and a useful hint about returned content. It lacks only explicit comparative guidance against get_map_layers, which would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is 0%, the description's Args section explicitly defines `map_id` as 'The ID of the map to retrieve.' This adds meaning beyond the bare string property and fully explains the only required parameter, though it omits any format or pattern details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('details for a specific Felt map') and even indicates the return content ('including its layers and elements'). It is unambiguous about the object of the operation, though it does not explicitly differentiate itself from the sibling tool get_map_layers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description impies targeted single-map retrieval via `map_id`, which logically excludes list_maps and create_new_map. However, it gives no explicit when-to-use guidance, no mention of when get_map_layers would be more appropriate, and no exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_map_layersA

List all layers on a specific Felt map.

Args: map_id: The ID of the map whose layers to list.

ParametersJSON Schema
NameRequiredDescriptionDefault
map_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description itself must convey behavior. 'List' implies a read-only operation, but the description does not explicitly state that this has no side effects or describe other behavioral nuances such as error handling or empty-map behavior. It is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded, and contains no filler. The purpose is stated in the first sentence, and the parameter explanation is minimal but complete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter list operation with an output schema available, the description is largely complete. It could be improved by explicitly noting that this is read-only and where it fits relative to sibling tools, but no critical calling information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It defines map_id as 'the ID of the map whose layers to list,' adding meaningful relational context beyond the bare schema field name 'Map Id.' This is sufficient for the tool's single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List all layers on a specific Felt map.' This clearly distinguishes the tool from siblings like list_maps and get_map_details by naming the exact object being retrieved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving layers for a particular map, but it does not explicitly contrast it with alternatives such as get_map_details or list_maps. The intended use is understandable but not made fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mapsA

List all maps accessible to the authenticated Felt user.

Returns a list of maps with their id, title, URL, project, and access level.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It communicates that only maps accessible to the authenticated user are returned, and it lists the included fields. However, it does not mention potential pagination, response size limits, or any authentication prerequisites beyond the qualifier 'authenticated Felt user.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief, front-loaded with the core action, and directly followed by the output contents. Every sentence contributes useful information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter list tool with an output schema present, the description is fully sufficient. It states the operational scope, authentication context, and return fields, leaving no critical gap for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter meanings to explain. The input schema is trivially covered, and the baseline for no-parameter tools is 4. The description adds value by describing the output shape instead of repeating parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List all maps accessible to the authenticated Felt user.' It also states the returned fields (id, title, URL, project, access level), making the tool's purpose and output unambiguous. It is clearly distinct from siblings like get_map_details, which focuses on a single map.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies straightforward usage: call this tool to get an overview of all accessible maps. It does not explicitly name sibling alternatives or state when not to use it, but the context is clear enough for a list operation with zero parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedcreate_new_map
    • First observedget_map_details
    • First observedget_map_layers
    • First observedlist_maps

TDQS

A3.9/5.0
Disambiguation4/5

get_map_details and get_map_layers overlap since details already includes layer information, but one is a general map overview and the other specifically returns only layers. list_maps and create_new_map are clearly distinct.

Naming Consistency5/5

All tool names follow a predictable verb_noun snake_case pattern: get_map_details, get_map_layers, create_new_map, list_maps. The small variations ('new' and plural 'maps') do not create confusion.

Tool Count5/5

Four tools is a compact, well-scoped set for a map-oriented MCP server. Each tool covers a reasonable core action: list, get details, get layers, and create.

Completeness3/5

The set covers list/get/create for maps and layer listing, but lacks update/delete for maps and any layer manipulation such as create, update, or delete. This leaves the map lifecycle incomplete, though common read-and-create workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kthy/felt-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server