Documentation · 02

Connect to Claude

userken is an MCP server as well as a dashboard. Connect it once and Claude can browse your audiences, run surveys and hold focus groups in the middle of a conversation, against the same data and the same credit balance as the web app.

The connector URL is https://userken.com/mcp.

claude.ai and Claude Desktop

claude.ai and Claude Desktop both take a custom connector. The steps are the same in either one.

  1. Open Settings, then Connectors, then Add custom connector.
  2. Paste the URL https://userken.com/mcp and add it.
  3. Claude opens userken to ask for access. If you are not signed in you get the usual magic link login first, and land back on the same page afterwards.
  4. The consent screen names the application asking, your workspace and your role in it, and says plainly that the connector will run tools as you and spend your workspace's credits. Approve it.
  5. The userken tools appear in the tool list. Ask for something.

You stay connected until you disconnect. To end it, open /app/settings#connected and remove the entry under Connected apps. The connector stops working immediately.

Nothing to copy or paste

You never handle a token for this route. Claude registers itself with userken, and the sign-in happens in your browser on userken's own pages, so no credential passes through the chat.

Claude Code and other clients

Claude Code and other MCP clients that do not do the connector sign-in use a personal API key instead. Create one at /app/settings under API keys. The key is shown once, at creation, and only its hash is stored, so copy it then. Keys look like uk_ followed by 32 characters.

In Claude Code:

claude mcp add --transport http userken \
  https://userken.com/mcp \
  --header "Authorization: Bearer uk_your_key_here"

In any other client that takes a remote MCP server with headers:

{
  "mcpServers": {
    "userken": {
      "url": "https://userken.com/mcp",
      "headers": {
        "Authorization": "Bearer uk_your_key_here"
      }
    }
  }
}

A key carries your identity, so audiences, surveys and focus groups created through it belong to you and your workspace, exactly as if you had made them in the dashboard. Revoke a key from the same settings page; revocation takes effect at once. Personal API keys are part of the Pro plan and above.

Check who you are

Call the whoami tool. It returns the email address the request is authenticated as, which is the quickest way to tell a working key from a stale one.

The tool list

What you can do from Claude. Everything the dashboard does. Build an audience from filters or from a plain English description, preview it, build its personas, refresh, rename or delete it, and compare it with another. Run a survey of your own questions or one of the templates, watch the run, drill into an answer with a follow-up, re-theme the open answers and export the results. Hold a focus group: draft a discussion guide, open the room, ask it questions, put one to a single participant, summarise it, close it and export the transcript. Read your data sources, uploads and the published surveys behind the accuracy work. Check what a job will cost, what your workspace has left and where the credits went. Rows you create in Claude are the same rows the dashboard shows, and the same credits pay for both.

This list is generated from the running server when the page is rendered, so it is what the server actually exposes right now, not a copy that drifted. Tools that write take your identity from the connector or the API key.

Audiences and personas

