Felt MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Felt MCPlist my maps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Felt MCP
An MCP server for interacting with Felt maps programmatically.
Prerequisites
Python 3.14+
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.mainThe 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-mcpMCP 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 |
| string | Yes | The ID of the map to retrieve |
get_map_layers
List all layers on a specific Felt map.
Parameter | Type | Required | Description |
| 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 |
| string | No | Title for the new map |
| float | No | Initial latitude |
| float | No | Initial longitude |
| 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 testsLicense
See LICENSE.md.
Available Tools
4 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lon | No | ||
| zoom | No | ||
| title | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| map_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| map_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v0.1.0- First observed
create_new_map - First observed
get_map_details - First observed
get_map_layers - First observed
list_maps
TDQS
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.
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.
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.
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
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
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- MIT
- AlicenseNot gradedqualityFmaintenanceAn experimental MCP server providing spatial context for LLMs by interfacing with French Geoplateforme services. It enables tasks such as geocoding, altitude lookups, and querying administrative, cadastral, or urban planning data.124MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perceive and control a live MapLibre GL map over MCP, allowing querying rendered features, reading popups, navigating, and toggling layers.1MIT
- FlicenseNot gradedqualityDmaintenanceComprehensive MCP server for Google Maps APIs, enabling geocoding, place search and details, distance matrix, elevation, and directions through natural language.6-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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