Skip to main content
Glama

Festivals in month

festivals_in_month
Read-onlyIdempotent

List the Hindu festivals and sankrantis that fall in one calendar month of a year (2020-2040), sorted by date; may be empty. Use for questions like 'festivals in October 2026'. Do NOT use for the whole year (use list_festivals) or the next one (use next_festival).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
yearYesGregorian year, 2020-2040, e.g. 2026
monthYesCalendar month 1-12 (1 = January, 12 = December)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
yearYesThe year that was searched.
monthYesThe calendar month that was searched, 1-12.
festivalsYesFestivals in that month, sorted by date (may be empty).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • changedInput schema / properties / month / description
      Previous value: -"The month as a number."New value: +"Calendar month 1-12 (1 = January, 12 = December)"
    • addedInput schema / properties / month / maximum
      Added value: +12
    • addedInput schema / properties / month / minimum
      Added value: +1
    • changedInput schema / properties / month / type
      Previous value: -"number"New value: +"integer"
    • changedInput schema / properties / year / description
      Previous value: -"The year as a number."New value: +"Gregorian year, 2020-2040, e.g. 2026"
    • addedInput schema / properties / year / maximum
      Added value: +2040
    • addedInput schema / properties / year / minimum
      Added value: +2020
    • changedInput schema / properties / year / type
      Previous value: -"number"New value: +"integer"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "festivals": {
      +      "description": "Festivals in that month, sorted by date (may be empty).",
      +      "items": {
      +        "properties": {
      +          "about": {
      +            "description": "Short meaning and the lunar or solar rule that fixes the date.",
      +            "type": "string"
      +          },
      +          "date": {
      +            "description": "Computed Gregorian date, YYYY-MM-DD (approximate, +/-1 day at tithi edges).",
      +            "type": "string"
      +          },
      +          "month": {
      +            "description": "Amanta lunar month name in effect on that date, e.g. Ashwin.",
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "Festival name, e.g. \"Diwali / Lakshmi Puja\" or \"Makara Sankranti / Pongal\".",
      +            "type": "string"
      +          },
      +          "tithi": {
      +            "description": "Lunar day index at IST noon on that date, 0-29 (0 = Shukla Pratipada, 29 = Amavasya), as 'index N'.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "date",
      +          "about",
      +          "tithi",
      +          "month"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "month": {
      +      "description": "The calendar month that was searched, 1-12.",
      +      "type": "integer"
      +    },
      +    "year": {
      +      "description": "The year that was searched.",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "year",
      +    "month",
      +    "festivals"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "festivals": {
      -      "description": "List of festivals occurring in the specified month and year.",
      -      "items": {
      -        "properties": {
      -          "date": {
      -            "description": "The date on which the festival occurs.",
      -            "format": "date",
      -            "type": "string"
      -          },
      -          "details": {
      -            "description": "Additional details about the festival.",
      -            "type": "string"
      -          },
      -          "location": {
      -            "description": "The location where the festival is held.",
      -            "type": "string"
      -          },
      -          "name": {
      -            "description": "The name of the festival.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "date"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "month": {
      -      "description": "The month for which the festivals are retrieved.",
      -      "type": "number"
      -    },
      -    "year": {
      -      "description": "The year for which the festivals are retrieved.",
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "month",
      -    "year",
      -    "festivals"
      -  ],
      -  "type": "object"
      -}New value: +null
  3. Changed3 schema fields changed
    • addedInput schema / properties / month / description
      Added value: +"The month as a number."
    • addedInput schema / properties / year / description
      Added value: +"The year as a number."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "festivals": {
      +      "description": "List of festivals occurring in the specified month and year.",
      +      "items": {
      +        "properties": {
      +          "date": {
      +            "description": "The date on which the festival occurs.",
      +            "format": "date",
      +            "type": "string"
      +          },
      +          "details": {
      +            "description": "Additional details about the festival.",
      +            "type": "string"
      +          },
      +          "location": {
      +            "description": "The location where the festival is held.",
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "The name of the festival.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "date"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "month": {
      +      "description": "The month for which the festivals are retrieved.",
      +      "type": "number"
      +    },
      +    "year": {
      +      "description": "The year for which the festivals are retrieved.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "month",
      +    "year",
      +    "festivals"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds useful behavioral context beyond that: results are sorted by date and may be empty, which helps set expectations for a query tool. It stops short of richer detail such as pagination or result size, but the output schema covers return shape.

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

Conciseness5/5

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

Two tightly written sentences with zero waste. The core purpose and scope are front-loaded, and the exclusion guidance follows naturally.

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?

For a simple two-parameter list tool, the description covers purpose, range, ordering, empty-result behavior, and sibling routing. With annotations covering safety and an output schema covering return values, nothing an agent needs in order to call this correctly is missing.

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%, so the schema already documents both parameters, including the 2020-2040 year range and 1-12 month mapping. The description restates the year range but adds no syntax or format meaning beyond the schema, so the baseline 3 applies.

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?

States a specific verb (List), resource (Hindu festivals and sankrantis), scope (one calendar month of a year, 2020-2040), and ordering (sorted by date). It explicitly differentiates itself from list_festivals and next_festival by naming when not to use it.

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?

Gives an explicit use case ('festivals in October 2026'), names the alternative tools for whole-year and next-festival queries, and rules out those cases. Nothing is left to inference.

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.