Connector action

get_gallery_stats

ReadIdempotent

Get gallery stats

Visitors, plays and downloads for one gallery, whether it was sent, and the day it was first opened. Counts and dates only, from the same numbers the event page shows.

What the client is told

The description an MCP client receives from tools/list, word for word:

Answers "how many people listened?" for one event: visitors, plays and downloads so far, whether the gallery was sent, and the date it was first opened. Counts and dates only, never who.

Annotations

json
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": false
}

Parameters

ParameterTypeRequiredDescription
event_idstring (uuid)YesThe event id, as returned by search_events or create_event.
Input schema as JSON Schema
inputSchema
{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "event_id"
  ]
}

Example

Request

tools/call
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_gallery_stats",
    "arguments": {
      "event_id": "7c1f3a2e-9b4d-4e61-8f0a-2d5c6b7e8a91"
    }
  }
}

With curl

bash
curl -X POST https://www.happyhearaudio.com/api/mcp \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2025-06-18" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_gallery_stats","arguments":{"event_id":"7c1f3a2e-9b4d-4e61-8f0a-2d5c6b7e8a91"}}}'

Response

Fake data in a real shape. content[0].text is the same object as a JSON string for clients that read text only.

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"event_id\":\"7c1f3a2e-9b4d-4e61-8f0a-2d5c6b7e8a91\",\"event_name\":\"Rivera 50th Anniversary\",\"visits\":63,\"plays\":217,\"downloads\":11,\"gallery_sent\":true,\"first_opened_on\":\"2026-11-16\",\"dashboard_url\":\"https://www.happyhearaudio.com/dashboard/events/7c1f3a2e-9b4d-4e61-8f0a-2d5c6b7e8a91\"}"
      }
    ],
    "structuredContent": {
      "event_id": "7c1f3a2e-9b4d-4e61-8f0a-2d5c6b7e8a91",
      "event_name": "Rivera 50th Anniversary",
      "visits": 63,
      "plays": 217,
      "downloads": 11,
      "gallery_sent": true,
      "first_opened_on": "2026-11-16",
      "dashboard_url": "https://www.happyhearaudio.com/dashboard/events/7c1f3a2e-9b4d-4e61-8f0a-2d5c6b7e8a91"
    }
  }
}

Errors

Each of these comes back as a normal JSON-RPC result with isError: true and the message as its single text item. Arguments the schema rejects are a JSON-RPC -32602 error instead. See Errors for the HTTP-level refusals that happen before any tool runs.

MessageWhen
Could not read that event right now.A database read failed. Retry after a short wait.
No event with that id in your account.The id is not an event in the signed-in account, or the event was deleted.

Limits

  • 60 requests per minute per operator across all actions, answered with HTTP 429 and a Retry-After header past that.
  • No daily cap. Read actions are not logged and not counted.

Worth knowing

  • first_opened_on is null until a guest opens the gallery.
  • Nothing per visitor is kept or returned.

See also