Userology MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| USEROLOGY_ID_TOKEN | Yes | Firebase JWT token (interactive mode) | |
| USEROLOGY_TENANT_ID | Yes | Your organization's tenant ID | |
| USEROLOGY_API_BASE_URL | No | Researcher-service API URL | https://dev.userology.info/researcher/api |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_studyA | Create a new UX research study using AI-powered generation. ⏱️ IMPORTANT: This takes 30-90 seconds. Tell the user it will take about a minute and ask them to wait while the AI generates the study. This is the PRIMARY way to create studies. The AI will automatically:
After creation, ALWAYS present the study summary to the user showing what was generated (name, objectives, persona, sections). For best results, the description should include:
Args: description: Natural language description of the research study to create. Include details about what you want to research, the product, target users, and any specific methodologies needed. |
| get_studyA | Fetch the full configuration of a study including all sections, status, objectives, persona, product overview, and metadata. Use this when you need raw study data for programmatic processing or to check specific field values. For a human-readable overview to present to the user, prefer get_study_summary. Returns: Full study object with fields: id, name, status, objective, user_details, product_overview, sections (list of section objects). Args: study_id: The unique identifier of the study. |
| get_study_summaryA | Get a formatted, human-readable summary of a study. Use this to present study details to the user after creation or modification. Do NOT use this for programmatic field access — use get_study instead. Returns: Formatted text showing study name, status, objectives, target persona, and a list of all sections with their types and names. Args: study_id: The unique identifier of the study. |
| list_studiesA | List all studies for the current tenant/organization. Start here when no study_id is provided. Returns IDs, names, and statuses for all studies. After listing, ask the user which study they'd like to work with, then call get_study_summary for a human-readable overview or get_study for the full raw config. |
| update_study_nameA | Rename a study. Args: study_id: The unique identifier of the study. name: The new name for the study. |
| update_study_detailsB | Update study details such as objective, user details, and product overview. Args: study_id: The unique identifier of the study. objective: The research objective or goal. user_details: Description of the target user/persona. product_overview: Overview of the product being researched. |
| update_study_statusB | Change the status of a study. Args: study_id: The unique identifier of the study. status: New status — one of 'Draft', 'Active', 'Paused', 'Completed'. |
| copy_studyA | Duplicate an existing study and all its sections. Creates a new study with the same objectives, persona, sections, and interview guides. The copy starts in Draft status with no participant sessions. Useful for iterating on a study template without modifying the original. Args: study_id: The unique identifier of the study to copy. |
| delete_studyA | DESTRUCTIVE: Permanently delete a study and ALL its associated data. This cannot be undone. It deletes all participant sessions, recordings, transcripts, analytics, and interview guides for this study. Do NOT call this tool in the same turn as the deletion request. First respond with: "Are you sure you want to permanently delete '[study name]' and all its data? This cannot be undone." Only call this tool after the user confirms in a follow-up message. Args: study_id: The unique identifier of the study to delete. |
| get_analytics_statusA | Check what analytics have been generated for a study. Returns the status of each analytics component (qual, quant, QnA, summary, insights, report). Use the result to decide next steps:
Always call this before generate_analytics to avoid re-generating unnecessarily. Args: study_id: The unique identifier of the study. |
| generate_analyticsA | Trigger AI-powered analytics generation for a study. ⚠️ PREREQUISITE: The study must have at least one completed participant session. Call get_participants first — if no sessions are completed, analytics cannot be generated. Also call get_analytics_status first to avoid redundant generation. ⏱️ This takes 2-5 minutes depending on the number of sessions. Inform the user this will take several minutes. This generates all analytics components: qualitative insights, quantitative data, Q&A analysis, summary, and overall insights. This call returns immediately — generation runs in the background. After calling this, poll get_analytics_status to monitor progress:
Args: study_id: The unique identifier of the study. |
| get_qualitative_insightsA | Get qualitative analysis for a study — themes, patterns, and insights. Use this when the user wants to understand the "why" behind participant behavior: recurring themes, usability friction points, and positive findings across sessions. ⚠️ PREREQUISITE: Analytics must be generated first. Call get_analytics_status — if components are missing, call generate_analytics and wait for completion. Includes overview, positive findings, and challenges discovered across participant sessions. Args: study_id: The unique identifier of the study. |
| get_quantitative_dataA | Get quantitative metrics for a study — task completion rates, times, misclicks, and other measurable data. Use this when the user wants numbers: "how many people completed the task", "what was the average time", or "where did people click most". Most relevant for prototype and conceptTesting sections that capture interaction data. ⚠️ PREREQUISITE: Analytics must be generated first. Call get_analytics_status — if components are missing, call generate_analytics and wait for completion. Args: study_id: The unique identifier of the study. |
| get_qna_analysisA | Get per-participant Q&A analysis — each participant's responses organized by subtopic across all study sections. Use this when the user wants to compare how different participants answered the same questions, or to see individual-level responses side by side. ⚠️ PREREQUISITE: Analytics must be generated first. Call get_analytics_status — if components are missing, call generate_analytics and wait for completion. Args: study_id: The unique identifier of the study. |
| get_analytics_summaryA | Get a short, concise AI-generated text summary of the study's overall findings. Use this first when a user asks for a quick overview of study results. If they want to go deeper, follow up with the appropriate tool:
⚠️ PREREQUISITE: Analytics must be generated first. Call get_analytics_status — if components are missing, call generate_analytics and wait for completion. Returns: Short summary text (typically 200–400 words) of key findings. Args: study_id: The unique identifier of the study. |
| get_study_insightsA | Get overall and per-section insights for a study, including key findings and actionable recommendations. Use this when the user asks "what should we fix", "what are the main issues", or wants prioritized action items broken down by study section. For a shorter executive summary, use get_analytics_summary instead. For the full combined report, call generate_study_report then get_study_report. ⚠️ PREREQUISITE: Analytics must be generated first. Call get_analytics_status — if components are missing, call generate_analytics and wait for completion. Args: study_id: The unique identifier of the study. |
| get_study_reportA | Retrieve the full comprehensive study report combining all analytics. This report must be generated first using generate_study_report. Call get_analytics_status to verify the report component exists before fetching. If this returns empty or a "not found" response, the report has not been generated yet. Recovery path:
Returns: Complete report document in markdown/structured format covering qualitative insights, quantitative data, Q&A analysis, and recommendations. Args: study_id: The unique identifier of the study. |
| generate_study_reportA | Trigger generation of the comprehensive study report. ⚠️ PREREQUISITE: Analytics must be generated first. Call get_analytics_status — if analytics are missing, call generate_analytics and wait for completion before calling this. ⏱️ This takes 3-5 minutes. Inform the user this will take several minutes. This call returns immediately — report generation runs in the background. After calling this, poll get_analytics_status to check the report component:
Args: study_id: The unique identifier of the study. |
| get_session_reportA | Get the AI analysis report for a single participant's session. Use this when investigating one specific participant's performance, responses, or behavior in detail. ⚠️ PREREQUISITE: Analytics must be generated first (use generate_analytics + poll get_analytics_status until complete). Call get_participants first to get the correct participant_id and session_id. Returns: Session report with transcript highlights, task performance, key quotes, and AI-generated observations for this participant. Args: study_id: The unique identifier of the study. participant_id: The unique identifier of the participant. session_id: The unique identifier of the session. |
| get_ui_annotationsA | Get UI annotation data (heatmaps, click data) for a study. Most relevant for studies with prototype or conceptTesting sections — these capture click interactions that appear as heatmaps and misclick data. For voice interview sections, this data may be sparse or empty. ⚠️ PREREQUISITE: Analytics must be generated first. Call get_analytics_status — if components are missing, call generate_analytics and wait for completion. Args: study_id: The unique identifier of the study. |
| get_participantsA | List all participants in a study, including their session status and metadata. Call this first whenever you need participant_id or session_id values. These IDs are required by get_session, get_session_report, get_session_recordings, and get_participant_sessions_report. Returns each participant's ID, name (if available), session IDs, and completion status (e.g., completed, in-progress, invited). Args: study_id: The unique identifier of the study. |
| get_sessionA | Get raw transcript and interaction events for a single participant session. Use this when the user wants to read what a participant actually said verbatim, or review the full unprocessed interaction log. For an AI-analyzed summary with themes, key quotes, and task performance assessment, use get_session_report instead. Call get_participants first to find the correct participant_id and session_id. Args: study_id: The unique identifier of the study. participant_id: The unique identifier of the participant. session_id: The unique identifier of the session. |
| get_session_recordingsA | Get recording URLs (video/audio) for a specific session. Returns video and/or audio stream/download links for the session recording. Call get_participants first to find the correct participant_id and session_id. Args: study_id: The unique identifier of the study. participant_id: The unique identifier of the participant. session_id: The unique identifier of the session. |
| get_sessions_reportA | Get an aggregated analysis report across ALL sessions in a study. Use this for study-level synthesis: overall patterns, common findings, aggregate completion rates. For a single participant's session, use get_session_report(study_id, participant_id, session_id). For all sessions by one participant, use get_participant_sessions_report(study_id, participant_id). Returns: Aggregated report object with overall findings, patterns, and per-section summaries across all participants. Args: study_id: The unique identifier of the study. |
| create_sectionA | Add a new section to a study. REQUIRED NEXT STEPS after calling this — do not skip:
SECTION TYPES:
Returns: New section object with id, type, and index. Args: study_id: The unique identifier of the study. section_type: One of 'prototype', 'conceptTesting', 'voiceInterview', 'liveProductResearch'. index: Zero-based position for the new section (default: 0). |
| get_sectionsA | List all sections (tasks) in a study with their types, names, and IDs. Use this to find section_id values needed for get_section, update_section, delete_section, generate_guide, and update_interview_guide. Args: study_id: The unique identifier of the study. |
| get_sectionA | Get full details of a specific section including its configuration and settings. Call get_sections first if you need to find the section_id. Args: study_id: The unique identifier of the study. section_id: The unique identifier of the section/task. |
| update_sectionA | Update a section's name, description, prototype link, or Figma link. Args: study_id: The unique identifier of the study. section_id: The unique identifier of the section/task. name: New name for the section. description: New description for the section. prototype_link: URL of the prototype associated with this section. figma_link: Figma file URL for the section. |
| delete_sectionA | DESTRUCTIVE: Permanently remove a section from a study. This deletes the section, its interview guide, and all associated configuration. This cannot be undone. Do NOT call this tool in the same turn as the deletion request. First respond with: "Are you sure you want to delete section '[name]'? This cannot be undone." Only call this tool after the user confirms in a follow-up message. Args: study_id: The unique identifier of the study. section_id: The unique identifier of the section/task to delete. |
| get_interview_guidesA | Get all interview guides for every section in a study. Returns the full guide content (markdown) for each section that has one. Use this after study creation to see the AI-generated interview guides. Args: study_id: The unique identifier of the study. |
| update_interview_guideA | Replace the interview guide content for a specific section. Users should FIRST generate a guide using generate_guide, then edit it using this tool if changes are needed. Do NOT write guides from scratch. Args: study_id: The unique identifier of the study. section_id: The unique identifier of the section/task. guide_content: The full guide content in markdown format. |
| generate_guideA | Generate an AI-powered interview guide for a section using the study's objectives, target persona, and section configuration. ⚠️ PREREQUISITES: The study must have objectives and persona set, and the section must have a name and description. Call update_study_details and update_section first if these are not yet configured. ⏱️ This takes 30–90 seconds. Warn the user before calling. After generation, present the guide to the user for review. If they request changes, use update_interview_guide — do NOT regenerate from scratch. Returns: The full guide content in markdown format. Args: study_id: The unique identifier of the study. section_id: The unique identifier of the section. |
| create_synthesis_chatA | Start a new Synthesis Studio AI analysis chat for a study. Synthesis Studio lets you have an AI-powered conversation to explore research findings, ask follow-up questions, and generate new insights. Best used after the study has collected participant sessions — the AI analyzes the actual session data to answer questions. Analytics do not need to be pre-generated; Synthesis Studio works directly from session data. After creating, use send_synthesis_message to ask questions. Args: study_id: The unique identifier of the study to analyze. title: Optional title for the chat session. |
| list_synthesis_chatsA | List all Synthesis Studio AI chats across all studies. Returns chat IDs, titles, and associated study IDs. Use this to find existing chats to resume with get_synthesis_chat, or to show the user their analysis history before creating a new one. |
| get_synthesis_chatA | Get a specific Synthesis Studio chat with its full message history. Use this to review a previous conversation, show the user what questions have already been asked, or pick up where an analysis session left off. Args: chat_id: The unique identifier of the chat. |
| send_synthesis_messageA | Send a message to a Synthesis Studio AI chat and receive an analysis response. Use this to ask questions about research data, explore themes, request comparisons across participants, or generate new insights from the data. ⏱️ Responses take 30–90 seconds depending on query complexity. Warn the user. Returns: AI analyst's response text with findings, patterns, or answers based on the study's session data. Args: chat_id: The unique identifier of the chat (from create_synthesis_chat). message: The question or request to send to the AI analyst. |
| delete_synthesis_chatA | DESTRUCTIVE: Delete a Synthesis Studio chat and its entire message history. Do NOT call this tool in the same turn as the deletion request. First respond with: "Are you sure you want to delete this analysis chat? The full conversation history will be permanently lost." Only call this tool after the user confirms in a follow-up message. Args: chat_id: The unique identifier of the chat to delete. |
| share_synthesis_chatA | Enable public sharing for a Synthesis Studio chat. Returns a shareable link that anyone can access without authentication. Args: chat_id: The unique identifier of the chat to share. |
| get_participant_sessions_reportA | Get an aggregated report for all sessions completed by a specific participant. Use when the user wants to understand one person's overall experience or performance across multiple sessions in the same study. For reports across ALL participants, use get_sessions_report. For a single specific session, use get_session_report. ⚠️ PREREQUISITE: Analytics should be generated first for best results (use generate_analytics + poll get_analytics_status until complete). Call get_participants first to find the correct participant_id. Args: study_id: The unique identifier of the study. participant_id: The unique identifier of the participant. |
| get_study_tagsB | Get all tags assigned to a study, useful for organizing and filtering studies. Args: study_id: The unique identifier of the study. |
| update_study_tagsA | Update the tags for a study. Provide tags as a comma-separated string. Args: study_id: The unique identifier of the study. tags: Comma-separated list of tags (e.g., "usability,checkout,mobile"). |
| get_figma_contextA | Analyze a Figma prototype and extract screen context for UX research. This fetches the Figma file, extracts screen information, and returns structured data about the prototype's pages and frames. Args: user_id: The Userology user ID of the person requesting Figma access. This is the account owner's UID — if unknown, ask the user to provide it or check their Userology profile settings. Note: this is NOT the study_id. figma_link: The Figma file URL to analyze. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| view_studies | View all my studies — list every study with its name, status, and ID. |
| analyze_study | Analyze a study — pull insights, quantitative data, and key recommendations. |
| generate_report | Generate a full study report — compile all analytics into one comprehensive document. |
| create_study | Create a new study — guided setup with AI-generated interview guides. |
| review_sessions | Review session data — explore participant transcripts, recordings, and per-session reports. |
| explore_findings | Explore findings with AI — start a Synthesis Studio chat to ask questions about research data. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| All Studies | List of all UX research studies in the current tenant |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Userology-Inc/userology-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server