{
  "service": "felt",
  "displayName": "Felt",
  "categories": [
    "Developer Tools",
    "Productivity"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Token",
      "placeholder": "felt_pat_...",
      "description": "Felt API token sent as a Bearer token. Create or view tokens in the Developers tab of Felt Workspace Settings: https://felt.com/maps/latest/developers"
    }
  ],
  "homepageUrl": "https://felt.com/",
  "actions": [
    {
      "id": "felt.create_map",
      "service": "felt",
      "name": "create_map",
      "description": "Create a Felt map with optional initial metadata.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt map title."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt map description."
          },
          "public_access": {
            "type": "string",
            "enum": [
              "private",
              "view_only",
              "view_and_comment",
              "view_comment_and_edit"
            ],
            "description": "The Felt map public access setting."
          },
          "basemap": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt basemap identifier."
          },
          "lat": {
            "type": "number",
            "description": "The initial map center latitude."
          },
          "lon": {
            "type": "number",
            "description": "The initial map center longitude."
          },
          "zoom": {
            "type": "number",
            "description": "The initial map zoom level."
          },
          "workspace_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt workspace ID."
          },
          "layer_urls": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "One layer URL for Felt to import.",
              "format": "uri"
            },
            "description": "Layer URLs Felt should import into the new map.",
            "minItems": 1
          }
        },
        "additionalProperties": false,
        "description": "The input payload for creating a Felt map."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "map": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt map object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt map response."
      }
    },
    {
      "id": "felt.create_project",
      "service": "felt",
      "name": "create_project",
      "description": "Create a Felt project in the authenticated workspace.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The name to use for the Felt project."
          },
          "visibility": {
            "type": "string",
            "enum": [
              "workspace",
              "private"
            ],
            "description": "The Felt project visibility setting."
          },
          "max_inherited_permission": {
            "type": "string",
            "enum": [
              "view_only",
              "view_and_contribute",
              "view_and_edit"
            ],
            "description": "The maximum permission level workspace members inherit on team-visible projects."
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "visibility"
        ],
        "description": "The input payload for creating a Felt project."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "project": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt project object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt project response."
      }
    },
    {
      "id": "felt.delete_map",
      "service": "felt",
      "name": "delete_map",
      "description": "Delete one Felt map by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for deleting a Felt map."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          },
          "object": {
            "const": "map",
            "type": "string",
            "description": "The deleted Felt object type."
          },
          "deleted": {
            "type": "boolean",
            "description": "Whether Felt accepted the map deletion."
          }
        },
        "additionalProperties": false,
        "description": "A Felt map deletion confirmation."
      }
    },
    {
      "id": "felt.delete_project",
      "service": "felt",
      "name": "delete_project",
      "description": "Delete one Felt project by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "project_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for deleting a Felt project."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          },
          "object": {
            "const": "project",
            "type": "string",
            "description": "The deleted Felt object type."
          },
          "deleted": {
            "type": "boolean",
            "description": "Whether Felt accepted the project deletion."
          }
        },
        "additionalProperties": false,
        "description": "A Felt project deletion confirmation."
      }
    },
    {
      "id": "felt.duplicate_map",
      "service": "felt",
      "name": "duplicate_map",
      "description": "Duplicate a Felt map, optionally into another project or folder.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The title for the duplicated map."
          },
          "destination": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "project_id": {
                    "type": "string",
                    "minLength": 1,
                    "description": "The Felt resource ID."
                  }
                },
                "additionalProperties": false,
                "description": "A Felt project destination."
              },
              {
                "type": "object",
                "properties": {
                  "folder_id": {
                    "type": "string",
                    "minLength": 1,
                    "description": "The Felt resource ID."
                  }
                },
                "additionalProperties": false,
                "description": "A Felt folder destination."
              }
            ],
            "description": "The destination project or folder for a Felt map."
          }
        },
        "additionalProperties": false,
        "required": [
          "map_id"
        ],
        "description": "The input payload for duplicating a Felt map."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "map": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt map object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt map response."
      }
    },
    {
      "id": "felt.get_current_user",
      "service": "felt",
      "name": "get_current_user",
      "description": "Get the Felt user profile for the authenticated API token.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "The input payload for retrieving the current Felt user."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "user": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "The Felt user ID."
              },
              "name": {
                "type": "string",
                "description": "The user's display name."
              },
              "email": {
                "type": "string",
                "description": "The user's email address."
              }
            },
            "additionalProperties": true,
            "description": "The raw Felt user object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "The current Felt user response."
      }
    },
    {
      "id": "felt.get_map",
      "service": "felt",
      "name": "get_map",
      "description": "Get one Felt map by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for retrieving a Felt map."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "map": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt map object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt map response."
      }
    },
    {
      "id": "felt.get_project",
      "service": "felt",
      "name": "get_project",
      "description": "Get one Felt project by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "project_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for retrieving a Felt project."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "project": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt project object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt project response."
      }
    },
    {
      "id": "felt.list_projects",
      "service": "felt",
      "name": "list_projects",
      "description": "List Felt projects accessible to the authenticated user.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt workspace ID."
          }
        },
        "additionalProperties": false,
        "description": "The input payload for listing Felt projects."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "projects": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true,
              "description": "The raw Felt project object returned by the API."
            },
            "description": "The Felt projects returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt project list response."
      }
    },
    {
      "id": "felt.move_map",
      "service": "felt",
      "name": "move_map",
      "description": "Move a Felt map to another project or folder in the same workspace.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "map_id": {
                "type": "string",
                "minLength": 1,
                "description": "The Felt resource ID."
              },
              "project_id": {
                "type": "string",
                "minLength": 1,
                "description": "The Felt resource ID."
              }
            },
            "additionalProperties": false,
            "description": "Move a Felt map to another project."
          },
          {
            "type": "object",
            "properties": {
              "map_id": {
                "type": "string",
                "minLength": 1,
                "description": "The Felt resource ID."
              },
              "folder_id": {
                "type": "string",
                "minLength": 1,
                "description": "The Felt resource ID."
              }
            },
            "additionalProperties": false,
            "description": "Move a Felt map to another folder."
          }
        ],
        "description": "The input payload for moving a Felt map."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "map": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt map object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt map response."
      }
    },
    {
      "id": "felt.update_map",
      "service": "felt",
      "name": "update_map",
      "description": "Update Felt map metadata and sharing settings.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "map_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The updated Felt map title."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "description": "The updated Felt map description."
          },
          "public_access": {
            "type": "string",
            "enum": [
              "private",
              "view_only",
              "view_and_comment",
              "view_comment_and_edit"
            ],
            "description": "The Felt map public access setting."
          },
          "basemap": {
            "type": "string",
            "minLength": 1,
            "description": "The updated Felt basemap identifier."
          },
          "table_settings": {
            "type": "object",
            "properties": {
              "default_table_layer_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "The Felt resource ID."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "viewers_can_open_table": {
                "type": "boolean",
                "description": "Whether viewers can open the data table."
              }
            },
            "additionalProperties": false,
            "description": "Map table settings accepted by the Felt API."
          },
          "viewer_permissions": {
            "type": "object",
            "properties": {
              "can_duplicate_map": {
                "type": "boolean",
                "description": "Whether viewers can duplicate the map and data."
              },
              "can_export_data": {
                "type": "boolean",
                "description": "Whether viewers can export map data."
              },
              "can_see_map_presence": {
                "type": "boolean",
                "description": "Whether viewers can see who else is viewing the map."
              }
            },
            "additionalProperties": false,
            "description": "Viewer permissions accepted by the Felt API."
          }
        },
        "additionalProperties": false,
        "required": [
          "map_id"
        ],
        "description": "The input payload for updating a Felt map."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "map": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt map object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt map response."
      }
    },
    {
      "id": "felt.update_project",
      "service": "felt",
      "name": "update_project",
      "description": "Update Felt project properties.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "project_id": {
            "type": "string",
            "minLength": 1,
            "description": "The Felt resource ID."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The updated Felt project name."
          },
          "visibility": {
            "type": "string",
            "enum": [
              "workspace",
              "private"
            ],
            "description": "The Felt project visibility setting."
          },
          "max_inherited_permission": {
            "type": "string",
            "enum": [
              "view_only",
              "view_and_contribute",
              "view_and_edit"
            ],
            "description": "The maximum permission level workspace members inherit on team-visible projects."
          }
        },
        "additionalProperties": false,
        "required": [
          "project_id"
        ],
        "description": "The input payload for updating a Felt project."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "project": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Felt project object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "A Felt project response."
      }
    }
  ]
}
