PeopleAnalyst's free people-analytics feeds: answers, tools, evidence, story and scene catalogs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Returns one authored /answers page as structured content: question, markdown answer body (short answer, problem frame, evidence, grounded sources), and citations with libraryId or url. Known slugs (33): measure-employee-performance, survey-validity-check, people-analytics-program-maturity, people-analytics-vs-hr-reporting, engagement-survey-vs-listening-diagnostic, people-analytics-tools-compare, beyond-annual-engagement-survey, replace-gut-feel-talent-decisions, ….
Answer slug from the query map (e.g. survey-validity-check).
Returns one authored /answers page as structured content: question, markdown answer body (short answer, problem frame, evidence, grounded sources), and citations with libraryId or url. Known slugs (33): measure-employee-performance, survey-validity-check, people-analytics-program-maturity, people-analytics-vs-hr-reporting, engagement-survey-vs-listening-diagnostic, people-analytics-tools-compare, beyond-annual-engagement-survey, replace-gut-feel-talent-decisions, ….
| Argument | Type | Description |
|---|---|---|
| slug* | string | Answer slug from the query map (e.g. survey-validity-check). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Answer slug from the query map (e.g. survey-validity-check)."
}
}
}Per-persona StoryBrand arguments for each product. The persona × goal argument layer (SB7-shaped). Stable ?id is globally exact; ?product + ?persona + ?variant selects one exact scoped variant, while ?variant alone remains a compatible filter. Live is the default; ?status=draft|all opts into authoring records with capability readiness kept separate.
| Argument | Type | Description |
|---|---|---|
| id | string | Select one stable BrandScript id exactly. |
| status | string | live (default) | draft | all. |
| persona | string | Filter to one persona slug. |
| product | string | Filter to one product's arguments. |
| variant | string | Stable goal variant scoped to product + persona; use all three to select exactly. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"type": "string",
"description": "Select one stable BrandScript id exactly."
},
"status": {
"enum": [
"live",
"draft",
"all"
],
"type": "string",
"description": "live (default) | draft | all."
},
"persona": {
"type": "string",
"description": "Filter to one persona slug."
},
"product": {
"type": "string",
"description": "Filter to one product's arguments."
},
"variant": {
"type": "string",
"description": "Stable goal variant scoped to product + persona; use all three to select exactly."
}
}
}The canonical form vocabulary — the structural primitive. 7 data shapes and the 33 canonical forms they resolve to. The form is why one engine reads compensation, attrition, funnels and survey data without a per-domain rewrite: the domain is in the metric tag, the structure is here. 'oftenMeans' is a labelled heuristic, never a conclusion.
| Argument | Type | Description |
|---|---|---|
| shape | string | Filter to one shape. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"shape": {
"enum": [
"series",
"groups",
"distribution",
"pairs",
"funnel",
"composition",
"dist_over_time"
],
"type": "string",
"description": "Filter to one shape."
}
}
}How many works discuss a claim — discourse volume, with the works named. For a construct pair mined from the book corpus: how many distinct works discuss the link, and which ones, with each work's stated rationale. ⚠ This is DISCOURSE, not evidence — book frequency is confounded by publication incentives, fashion and citation cascades, so it is reported as 'discussed in N works' and never as corroboration, confidence, or a score. Single-work claims are returned, labelled as such; corroboration is not a gate. No query returns corpus-level stats including a counting discrepancy we state openly.
| Argument | Type | Description |
|---|---|---|
| to | string | Target construct, e.g. employee_turnover. Use with `from`. |
| from | string | Source construct, e.g. employee_engagement. Use with `to`. |
| focus | string | Discourse volume for one focus area. |
| construct | string | Every pair the corpus links this construct to, most-discussed first. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "Target construct, e.g. employee_turnover. Use with `from`."
},
"from": {
"type": "string",
"description": "Source construct, e.g. employee_engagement. Use with `to`."
},
"focus": {
"type": "string",
"description": "Discourse volume for one focus area."
},
"construct": {
"type": "string",
"description": "Every pair the corpus links this construct to, most-discussed first."
}
}
}A pitch rendered as player-ready InsightCards. Serves a named pitch as an ordered InsightCard[] (the cross-site insight-player contract). ?pitch selects the pitch; ?awareness optionally reshapes the sequence for the buyer's awareness state.
| Argument | Type | Description |
|---|---|---|
| pitch* | string | The pitch slug to render. |
| awareness | string | Awareness state to reshape the sequence. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"pitch"
],
"properties": {
"pitch": {
"type": "string",
"description": "The pitch slug to render."
},
"awareness": {
"type": "string",
"description": "Awareness state to reshape the sequence."
}
}
}Library id export — stable ids for the works homed here. Batch export of library_id rows (id, title, author, year, property tags) for the works that home on peopleanalyst.com. Ids are content-addressed (SHA-256 of normalized title|authors|year) and stable across repos, so a consumer can join to this catalog without string matching. Scoped to works homed here — titles whose canonical home is another property are excluded, matching /library.
| Argument | Type | Description |
|---|---|---|
| tag | string | Filter by property tag, e.g. principia. |
| limit | string | Cap the number of rows returned. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"tag": {
"type": "string",
"description": "Filter by property tag, e.g. principia."
},
"limit": {
"type": "string",
"description": "Cap the number of rows returned."
}
}
}The Pitboss marketing-asset registry (typed cards + personas). Cross-site marketing-asset cards built from the portfolio's brandscripts and proofs, plus the persona set. ?product filters to one product; ?status filters by lifecycle.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by lifecycle (e.g. live, draft). |
| product | string | Filter cards to one product. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"type": "string",
"description": "Filter by lifecycle (e.g. live, draft)."
},
"product": {
"type": "string",
"description": "Filter cards to one product."
}
}
}Bicycle.LLC product descriptions through the stable PeopleAnalyst feed. Versioned, CORS-open descriptions of every product in the portfolio — general positioning plus structured personas, goals, problems, journeys, and associated BrandScripts where the product has that canon. Bicycle.LLC owns the company feed; this stable PA route and MCP tool proxy its validated v1 responses. Pass ?product to filter; live nested journeys are the default and ?status=draft|all opts into authoring records.
| Argument | Type | Description |
|---|---|---|
| status | string | Nested journey editorial status: live (default) | draft | all. |
| product | string | Filter to one product id (e.g. performix, anycomp, compensation-toolbox). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"live",
"draft",
"all"
],
"type": "string",
"description": "Nested journey editorial status: live (default) | draft | all."
},
"product": {
"type": "string",
"description": "Filter to one product id (e.g. performix, anycomp, compensation-toolbox)."
}
}
}Falsifiable scene templates — one claim plus what would make it false. The cards a story is told with. Each declares truth conditions the data can falsify, so a claim survives on evidence rather than assertion. Persona relevance is derived from focus (a stated heuristic). Drafts excluded unless ?status=all.
| Argument | Type | Description |
|---|---|---|
| id | string | Fetch a single scene template. |
| form | string | Canonical form the scene presents as, e.g. rising. |
| tier | string | 1 descriptive | 2 model-bound | 3 decision/value. |
| focus | string | Spine focus, e.g. regretted-loss, compensation, cross. |
| shape | string | Data shape, e.g. series, groups, funnel. |
| status | string | published (default) | all. |
| persona | string | Scenes relevant to one persona. |
| archetype | string | Archetype, e.g. trend, where, flow, driver. |
Demonstration scenarios (discovered → diagnosed → solved). The proof layer paired with brandscripts: concrete situations a product resolves. ?product filters; ?status opts into drafts.
| Argument | Type | Description |
|---|---|---|
| status | string | live (default) | draft | all. |
| product | string | Filter to one product. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"live",
"draft",
"all"
],
"type": "string",
"description": "live (default) | draft | all."
},
"product": {
"type": "string",
"description": "Filter to one product."
}
}
}Pre-authored data-story tracks — the possibility space. Complete data stories: the SB7 argument, the acts and beats that carry it, the branches it forks down, the decision it produces, and the data required to test it. Candidates only — nothing here asserts a story is true of any organisation; that is decided against data. ?persona / ?problem / ?metric / ?slug filter.
| Argument | Type | Description |
|---|---|---|
| slug | string | Fetch a single story track. |
| metric | string | Filter by metric tag, e.g. attrition. |
| persona | string | Candidate stories for one persona (registry prefixes and aliases are normalized). |
| problem | string | Filter by problem tag, e.g. regretted-attrition. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Fetch a single story track."
},
"metric": {
"type": "string",
"description": "Filter by metric tag, e.g. attrition."
},
"persona": {
"type": "string",
"description": "Candidate stories for one persona (registry prefixes and aliases are normalized)."
},
"problem": {
"type": "string",
"description": "Filter by problem tag, e.g. regretted-attrition."
}
}
}The PeopleAnalyst tool catalog (corpus-grounded acting tools). Machine-readable catalog of every corpus-grounded acting tool — name, category, what it does, inputs/outputs, concrete use cases, the profile URL, and how to run it (auth-gated REST + MCP). Last production probe (2026-09-23) reported grounded: true. Discovery is open (find + cite the tools); execution is API-key gated. ?category filters by family; ?slug returns one tool.
| Argument | Type | Description |
|---|---|---|
| slug | string | Return a single tool by slug (e.g. positioning). |
| category | string | Filter by family (e.g. Marketing, Startup & strategy, Software engineering). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Return a single tool by slug (e.g. positioning)."
},
"category": {
"type": "string",
"description": "Filter by family (e.g. Marketing, Startup & strategy, Software engineering)."
}
}
}Returns the full index of authored /answers pages — one entry per slug, with the question and canonical URL. Use this to discover available slugs before calling get_answer.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List PeopleAnalyst's free machine-readable feeds and their MCP/REST availability. OpenAPI is also published at https://peopleanalyst.com/openapi.json.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}What data to ask for next, and what it would rule out. The acquisition planner. Given which data-stories are still candidates, returns the single most efficient next question, the full ranked list, and the minimum set of asks that makes every live story testable — split into what can be sent today versus what needs legal review. Ranked by information-per-friction: how evenly an answer splits the live hypothesis set (computed by entropy from the discrimination matrix, never hand-asserted) divided by a cost in which GOVERNANCE outweighs effort. Absent priors all live stories weigh equally, so results reflect structure, not likelihood. GET accepts ?live=, ?have=, ?lack= as comma lists.
| Argument | Type | Description |
|---|---|---|
| body* | object | JSON request body accepted by the underlying endpoint. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"body"
],
"properties": {
"body": {
"type": "object",
"description": "JSON request body accepted by the underlying endpoint.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}Behavioral segmentation, role discovery, and exemplar matching. Deterministic segmentation over caller-supplied numeric vectors: cluster subjects, discover roles from behaviour + relationship edges, detect emergent roles, or match against exemplars. Structured non-biometric signals only — no audio, video, or affect inference. The caller supplies all data; nothing is retained. Capped at 5,000 rows per request.
| Argument | Type | Description |
|---|---|---|
| body* | object | JSON request body accepted by the underlying endpoint. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"body"
],
"properties": {
"body": {
"type": "object",
"description": "JSON request body accepted by the underlying endpoint.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"type": "string",
"description": "Fetch a single scene template."
},
"form": {
"type": "string",
"description": "Canonical form the scene presents as, e.g. rising."
},
"tier": {
"enum": [
"1",
"2",
"3"
],
"type": "string",
"description": "1 descriptive | 2 model-bound | 3 decision/value."
},
"focus": {
"type": "string",
"description": "Spine focus, e.g. regretted-loss, compensation, cross."
},
"shape": {
"type": "string",
"description": "Data shape, e.g. series, groups, funnel."
},
"status": {
"enum": [
"published",
"all"
],
"type": "string",
"description": "published (default) | all."
},
"persona": {
"type": "string",
"description": "Scenes relevant to one persona."
},
"archetype": {
"type": "string",
"description": "Archetype, e.g. trend, where, flow, driver."
}
}
}