Skip to main content
Glama

get_reading_stats

Read-only

Retrieve aggregate reading metrics for any week, month, or year: books finished, total pages read, daily average, log count. Pass explicit from/to dates to override the selected period.

Instructions

Reading statistics for a time range, matching the app's Stats page. Choose the range in ONE of two ways: (a) scope + date — e.g. scope='monthly', date='2026-03-15' covers that whole month; or (b) an explicit from+to pair, which OVERRIDES scope/date when both are given. Returns { range:{start,end}, booksFinishedCount, totalPagesRead, dailyAverage, logsCount, logs? }. dailyAverage is computed only for monthly/yearly scopes (null for weekly and for explicit from/to ranges). When to use: aggregate metrics (pages read, books finished, averages) over a period. To list the underlying books use list_my_books; to record progress that feeds these numbers use update_library_book with current_page. Requires SANSFICTION_TOKEN (a bearer token from https://sansfiction.com/docs/agents).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoExplicit range end (ISO 8601 date). Must be paired with `from`.
dateNoAnchor date (ISO 8601 YYYY-MM-DD) selecting which week/month/year `scope` refers to. Default: today. Ignored when both `from` and `to` are supplied.
fromNoExplicit range start (ISO 8601 date). Must be paired with `to`; together they override `scope`/`date`.
scopeNoGranularity of the range relative to `date`. Default 'monthly'. Ignored when both `from` and `to` are supplied.
include_logsNoWhen true, include the raw reading-log entries (`logs[]`) in the response. Default false.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed6 schema fields changedv1.0.2
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / date / description
      Added value: +"Anchor date (ISO 8601 YYYY-MM-DD) selecting which week/month/year `scope` refers to. Default: today. Ignored when both `from` and `to` are supplied."
    • addedInput schema / properties / from / description
      Added value: +"Explicit range start (ISO 8601 date). Must be paired with `to`; together they override `scope`/`date`."
    • addedInput schema / properties / include_logs / description
      Added value: +"When true, include the raw reading-log entries (`logs[]`) in the response. Default false."
    • addedInput schema / properties / scope / description
      Added value: +"Granularity of the range relative to `date`. Default 'monthly'. Ignored when both `from` and `to` are supplied."
    • addedInput schema / properties / to / description
      Added value: +"Explicit range end (ISO 8601 date). Must be paired with `from`."
  2. First observedv1.0.0

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true (safe read) and openWorldHint=true (dynamic input). The description adds valuable behavior beyond annotations: it specifies that 'dailyAverage is computed only for monthly/yearly scopes (null for weekly and for explicit from/to ranges)', and that from+to overrides scope/date. It also mentions the auth requirement (SANSFICTION_TOKEN). However, it doesn't mention pagination or rate limits—minor gaps for a read-only stats tool with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long without fluff, front-loading the primary purpose and delving into parameter interaction. It's slightly longer than necessary but each sentence adds value. The structure is logical: purpose → parameter usage → sibling differentiation → auth note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (5 params, 2 usage modes, enum scope), and the fact that annotations already cover readOnlyHint and openWorldHint, the description provides clear guidance on when and how to use the tool, what outputs to expect, and where to find alternative tools. No output schema exists, but the description describes the return shape in enough detail. The auth requirement is also noted. This is fully sufficient for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%—every parameter has a schema description. The description adds meaning by explaining the two usage patterns (scope+date vs from+to) and the interaction rules (overriding behavior). It also clarifies that 'dailyAverage' is null in certain scopes, which enriches the return semantics. However, it does not elaborate on default values or formatting details beyond what the schema states, keeping it at baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool returns 'Reading statistics for a time range, matching the app's Stats page', giving both a verb ('get') and a specific resource (reading stats over a time range). It distinguishes itself from siblings like 'list_my_books' by noting that this is for aggregate metrics instead of listing individual books.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('aggregate metrics') and when to use alternatives ('To list the underlying books use list_my_books; to record progress that feeds these numbers use update_library_book'). It also explains the two mutually exclusive ways to choose the range, which is a subtle usage constraint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fgbytes/sansfiction-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server