MCP 서버

pollbolt

io.github.BenSpank/pollbolt
비즈니스 및 운영 데이터 및 분석 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Enables creating and managing surveys and forms, collecting responses, analyzing completion metrics, and receiving survey event webhooks.

create_survey
Create a new survey. Returns the survey details including share_url. Supported question types: short_text, long_text, multiple_choice, checkbox, checkbox_list, numeric, star_rating, picture_choice, opinion_scale, date, email, contact_info, poll_question, statement.
입력 스키마
{'type': 'object', 'required': ['title', 'questions'], 'properties': {'title': {'type': 'string', 'description': 'Survey title'}, 'styles': {'type': 'object', 'properties': {'logo': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'size': {'enum': ['sm', 'md', 'lg'], 'type': 'string'}, 'alignment': {'enum': ['left', 'center', 'right'], 'type': 'string'}}}, 'title_size': {'enum': ['xl', '2xl', '4xl', '6xl'], 'type': 'string'}, 'font_family': {'type': 'string'}, 'rtl_enabled': {'type': 'boolean'}, 'corner_radius': {'enum': ['none', 'medium', 'large'], 'type': 'string'}, 'question_size': {'enum': ['base', 'xl', '2xl'], 'type': 'string'}, 'background_color': {'type': 'string', 'description': 'Hex color, e.g. #FFFFFF'}, 'next_button_text': {'type': 'string'}, 'show_next_button': {'type': 'boolean'}, 'option_text_color': {'type': 'string', 'description': 'Hex color'}, 'use_number_labels': {'type': 'boolean'}, 'submit_button_text': {'type': 'string'}, 'question_text_color': {'type': 'string', 'description': 'Hex color'}, 'submit_button_color': {'type': 'string', 'description': 'Hex color, e.g. #4F46E5'}, 'submit_button_text_color': {'type': 'string', 'description': 'Hex color, e.g. #FFFFFF'}}, 'description': 'Optional styling configuration for branding and visual design.'}, 'settings': {'type': 'object', 'properties': {'is_open': {'type': 'boolean', 'description': 'Whether survey accepts responses (default: true)'}, 'is_published': {'type': 'boolean', 'description': 'Whether survey is publicly published'}, 'allow_multiple_submissions': {'type': 'boolean', 'description': 'Allow multiple submissions per user'}}}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'text'], 'properties': {'text': {'type': 'string', 'description': 'Question text'}, 'type': {'type': 'string', 'description': 'Question type (e.g. multiple_choice, short_text, opinion_scale)'}, 'logic': {'type': 'object', 'properties': {'rules': {'type': 'array', 'items': {'type': 'object', 'required': ['rule_type', 'result_type', 'result_name'], 'properties': {'rule_id': {'type': 'string'}, 'rule_type': {'enum': ['if', 'always'], 'type': 'string'}, 'target_id': {'type': 'string'}, 'result_name': {'enum': ['goto', 'add', 'devide', 'subtract', 'multiply'], 'type': 'string'}, 'result_type': {'enum': ['logic', 'calculation'], 'type': 'string'}, 'target_type': {'enum': ['question', 'ending'], 'type': 'string'}, 'result_value': {'type': 'number'}, 'target_variable': {'type': 'string'}, 'matching_conditions': {'type': 'array', 'items': {'anyOf': [{'enum': ['and', 'or'], 'type': 'string'}, {'type': 'object'}]}, 'description': "Array of condition objects or 'and'/'or' strings"}}}}, 'default_target': {'type': 'string', 'description': 'Default target question/ending ID'}, 'default_target_type': {'enum': ['question', 'ending'], 'type': 'string'}}, 'description': 'Per-question branching logic (goto / calculation).'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Options for multiple_choice, checkbox_list, poll_question'}, 'required': {'type': 'boolean', 'description': 'Whether the question is required'}, 'scale_end': {'type': 'number', 'description': 'Opinion scale end value (opinion_scale only)'}, 'button_text': {'type': 'string', 'description': 'Continue button text for statement questions'}, 'description': {'type': 'string', 'description': 'Optional help text'}, 'placeholder': {'type': 'string', 'description': 'Optional placeholder for input questions'}, 'scale_start': {'type': 'number', 'description': 'Opinion scale start value (opinion_scale only)'}, 'contact_fields': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'label': {'type': 'string'}, 'enabled': {'type': 'boolean'}, 'required': {'type': 'boolean'}, 'placeholder': {'type': 'string'}}}, 'description': 'Contact info fields (contact_info only)'}, 'scale_end_label': {'type': 'string', 'description': 'Opinion scale end label (opinion_scale only)'}, 'scale_start_label': {'type': 'string', 'description': 'Opinion scale start label (opinion_scale only)'}}}, 'description': 'Array of questions'}, 'variables': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string', 'description': 'Variable name'}, 'type': {'enum': ['number', 'text'], 'type': 'string'}, 'default_value': {'type': 'number', 'description': 'Default value'}}}, 'description': 'Custom variables for scoring, calculations, and recall.'}, 'hidden_fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string', 'description': 'Field name (used as URL param name)'}, 'source': {'enum': ['url_param', 'manual'], 'type': 'string'}, 'default_value': {'type': 'string'}}}, 'description': 'Hidden fields for URL parameters or custom data, passed through the survey URL.'}, 'ending_screens': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'title': {'type': 'string'}, 'buttons': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string'}, 'style': {'enum': ['primary', 'secondary'], 'type': 'string'}}}}, 'button_url': {'type': 'string'}, 'is_default': {'type': 'boolean'}, 'button_text': {'type': 'string'}, 'description': {'type': 'string'}, 'score_range': {'type': 'object', 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}}}, 'overlay_color': {'type': 'string'}, 'overlay_opacity': {'type': 'number'}, 'background_image': {'type': 'string'}, 'background_video': {'type': 'string'}, 'background_alignment': {'enum': ['cover', 'left', 'right'], 'type': 'string'}, 'background_alignment_mobile': {'enum': ['cover', 'top', 'bottom'], 'type': 'string'}}}, 'description': 'Optional ending screens list.'}, 'welcome_screen': {'type': ['object', 'null'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'title': {'type': 'string'}, 'button_text': {'type': 'string'}, 'description': {'type': 'string'}, 'overlay_color': {'type': 'string'}, 'estimated_time': {'type': 'string'}, 'overlay_opacity': {'type': 'number'}, 'background_image': {'type': 'string'}, 'background_video': {'type': 'string'}, 'show_estimated_time': {'type': 'boolean'}, 'background_alignment': {'enum': ['cover', 'left', 'right', 'inline'], 'type': 'string'}, 'show_submissions_count': {'type': 'boolean'}, 'background_alignment_mobile': {'enum': ['cover', 'top', 'bottom', 'inline'], 'type': 'string'}}, 'description': 'Optional welcome screen configuration.'}}}
create_webhook
Register a webhook to receive notifications when survey events occur.
외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Webhook URL to receive POST requests'}, 'events': {'type': 'array', 'items': {'enum': ['response.completed', 'response.created', 'survey.opened', 'survey.closed'], 'type': 'string'}, 'description': 'Events to subscribe to (default: response.completed)'}, 'secret': {'type': 'string', 'description': 'Secret for HMAC-SHA256 webhook signatures'}, 'survey_id': {'type': 'string', 'description': "Specific survey ID or '*' for all surveys"}}}
delete_survey
Permanently delete a survey and all its responses.
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['survey_id'], 'properties': {'survey_id': {'type': 'string', 'description': 'The survey ID to delete'}}}
delete_webhook
Delete a registered webhook.
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['webhook_id'], 'properties': {'webhook_id': {'type': 'string', 'description': 'The webhook ID to delete'}}}
duplicate_survey
Create a copy of an existing survey with all its questions, styles, logic, and screens. Returns the new survey details including share_url.
입력 스키마
{'type': 'object', 'required': ['survey_id'], 'properties': {'title': {'type': 'string', 'description': "Optional title for the copy (defaults to 'Original Title (Copy)')"}, 'survey_id': {'type': 'string', 'description': 'The survey ID to duplicate'}}}
get_analytics
Get analytics summary for a survey (views, responses, completion rate).
읽기 전용
입력 스키마
{'type': 'object', 'required': ['survey_id'], 'properties': {'survey_id': {'type': 'string', 'description': 'The survey ID'}}}
get_response
Get a single response by ID.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['survey_id', 'response_id'], 'properties': {'survey_id': {'type': 'string', 'description': 'The survey ID'}, 'response_id': {'type': 'string', 'description': 'The response ID'}}}
get_survey
Get full details of a specific survey including all questions.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['survey_id'], 'properties': {'survey_id': {'type': 'string', 'description': 'The survey ID'}}}
list_media_library_images
List images from the account's media library, including brandkits, uploaded media, logos, and theme backgrounds.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Max images to return (default 100, max 500).'}, 'search': {'type': 'string', 'description': 'Optional search term to filter images by name/URL.'}}}
list_responses
List responses for a survey with pagination and filters. Returns response metadata and answers.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['survey_id'], 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'since': {'type': 'string', 'description': 'ISO date - only responses after this date'}, 'until': {'type': 'string', 'description': 'ISO date - only responses before this date'}, 'status': {'enum': ['completed', 'partial', 'all'], 'type': 'string', 'description': 'Filter by response status (default: completed)'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20, max: 50)'}, 'survey_id': {'type': 'string', 'description': 'The survey ID'}}}
list_surveys
List all surveys in your PollBolt account with pagination.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'status': {'enum': ['open', 'closed', 'all'], 'type': 'string', 'description': 'Filter by status'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20, max: 100)'}}}
list_webhooks
List all registered webhooks for your account.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'survey_id': {'type': 'string', 'description': 'Optional: filter by survey ID'}}}
submit_response
Submit a response to a survey programmatically. Answers is a map of question_id to answer value.
입력 스키마
{'type': 'object', 'required': ['survey_id', 'answers'], 'properties': {'answers': {'type': 'object', 'description': 'Map of question_id -> answer value'}, 'user_id': {'type': 'string', 'description': 'Optional user identifier'}, 'survey_id': {'type': 'string', 'description': 'The survey ID'}, 'completion_time': {'type': 'number', 'description': 'Completion time in milliseconds'}}}
update_survey
Update a survey's title, questions, settings, styles, screens, or logic. Providing questions replaces all existing questions.
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['survey_id'], 'properties': {'title': {'type': 'string', 'description': 'New title'}, 'styles': {'type': 'object', 'properties': {'logo': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'size': {'enum': ['sm', 'md', 'lg'], 'type': 'string'}, 'alignment': {'enum': ['left', 'center', 'right'], 'type': 'string'}}}, 'title_size': {'enum': ['xl', '2xl', '4xl', '6xl'], 'type': 'string'}, 'font_family': {'type': 'string'}, 'rtl_enabled': {'type': 'boolean'}, 'corner_radius': {'enum': ['none', 'medium', 'large'], 'type': 'string'}, 'question_size': {'enum': ['base', 'xl', '2xl'], 'type': 'string'}, 'background_color': {'type': 'string'}, 'next_button_text': {'type': 'string'}, 'show_next_button': {'type': 'boolean'}, 'option_text_color': {'type': 'string'}, 'use_number_labels': {'type': 'boolean'}, 'submit_button_text': {'type': 'string'}, 'question_text_color': {'type': 'string'}, 'submit_button_color': {'type': 'string'}, 'submit_button_text_color': {'type': 'string'}}, 'description': 'Partial styling update. Only provided fields are changed.'}, 'settings': {'type': 'object', 'properties': {'is_open': {'type': 'boolean'}, 'is_published': {'type': 'boolean'}, 'allow_multiple_submissions': {'type': 'boolean'}}}, 'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'text'], 'properties': {'text': {'type': 'string'}, 'type': {'type': 'string'}, 'logic': {'type': 'object', 'properties': {'rules': {'type': 'array', 'items': {'type': 'object', 'required': ['rule_type', 'result_type', 'result_name'], 'properties': {'rule_id': {'type': 'string'}, 'rule_type': {'enum': ['if', 'always'], 'type': 'string'}, 'target_id': {'type': 'string'}, 'result_name': {'enum': ['goto', 'add', 'devide', 'subtract', 'multiply'], 'type': 'string'}, 'result_type': {'enum': ['logic', 'calculation'], 'type': 'string'}, 'target_type': {'enum': ['question', 'ending'], 'type': 'string'}, 'result_value': {'type': 'number'}, 'target_variable': {'type': 'string'}, 'matching_conditions': {'type': 'array', 'items': {'anyOf': [{'enum': ['and', 'or'], 'type': 'string'}, {'type': 'object'}]}}}}}, 'default_target': {'type': 'string'}, 'default_target_type': {'enum': ['question', 'ending'], 'type': 'string'}}}, 'options': {'type': 'array', 'items': {'type': 'string'}}, 'required': {'type': 'boolean'}, 'scale_end': {'type': 'number'}, 'button_text': {'type': 'string'}, 'description': {'type': 'string'}, 'placeholder': {'type': 'string'}, 'scale_start': {'type': 'number'}, 'contact_fields': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'label': {'type': 'string'}, 'enabled': {'type': 'boolean'}, 'required': {'type': 'boolean'}, 'placeholder': {'type': 'string'}}}}, 'scale_end_label': {'type': 'string'}, 'scale_start_label': {'type': 'string'}}}, 'description': 'Replacement questions array (replaces all questions)'}, 'survey_id': {'type': 'string', 'description': 'The survey ID'}, 'variables': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'enum': ['number', 'text'], 'type': 'string'}, 'default_value': {'type': 'number'}}}, 'description': 'Replace all variables.'}, 'hidden_fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'source': {'enum': ['url_param', 'manual'], 'type': 'string'}, 'default_value': {'type': 'string'}}}, 'description': 'Replace all hidden fields.'}, 'ending_screens': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'title': {'type': 'string'}, 'buttons': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string'}, 'style': {'enum': ['primary', 'secondary'], 'type': 'string'}}}}, 'button_url': {'type': 'string'}, 'is_default': {'type': 'boolean'}, 'button_text': {'type': 'string'}, 'description': {'type': 'string'}, 'score_range': {'type': 'object', 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}}}, 'overlay_color': {'type': 'string'}, 'overlay_opacity': {'type': 'number'}, 'background_image': {'type': 'string'}, 'background_video': {'type': 'string'}, 'background_alignment': {'enum': ['cover', 'left', 'right'], 'type': 'string'}, 'background_alignment_mobile': {'enum': ['cover', 'top', 'bottom'], 'type': 'string'}}}, 'description': 'Replace all ending screens.'}, 'welcome_screen': {'type': ['object', 'null'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'title': {'type': 'string'}, 'button_text': {'type': 'string'}, 'description': {'type': 'string'}, 'overlay_color': {'type': 'string'}, 'estimated_time': {'type': 'string'}, 'overlay_opacity': {'type': 'number'}, 'background_image': {'type': 'string'}, 'background_video': {'type': 'string'}, 'show_estimated_time': {'type': 'boolean'}, 'background_alignment': {'enum': ['cover', 'left', 'right', 'inline'], 'type': 'string'}, 'show_submissions_count': {'type': 'boolean'}, 'background_alignment_mobile': {'enum': ['cover', 'top', 'bottom', 'inline'], 'type': 'string'}}, 'description': 'Replace welcome screen (set null to remove).'}}}
update_webhook
Update a webhook's URL, events, active status, or secret.
외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['webhook_id'], 'properties': {'url': {'type': 'string'}, 'events': {'type': 'array', 'items': {'enum': ['response.completed', 'response.created', 'survey.opened', 'survey.closed'], 'type': 'string'}}, 'secret': {'type': 'string'}, 'is_active': {'type': 'boolean'}, 'webhook_id': {'type': 'string', 'description': 'The webhook ID'}}}
추가됨
delete_webhook
2026년 9월 17일 12:40 PM
추가됨
update_webhook
2026년 9월 17일 12:40 PM
추가됨
list_webhooks
2026년 9월 17일 12:40 PM
추가됨
create_webhook
2026년 9월 17일 12:40 PM
추가됨
duplicate_survey
2026년 9월 17일 12:40 PM
추가됨
list_media_library_images
2026년 9월 17일 12:40 PM
추가됨
get_analytics
2026년 9월 17일 12:40 PM
추가됨
submit_response
2026년 9월 17일 12:40 PM
추가됨
get_response
2026년 9월 17일 12:40 PM
추가됨
list_responses
2026년 9월 17일 12:40 PM
추가됨
delete_survey
2026년 9월 17일 12:40 PM
추가됨
update_survey
2026년 9월 17일 12:40 PM
추가됨
get_survey
2026년 9월 17일 12:40 PM
추가됨
list_surveys
2026년 9월 17일 12:40 PM
추가됨
create_survey
2026년 9월 17일 12:40 PM