Qualtrics MCP Server
Provides comprehensive integration with the Qualtrics platform, enabling AI agents to manage surveys, questions, blocks, survey flow, responses, contacts, distributions, webhooks, and users through natural language commands.
Click on "Deploy 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., "@Qualtrics MCP Server export survey responses from last month"
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.
Qualtrics MCP Server
An MCP server for end-to-end Qualtrics questionnaire programming and operations. Its 112 tools let any MCP client build complex surveys, edit nested flow logic, manage options, quotas, translations, versions, contacts, distributions, libraries, webhooks, and responses without importing this repository's TypeScript services.
The server has 110 Qualtrics action tools across 14 API areas, plus 2 server-permission controls. It provides a comprehensive survey-programming surface and a guarded JSON API v3 escape hatch; it does not claim that every licensed Qualtrics enterprise product has a dedicated wrapper.
Tool coverage
Area | Count | What is covered |
Surveys | 8 | List, get, create, update, delete, activate, deactivate, estimate export size |
Survey design | 11 | Metadata, safely merged options, versions, enabled languages, translations |
Questions | 13 | Raw CRUD, MC, text entry, descriptive text, Likert, Matrix, rank order, constant sum, reusable templates |
Blocks | 5 | List, get, create, safely update full definitions, delete |
Survey flow | 12 | Full-tree get/replace, insert/update/move/delete nested elements, validation, embedded data, web services, piped text |
Quotas | 10 | CRUD for quotas and quota groups |
Responses | 8 | Streamed full/filtered export, export status/download, individual response create/get/delete, queued embedded-data update |
Contacts | 12 | Directory (pool-ID) discovery, current XM Directory mailing-list and contact CRUD, cursor pagination, bounded sequential bulk import |
Distributions | 9 | Distribution listing/details/links, per-recipient delivery history, anonymous links, invitations, reminders, thank-yous, deletion |
Libraries | 11 | Libraries, reusable survey assets and multilingual messages, graphic upload/delete |
Survey import and copy | 5 | Survey copy plus QSF, TXT, URL, and base64 DOCX imports |
Webhooks | 3 | Event-subscription list, create, delete |
Users | 2 | List users and get user details |
Advanced API | 1 | Guarded JSON requests to other Qualtrics API v3 endpoints |
Server control | 2 | Least-privilege write scopes and read-only toggle |
Total | 112 | 110 Qualtrics actions + 2 server controls |
See docs/API_COVERAGE.md for the exact tool inventory, scope mapping, and boundaries.
Related MCP server: Dynamics 365 MCP Server
Complex questionnaires through MCP only
The tool set supports the full construction loop:
Create or copy a draft survey and retrieve its default block.
Create blocks and common question types with meaningful
DataExportTagvalues, recodes, validation, HTML, and optionalQuestionJS.Use raw question payloads or clone
get_question_templateoutput for specialized Qualtrics question types.Build nested branches, groups, randomizers, embedded-data declarations and assignments, block references, and web-service calls. Incremental flow tools allocate collision-free
FlowIDvalues and normalizeProperties.Count.Safely patch survey options, configure quotas and translations, then run
validate_survey_designbefore creating a version or activating the survey.
The reference implementation at examples/motivated-reasoning-study.ts uses an MCP client over stdio for every operation. It creates a multi-block randomized experiment with explicit export tags, embedded data, piped text, pre/post measures, options, validation, and a draft version. It intentionally does not activate the survey.
From a repository checkout, run it only when you want to create that draft in the configured Qualtrics account. The script builds and launches the packaged server entrypoint before making MCP calls:
pnpm example:motivated-reasoningNotable tools
Survey structure and logic
create_questionandupdate_questionexpose full question-definition fields while preserving existing fields during partial updates.add_multiple_choice_question,add_text_entry_question,add_descriptive_text_question,add_likert_question,add_matrix_question,add_rank_order_question, andadd_constant_sum_questionprovide validated common paths.get_question_templatereturns a sanitized definition for cloning specialized types such as side-by-side, sliders, or heatmaps.insert_flow_element,update_flow_element,move_flow_element, anddelete_flow_elementedit both top-level and nested flow nodes without rebuilding unrelated branches.add_embedded_dataandadd_web_servicesupport exact placement within the flow;piped_text_referencereturns the corresponding Qualtrics syntax.validate_survey_designchecks duplicate or missingFlowIDvalues,Properties.Count, block and question references, unreachable blocks, and missing or duplicate export tags.
Survey settings and reusable designs
update_survey_optionsrecursively merges patches with current options by default so omitted nested settings survive. Setreplace=trueonly for an intentional full replacement.Survey versions, enabled languages, and translations have dedicated read/write tools; language-map and translation updates safely merge by default.
Quotas and quota groups have complete dedicated CRUD tools.
Library tools list reusable survey blocks, questions, and surveys; manage multilingual messages; and upload or delete JPEG, GIF, and PNG graphics.
copy_surveypreserves complex question types, scoring, styling, flow, and other settings that do not have individual public mutation endpoints.import_survey_qsf,import_survey_text, andimport_survey_docxuse the official multipart import path;import_survey_from_urllets Qualtrics fetch a public HTTPS QSF, TXT, or DOCX file.
Contacts and response data
All contact tools use the current XM Directory API and require a licensed directory ID (
directoryId, usuallyPOOL_...). Uselist_directoriesto discover the available directory IDs if you do not already know one.Mailing-list pages accept up to 100 results and contact pages up to 50. Continue with the returned
nextSkipToken;includeCountis approximate and can be slower on large lists.remove_contactremoves membership from the selected mailing list only; it does not delete the person from the directory. Qualtrics does not supportget_mailing_listordelete_mailing_liston shared mailing lists.Contact identity rules vary by directory configuration; create tools accept email, first/last name, or
externalDataReferenceand let Qualtrics apply the brand's exact matching requirements.bulk_import_contactsis a bounded, sequential, non-atomic helper and reports per-input failures. It does not hide partial success.get_distribution_historyreturns per-recipient delivery state (sent, opened, bounced, responded) with thecontactLookupIdthat ties responses from individual-link distributions back to contacts.Response downloads buffer only small results; large bodies stream to a collision-safe file in Downloads. A slow healthy transfer can exceed
REQUEST_TIMEOUToverall because the download timeout is applied to headers and each inactive read, not total duration.
Advanced JSON API access
Use qualtrics_api_request when an authorized Qualtrics API v3 JSON endpoint lacks a dedicated tool. The request remains pinned to the configured Qualtrics origin:
GETworks in read-only mode.POST,PUT, andPATCHaccept a JSON body.DELETErequiresconfirmDelete: true.Known routes still require their normal least-privilege scope; only otherwise-unmapped writes use the high-risk
advancedscope.The path cannot contain another origin, query text, fragments, backslashes, traversal, whitespace, duplicate/trailing slashes, or percent-encoded segments. Query parameters are encoded separately.
Prefer dedicated tools where available because they validate payloads, preserve full-replacement resources, and add safety checks. The escape hatch is intentionally JSON-focused; use the dedicated survey-import tools for multipart uploads and response-export tools for downloads.
Safety and write scopes
The safe default is read-only. Unless QUALTRICS_READ_ONLY=false is set, no write scope is enabled at startup. Most read operations, including starting a response export, remain available. list_distribution_links is the exception: Qualtrics documents side effects for that GET, so the server requires the distributions scope.
Use set_write_scopes to enable only the categories required for a task:
Scope | Risk | Examples |
| Low | Questions and blocks |
| Minimal | Links, invitations, reminders, thank-yous |
| Medium | Flow, options, versions, quotas, languages, translations, webhooks |
| Medium | Reusable survey assets, messages, and graphics |
| High | Survey creation/import/copy, metadata, activation, deletion |
| High | Mailing lists and contacts |
| High | User-account changes |
| High | Otherwise-unmapped API writes; impact depends on the endpoint |
set_read_only_mode remains as a convenience switch. Setting it to false enables every scope; scoped permission grants are safer for normal use. Delete tools also require explicit confirmation where appropriate.
Setup
Requirements
Node.js 22 or later
A Qualtrics API token with the permissions required by the endpoints you use
Your Qualtrics data-center ID
pnpm install
cp .env.example .env
# Fill in the two required Qualtrics values, then:
pnpm startConfiguration
Variable | Required | Default | Description |
| Yes | - | Qualtrics API token |
| Yes | - | Data-center ID such as |
| No |
| API v3 base URL override |
| No |
| Use |
| No |
| Enable the client-side request limiter |
| No |
| Requests per minute |
| No |
| Ordinary request timeout and response-download header/chunk inactivity timeout, in milliseconds |
Missing token or data-center configuration fails at startup with setup guidance. Never commit tokens; .env and .mcp.json are gitignored because they may contain secrets.
MCP client configuration
Build once, then point any stdio-capable MCP client at the compiled entrypoint:
pnpm build{
"mcpServers": {
"qualtrics": {
"command": "/opt/homebrew/bin/node",
"args": ["/absolute/path/to/qualtrics_mcp/build/index.js"],
"env": {
"PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin",
"QUALTRICS_API_TOKEN": "your_api_token",
"QUALTRICS_DATA_CENTER": "your_data_center_id"
}
}
}
}Use the absolute path that which node prints on your machine as command (shown above: Homebrew on Apple Silicon; Intel Homebrew installs to /usr/local/bin/node, and nvm installs under ~/.nvm/versions/node/.../bin/node).
macOS troubleshooting: server never appears, no error in the UI
GUI-launched MCP clients such as Claude Desktop spawn servers with a minimal PATH that excludes Homebrew and nvm directories, and the resulting failure is silent. Two layers break:
A bare
"command"ofnodeornpxis not found at all.Even with an absolute
npx/tsxpath, the script's#!/usr/bin/env nodeshebang still cannot resolvenode(env: node: No such file or directory).
The config above fixes both: an absolute command path handles the first layer, and the PATH entry in env handles shebang resolution. You can reproduce the failure outside the client by piping an initialize JSON-RPC request to the configured command with a stripped PATH.
Qualtrics design conventions
Set an explicit, stable
DataExportTagon every data-collecting question. The creation tools derive a readable fallback when omitted, but explicit study-specific names keep exports and pre/post measures unambiguous.For Matrix questions,
Choicesare rows/statements andAnswersare columns/scale points.add_matrix_questionsupplies the Qualtrics boilerplate and validates selector/sub-selector pairs. Statement objects withtextEntry: trueadd an inline text box to individual rows (e.g., "Other (please specify)").In TypeScript template literals, escape the dollar sign in Qualtrics piped text as
\${...}when it must remain literal at runtime.Every raw flow element needs a unique
FlowID;Properties.Countmust equal the highest numeric ID. The incremental flow tools manage both automatically.Declare embedded-data fields near the beginning of the flow, then assign their values after the question or web service that produces them.
In the New Survey Taking Experience (formerly Simple Layout), use drag-and-drop (
DND) for Rank Order and Choices/text entry (VRTL) for Constant Sum. Rank Order select/text boxes and Constant Sum bar/slider variants require the legacy experience.
Development
pnpm start # Run from TypeScript using .env
pnpm dev # Watch mode
pnpm typecheck # Type-check server code
pnpm typecheck:examples # Type-check the MCP-only reference example
pnpm test # Run the Node test suite
pnpm build # Compile the distributable serverThe MCP protocol uses stdout, so diagnostics must go to stderr. The implementation's rate-limit and mode messages follow that rule.
Coverage boundaries
Qualtrics exposes additional product-specific, licensed, private, UI-only, and binary APIs. This project does not provide a dedicated semantic tool for every XM product endpoint. Authorized JSON API v3 endpoints can generally be reached through qualtrics_api_request; multipart survey imports and response exports have dedicated paths. Endpoint availability and accepted payloads still depend on the account's license, brand configuration, and API permissions.
Some survey features have no individual public mutation endpoint. Copying or importing a known-good survey is the reliable way to preserve features such as scoring or specialized presentation settings; get_question_template provides the analogous pattern for specialized question types.
License
MIT
Available Tools
112 toolsactivate_surveyAIdempotent
Activate a survey to begin collecting responses
Inputs: surveyId (required).
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.
Inputs: items (required), blockId (required), surveyId (required), questionText (required), +4 more.
add_contactA
Add a single contact to a mailing list
Inputs: directoryId (required), mailingListId (required), email, phone, +6 more.
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.
Inputs: blockId (required), surveyId (required), htmlContent (required), questionJS.
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}.
Inputs: fields (required), surveyId (required), placement, referenceFlowId.
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.
Inputs: scale (required), blockId (required), surveyId (required), questionText (required), +4 more.
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).
Inputs: blockId (required), surveyId (required), statements (required), scalePoints (required), +6 more.
add_multiple_choice_questionB
Simplified helper to create a multiple choice question. Automatically maps to the correct Qualtrics QuestionType/Selector.
Inputs: blockId (required), choices (required), surveyId (required), questionText (required), +4 more.
add_rank_order_questionB
Simplified helper to create a rank order question where respondents rank a list of items.
Inputs: items (required), blockId (required), surveyId (required), questionText (required), +3 more.
add_text_entry_questionB
Simplified helper to create a text entry question (single line, multi line, or essay).
Inputs: blockId (required), surveyId (required), textType (required), questionText (required), +2 more.
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.
Inputs: url (required), surveyId (required), responseMapping (required), method, +5 more.
bulk_import_contactsA
Create multiple contacts through the documented single-contact endpoint, returning per-contact successes and failures (non-atomic)
Inputs: contacts (required), directoryId (required), mailingListId (required).
check_export_statusARead-only
Check the status of a response export job
Inputs: surveyId (required), exportProgressId (required).
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.
Inputs: name (required), sourceSurveyId (required), destinationOwnerId.
create_anonymous_linkARead-only
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.
Inputs: surveyId (required).
create_blockA
Create a new block. Supports complete Qualtrics block definitions for reference blocks, question ordering, skip logic, randomization, and loop-and-merge.
Inputs: surveyId (required), description (required), type, options, +3 more.
create_email_distributionB
Send a survey via email to a mailing list
Inputs: subject (required), fromName (required), surveyId (required), fromEmail (required), +7 more.
create_library_messageB
Create a reusable multilingual library message for invitations, reminders, thank-yous, end-of-survey text, validation, or other supported categories.
Inputs: category (required), messages (required), libraryId (required), description (required).
create_mailing_listA
Create a new mailing list for contact management and survey distribution
Inputs: name (required), directoryId (required), ownerId.
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.
Inputs: blockId (required), selector (required), surveyId (required), questionText (required), +13 more.
create_quotaB
Create a quota from a complete raw Qualtrics quota definition. Optionally add it to a quota group in the same operation.
Inputs: quota (required), surveyId (required), quotaGroupId.
create_quota_groupA
Create a quota group from a complete raw Qualtrics quota-group definition
Inputs: surveyId (required), quotaGroup (required).
create_reminderB
Send a reminder for an existing email distribution
Inputs: subject (required), fromName (required), fromEmail (required), libraryId (required), +5 more.
create_responseB
Import/create a response for a survey programmatically
Inputs: values (required), surveyId (required), embeddedData.
create_surveyB
Create a new survey in Qualtrics
Inputs: name (required), language, projectCategory.
create_survey_versionA
Create a survey version. Versions are drafts by default; published=true creates and immediately publishes the version. Additional version fields can be supplied through version.
Inputs: surveyId (required), version, published, description.
create_thank_youA
Send or schedule a thank-you email for respondents in an existing email distribution
Inputs: subject (required), fromName (required), fromEmail (required), libraryId (required), +5 more.
create_webhookB
Create an event subscription (webhook) to receive notifications for Qualtrics events
Inputs: topics (required), publicationUrl (required), encrypted.
deactivate_surveyAIdempotent
Deactivate a survey to stop collecting responses
Inputs: surveyId (required).
delete_blockADestructive
Remove a block from a survey
Inputs: blockId (required), surveyId (required), confirmDelete (required).
delete_distributionCDestructive
Delete a distribution
Inputs: confirmDelete (required), distributionId (required).
delete_flow_elementADestructive
Delete one top-level or nested flow element without rebuilding the rest of the flow
Inputs: flowId (required), surveyId (required), confirmDelete (required).
delete_library_graphicBDestructive
Permanently delete a graphic from a Qualtrics library
Inputs: graphicId (required), libraryId (required), confirmDelete (required).
delete_library_messageADestructive
Permanently delete a reusable library message
Inputs: libraryId (required), messageId (required), confirmDelete (required).
delete_mailing_listBDestructive
Delete a mailing list
Inputs: directoryId (required), confirmDelete (required), mailingListId (required).
delete_questionADestructive
Remove a question from a survey
Inputs: surveyId (required), questionId (required), confirmDelete (required).
delete_quotaBDestructive
Permanently delete a quota from a survey
Inputs: quotaId (required), surveyId (required), confirmDelete (required).
delete_quota_groupADestructive
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.
Inputs: surveyId (required), quotaGroupId (required), confirmDelete (required), confirmCascade (required).
delete_responseBDestructive
Delete a survey response
Inputs: surveyId (required), responseId (required), confirmDelete (required).
delete_surveyADestructive
Delete a survey. Requires name confirmation as a safety measure.
Inputs: surveyId (required), confirmName (required).
delete_webhookADestructive
Delete an event subscription (webhook)
Inputs: confirmDelete (required), subscriptionId (required).
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.
Inputs: fileId (required), surveyId (required), format, saveToFile.
estimate_export_sizeARead-only
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.
Inputs: surveyId (required), format, expectedResponseCount.
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.
Inputs: surveyId (required), format, saveToFile, waitForCompletion.
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.
Inputs: surveyId (required), format, endDate, filterId, +8 more.
get_blockARead-only
Get a block's complete definition, including question order, skip logic, randomization, loop-and-merge, and navigation options
Inputs: blockId (required), surveyId (required).
get_contactARead-only
Get detailed information for one contact in an XM Directory mailing list
Inputs: contactId (required), directoryId (required), mailingListId (required).
get_distributionARead-only
Get detailed information about a specific distribution including delivery stats
Inputs: surveyId (required), distributionId (required).
get_distribution_historyARead-only
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.
Inputs: surveyId (required), distributionId (required), skipToken.
get_library_messageARead-only
Get the complete multilingual content of a library message
Inputs: libraryId (required), messageId (required).
get_mailing_listARead-only
Get complete metadata for a mailing list
Inputs: directoryId (required), mailingListId (required), includeCount.
get_questionARead-only
Get the full definition of a specific question including choices, validation, and configuration
Inputs: surveyId (required), questionId (required).
get_question_templateARead-only
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.
Inputs: surveyId (required), questionId (required).
get_quotaARead-only
Get a quota's complete raw Qualtrics definition, including its logic and actions
Inputs: quotaId (required), surveyId (required).
get_quota_groupARead-only
Get a quota group's complete raw Qualtrics definition, including its quota membership
Inputs: surveyId (required), quotaGroupId (required).
get_responseARead-only
Get a single survey response by its response ID
Inputs: surveyId (required), responseId (required).
get_surveyBRead-only
Get detailed information about a specific survey
Inputs: surveyId (required), includeDefinition.
get_survey_flowARead-only
Get the full survey flow tree showing the order of blocks, embedded data, web services, branching, and randomization
Inputs: surveyId (required).
get_survey_languagesARead-only
Get the language codes currently enabled for a survey
Inputs: surveyId (required).
get_survey_metadataARead-only
Get survey-definition metadata, including ownership, status, language, and lifecycle dates
Inputs: surveyId (required).
get_survey_optionsARead-only
Get the complete survey options object, including navigation, protection, partial-response, language, theme, CSS, and termination settings
Inputs: surveyId (required).
get_survey_translationsARead-only
Get the complete translation map for one enabled survey language
Inputs: surveyId (required), languageCode (required).
get_survey_versionARead-only
Get a saved survey version in JSON or QSF format. A version-export QSF is not guaranteed to be accepted unchanged by the separate survey-import API.
Inputs: surveyId (required), versionId (required), format.
get_userBRead-only
Get detailed information about a specific user
Inputs: userId (required).
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.
Inputs: name (required), contentBase64 (required), filename.
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.
Inputs: name (required), format (required), fileUrl (required).
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.
Inputs: qsf (required), name (required), filename.
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.
Inputs: name (required), text (required), filename.
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.
Inputs: element (required), surveyId (required), placement, referenceFlowId.
list_blocksARead-only
List all blocks in a survey
Inputs: surveyId (required).
list_contactsARead-only
List one cursor-paginated page of contacts in an XM Directory mailing list
Inputs: directoryId (required), mailingListId (required), pageSize, skipToken, +1 more.
list_directoriesARead-only
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.
Inputs: pageSize, skipToken.
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.
Inputs: surveyId (required), distributionId (required), skipToken.
list_distributionsARead-only
List one cursor-paginated page of distributions for a survey, with optional documented Qualtrics filters
Inputs: surveyId (required), pageSize, skipToken, sendEndDate, +3 more.
list_embedded_dataARead-only
List all embedded data fields currently defined in a survey's flow
Inputs: surveyId (required).
list_librariesARead-only
List Qualtrics libraries available to the current API user
Inputs: offset.
list_library_blocksARead-only
List reusable survey blocks in a Qualtrics library. Use these templates to discover complex block definitions before copying or recreating them through MCP.
Inputs: libraryId (required), offset.
list_library_messagesARead-only
List reusable email, survey, validation, SMS, and subject messages in a library. Use this to find messageId values for distributions.
Inputs: libraryId (required), offset, category.
list_library_questionsARead-only
List reusable survey questions in a Qualtrics library. Use these templates to discover complex question definitions before copying or recreating them through MCP.
Inputs: libraryId (required), offset.
list_library_surveysARead-only
List reusable survey surveys in a Qualtrics library. Use these templates to discover complex survey definitions before copying or recreating them through MCP.
Inputs: libraryId (required), offset.
list_mailing_listsARead-only
List one cursor-paginated page of mailing lists in an XM Directory
Inputs: directoryId (required), ownerId, pageSize, skipToken, +1 more.
list_questionsARead-only
List all questions in a survey with their types and a preview of the question text
Inputs: surveyId (required).
list_quota_groupsARead-only
List complete quota-group definitions for a survey, including membership and multiple-match behavior
Inputs: surveyId (required), pageSize, skipToken.
list_quotasBRead-only
List complete quota definitions for a survey, including logic, limits, actions, schedules, and action options
Inputs: surveyId (required), pageSize, skipToken.
list_surveysARead-only
List one Qualtrics-managed page of surveys with optional name filtering; use nextPage to continue
Inputs: filter, offset.
list_survey_versionsARead-only
List saved versions of a survey definition
Inputs: surveyId (required).
list_usersBRead-only
List users in your Qualtrics organization
Inputs: offset, username.
list_webhooksARead-only
List all event subscriptions (webhooks) in your Qualtrics account
Inputs: no named parameters.
list_web_servicesARead-only
List all Web Service elements currently defined in a survey's flow
Inputs: surveyId (required).
move_flow_elementAIdempotent
Move an existing flow element anywhere in the top-level or nested flow while preserving its definition and FlowID.
Inputs: flowId (required), surveyId (required), placement (required), referenceFlowId.
piped_text_referenceARead-only
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.
Inputs: category, surveyId.
qualtrics_api_requestADestructive
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.
Inputs: path (required), method (required), body, query, +1 more.
remove_contactADestructive
Remove a contact from this mailing list only; the contact remains in the XM Directory
Inputs: contactId (required), directoryId (required), confirmDelete (required), mailingListId (required).
set_read_only_modeAIdempotent
Quick toggle: enable read-only mode (blocks all writes) or disable it (enables all write scopes). For finer control, use set_write_scopes instead.
Inputs: enabled (required).
set_write_scopesAIdempotent
Enable or disable write permissions for specific categories. Scopes by risk: HIGH (users, contacts, surveys, advanced), MEDIUM (surveyDesign, libraries), LOW (questionsAndBlocks), MINIMAL (distributions). Use this to grant only the minimum permissions needed.
Inputs: scopes (required).
update_blockAIdempotent
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.
Inputs: blockId (required), surveyId (required), type, options, +4 more.
update_contactAIdempotent
Update an existing contact in a mailing list
Inputs: contactId (required), directoryId (required), mailingListId (required), email, +7 more.
update_flow_elementAIdempotent
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.
Inputs: flowId (required), element (required), surveyId (required), replace.
update_library_messageAIdempotent
Safely update a library message. Existing description and language content are fetched and preserved unless explicitly replaced.
Inputs: libraryId (required), messageId (required), messages, description.
update_mailing_listAIdempotent
Update the name or owner of an XM Directory mailing list
Inputs: directoryId (required), mailingListId (required), name, ownerId.
update_questionAIdempotent
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.
Inputs: surveyId (required), questionId (required), answers, choices, +9 more.
update_quotaAIdempotent
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.
Inputs: quota (required), quotaId (required), surveyId (required).
update_quota_groupAIdempotent
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.
Inputs: surveyId (required), quotaGroup (required), quotaGroupId (required).
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.
Inputs: surveyId (required), responseId (required), embeddedData (required), resetRecordedDate.
update_surveyAIdempotent
Update survey metadata such as name, active status, or expiration
Inputs: surveyId (required), name, isActive, expiration.
update_survey_flowADestructiveIdempotent
Replace the entire survey flow tree. Use get_survey_flow first to get the current flow, modify it, then pass the full tree back.
Inputs: surveyId (required), flow.
update_survey_languagesAIdempotent
Update the survey's AvailableLanguages option map through the documented survey-options PUT. The complete current options resource is fetched and preserved. By default language-map keys are merged; set replace=true to replace the complete AvailableLanguages map. Requires Translate Surveys permission.
Inputs: surveyId (required), availableLanguages (required), replace.
update_survey_metadataAIdempotent
Update survey-definition metadata. Common fields are exposed directly; metadata accepts any additional Qualtrics metadata fields. Date fields must use MySQL datetime format (YYYY-MM-DD HH:mm:ss), not ISO-8601.
Inputs: surveyId (required), name, status, metadata, +3 more.
update_survey_optionsAIdempotent
Safely patch survey options. By default the current options are fetched and recursively merged before PUT so omitted settings are preserved. Set replace=true only to submit exactly the supplied options and intentionally reset or remove omitted settings.
Inputs: surveyId (required), skin, footer, header, +21 more.
update_survey_translationsAIdempotent
Update translations for one language. By default the current map is fetched and the supplied keys are merged so Qualtrics receives the required complete map. Set replace=true only when translations already contains the complete map and omitted keys should be removed. Requires Translate Surveys permission.
Inputs: surveyId (required), languageCode (required), translations (required), replace.
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.
Inputs: name (required), libraryId (required), contentType (required), folder, +3 more.
validate_survey_designARead-only
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.
Inputs: surveyId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 112 tools
Each tool targets a specific resource or action with clear descriptions. Overlapping tools like 'export_responses' and 'export_responses_filtered' are explicitly differentiated by filtering capabilities. The helpers (e.g., 'add_multiple_choice_question') are clearly documented as simplified wrappers, so an agent can easily distinguish them.
Tool names consistently follow a verb_noun snake_case pattern (e.g., list_surveys, create_survey, delete_question). Exceptions like 'add_embedded_data' and 'piped_text_reference' are still systematic within their context. The naming is highly predictable.
At 112 tools, the number is extremely high for typical MCP usage. While the server aims to cover a broad API, such a large surface can overwhelm agents and lead to selection difficulty. Most tools earn their place for the domain, but the count exceeds even the 'too many' threshold of 25+.
The tool set covers nearly every aspect of the Qualtrics API: CRUD for surveys, questions, blocks, flows, responses, distributions, contacts, quotas, libraries, and more. It includes import/export, translation, and an escape hatch ('qualtrics_api_request') for any missing endpoints, ensuring no dead ends.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Minds is a synthetic market research platform. This MCP server lets ChatGPT, Claude, and Cursor build Audiences from a brief, run durable Studies and Question Blocks, compare segments, and export results. OAuth 2.1 or Minds API key.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides advanced analytical, research, and natural language processing capabilities through a Model Context Protocol server, enabling dataset analysis, decision analysis, and enhanced NLP features like entity recognition and fact extraction.124MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables interaction with Microsoft Dynamics 365 CRM from Claude Desktop, allowing users to retrieve, create, and update CRM data through natural language.522MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI models to interact with Mobi instances, providing structured data exchange and command execution for ontology management, data retrieval, and content creation.2MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables CRUD operations and querying on Microsoft Dataverse through natural language.7 npmMIT