Usage Insights Skill
This skill helps an organization admin understand how their org uses Beau, by
reporting over the platform's append-only analytics event log. It produces
periodic, evidence-based summaries: student engagement, content authoring
(including human-vs-AI), and commerce (enrollments + revenue), plus answers to
ad-hoc questions.
It is read-only and org-scoped: every tool only ever sees the caller's own
organization. All tools require the read:analytics permission (admin-only) —
teachers and students cannot use them.
Instructions for Claude
0. Preflight check
Confirm access by calling get_engagement_report with no arguments (defaults to
the last 30 days).
- If it returns a tool error mentioning authentication, tell the user: "The Beau
MCP server is not connected — please check your MCP connection and authenticate."
- If it returns a 403 / permission error, tell the user: "Your account
doesn't have the
read:analytics permission. An org admin must grant it (it's
admin-only)." Then stop.
1. Determine scope
Ask the user (unless they already said):
- Report type — Engagement, Content, Commerce, an Overview (all three), or a
specific ad-hoc question.
- Time window — e.g. last 7/30/90 days, a specific month, or a custom range.
Convert to ISO dates (
from/to). Default is the trailing 30 days.
2. Pull the data
Use the curated report tools for standard reports (one call each, pass
from/to):
| Tool |
Returns |
get_engagement_report |
lessons started/completed, completion rate, active students, avg score, daily completions (test runs excluded) |
get_content_report |
resources created (human vs AI), AI-authored, quizzes, visuals vs media, courses |
get_commerce_report |
enrollments, payments, revenue (cents), platform fees, refunds |
For ad-hoc questions, use aggregate_events:
groupBy ∈ event | actorType | subjectType | day | week | month
metric ∈ count | sum | avg (sum/avg need a field ∈ amountCents | platformFeeCents | score | durationSec)
- optional
events (names to filter), from, to
- Examples: lessons completed per week →
{events:['lesson.completed'], groupBy:'week', metric:'count'}; revenue per month → {events:['payment.completed'], groupBy:'month', metric:'sum', field:'amountCents'}.
For drill-down (inspect individual rows after an aggregate looks surprising),
use query_events (filter by events, from/to, actorId, subjectType,
subjectId; paginate with limit/offset).
3. Interpret correctly
- Money is in cents — divide by 100 and show the currency.
- Completion rate = completed ÷ started; call out low rates.
- Test runs are already excluded from engagement (teacher previews don't
count as student activity).
- Human vs AI authoring —
resourcesByAgent / aiAuthored are content made
via the AI assistant or MCP; resourcesByHuman are dashboard edits.
- Empty windows are normal for new orgs — say so rather than implying a problem.
4. Produce the report
Write a concise markdown report:
- A short headline summary (2–3 sentences).
- One section per requested area with the key numbers and a trend note (use the
daily/weekly series).
- 2–4 concrete observations or recommendations grounded in the numbers (e.g. "37%
of started lessons go uncompleted — consider shorter lessons or a nudge").
- Note the window and that figures are for this organization only.
Do not invent numbers or fill gaps — if a tool returned zero or null, report
it as such.
Event reference (for aggregate_events / query_events)
The log records these event families (org-scoped). Names are stable:
- Learning:
lesson.started, lesson.completed, feedback.submitted, contact_teacher.triggered
- Authoring (CRUD):
resource.created/updated/deleted, bot.*, course.*, image.*, quiz.created, course.resource_added, resource.snapshot_saved, resource.exported, ai_assistant.resource_authored
- Enrollment/commerce:
enrollment.created/paused/resumed/completed, payment.initiated/completed/refunded
- Identity/org:
user.invited/invitation_accepted/login, consent.submitted/verified, org.settings_changed/stripe_onboarded
- Sharing:
share_link.created/consumed/revoked
- Comms:
notification.sent (every outbound email)
Useful properties for sum/avg: amountCents, platformFeeCents (payments),
score, durationSec (lesson.completed).
1---2name: usage-insights3description: Generate business-intelligence reports on how students and teachers use the Beau platform — engagement, content authoring, and commerce — from the org-scoped analytics event log via MCP. For org admins. Produces periodic, evidence-based usage summaries.4---56# Usage Insights Skill78This skill helps an **organization admin** understand how their org uses Beau, by9reporting over the platform's append-only analytics event log. It produces10periodic, evidence-based summaries: student **engagement**, content **authoring**11(including human-vs-AI), and **commerce** (enrollments + revenue), plus answers to12ad-hoc questions.1314It is **read-only** and **org-scoped**: every tool only ever sees the caller's own15organization. All tools require the **`read:analytics`** permission (admin-only) —16teachers and students cannot use them.1718## Instructions for Claude1920### 0. Preflight check2122Confirm access by calling `get_engagement_report` with no arguments (defaults to23the last 30 days).2425- If it returns a tool error mentioning authentication, tell the user: "The Beau26 MCP server is not connected — please check your MCP connection and authenticate."27- If it returns a **403 / permission** error, tell the user: "Your account28 doesn't have the `read:analytics` permission. An org admin must grant it (it's29 admin-only)." Then stop.3031### 1. Determine scope3233Ask the user (unless they already said):34- **Report type** — Engagement, Content, Commerce, an Overview (all three), or a35 specific ad-hoc question.36- **Time window** — e.g. last 7/30/90 days, a specific month, or a custom range.37 Convert to ISO dates (`from`/`to`). Default is the trailing 30 days.3839### 2. Pull the data4041Use the **curated report tools** for standard reports (one call each, pass42`from`/`to`):4344| Tool | Returns |45|------|---------|46| `get_engagement_report` | lessons started/completed, completion rate, active students, avg score, daily completions (test runs excluded) |47| `get_content_report` | resources created (human vs AI), AI-authored, quizzes, visuals vs media, courses |48| `get_commerce_report` | enrollments, payments, revenue (cents), platform fees, refunds |4950For **ad-hoc questions**, use `aggregate_events`:51- `groupBy` ∈ `event | actorType | subjectType | day | week | month`52- `metric` ∈ `count | sum | avg` (sum/avg need a `field` ∈ `amountCents | platformFeeCents | score | durationSec`)53- optional `events` (names to filter), `from`, `to`54- Examples: lessons completed per week → `{events:['lesson.completed'], groupBy:'week', metric:'count'}`; revenue per month → `{events:['payment.completed'], groupBy:'month', metric:'sum', field:'amountCents'}`.5556For **drill-down** (inspect individual rows after an aggregate looks surprising),57use `query_events` (filter by `events`, `from`/`to`, `actorId`, `subjectType`,58`subjectId`; paginate with `limit`/`offset`).5960### 3. Interpret correctly6162- **Money is in cents** — divide by 100 and show the currency.63- **Completion rate** = completed ÷ started; call out low rates.64- **Test runs are already excluded** from engagement (teacher previews don't65 count as student activity).66- **Human vs AI authoring** — `resourcesByAgent` / `aiAuthored` are content made67 via the AI assistant or MCP; `resourcesByHuman` are dashboard edits.68- **Empty windows** are normal for new orgs — say so rather than implying a problem.6970### 4. Produce the report7172Write a concise markdown report:73- A short headline summary (2–3 sentences).74- One section per requested area with the key numbers and a trend note (use the75 daily/weekly series).76- 2–4 concrete observations or recommendations grounded in the numbers (e.g. "37%77 of started lessons go uncompleted — consider shorter lessons or a nudge").78- Note the window and that figures are for this organization only.7980Do **not** invent numbers or fill gaps — if a tool returned zero or null, report81it as such.8283## Event reference (for `aggregate_events` / `query_events`)8485The log records these event families (org-scoped). Names are stable:8687- **Learning**: `lesson.started`, `lesson.completed`, `feedback.submitted`, `contact_teacher.triggered`88- **Authoring** (CRUD): `resource.created/updated/deleted`, `bot.*`, `course.*`, `image.*`, `quiz.created`, `course.resource_added`, `resource.snapshot_saved`, `resource.exported`, `ai_assistant.resource_authored`89- **Enrollment/commerce**: `enrollment.created/paused/resumed/completed`, `payment.initiated/completed/refunded`90- **Identity/org**: `user.invited/invitation_accepted/login`, `consent.submitted/verified`, `org.settings_changed/stripe_onboarded`91- **Sharing**: `share_link.created/consumed/revoked`92- **Comms**: `notification.sent` (every outbound email)9394Useful properties for sum/avg: `amountCents`, `platformFeeCents` (payments),95`score`, `durationSec` (lesson.completed).