Skip to main content
Glama
Qualtrics MCP Server

Qualtrics MCP Server

by yrvelez

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:

  1. Create or copy a draft survey and retrieve its default block.

  2. Create blocks and common question types with meaningful DataExportTag values, recodes, validation, HTML, and optional QuestionJS.

  3. Use raw question payloads or clone get_question_template output for specialized Qualtrics question types.

  4. Build nested branches, groups, randomizers, embedded-data declarations and assignments, block references, and web-service calls. Incremental flow tools allocate collision-free FlowID values and normalize Properties.Count.

  5. Safely patch survey options, configure quotas and translations, then run validate_survey_design before 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-reasoning

Notable tools

Survey structure and logic

  • create_question and update_question expose 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, and add_constant_sum_question provide validated common paths.

  • get_question_template returns a sanitized definition for cloning specialized types such as side-by-side, sliders, or heatmaps.

  • insert_flow_element, update_flow_element, move_flow_element, and delete_flow_element edit both top-level and nested flow nodes without rebuilding unrelated branches.

  • add_embedded_data and add_web_service support exact placement within the flow; piped_text_reference returns the corresponding Qualtrics syntax.

  • validate_survey_design checks duplicate or missing FlowID values, Properties.Count, block and question references, unreachable blocks, and missing or duplicate export tags.

Survey settings and reusable designs

  • update_survey_options recursively merges patches with current options by default so omitted nested settings survive. Set replace=true only 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_survey preserves complex question types, scoring, styling, flow, and other settings that do not have individual public mutation endpoints.

  • import_survey_qsf, import_survey_text, and import_survey_docx use the official multipart import path; import_survey_from_url lets 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, usually POOL_...). Use list_directories to 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; includeCount is approximate and can be slower on large lists.

  • remove_contact removes membership from the selected mailing list only; it does not delete the person from the directory. Qualtrics does not support get_mailing_list or delete_mailing_list on shared mailing lists.

  • Contact identity rules vary by directory configuration; create tools accept email, first/last name, or externalDataReference and let Qualtrics apply the brand's exact matching requirements.

  • bulk_import_contacts is a bounded, sequential, non-atomic helper and reports per-input failures. It does not hide partial success.

  • get_distribution_history returns per-recipient delivery state (sent, opened, bounced, responded) with the contactLookupId that 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_TIMEOUT overall 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:

  • GET works in read-only mode.

  • POST, PUT, and PATCH accept a JSON body.

  • DELETE requires confirmDelete: true.

  • Known routes still require their normal least-privilege scope; only otherwise-unmapped writes use the high-risk advanced scope.

  • 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

questionsAndBlocks

Low

Questions and blocks

distributions

Minimal

Links, invitations, reminders, thank-yous

surveyDesign

Medium

Flow, options, versions, quotas, languages, translations, webhooks

libraries

Medium

Reusable survey assets, messages, and graphics

surveys

High

Survey creation/import/copy, metadata, activation, deletion

contacts

High

Mailing lists and contacts

users

High

User-account changes

advanced

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 start

Configuration

Variable

Required

Default

Description

QUALTRICS_API_TOKEN

Yes

-

Qualtrics API token

QUALTRICS_DATA_CENTER

Yes

-

Data-center ID such as yul1 or iad1

QUALTRICS_BASE_URL

No

https://<data-center>.qualtrics.com/API/v3

API v3 base URL override

QUALTRICS_READ_ONLY

No

true

Use false to enable all write scopes at startup

RATE_LIMITING_ENABLED

No

true

Enable the client-side request limiter

RATE_LIMIT_RPM

No

50

Requests per minute

REQUEST_TIMEOUT

No

30000

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:

  1. A bare "command" of node or npx is not found at all.

  2. Even with an absolute npx/tsx path, the script's #!/usr/bin/env node shebang still cannot resolve node (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 DataExportTag on 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, Choices are rows/statements and Answers are columns/scale points. add_matrix_question supplies the Qualtrics boilerplate and validates selector/sub-selector pairs. Statement objects with textEntry: true add 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.Count must 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 server

The 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 tools
activate_surveyA
Idempotent

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_statusA
Read-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_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_surveyA
Idempotent

Deactivate a survey to stop collecting responses

Inputs: surveyId (required).

delete_blockA
Destructive

Remove a block from a survey

Inputs: blockId (required), surveyId (required), confirmDelete (required).

delete_distributionC
Destructive

Delete a distribution

Inputs: confirmDelete (required), distributionId (required).

delete_flow_elementA
Destructive

Delete one top-level or nested flow element without rebuilding the rest of the flow

Inputs: flowId (required), surveyId (required), confirmDelete (required).

delete_library_graphicB
Destructive

Permanently delete a graphic from a Qualtrics library

Inputs: graphicId (required), libraryId (required), confirmDelete (required).

delete_library_messageA
Destructive

Permanently delete a reusable library message

Inputs: libraryId (required), messageId (required), confirmDelete (required).

delete_mailing_listB
Destructive

Delete a mailing list

Inputs: directoryId (required), confirmDelete (required), mailingListId (required).

delete_questionA
Destructive

Remove a question from a survey

Inputs: surveyId (required), questionId (required), confirmDelete (required).

delete_quotaB
Destructive

Permanently delete a quota from a survey

Inputs: quotaId (required), surveyId (required), confirmDelete (required).

delete_quota_groupA
Destructive

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_responseB
Destructive

Delete a survey response