ToolWhat it does
list_audiencesList audiences: built-in ones (every app and category in the catalogue, as pub:<slug> / cat:<key>) plus saved custom audiences (aud:<id>).
preview_audienceFast, LLM-free summary of the reviews a filter selects: review_count, rating_histogram, app_breakdown, platform_breakdown, date_range, top_themes and 10 sample reviews, plus...
suggest_audienceTurn a plain-English description ("Android users of financial news apps who complain about login") into audience filters using the live catalogue, preview the result, and relax...
create_audienceSave a custom audience (status draft).
build_audienceStart building personas for a saved audience in the background: freeze the member set, cluster review embeddings (k chosen from the audience size, 3 to 8, unless given), name...
get_audienceResolve an audience ref to its personas with weights (sum to 1): pub:<slug> existing per-publication personas (weights from rating bands) cat:<key> union of that category's...
compare_audiencesAudience discovery: how much do two audiences overlap and where not? Returns overlap_score, centroid_similarity, a persona-to-persona similarity matrix, shared_segments...
find_lookalike_audiencesRank every other audience you can see (built-in, plus your workspace's custom ones) by similarity to `ref`, using review-embedding centroids.
get_all_personasGet all persona definitions with their profiles, needs, pain points, and voice descriptions.
get_personaGet full details for a specific persona including representative quotes.
get_persona_quotesGet real review quotes that represent how this persona talks.
get_reviews_for_personaGet reviews that belong to this persona cluster.
get_publication_personasGet all persona definitions for a specific publication.
get_all_publication_personasGet persona statistics for all publications.
get_reviews_for_publication_personaGet reviews that match a specific publication persona.
update_audienceEdit a saved custom audience.
refresh_audienceTake a fresh snapshot of the reviews a custom audience selects and rebuild its personas.
delete_audienceDelete a saved custom audience and its personas.
audience_build_statusPoll a custom audience's persona build.
available_themesThe theme keys an audience filter can use, the same chips the filter builder offers: the generic set plus the themes of the categories you name.

Surveys

ToolWhat it does
ask_audienceAsk a synthetic audience one survey question and get a response DISTRIBUTION (not a single averaged answer), a per-persona breakdown, bootstrap 90% intervals, and first-person...
run_concept_testConcept test template: appeal (5-point), usage intent, open concerns (themed), and willingness-to-pay bands, run against a synthetic audience.
run_ab_testA/B/n test template: forced choice between variants, reason (themed), and a per-variant appeal rating.
run_name_testName test template: forced choice, fit rating per name, open reactions.
run_message_testMessage test template: clarity / relevance / motivation ratings for each message plus a forced choice.
run_pricing_testPricing test template: Van Westendorp's four price questions (parsed to numbers, crossover points OPP / IPP / PMC / PME in results.analysis) plus a Gabor-Granger...
get_survey_runFetch a survey run (status, progress, per-question results, cost) by id.
suggest_survey_questionsSuggest survey questions for a research goal, grounded in the audience: the prompt carries its personas, top review themes and 10 to 15 real reviews closest to the goal, so...
suggest_survey_followupsPropose 2 to 3 drill-down follow-up questions for one answered question in a survey run, based on its distribution, per-segment split and verbatims.
run_surveyRun a survey of your own questions against an audience, the way the survey wizard does.
list_surveysSurveys saved by you or your workspace, newest first.
get_surveyOne saved survey with its full question list and its runs.
list_survey_runsEvery run of one survey, newest first, with status, progress and cost.
run_follow_upDrill into one answered question: append a follow-up to the survey and ask only that question, with each persona seeing what they said before.
retheme_open_questionTheme an open question's answers again from the verbatims already stored on the run.
export_survey_runExport a finished run: the survey, the run, and every distribution, segment breakdown and verbatim.
review_conceptRate a concept as a survey stimulus before spending credits testing it: is it specific, is it relevant to these people, how would you rewrite it.

Focus groups

ToolWhat it does
start_focus_groupStart a moderated synthetic focus group.
focus_group_sayPost a moderator message to a running focus group.
focus_group_summarySummarise a focus group session: key findings, agreements, disagreements, quotes, recommendations.
get_focus_group_transcriptFull transcript (session, participants, every message) for a focus group in your workspace.
get_focus_group_promptCopy-paste focus group system prompt for an audience (personas with weights, grounding instructions using these MCP tools).
list_focus_groupsFocus group sessions run by you or your workspace, newest first.
get_focus_groupOne focus group session: participants, status, guide, summary and the full transcript so far.
focus_group_direct_questionAsk one participant directly.
close_focus_groupClose a focus group room.
export_focus_groupThe markdown transcript of a session: the room, every turn with its grounding count, and the summary when one exists.
draft_focus_group_guideDraft a discussion guide for a focus group: a title and three to six prompts (opening, probe, closing), grounded in real reviews about the topic.

Catalogue

ToolWhat it does
list_categoriesList the app categories indexed by userken.
list_apps_in_categoryList the apps indexed within one category (e.g. all news apps, all browser apps).
get_saved_appsList all apps with saved reviews in the database.
search_store_appsSearch the App Store and Google Play for an app by name, or resolve a pasted store URL.
add_appAdd an app to the catalogue and queue its onboarding (scrape both stores, embed, tag themes, build personas).
get_app_onboarding_statusOnboarding progress for an app added with add_app(): the app row, the latest job (status, step-by-step progress, error) and live counts of reviews, embeddings, theme tags and...
create_categoryCreate an app category (e.g. key "fitness", display name "Fitness"). No-op if it already exists. Categories get a landing page at /<key>, generic themes immediately, and a...
generate_theme_taxonomyAsk the LLM (smart tier, one call) for 8-14 category-specific themes from a stratified sample of the category's reviews, validate every theme's regexes against the sample, and...
list_category_themesThe theme taxonomy in force for a category: generic themes (shared by every category) plus its category-specific ones, each with key, label, regex patterns and, where...
list_competitorsList available competitor publications for review scraping.

Sources and data

ToolWhat it does
list_sourcesList the data sources feeding the review corpus.
run_sourceFetch new rows from one public data source and add them to the corpus.
get_source_runsRecent data-source run history, newest first.
scrape_competitor_reviewsScrape reviews for a competitor app from Google Play and Apple App Store.
save_competitor_reviewsScrape and SAVE competitor reviews to the database for future analysis.
trigger_syncManually trigger a sync with Appfigures to fetch new reviews.
get_sync_statusGet the status of the last sync operation.
list_published_surveysList the published surveys userken holds: publisher, report, year, country, sample size, population, question and result counts, and whether the survey is used in the accuracy...
get_published_surveyOne published survey with its questions, options and toplines.
search_survey_questionsFind questions across every published survey by wording, so a synthetic panel can be asked the same question a real survey asked.
list_uploadsCSV uploads owned by you or shared with your workspace, newest first.

Reviews and analysis

ToolWhat it does
search_reviewsSearch reviews with flexible filtering.
search_app_reviewsSearch reviews for a specific app (reuters, bloomberg, nytimes, etc.)
semantic_search_reviewsSemantic / vector search over reviews using pgvector + Ollama embeddings.
find_similar_reviewsFind reviews similar to the given text using keyword matching.
query_contextBuild a rich, ground-truth context blob for any free-text topic before answering or running a focus group.
validate_feature_ideaEstimate user reception of a proposed feature against the existing review corpus.
get_industry_topicsCross-publication topic clusters discovered across every news app indexed by userken, the themes that span the category.
get_industry_topicSingle industry topic by slug, with sample quotes and publication distribution.
get_theme_summaryGet statistics about a theme - how many reviews mention it, sentiment breakdown, rating distribution.
get_statsGet review statistics - total count, rating distribution, date range, top themes.
compare_publicationsCompare multiple news publications' app reviews.

Credits and accuracy

ToolWhat it does
get_balanceYour workspace's credit balance for this billing period.
estimate_costWhat a job would cost in credits, before you run it.
list_credit_ledgerRecent credit movements for your workspace, newest first: what was charged or refunded, why, and against which run, session or audience.
get_accuracy_reportuserken's published accuracy: how close the synthetic panel's answers are to the real held-out data, against naive and ungrounded baselines.

Account

ToolWhat it does
whoamiWho the MCP client is authenticated as.
get_workspaceThe workspace this connection belongs to: its name, plan and credit allowance, and, for an admin, who is in it.
list_api_keysYour own MCP API keys.

Things to ask

Things worth asking once you are connected:

  • Which audiences do I have, and how big is each one?
  • Ask the Reuters audience whether they would pay two dollars more for an ad free tier, and show me the split by persona.
  • Run a concept test for this feature description against the news category, then suggest three follow-up questions.
  • Start a focus group with four personas from my audience and open with a question about onboarding.
  • Build me an audience of Android users of financial news apps who complain about login, over the last twelve months.
Credits are spent from the chat

Tools that call a model cost the same credits as the dashboard does. If the workspace runs out, the tool returns an insufficient credits error rather than a partial result.

Endpoint details

Most people never need this section. It is here for anyone writing a client, running userken themselves, or debugging a connection.

The MCP endpoint requires a bearer token. A call without one is answered with a 401 and a challenge pointing at the protected resource metadata, which is how a client discovers where to sign in.

EndpointWhat it is for
GET /.well-known/oauth-authorization-serverAuthorization server metadata.
GET /.well-known/oauth-protected-resource/mcpProtected resource metadata for the MCP endpoint.
POST /registerDynamic client registration. Clients register themselves.
GET /authorizeAuthorization request. PKCE with S256 is required. One scope, mcp.
GET/POST /oauth/consentThe sign-in and approval screen a person sees.
POST /tokenToken exchange: authorization_code and refresh_token grants.
POST /revokeRevoke a token.

Token lifetimes

TokenPrefixLife
Authorization codeukc_10 minutes, single use
Access tokenuko_1 hour
Refresh tokenukr_30 days, rotated on every use
Personal API keyuk_Until you revoke it

Only hashes of these are stored. If you run your own instance, see Self-hosting and operations for the two environment variables this depends on.

Was this page useful?Nothing is sent anywhere. This button only changes what you see.Thanks. Nothing was sent anywhere: this page has no analytics. If something here is wrong or missing, write to [email protected].