npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

questionpro-mcp

v1.0.1

Published

MCP server for the QuestionPro Surveys API V2 — use Claude to manage surveys, questions, responses, users, email campaigns, and more.

Downloads

217

Readme

QuestionPro MCP Server

A Model Context Protocol (MCP) server that exposes all 90 endpoints from the QuestionPro Surveys API V2 as MCP tools — letting Claude (or any MCP client) directly manage surveys, questions, responses, users, email campaigns, webhooks, and more.

Prerequisites

  • Node.js v18 or later
  • A QuestionPro API key — found under My Account → API Key in QuestionPro
  • Your Organization ID — found under My Account → Organization

Quick Start — Claude Desktop

The fastest way to get started. No cloning or building required.

1. Add to your Claude Desktop config

Open ~/Library/Application Support/Claude/claude_desktop_config.json and add:

{
  "mcpServers": {
    "questionpro-api": {
      "command": "npx",
      "args": ["-y", "questionpro-mcp"],
      "env": {
        "QUESTIONPRO_API_KEY": "your-api-key",
        "QUESTIONPRO_ORG_ID": "your-org-id",
        "QUESTIONPRO_ENV": "com"
      }
    }
  }
}

Set QUESTIONPRO_ENV to eu if your account is on the EU domain.

2. Restart Claude Desktop

That's it. Claude will now have access to all 90 QuestionPro tools.

Note: Claude Desktop does not currently support custom headers for remote MCP servers, so the npx/local mode above is the only supported option for Claude Desktop.


Transport Modes

The server supports two transport modes controlled by the MCP_TRANSPORT environment variable:

| Mode | Use case | |---|---| | stdio (default) | Claude Desktop (via npx or local build) | | http | Remote/hosted server, shared team access via Claude Code |


Option A — Local build (Claude Desktop, from source)

If you prefer to run from a local clone rather than npx:

1. Install & build

npm install
npm run build

2. Add to Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "questionpro-api": {
      "command": "node",
      "args": ["/absolute/path/to/qp-surveys-mcp/dist/index.js"],
      "env": {
        "QUESTIONPRO_API_KEY": "your-api-key",
        "QUESTIONPRO_ORG_ID": "your-org-id",
        "QUESTIONPRO_ENV": "com"
      }
    }
  }
}

Restart Claude Desktop.


Option B — Hosted Server (Claude Code / CLI)

A shared instance of this server is running at https://innovation3.questionpro.com/surveys-mcp/mcp. Each user connects with their own QuestionPro credentials passed as request headers — nothing is stored on the server.

Connect via Claude Code CLI

claude mcp add questionpro-api \
  --transport http \
  https://innovation3.questionpro.com/surveys-mcp/mcp \
  --header "X-QP-API-Key: your-api-key" \
  --header "X-QP-Org-Id: your-org-id" \
  --header "X-QP-Env: com"

This saves the config to your local Claude Code settings. Verify the connection:

claude mcp list

You should see questionpro-api listed as ✓ Connected.

Remove or update

# Remove
claude mcp remove questionpro-api

# Re-add with different credentials
claude mcp add questionpro-api \
  --transport http \
  https://innovation3.questionpro.com/surveys-mcp/mcp \
  --header "X-QP-API-Key: new-api-key" \
  --header "X-QP-Org-Id: new-org-id" \
  --header "X-QP-Env: com"

EU accounts

If your QuestionPro account is on the EU domain, pass X-QP-Env: eu:

claude mcp add questionpro-api \
  --transport http \
  https://innovation3.questionpro.com/surveys-mcp/mcp \
  --header "X-QP-API-Key: your-api-key" \
  --header "X-QP-Org-Id: your-org-id" \
  --header "X-QP-Env: eu"

Health check

curl https://innovation3.questionpro.com/surveys-mcp/health
# {"status":"ok","server":"questionpro-mcp"}

Server Endpoints (HTTP mode)

| Endpoint | Method | Purpose | Clients | |---|---|---|---| | /mcp | POST/GET/DELETE | Streamable HTTP transport | Claude Code | | /sse | GET | Legacy SSE stream | Older clients | | /messages?sessionId=<id> | POST | Legacy SSE message channel | Older clients | | /health | GET | Health check | All |


Available Tools (90 total)

Organization

| Tool | Method | Description | |---|---|---| | get_organization | GET | Get organization details | | update_organization | PUT | Update organization name |

Department

| Tool | Method | Description | |---|---|---| | get_all_departments | GET | List all departments (paginated) | | get_department | GET | Get a specific department | | create_department | POST | Create a department | | update_department | PUT | Update a department | | delete_department | DELETE | Delete a department |

User

| Tool | Method | Description | |---|---|---| | get_all_users_from_organization | GET | List all users in org | | get_all_users_from_department | GET | List users in a department | | search_user | GET | Search user by email | | get_user | GET | Get a specific user | | create_user | POST | Create a new user | | update_user | PUT | Update user profile | | delete_user | DELETE | Remove a user | | regenerate_api_key | GET | Regenerate API key |

Folders

| Tool | Method | Description | |---|---|---| | get_folders | GET | List user folders | | get_folder | GET | Get a specific folder | | create_folder | POST | Create a folder | | update_folder | PUT | Rename a folder | | delete_folder | DELETE | Delete a folder |

Surveys