Inputs: surveyId (required), responseId (required), confirmDelete (required).

delete_surveyA
Destructive

Delete a survey. Requires name confirmation as a safety measure.

Inputs: surveyId (required), confirmName (required).

delete_webhookA
Destructive

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_sizeA
Read-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_blockA
Read-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_contactA
Read-only

Get detailed information for one contact in an XM Directory mailing list

Inputs: contactId (required), directoryId (required), mailingListId (required).

get_distributionA
Read-only

Get detailed information about a specific distribution including delivery stats

Inputs: surveyId (required), distributionId (required).

get_distribution_historyA
Read-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_messageA
Read-only

Get the complete multilingual content of a library message

Inputs: libraryId (required), messageId (required).

get_mailing_listA
Read-only

Get complete metadata for a mailing list

Inputs: directoryId (required), mailingListId (required), includeCount.

get_questionA
Read-only

Get the full definition of a specific question including choices, validation, and configuration

Inputs: surveyId (required), questionId (required).

get_question_templateA
Read-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_quotaA
Read-only

Get a quota's complete raw Qualtrics definition, including its logic and actions

Inputs: quotaId (required), surveyId (required).

get_quota_groupA
Read-only

Get a quota group's complete raw Qualtrics definition, including its quota membership

Inputs: surveyId (required), quotaGroupId (required).

get_responseA
Read-only

Get a single survey response by its response ID

Inputs: surveyId (required), responseId (required).

get_surveyB
Read-only

Get detailed information about a specific survey

Inputs: surveyId (required), includeDefinition.

get_survey_flowA
Read-only

Get the full survey flow tree showing the order of blocks, embedded data, web services, branching, and randomization

Inputs: surveyId (required).

get_survey_languagesA
Read-only

Get the language codes currently enabled for a survey

Inputs: surveyId (required).

get_survey_metadataA
Read-only

Get survey-definition metadata, including ownership, status, language, and lifecycle dates

Inputs: surveyId (required).

get_survey_optionsA
Read-only

Get the complete survey options object, including navigation, protection, partial-response, language, theme, CSS, and termination settings

Inputs: surveyId (required).

get_survey_translationsA
Read-only

Get the complete translation map for one enabled survey language

Inputs: surveyId (required), languageCode (required).

get_survey_versionA
Read-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_userB
Read-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_blocksA
Read-only

List all blocks in a survey

Inputs: surveyId (required).

list_contactsA
Read-only

List one cursor-paginated page of contacts in an XM Directory mailing list

Inputs: directoryId (required), mailingListId (required), pageSize, skipToken, +1 more.

list_directoriesA
Read-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_distributionsA
Read-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_dataA
Read-only

List all embedded data fields currently defined in a survey's flow

Inputs: surveyId (required).

list_librariesA
Read-only

List Qualtrics libraries available to the current API user

Inputs: offset.

list_library_blocksA
Read-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_messagesA
Read-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_questionsA
Read-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_surveysA
Read-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_listsA
Read-only

List one cursor-paginated page of mailing lists in an XM Directory

Inputs: directoryId (required), ownerId, pageSize, skipToken, +1 more.

list_questionsA
Read-only

List all questions in a survey with their types and a preview of the question text

Inputs: surveyId (required).

list_quota_groupsA
Read-only

List complete quota-group definitions for a survey, including membership and multiple-match behavior

Inputs: surveyId (required), pageSize, skipToken.

list_quotasB
Read-only

List complete quota definitions for a survey, including logic, limits, actions, schedules, and action options

Inputs: surveyId (required), pageSize, skipToken.

list_surveysA
Read-only

List one Qualtrics-managed page of surveys with optional name filtering; use nextPage to continue

Inputs: filter, offset.

list_survey_versionsA
Read-only

List saved versions of a survey definition

Inputs: surveyId (required).

list_usersB
Read-only

List users in your Qualtrics organization

Inputs: offset, username.

list_webhooksA
Read-only

List all event subscriptions (webhooks) in your Qualtrics account

Inputs: no named parameters.

list_web_servicesA
Read-only

List all Web Service elements currently defined in a survey's flow

Inputs: surveyId (required).

move_flow_elementA
Idempotent

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_referenceA
Read-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_requestA
Destructive

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_contactA
Destructive

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_modeA
Idempotent

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_scopesA
Idempotent

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_blockA
Idempotent

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_contactA
Idempotent

Update an existing contact in a mailing list

Inputs: contactId (required), directoryId (required), mailingListId (required), email, +7 more.

update_flow_elementA
Idempotent

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_messageA
Idempotent

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_listA
Idempotent

Update the name or owner of an XM Directory mailing list

Inputs: directoryId (required), mailingListId (required), name, ownerId.

update_questionA
Idempotent

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_quotaA
Idempotent

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_groupA
Idempotent

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_surveyA
Idempotent

Update survey metadata such as name, active status, or expiration

Inputs: surveyId (required), name, isActive, expiration.

update_survey_flowA
DestructiveIdempotent

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_languagesA
Idempotent

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_metadataA
Idempotent

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_optionsA
Idempotent

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_translationsA
Idempotent

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_designA
Read-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

    A3.7/5.0

    Scored across 112 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count2/5

    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+.

    Completeness5/5

    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

    ActivityInactive
    ResponsivenessUsually handled

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Provides 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.
      12
      4
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A 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.
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server that enables CRUD operations and querying on Microsoft Dataverse through natural language.
      7 npm
      MIT