Tool reference

get_notes_statistics

Get Notes Statistics. Analyze the user's published Substack notes analytics: returns a paginated batch of notes with engagement metrics (impressions, clicks, reactions, comments, restacks, profile visits, shares, free/paid subscribers) and an audience split (subscribers, followers, strangers) when Substack stored one.

GroupAccessMCP name
Statistics and activityRead-onlyget_notes_statistics

Description

The description the MCP server sends to the model, word for word. Its rules apply to every call.

Analyze the user's published Substack notes analytics: returns a paginated batch of notes with engagement metrics (impressions, clicks, reactions, comments, restacks, profile visits, shares, free/paid subscribers) and an audience split (subscribers, followers, strangers) when Substack stored one. audience is null when that note has no split. Not looked up by note IDs. Use when they ask to review note performance, compare top notes, find what drove subscribers, or summarize stats over a period. Filter by dateRange (or custom startDate/endDate), sort by orderBy/orderDirection, optionally search note text, and paginate with page/limit; check hasMore for the next page. Requires advanced statistics and a valid WriteStack extension key; on failure, read the error field for next steps.

Arguments

ArgumentTypeRequiredDescription
dateRangestringNoTime period for statistics. Use 'custom' together with startDate/endDate for an explicit range. One of: "last_7_days", "last_30_days", "last_90_days", "last_12_months", "all_time", "custom". Default "last_30_days".
endDatestringNoISO 8601 end date for a custom range (sets dateRange to 'custom'). Format date-time.
limitintegerNoMax notes to return (default 20, max 50) Min 1. Max 50. Default 20.
orderBystringNoMetric to order notes by One of: "date", "reactionCount", "commentsCount", "restacks", "totalClicks", "totalFollows", "totalPaidSubscriptions", "totalFreeSubscriptions", "totalImpressions", "totalProfileVisits", "totalLinkClicks", "totalShares". Default "totalImpressions".
orderDirectionstringNoSort direction One of: "asc", "desc". Default "desc".
pageintegerNoPage number for pagination (1-based) Min 1. Default 1.
searchstringNoOptional free-text filter over the note body
startDatestringNoISO 8601 start date for a custom range (sets dateRange to 'custom'). Format date-time.

Example call

The smallest valid request: required arguments only, with placeholder values.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_notes_statistics",
    "arguments": {}
  }
}

Result

The result has structuredContent that matches this schema. The same data is also in content as JSON text.

FieldTypeRequiredDescription
countnumberYes
dateRangestringNo
errorstringNo
hasMorebooleanYes
limitnumberYes
notesobject[]Yes
notes[].audienceobject | nullYes
notes[].audience.followersnumberYes
notes[].audience.strangersnumberYes
notes[].audience.subscribersnumberYes
notes[].commentsCountnumberYes
notes[].contentstringYes
notes[].datestringYesFormat date-time.
notes[].idstringYes
notes[].reactionCountnumberYes
notes[].restacksnumberYes
notes[].totalClicksnumberYes
notes[].totalFollowsnumberYes
notes[].totalFreeSubscriptionsnumberYes
notes[].totalImpressionsnumber | nullYes
notes[].totalLinkClicksnumberYes
notes[].totalPaidSubscriptionsnumberYes
notes[].totalProfileVisitsnumberYes
notes[].totalSharesnumberYes
orderBystringNo
orderDirectionstringNo
pagenumberYes

Annotations

HintValue
readOnlyHinttrue
destructiveHintfalse
openWorldHintfalse

The full input and output JSON Schemas for every tool are in /mcp-tools.json.

On this page