| Tool | Method | Description | |---|---|---| | get_user_surveys | GET | List user's surveys | | get_survey | GET | Get survey details | | get_folder_surveys | GET | List surveys in a folder | | create_survey | POST | Create a survey | | update_survey | PUT | Update survey metadata | | delete_survey | DELETE | Delete a survey | | get_survey_authentication | GET | Get survey auth settings | | update_survey_authentication | PUT | Update auth settings |

Blocks

| Tool | Method | Description | |---|---|---| | get_survey_blocks | GET | List survey blocks | | get_survey_block | GET | Get a specific block | | create_survey_block | POST | Add a block to a survey | | update_survey_block | PUT | Rename a block | | delete_survey_block | DELETE | Remove a block |

Questions

| Tool | Method | Description | |---|---|---| | get_questions | GET | List survey questions | | get_question | GET | Get a specific question | | create_question | POST | Add a question | | update_question | PUT | Edit a question | | delete_question | DELETE | Remove a question |

Supported question types:

| Type | Name | |---|---| | multiplechoice_radio | Select One | | multiplechoice_checkbox | Select Many | | multiplechoice_dropdown | Dropdown Menu | | multiplechoice_thumbs_up_down | Thumbs Up/Down | | multiplechoice_image_radio | Image Chooser: Select One | | multiplechoice_image_checkbox | Image Chooser: Select Many | | multiplechoice_maps | Maps | | matrix_radio | Basic Matrix: Multi-Point Scale | | matrix_checkbox | Basic Matrix: Multi-Select | | matrix_text | Basic Matrix: Spreadsheet | | matrix_star_rating | Star Rating | | matrix_slider | Text Slider | | matrix_constant_sum | Constant Sum | | numeric_slider | Numeric Slider | | rank_order_dropdown | Rank Order | | rank_order_drag_drop | Drag and Drop Rank | | text_single_row | Single Row Text | | text_multiple_row | Comment Box | | text_email | Email Address | | text_captcha | Captcha | | date_time | Date/Time | | calendar | Calendar | | push_to_social | Push To Social | | static_presentation_text | Presentation Text | | static_section_heading | Section Heading | | static_section_sub_heading | Section Sub-Heading |

Answers

| Tool | Method | Description | |---|---|---| | get_answers | GET | List answer options for a question | | get_answer | GET | Get a specific answer option | | delete_answer | DELETE | Remove an answer option |

Email Lists

| Tool | Method | Description | |---|---|---| | get_email_lists | GET | List survey email lists | | get_email_list | GET | Get a specific list | | create_email_list | POST | Create an email list | | update_email_list | PUT | Update an email list | | delete_email_list | DELETE | Delete an email list |

Email List Addresses

| Tool | Method | Description | |---|---|---| | get_email_addresses | GET | List addresses in a list | | get_email_address | GET | Get a specific address | | create_email_addresses | POST | Add addresses to a list | | update_email_address | PUT | Update an address entry | | delete_email_address | DELETE | Remove an address | | get_unsubscribed_emails | GET | Global unsubscribe list |

Email Templates

| Tool | Method | Description | |---|---|---| | get_email_templates | GET | List email templates | | get_email_template | GET | Get a specific template | | create_email_template | POST | Create an email template | | update_email_template | PUT | Update a template | | delete_email_template | DELETE | Delete a template |

Send Survey / Batches

| Tool | Method | Description | |---|---|---| | get_email_batches | GET | List send batches | | get_email_batch | GET | Get a specific batch | | send_batch | POST | Send to a list of emails | | send_batch_with_filter | POST | Send using an email list | | send_reminder | PUT | Send reminder to non-respondents | | get_batch_statistics | GET | Get open/click/bounce stats |

Scheduled Invitations

| Tool | Method | Description | |---|---|---| | get_scheduled_invitations | GET | List scheduled invitations | | get_scheduled_invitation | GET | Get a specific scheduled send | | create_scheduled_invitation | POST | Schedule a future send |

Export Batch

| Tool | Method | Description | |---|---|---| | get_export_batch | GET | Get export batch info | | create_export_batch | POST | Trigger email list export |

Responses

| Tool | Method | Description | |---|---|---| | get_responses | GET | List survey responses | | get_response | GET | Get a specific response | | create_response | POST | Submit a response programmatically | | get_responses_filter | POST | Filter responses by date/mode | | delete_response | DELETE | Delete a response |

Datapad

| Tool | Method | Description | |---|---|---| | get_datapads | GET | List report widgets | | get_datapad | GET | Get a specific datapad | | update_datapad | PUT | Update datapad HTML content |

Response Statistics

| Tool | Method | Description | |---|---|---| | get_survey_statistics | POST | Aggregated survey analytics | | get_question_statistics | POST | Per-question analytics |

Images

| Tool | Method | Description | |---|---|---| | get_user_images | GET | List user's images | | get_images | GET | List all account images | | get_user_image | GET | Get a specific user image | | get_image | GET | Get image by ID | | create_image | POST | Upload an image | | delete_user_image | DELETE | Delete a user's image | | delete_image | DELETE | Delete an image by ID |

Webhooks

| Tool | Method | Description | |---|---|---| | get_webhooks | GET | List survey webhooks | | get_webhook | GET | Get a specific webhook | | create_webhook | POST | Register a webhook | | update_webhook | PUT | Update a webhook | | delete_webhook | DELETE | Remove a webhook |


Development

# Local stdio mode
npm run dev

# Local HTTP mode
npm run dev:http
# Then: curl http://localhost:3000/health

# Build
npm run build