Formbricks MCP by usefulapi
Read survey responses and manage contacts, webhooks, teams and organisation users.
Should I use this
Quality & Safety
Findings (5)
- LOWin formbricks_list_contact_attribute_keys
- LOWin formbricks_get_contact_attribute_key
- LOWin formbricks_get_survey_contact_link
- LOWin formbricks_get_survey_segment_links
- LOWin formbricks_list_organization_users
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"formbricks": {
"url": "https://formbricks.usefulapi.io/mcp"
}
}
}Remote endpoints
https://formbricks.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (17)
🟢formbricks_health
Check that the Formbricks API is reachable. Formbricks v2: GET /health.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_whoami
Return the project and environment the configured x-api-key belongs to — the fastest way to find the workspace and environment ids the other tools need. Formbricks v2: GET /me.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_list_responses(surveyId, contactId, startDate, endDate, filterDateField, ...)
List survey responses, optionally narrowed to one survey, one contact or a date window. This is the main read: the answers people gave. Formbricks v2: GET /management/responses.
Input Schema
{
"type": "object",
"properties": {
"surveyId": {
"description": "Only responses to this survey.",
"type": "string"
},
"contactId": {
"description": "Only responses from this contact.",
"type": "string"
},
"startDate": {
"description": "ISO-8601 lower bound on the date field.",
"type": "string"
},
"endDate": {
"description": "ISO-8601 upper bound on the date field.",
"type": "string"
},
"filterDateField": {
"description": "Which date field the window applies to.",
"type": "string",
"enum": [
"createdAt",
"updatedAt"
]
},
"limit": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"skip": {
"description": "How many records to skip (offset paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortBy": {
"description": "Field to sort on, e.g. createdAt or updatedAt.",
"type": "string"
},
"order": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_get_response(response_id)
Fetch a single survey response with its answers, metadata and completion state. Formbricks v2: GET /management/responses/{id}.
Input Schema
{
"type": "object",
"properties": {
"response_id": {
"type": "string",
"description": "The response's id."
}
},
"required": [
"response_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_list_webhooks(surveyIds, limit, skip, sortBy, order)
List the webhooks configured to fire on survey events, optionally filtered to specific surveys. Formbricks v2: GET /management/webhooks.
Input Schema
{
"type": "object",
"properties": {
"surveyIds": {
"description": "Only webhooks bound to these survey ids.",
"type": "array",
"items": {
"type": "string"
}
},
"limit": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"skip": {
"description": "How many records to skip (offset paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortBy": {
"description": "Field to sort on, e.g. createdAt or updatedAt.",
"type": "string"
},
"order": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_get_webhook(webhook_id)
Fetch a single webhook with its URL, triggers and bound surveys. Formbricks v2: GET /management/webhooks/{id}.
Input Schema
{
"type": "object",
"properties": {
"webhook_id": {
"type": "string",
"description": "The webhook's id."
}
},
"required": [
"webhook_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_list_contact_attribute_keys(workspaceId, environmentId, limit, skip, sortBy, ...)
List the contact attribute keys defined in an environment — the schema of what you know about a contact. Formbricks v2: GET /management/contact-attribute-keys.
Input Schema
{
"type": "object",
"properties": {
"workspaceId": {
"description": "Restrict to this workspace.",
"type": "string"
},
"environmentId": {
"description": "Restrict to this environment.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"skip": {
"description": "How many records to skip (offset paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortBy": {
"description": "Field to sort on, e.g. createdAt or updatedAt.",
"type": "string"
},
"order": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_get_contact_attribute_key(key_id)
Fetch a single contact attribute key. Formbricks v2: GET /management/contact-attribute-keys/{id}.
Input Schema
{
"type": "object",
"properties": {
"key_id": {
"type": "string",
"description": "The attribute key's id."
}
},
"required": [
"key_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_get_survey_contact_link(survey_id, contact_id)
Get the personalised survey URL for one contact — the link you send so their response is attributed to them. Formbricks v2: GET /management/surveys/{surveyId}/contact-links/contacts/{contactId}/.
Input Schema
{
"type": "object",
"properties": {
"survey_id": {
"type": "string",
"description": "The survey to link to."
},
"contact_id": {
"type": "string",
"description": "The contact the link is for."
}
},
"required": [
"survey_id",
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_get_survey_segment_links(survey_id, segment_id, limit, skip)
Get personalised survey URLs for every contact in a segment — how you run a targeted send. Formbricks v2: GET /management/surveys/{surveyId}/contact-links/segments/{segmentId}.
Input Schema
{
"type": "object",
"properties": {
"survey_id": {
"type": "string",
"description": "The survey to link to."
},
"segment_id": {
"type": "string",
"description": "The segment of contacts."
},
"limit": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"skip": {
"description": "How many records to skip (offset paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"survey_id",
"segment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_list_teams(organization_id, limit, skip, sortBy, order)
List the teams in an organisation. Formbricks v2: GET /organizations/{organizationId}/teams.
Input Schema
{
"type": "object",
"properties": {
"organization_id": {
"type": "string",
"description": "The organisation's id."
},
"limit": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"skip": {
"description": "How many records to skip (offset paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortBy": {
"description": "Field to sort on, e.g. createdAt or updatedAt.",
"type": "string"
},
"order": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"required": [
"organization_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_list_organization_users(organization_id, email, id, limit, skip)
List the users in an organisation, optionally looked up by id or email. Formbricks v2: GET /organizations/{organizationId}/users.
Input Schema
{
"type": "object",
"properties": {
"organization_id": {
"type": "string",
"description": "The organisation's id."
},
"email": {
"description": "Only the user with this email.",
"type": "string"
},
"id": {
"description": "Only the user with this id.",
"type": "string"
},
"limit": {
"description": "Page size, 1-100.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"skip": {
"description": "How many records to skip (offset paging).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"organization_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formbricks_list_roles
List the roles that can be assigned to organisation users. Formbricks v2: GET /roles.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴formbricks_create_webhook(name, url, workspaceId, triggers, surveyIds, ...)
Register a webhook that fires on survey events. Formbricks v2: POST /management/webhooks.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "A label for the webhook."
},
"url": {
"type": "string",
"description": "The HTTPS URL Formbricks should POST to."
},
"workspaceId": {
"type": "string",
"description": "The workspace the webhook belongs to."
},
"triggers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Events to fire on, e.g. [\"responseCreated\", \"responseFinished\"]."
},
"surveyIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Surveys the webhook covers. Pass an empty array for all surveys."
},
"environmentId": {
"description": "Restrict to one environment.",
"type": "string"
}
},
"required": [
"name",
"url",
"workspaceId",
"triggers",
"surveyIds"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴formbricks_delete_webhook(webhook_id)
Remove a webhook. Formbricks v2: DELETE /management/webhooks/{id}.
Input Schema
{
"type": "object",
"properties": {
"webhook_id": {
"type": "string",
"description": "The webhook to delete."
}
},
"required": [
"webhook_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴formbricks_create_contact(workspaceId, attributes, environmentId)
Create a contact in a workspace from a set of attributes, e.g. email and userId. Formbricks v2: POST /management/contacts.
Input Schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "The workspace to create the contact in."
},
"attributes": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
},
"description": "Attribute key/value pairs, e.g. {\"email\":\"[email protected]\",\"userId\":\"u_1\"}."
},
"environmentId": {
"description": "Restrict to one environment.",
"type": "string"
}
},
"required": [
"workspaceId",
"attributes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴formbricks_delete_response(response_id)
Delete one survey response. Irreversible — use it to honour a data-deletion request. Formbricks v2: DELETE /management/responses/{id}.
Input Schema
{
"type": "object",
"properties": {
"response_id": {
"type": "string",
"description": "The response to delete."
}
},
"required": [
"response_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence