Skip to main content
Glama
README.md
# Felt MCP

An [MCP](https://modelcontextprotocol.io/) server for interacting with [Felt](https://felt.com) maps programmatically.

## Prerequisites

- Python 3.14+
- [uv](https://docs.astral.sh/uv/)
- A [Felt API token](https://felt.com/account/integrations)

## Configuration

Set your Felt API token as an environment variable:

```bash
export FELT_API_TOKEN=felt_pat_...
```

## Running locally

```bash
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

```bash
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`):

```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:

```json
{
  "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

```bash
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](LICENSE.md).

TDQS

A3.9/5.0

Scored across 4 tools

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