Survey MCP Server — a survey platform: create (typed questions), deliver (collectors + email invitations), and measure (NPS, CSAT, distributions, cross-tabs)
Survey MCP Server
A survey platform for ADK-Rust Enterprise agents — create, deliver, and measure surveys. 21 MCP tools spanning authoring (typed questions with validation), distribution (collectors + email invitations with quotas), response collection (validated, partial or complete), and a measurement layer (completion/response rates, NPS, CSAT, distributions, and cross-tabs) — with a full audit trail.
A platform, not a point solution
This is modeled as a general survey/feedback backbone (à la SurveyMonkey / Qualtrics / Typeform), so any agent that needs to ask people questions and act on the answers is a client: customer-experience (NPS/CSAT), employee engagement, product research, market research, event feedback, lead qualification, and more.
The three pillars map directly to the request — create → deliver → measure:
| Stage | Tools |
|-------|-------|
| Create | create_survey · add_question (7 types) · list_questions · set_survey_status |
| Deliver | create_collector (web/email/api) · add_invitations · send_invitations · set_collector_status · submit_response |
| Measure | response_summary · question_results · nps · csat · cross_tab |
Architecture
Capabilities
- Authoring — surveys with 7 question types:
single_choice,multi_choice,text,rating(bounded scale),nps(0–10),number,boolean. Questions are validated at authoring time and only editable while the survey is a draft. - Distribution — collectors as named channels (open web link, tracked email, or API). Email collectors carry deduplicated invitations with delivery/response status; collectors support a response quota.
- Collection — responses are type-validated against their questions, required-question completeness is enforced on completion, and quota/closed-collector/closed-survey states are respected. Partial responses are supported. Anonymous surveys drop respondent identity.
- Measurement — response funnel (invited → started → completed with completion & response rates), per-question aggregation by type, NPS (promoter/detractor breakdown), CSAT (top-box), and cross-tabs to segment any metric by a choice question (e.g. CSAT by channel/plan).
Governance posture
- Two writes are gated (
requires_approval): opening a survey for collection (set_survey_status→ open) and sending email invitations (send_invitations, classedexternal_write— it delivers to real inboxes). - Opening is guarded — a survey can't be opened with zero questions.
- All measurement and listing is
read_only— analytics never mutate state. - Everything is audited — every state change appends to an audit trail (
audit_log). Sample data is fictitious.
Tools (21)
Authoring (6)
create_survey · get_survey · list_surveys · add_question · list_questions · set_survey_status (gated)
Distribution (6)
create_collector · list_collectors · set_collector_status · add_invitations · send_invitations (gated, external) · list_invitations
Collection (3)
submit_response · get_response · list_responses
Measurement (6)
response_summary · question_results · nps · csat · cross_tab · audit_log
Example
// Create
{"name": "create_survey", "arguments": {"title": "Q3 NPS", "category": "customer-experience"}}
{"name": "add_question", "arguments": {"survey_id": "SRV-1001",
"prompt": "How likely are you to recommend us?", "qtype": "nps", "required": true}}
{"name": "set_survey_status", "arguments": {"survey_id": "SRV-1001", "status": "open"}}
// Deliver
{"name": "create_collector", "arguments": {"survey_id": "SRV-1001", "ctype": "web_link"}}
{"name": "submit_response", "arguments": {"collector_id": "COL-1003",
"answers": [{"question_id": "QN-1002", "value": 9}]}}
// Measure
{"name": "nps", "arguments": {"survey_id": "SRV-1001"}}
{"name": "cross_tab", "arguments": {"survey_id": "SRV-1001",
"segment_question_id": "QN-1004", "metric_question_id": "QN-1002"}}
Install & run
cargo install mcp-survey
mcp-survey # serves MCP over stdio
Or build from source:
git clone https://github.com/zavora-ai/mcp-survey
cd mcp-survey && cargo build --release
./target/release/mcp-survey
Registry manifest
server_id = "mcp_survey"
display_name = "Survey Platform"
version = "1.0.0"
domain = "research"
risk_level = "medium"
writes_allowed = "gated"
The full mcp-server.toml declares all 21 tools with risk classes and approval gates for registry onboarding.
License
Apache-2.0