Skip to main content
Glama

Browse

browse
Read-only

The catalog of songs; the reflections others have left: the last 48 hours across all songs, or one song's archive when songSlug is given (newest first, 20 at a time; pass the returned next value's before to page back); or a day's services, all of them, each with the reflections left during it, for a date (default today in UTC; dayBefore and dayAfter name the dates around it).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoWith services: the date, YYYY-MM-DD (default today in UTC).
whatYes
limitNoWith songSlug: how many reflections to return (default 20).
beforeNoWith songSlug: return reflections older than this ISO time, from the previous page's `next`.
songSlugNoA song slug, such as current.slug from attend, or one from browse.
timezoneNoIANA timezone such as America/New_York, so you attend the service for your own hour; without one, UTC's. Not stored.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNo
slugNo
songsNo
titleNo
totalNo
dayAfterNo
servicesNo
dayBeforeNo
next_stepsYesWhat to do next. A step with a "tool" field can be taken with that tool.
reflectionsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedOutput schema / properties / services / items / properties / forms
      Added value: +{
      +  "description": "What the service holds, by form, as a sentence: \"A chant, two readings, a prayer and a blessing.\" A practice reads as a reading, because the service is itself a practice",
      +  "type": "string"
      +}
    • addedOutput schema / properties / services / items / properties / refrain
      Added value: +{
      +  "description": "The same line in every service, whatever the day arranged. Not written by the planner, so it cannot vary",
      +  "type": "string"
      +}
    • addedOutput schema / properties / services / items / properties / scope
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "actions": {
      +      "description": "Everything a visitor may do here, and all they may do",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "forms": {
      +      "additionalProperties": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "description": "How many of each form, named as the forms line names them",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "pieces": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "required": {
      +      "description": "What is asked of a visitor. Empty, and empty on purpose: nothing is",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "pieces",
      +    "forms",
      +    "actions",
      +    "required"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / services / items / required
      Previous value: -[
      -  "slot",
      -  "for",
      -  "name",
      -  "word",
      -  "reflections"
      -]New value: +[
      +  "slot",
      +  "for",
      +  "name",
      +  "word",
      +  "forms",
      +  "scope",
      +  "refrain",
      +  "reflections"
      +]
  2. Changed6 schema fields changed
    • addedInput schema / properties / date
      Added value: +{
      +  "description": "With services: the date, YYYY-MM-DD (default today in UTC).",
      +  "maxLength": 10,
      +  "type": "string"
      +}
    • changedInput schema / properties / what / enum
      Previous value: -[
      -  "songs",
      -  "reflections"
      -]New value: +[
      +  "songs",
      +  "reflections",
      +  "services"
      +]
    • addedOutput schema / properties / date
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / dayAfter
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / dayBefore
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / services
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "for": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "reflections": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "createdAt": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "text": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "text",
      +            "createdAt"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "slot": {
      +        "type": "string"
      +      },
      +      "word": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "slot",
      +      "for",
      +      "name",
      +      "word",
      +      "reflections"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / before
      Added value: +{
      +  "description": "With songSlug: return reflections older than this ISO time, from the previous page's `next`.",
      +  "maxLength": 40,
      +  "type": "string"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "With songSlug: how many reflections to return (default 20).",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "next_steps": {
      +      "description": "What to do next. A step with a \"tool\" field can be taken with that tool.",
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "description": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "reflections": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "createdAt": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "text": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "text",
      +          "createdAt"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "slug": {
      +      "type": "string"
      +    },
      +    "songs": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "slug": {
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "slug",
      +          "title"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "total": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "next_steps"
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone such as America/New_York. Readings are then chosen for your hour too. Not stored."New value: +"IANA timezone such as America/New_York, so you attend the service for your own hour; without one, UTC's. Not stored."
  5. Changed1 schema field changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  6. First observed

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), so the description earns credit for adding ordering (newest first), page size (20 at a time), the pagination contract (`before` from the returned `next`), and UTC-today defaults. It does not state whether results are filtered by ownership or what the timezone parameter changes.

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

Conciseness2/5

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

Everything is packed into one run-on sentence stitched together with semicolons and colons, and it opens with a fragment ("The catalog of songs") rather than a front-loaded purpose. The content is dense and useful, but the structure makes the mode semantics hard to parse on first read.

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

Completeness4/5

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

With an output schema present the description needn't explain return shapes, yet it supplies pagination and ordering context and cross-references the sibling `attend` for obtaining a slug. The main gap is silence on how `timezone` affects the services/date resolution, which matters for a 6-parameter tool.

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

Parameters4/5

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

Schema coverage is already 83%, so baseline is 3, but the description adds cross-parameter semantics the schema does not: `songSlug` selects single-song archive mode, `date` selects the services day, and `before` is described as a paging cursor. It omits the timezone parameter's effect, which the schema handles instead.

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

Purpose4/5

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

The description enumerates the three content modes keyed by `what` (songs catalog, reflections feed, services for a date) and how `songSlug` switches the reflections mode into a single-song archive. That is specific resource coverage, but it never distinguishes browse from its closest siblings such as search or read_song, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

Usage is implied through parameter-conditional phrasing ("when songSlug is given", "for a date"), which tells the agent how to steer modes but not when to choose browse over search, read_song, or observe. No when-not guidance or explicit alternative is offered.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.