Qualtrics MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RATE_LIMIT_RPM | No | Requests per minute | 50 |
| REQUEST_TIMEOUT | No | Request timeout in ms | 30000 |
| QUALTRICS_BASE_URL | No | Custom base URL override | Auto-generated |
| QUALTRICS_API_TOKEN | Yes | Your Qualtrics API token | |
| QUALTRICS_READ_ONLY | No | Block all write/delete operations (safe exploration mode) | false |
| QUALTRICS_DATA_CENTER | Yes | Data center ID (e.g., yul1) | |
| RATE_LIMITING_ENABLED | No | Enable/disable rate limiting | true |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_surveysA | List one Qualtrics-managed page of surveys with optional name filtering; use nextPage to continue |
| get_surveyB | Get detailed information about a specific survey |
| create_surveyB | Create a new survey in Qualtrics |
| estimate_export_sizeA | Estimate export size from the survey's question count and an optional expected response count. Qualtrics survey metadata does not expose response totals, so omitting expectedResponseCount returns an honest per-response estimate. |
| update_surveyA | Update survey metadata such as name, active status, or expiration |
| delete_surveyA | Delete a survey. Requires name confirmation as a safety measure. |
| activate_surveyA | Activate a survey to begin collecting responses |
| deactivate_surveyA | Deactivate a survey to stop collecting responses |
| list_questionsA | List all questions in a survey with their types and a preview of the question text |
| get_questionA | Get the full definition of a specific question including choices, validation, and configuration |
| create_questionA | Create a question in a survey block with full payload control. For Matrix questions: Choices = rows/statements, Answers = columns/scale points (both required). Use additionalFields to pass any other Qualtrics question-definition fields (e.g., a template from get_question_template). For common types, prefer the add_*_question helpers. |
| update_questionA | Update an existing question. Performs a safe partial update: fetches the current definition and carries all fields forward, so only the fields you pass change. For Matrix questions, choices = rows and answers = columns. |
| delete_questionA | Remove a question from a survey |
| add_multiple_choice_questionB | Simplified helper to create a multiple choice question. Automatically maps to the correct Qualtrics QuestionType/Selector. |
| add_text_entry_questionB | Simplified helper to create a text entry question (single line, multi line, or essay). |
| add_descriptive_text_questionA | Simplified helper to create a descriptive text (DB/TB) question — commonly used for instructions, processing screens, or HTML content with optional JavaScript. |
| add_likert_questionA | Simplified helper to create a single-item Likert scale as MC/SAVR. Includes preset scales so you don't have to enumerate choices manually. |
| add_matrix_questionA | Simplified helper to create a matrix question. Choices = rows/statements, Answers = columns/scale points. Defaults to a Likert single-answer matrix; use selector/subSelector for variants (e.g., selector 'CS' + subSelector 'WOTB' for matrix constant sum). Statements may be objects to enable an inline text-entry box on individual rows (e.g., an 'Other (please specify)' row). |
| add_rank_order_questionB | Simplified helper to create a rank order question where respondents rank a list of items. |
| add_constant_sum_questionA | Simplified helper to create a constant sum question where respondents allocate values across items (e.g., percentages summing to 100). The default Choices/text-entry variation works in the New Survey Taking Experience; bars and slider variations require the legacy experience. |
| get_question_templateA | Get a question's full definition stripped of server-generated fields, ready to reuse as a create_question template (pass it via additionalFields). Best way to replicate complex question types (side-by-side, sliders, heatmaps): build one in the Qualtrics UI, then clone it via the API. |
| list_blocksA | List all blocks in a survey |
| get_blockA | Get a block's complete definition, including question order, skip logic, randomization, loop-and-merge, and navigation options |
| create_blockA | Create a new block. Supports complete Qualtrics block definitions for reference blocks, question ordering, skip logic, randomization, and loop-and-merge. |
| update_blockA | Safely update part of a block definition. The current block is fetched and carried forward because Qualtrics PUT replaces the complete block. Supports question ordering, skip logic, randomization, and loop-and-merge. |
| delete_blockA | Remove a block from a survey |
| export_responsesA | Export survey responses in JSON or CSV format. IMPORTANT: This tool will automatically save large exports to a local file to avoid context limits. Small exports may be returned directly. For better control over data size, consider using 'export_responses_filtered' with date ranges, specific questions, or a saved Qualtrics filter. |
| check_export_statusA | Check the status of a response export job |
| download_export_fileA | Download a completed response export using the fileId returned by check_export_status. Saves large files automatically and can save any export to a requested filename. |
| export_responses_filteredA | Export survey responses with documented Qualtrics filters to reduce data size. Use date bounds, a saved Qualtrics filter, question selection, or inclusion of responses still in progress. Large exports will be automatically saved to your Downloads folder. |
| get_responseA | Get a single survey response by its response ID |
| create_responseB | Import/create a response for a survey programmatically |
| update_responseA | Start a Qualtrics job to update embedded data on one existing survey response. The public API does not support rewriting recorded answer values through this operation; use create_response or response import for answer data. |
| delete_responseB | Delete a survey response |
| list_distributionsA | List one cursor-paginated page of distributions for a survey, with optional documented Qualtrics filters |
| get_distributionA | Get detailed information about a specific distribution including delivery stats |
| get_distribution_historyA | Get per-recipient delivery history for an email distribution (sent, opened, bounced, blocked, responded), including the contactLookupId that ties each row back to a contact. This is the documented way to recover respondent identity for individual-link distributions after the fact. |
| list_distribution_linksA | List one page of generated individual survey links. WARNING: Qualtrics documents that this GET can update contact-frequency state and reset email-status dates when used on other distribution types, so the distributions write scope is required. |
| create_anonymous_linkA | Look up the survey's BrandBaseURL and return its canonical anonymous survey-taking URL. Qualtrics anonymous links do not require creating a distribution; this tool performs no API write. |
| create_email_distributionB | Send a survey via email to a mailing list |
| delete_distributionC | Delete a distribution |
| create_reminderB | Send a reminder for an existing email distribution |
| create_thank_youA | Send or schedule a thank-you email for respondents in an existing email distribution |
| list_directoriesA | List the XM Directories (contact pools) available to this account. Use this first to discover the directoryId (POOL_...) that every mailing-list and contact tool requires. |
| list_mailing_listsA | List one cursor-paginated page of mailing lists in an XM Directory |
| get_mailing_listA | Get complete metadata for a mailing list |
| update_mailing_listA | Update the name or owner of an XM Directory mailing list |
| create_mailing_listA | Create a new mailing list for contact management and survey distribution |
| delete_mailing_listB | Delete a mailing list |
| list_contactsA | List one cursor-paginated page of contacts in an XM Directory mailing list |
| get_contactA | Get detailed information for one contact in an XM Directory mailing list |
| add_contactA | Add a single contact to a mailing list |
| update_contactA | Update an existing contact in a mailing list |
| remove_contactA | Remove a contact from this mailing list only; the contact remains in the XM Directory |
| bulk_import_contactsA | Create multiple contacts through the documented single-contact endpoint, returning per-contact successes and failures (non-atomic) |
| list_usersB | List users in your Qualtrics organization |
| get_userB | Get detailed information about a specific user |
| list_webhooksA | List all event subscriptions (webhooks) in your Qualtrics account |
| create_webhookB | Create an event subscription (webhook) to receive notifications for Qualtrics events |
| delete_webhookA | Delete an event subscription (webhook) |
| get_survey_flowA | Get the full survey flow tree showing the order of blocks, embedded data, web services, branching, and randomization |
| update_survey_flowA | Replace the entire survey flow tree. Use get_survey_flow first to get the current flow, modify it, then pass the full tree back. |
| insert_flow_elementA | Insert any Qualtrics flow element (Block, Branch, Group, BlockRandomizer, EmbeddedData, WebService, EndSurvey, Authenticator, etc.) at an exact position. Allocates a collision-free FlowID when one is not supplied. |
| update_flow_elementA | Update one flow element by FlowID. By default this fetches and carries forward the existing definition so omitted fields are preserved, then writes the normalized complete flow tree. |
| move_flow_elementA | Move an existing flow element anywhere in the top-level or nested flow while preserving its definition and FlowID. |
| delete_flow_elementA | Delete one top-level or nested flow element without rebuilding the rest of the flow |
| validate_survey_designA | Read-only preflight for a programmed survey. Checks FlowID uniqueness/counts, flow block references, block question references, DataExportTag presence/uniqueness, and unreachable blocks before activation or publishing. |
| add_embedded_dataA | Add embedded data fields anywhere in the survey flow. Place declarations at the beginning, or place assignments after the question/web service that produces their values. Fields are referenced with ${e://Field/FieldName}. |
| add_web_serviceA | Add a Web Service element anywhere in the survey flow. Response values can be mapped to embedded data fields for downstream piped text. For authentication, headers, or advanced Qualtrics fields, use additionalFields. |
| piped_text_referenceA | Look up Qualtrics piped text syntax. Returns the correct syntax for referencing question responses, embedded data, contact fields, and more in question text, default values, or web service configurations. Use this when you need to dynamically insert values into survey questions. |
| list_embedded_dataA | List all embedded data fields currently defined in a survey's flow |
| list_web_servicesA | List all Web Service elements currently defined in a survey's flow |
| qualtrics_api_requestA | Advanced escape hatch for any Qualtrics API v3 endpoint not covered by a dedicated tool. Requests stay on the configured Qualtrics origin. GET is available in read-only mode; otherwise-unmapped writes require the HIGH-risk 'advanced' write scope. Known endpoints still require their normal least-privilege scope. Prefer dedicated tools when available because they validate payloads and provide safer defaults. |
| list_quotasB | List complete quota definitions for a survey, including logic, limits, actions, schedules, and action options |
| get_quotaA | Get a quota's complete raw Qualtrics definition, including its logic and actions |
| create_quotaB | Create a quota from a complete raw Qualtrics quota definition. Optionally add it to a quota group in the same operation. |
| update_quotaA | Replace a quota with a complete raw Qualtrics definition. Use get_quota first, modify the returned definition, and send the complete payload because PUT may replace omitted fields. |
| delete_quotaB | Permanently delete a quota from a survey |
| list_quota_groupsA | List complete quota-group definitions for a survey, including membership and multiple-match behavior |
| get_quota_groupA | Get a quota group's complete raw Qualtrics definition, including its quota membership |
| create_quota_groupA | Create a quota group from a complete raw Qualtrics quota-group definition |
| update_quota_groupA | Replace a quota group with a complete raw Qualtrics definition. Use get_quota_group first, modify the returned definition, and send the complete payload because PUT may replace omitted fields. |
| delete_quota_groupA | Permanently delete a quota group AND every quota in that group. Qualtrics documents this as a cascading delete; inspect membership first and explicitly acknowledge the cascade. |
| copy_surveyA | Create a complete copy of an existing survey, preserving complex question types, scoring, flow, styling, and settings that do not have individual public mutation endpoints. |
| import_survey_qsfA | Create a survey from a complete Qualtrics Survey Format (QSF) object using the official multipart import API. Use a QSF exported by the Qualtrics UI; the Survey Version API's format=qsf response is not the same import format. |
| import_survey_textA | Create a survey from Qualtrics Simple or Advanced TXT format. Supports question IDs/tags, blocks, page breaks, embedded data, choice randomization, MC, Matrix, TE, Constant Sum, Rank Order, and descriptive text syntax. |
| import_survey_from_urlA | Create a survey from a publicly accessible QSF, TXT, or DOCX URL. Qualtrics fetches the file, so private/local URLs will not work. |
| import_survey_docxA | Create a survey from a base64-encoded DOCX prepared in Qualtrics Simple/Advanced import format. Prefer import_survey_text when possible because it is transparent and easier to validate. |
| list_librariesA | List Qualtrics libraries available to the current API user |
| list_library_blocksA | List reusable survey blocks in a Qualtrics library. Use these templates to discover complex block definitions before copying or recreating them through MCP. |
| list_library_questionsA | List reusable survey questions in a Qualtrics library. Use these templates to discover complex question definitions before copying or recreating them through MCP. |
| list_library_surveysA | List reusable survey surveys in a Qualtrics library. Use these templates to discover complex survey definitions before copying or recreating them through MCP. |
| list_library_messagesA | List reusable email, survey, validation, SMS, and subject messages in a library. Use this to find messageId values for distributions. |
| get_library_messageA | Get the complete multilingual content of a library message |
| create_library_messageB | Create a reusable multilingual library message for invitations, reminders, thank-yous, end-of-survey text, validation, or other supported categories. |
| update_library_messageA | Safely update a library message. Existing description and language content are fetched and preserved unless explicitly replaced. |
| delete_library_messageA | Permanently delete a reusable library message |
| upload_library_graphicA | Upload a non-confidential JPEG, GIF, or PNG graphic to a Qualtrics library from either a public HTTPS URL or base64 bytes. Uploaded graphics can be publicly accessible through their resulting URL. |
| delete_library_graphicB | Permanently delete a graphic from a Qualtrics library |
| get_survey_metadataA | Get survey-definition metadata, including ownership, status, language, and lifecycle dates |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/yrvelez/qualtrics-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server