Skip to main content
Glama

Search Indian Acts

search_acts
Read-only

Search Indian legislation down to the individual section: Central and State Acts plus the instruments of the principal regulators (SEBI, RBI, MCA, IRDAI, TRAI, DGFT). Use for any 'what does Indian law say' question. Supports boolean and phrase queries; filters by category, state, year and status. Returns sections with title, chapter and a sourceUrl pointing at the publisher's own document. The returned actId (e.g. 'IND_central_2065') feeds every acts tool. Cost: 2 credits.

Input Schema

NameRequiredDescriptionDefault
pageNo1-based page number. `page * pageSize` may not exceed 100; narrow the query with filters to reach deeper matches.
queryYesSearch query.
stateNoJurisdiction slug. `central` is a value here, for Union legislation. Live counts per jurisdiction are on GET /acts/coverage.
yearToNoLatest year of enactment to include, inclusive.
actTitleNoFilter by words in the act's title. Each word must appear, so `Bharatiya Nyaya` narrows to the Sanhita.
categoryNoJurisdictional class. `repealed` and `spent` are accepted for backward compatibility and resolve against `actStatus` instead. Values: `central`, `state`, `regulatory`, `repealed`, `spent`.
pageSizeNoResults per page (1-50).
yearFromNoEarliest year of enactment to include, inclusive. Matched against the publisher's own year field, which is occasionally corrupt, so there is no lower bound and a value below 1800 is a legitimate way to find those rows.
actStatusNoFilter by the publisher's lifecycle status. Accepts one value or a list. This is the publisher's claim, not our verdict: see GET /acts/{actId}/status. Values: `in_force`, `repealed`, `superseded`, `spent`.
matchTypeNoOne of `any`, `all`, `phrase`. Filters ranked candidates rather than re-querying the index, so `phrase` matches only within the top candidates and not every corpus match. Narrow with structured filters first when you need exhaustive phrase results. Defaults to `any`.any
departmentNoAccepts both regulator slugs such as `sebi` and `rbi` and free-text state department names such as `Law Department`. Values are not limited to a fixed enum or a uniform slug format.
sectionTypeNoFilter by structural kind of the passage. Accepts one value or a list. Values: `amendment_provision`, `article`, `body`, `chapter_heading`, `definition_clause`, `definitions`, `part_heading`, `preamble`, `schedule`, `section`, `short_title`, `sub_section`.
legalSubjectNoAccepts one value or a list, matched against subject classifications assigned at ingest.
isSubordinateNoTrue for subordinate instruments only (rules, notifications, circulars, orders); false for principal acts only. Omit for both.
provisionTypeNoFilter by what the provision DOES. Accepts one value or a list. Values: `mandatory`, `general`, `prohibitory`, `overriding`, `discretionary`, `declaratory`.
sectionNumberNoFilter by exact section number. The publisher's own numbering, which is not an integer: `498A`, `376DA` and `2-A` all occur, and the alphabetic suffix is part of the number rather than a sub-provision.
excludeRepealedNoDrop provisions whose act the publisher records as repealed or spent. Off by default, because repealed law is still law that was in force and is routinely the thing being researched.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • changedInput schema / properties / actStatus / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "in_force",
      +      "repealed",
      +      "superseded",
      +      "spent"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "enum": [
      +        "in_force",
      +        "repealed",
      +        "superseded",
      +        "spent"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / actStatus / enum
      Removed value: -[
      -  "in_force",
      -  "repealed",
      -  "superseded",
      -  "spent"
      -]
    • changedInput schema / properties / category / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "central",
      +      "state",
      +      "regulatory",
      +      "repealed",
      +      "spent"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / category / enum
      Removed value: -[
      -  "central",
      -  "state",
      -  "regulatory",
      -  "repealed",
      -  "spent"
      -]
    • changedInput schema / properties / legalSubject / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "administrative_law",
      +      "banking_finance",
      +      "civil_procedure",
      +      "constitutional_law",
      +      "corporate_law",
      +      "criminal_law",
      +      "environmental_law",
      +      "family_law",
      +      "general",
      +      "information_technology",
      +      "intellectual_property",
      +      "labour_law",
      +      "property_law",
      +      "tax_law"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "enum": [
      +        "administrative_law",
      +        "banking_finance",
      +        "civil_procedure",
      +        "constitutional_law",
      +        "corporate_law",
      +        "criminal_law",
      +        "environmental_law",
      +        "family_law",
      +        "general",
      +        "information_technology",
      +        "intellectual_property",
      +        "labour_law",
      +        "property_law",
      +        "tax_law"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / legalSubject / enum
      Removed value: -[
      -  "administrative_law",
      -  "banking_finance",
      -  "civil_procedure",
      -  "constitutional_law",
      -  "corporate_law",
      -  "criminal_law",
      -  "environmental_law",
      -  "family_law",
      -  "general",
      -  "information_technology",
      -  "intellectual_property",
      -  "labour_law",
      -  "property_law",
      -  "tax_law"
      -]
    • changedInput schema / properties / provisionType / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "mandatory",
      +      "general",
      +      "prohibitory",
      +      "overriding",
      +      "discretionary",
      +      "declaratory"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "enum": [
      +        "mandatory",
      +        "general",
      +        "prohibitory",
      +        "overriding",
      +        "discretionary",
      +        "declaratory"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / provisionType / enum
      Removed value: -[
      -  "mandatory",
      -  "general",
      -  "prohibitory",
      -  "overriding",
      -  "discretionary",
      -  "declaratory"
      -]
    • changedInput schema / properties / sectionType / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "amendment_provision",
      +      "article",
      +      "body",
      +      "chapter_heading",
      +      "definition_clause",
      +      "definitions",
      +      "part_heading",
      +      "preamble",
      +      "schedule",
      +      "section",
      +      "short_title",
      +      "sub_section"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "enum": [
      +        "amendment_provision",
      +        "article",
      +        "body",
      +        "chapter_heading",
      +        "definition_clause",
      +        "definitions",
      +        "part_heading",
      +        "preamble",
      +        "schedule",
      +        "section",
      +        "short_title",
      +        "sub_section"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / sectionType / enum
      Removed value: -[
      -  "amendment_provision",
      -  "article",
      -  "body",
      -  "chapter_heading",
      -  "definition_clause",
      -  "definitions",
      -  "part_heading",
      -  "preamble",
      -  "schedule",
      -  "section",
      -  "short_title",
      -  "sub_section"
      -]
    • changedInput schema / properties / state / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "andaman-and-nicobar-islands",
      +      "andaman-nicobar",
      +      "andhra-pradesh",
      +      "arunachal-pradesh",
      +      "assam",
      +      "bihar",
      +      "central",
      +      "chandigarh",
      +      "chhattisgarh",
      +      "dadra-and-nagar-haveli-and-daman-and-diu",
      +      "dadra-nagar-haveli",
      +      "delhi",
      +      "goa",
      +      "gujarat",
      +      "haryana",
      +      "himachal-pradesh",
      +      "jammu-and-kashmir",
      +      "jammu-kashmir",
      +      "jharkhand",
      +      "karnataka",
      +      "kerala",
      +      "ladakh",
      +      "lakshadweep",
      +      "madhya-pradesh",
      +      "maharashtra",
      +      "manipur",
      +      "meghalaya",
      +      "mizoram",
      +      "nagaland",
      +      "odisha",
      +      "puducherry",
      +      "punjab",
      +      "rajasthan",
      +      "sikkim",
      +      "tamil-nadu",
      +      "telangana",
      +      "tripura",
      +      "uttar-pradesh",
      +      "uttarakhand",
      +      "west-bengal"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / state / enum
      Removed value: -[
      -  "andaman-and-nicobar-islands",
      -  "andaman-nicobar",
      -  "andhra-pradesh",
      -  "arunachal-pradesh",
      -  "assam",
      -  "bihar",
      -  "central",
      -  "chandigarh",
      -  "chhattisgarh",
      -  "dadra-and-nagar-haveli-and-daman-and-diu",
      -  "dadra-nagar-haveli",
      -  "delhi",
      -  "goa",
      -  "gujarat",
      -  "haryana",
      -  "himachal-pradesh",
      -  "jammu-and-kashmir",
      -  "jammu-kashmir",
      -  "jharkhand",
      -  "karnataka",
      -  "kerala",
      -  "ladakh",
      -  "lakshadweep",
      -  "madhya-pradesh",
      -  "maharashtra",
      -  "manipur",
      -  "meghalaya",
      -  "mizoram",
      -  "nagaland",
      -  "odisha",
      -  "puducherry",
      -  "punjab",
      -  "rajasthan",
      -  "sikkim",
      -  "tamil-nadu",
      -  "telangana",
      -  "tripura",
      -  "uttar-pradesh",
      -  "uttarakhand",
      -  "west-bengal"
      -]
  2. Changed3 schema fields changed
    • changedInput schema / properties / department / description
      Previous value: -"Issuing body. Deliberately NOT an enumerated list: this field holds 943 distinct values and mixes clean regulator slugs (`sebi`, `rbi`, `moefcc`) with free-text state department names (`Law Department`). Read GET /acts/filters for the values with the most data behind them."New value: +"Accepts both regulator slugs such as `sebi` and `rbi` and free-text state department names such as `Law Department`. Values are not limited to a fixed enum or a uniform slug format."
    • changedInput schema / properties / legalSubject / description
      Previous value: -"Filter by subject area, classified at ingest. Accepts one value or a list. Values: `administrative_law`, `banking_finance`, `civil_procedure`, `constitutional_law`, `corporate_law`, `criminal_law`, `environmental_law`, `family_law`, `general`, `information_technology`, `intellectual_property`, `labour_law`, `property_law`, `tax_law`."New value: +"Accepts one value or a list, matched against subject classifications assigned at ingest."
    • changedInput schema / properties / matchType / description
      Previous value: -"How query terms must appear in the provision text. `any` (the default) leaves hybrid ranking to do the work; `all` keeps only provisions containing EVERY query term; `phrase` keeps only those containing the exact phrase.\n\n⚠️ It narrows the ranked candidate pool rather than re-querying the index, so a `phrase` search returns phrase matches WITHIN the top candidates, not every phrase match in the corpus. For an exhaustive phrase search, narrow with the structured filters first.\n\nValues: `any`, `all`, `phrase`."New value: +"One of `any`, `all`, `phrase`. Filters ranked candidates rather than re-querying the index, so `phrase` matches only within the top candidates and not every corpus match. Narrow with structured filters first when you need exhaustive phrase results. Defaults to `any`."
  3. Changed13 schema fields changed
    • changedInput schema / properties / actStatus / description
      Previous value: -"Filter by the publisher's lifecycle status: `in_force`, `repealed`, `superseded`, `spent`. Accepts one value or a list. This is the publisher's claim, not our verdict: see GET /acts/{actId}/status."New value: +"Filter by the publisher's lifecycle status. Accepts one value or a list. This is the publisher's claim, not our verdict: see GET /acts/{actId}/status. Values: `in_force`, `repealed`, `superseded`, `spent`."
    • changedInput schema / properties / category / description
      Previous value: -"Jurisdictional class. `repealed` and `spent` are accepted for backward compatibility and resolve against `actStatus` instead."New value: +"Jurisdictional class. `repealed` and `spent` are accepted for backward compatibility and resolve against `actStatus` instead. Values: `central`, `state`, `regulatory`, `repealed`, `spent`."
    • changedInput schema / properties / legalSubject / description
      Previous value: -"Filter by subject area, e.g. `tax_law`, `criminal_law`, `environmental_law`, `company_law`."New value: +"Filter by subject area, classified at ingest. Accepts one value or a list. Values: `administrative_law`, `banking_finance`, `civil_procedure`, `constitutional_law`, `corporate_law`, `criminal_law`, `environmental_law`, `family_law`, `general`, `information_technology`, `intellectual_property`, `labour_law`, `property_law`, `tax_law`."
    • changedInput schema / properties / matchType / description
      Previous value: -"How query terms must appear in the provision text. `any` (the default) leaves hybrid ranking to do the work; `all` keeps only provisions containing EVERY query term; `phrase` keeps only those containing the exact phrase.\n\n⚠️ It narrows the ranked candidate pool rather than re-querying the index, so a `phrase` search returns phrase matches WITHIN the top candidates, not every phrase match in the corpus. For an exhaustive phrase search, narrow with the structured filters first."New value: +"How query terms must appear in the provision text. `any` (the default) leaves hybrid ranking to do the work; `all` keeps only provisions containing EVERY query term; `phrase` keeps only those containing the exact phrase.\n\n⚠️ It narrows the ranked candidate pool rather than re-querying the index, so a `phrase` search returns phrase matches WITHIN the top candidates, not every phrase match in the corpus. For an exhaustive phrase search, narrow with the structured filters first.\n\nValues: `any`, `all`, `phrase`."
    • addedInput schema / properties / page / examples
      Added value: +[
      +  1
      +]
    • changedInput schema / properties / pageSize / description
      Previous value: -"Results per page (1-50)"New value: +"Results per page (1-50)."
    • addedInput schema / properties / pageSize / examples
      Added value: +[
      +  10
      +]
    • changedInput schema / properties / provisionType / description
      Previous value: -"Filter by what the provision DOES: `definitional`, `prohibitory`, `procedural`, `penal`, `overriding` and others. Accepts a value or a list."New value: +"Filter by what the provision DOES. Accepts one value or a list. Values: `mandatory`, `general`, `prohibitory`, `overriding`, `discretionary`, `declaratory`."
    • changedInput schema / properties / sectionType / description
      Previous value: -"Filter by structural kind: `section`, `sub_section`, `definitions`, `preamble`, `schedule`, `short_title`."New value: +"Filter by structural kind of the passage. Accepts one value or a list. Values: `amendment_provision`, `article`, `body`, `chapter_heading`, `definition_clause`, `definitions`, `part_heading`, `preamble`, `schedule`, `section`, `short_title`, `sub_section`."
    • changedInput schema / properties / yearFrom / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 2100,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / yearFrom / description
      Previous value: -"Minimum year (inclusive)"New value: +"Earliest year of enactment to include, inclusive. Matched against the publisher's own year field, which is occasionally corrupt, so there is no lower bound and a value below 1800 is a legitimate way to find those rows."
    • changedInput schema / properties / yearTo / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 2100,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / yearTo / description
      Previous value: -"Maximum year (inclusive)"New value: +"Latest year of enactment to include, inclusive."
  4. Changed24 schema fields changed
    • addedInput schema / properties / actStatus
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Filter by the publisher's lifecycle status: `in_force`, `repealed`, `superseded`, `spent`. Accepts one value or a list. This is the publisher's claim, not our verdict: see GET /acts/{actId}/status.",
      +  "enum": [
      +    "in_force",
      +    "repealed",
      +    "superseded",
      +    "spent"
      +  ],
      +  "examples": [
      +    "repealed"
      +  ]
      +}
    • changedInput schema / properties / actTitle / description
      Previous value: -"Filter by act title substring (e.g. 'Indian Penal Code', 'BNSS')"New value: +"Filter by words in the act's title. Each word must appear, so `Bharatiya Nyaya` narrows to the Sanhita."
    • addedInput schema / properties / actTitle / examples
      Added value: +[
      +  "Bharatiya Nyaya Sanhita"
      +]
    • changedInput schema / properties / category / description
      Previous value: -"Filter: central, state, regulatory, repealed, spent"New value: +"Jurisdictional class. `repealed` and `spent` are accepted for backward compatibility and resolve against `actStatus` instead."
    • addedInput schema / properties / category / enum
      Added value: +[
      +  "central",
      +  "state",
      +  "regulatory",
      +  "repealed",
      +  "spent"
      +]
    • addedInput schema / properties / category / examples
      Added value: +[
      +  "central"
      +]
    • changedInput schema / properties / department / description
      Previous value: -"Filter by regulatory body (e.g. 'sebi', 'rbi')"New value: +"Issuing body. Deliberately NOT an enumerated list: this field holds 943 distinct values and mixes clean regulator slugs (`sebi`, `rbi`, `moefcc`) with free-text state department names (`Law Department`). Read GET /acts/filters for the values with the most data behind them."
    • addedInput schema / properties / department / examples
      Added value: +[
      +  "sebi"
      +]
    • addedInput schema / properties / excludeRepealed
      Added value: +{
      +  "default": false,
      +  "description": "Drop provisions whose act the publisher records as repealed or spent. Off by default, because repealed law is still law that was in force and is routinely the thing being researched.",
      +  "examples": [
      +    true
      +  ],
      +  "type": "boolean"
      +}
    • addedInput schema / properties / isSubordinate
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "True for subordinate instruments only (rules, notifications, circulars, orders); false for principal acts only. Omit for both.",
      +  "examples": [
      +    false
      +  ]
      +}
    • addedInput schema / properties / legalSubject
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Filter by subject area, e.g. `tax_law`, `criminal_law`, `environmental_law`, `company_law`.",
      +  "enum": [
      +    "administrative_law",
      +    "banking_finance",
      +    "civil_procedure",
      +    "constitutional_law",
      +    "corporate_law",
      +    "criminal_law",
      +    "environmental_law",
      +    "family_law",
      +    "general",
      +    "information_technology",
      +    "intellectual_property",
      +    "labour_law",
      +    "property_law",
      +    "tax_law"
      +  ],
      +  "examples": [
      +    "tax_law"
      +  ]
      +}
    • addedInput schema / properties / matchType
      Added value: +{
      +  "default": "any",
      +  "description": "How query terms must appear in the provision text. `any` (the default) leaves hybrid ranking to do the work; `all` keeps only provisions containing EVERY query term; `phrase` keeps only those containing the exact phrase.\n\n⚠️ It narrows the ranked candidate pool rather than re-querying the index, so a `phrase` search returns phrase matches WITHIN the top candidates, not every phrase match in the corpus. For an exhaustive phrase search, narrow with the structured filters first.",
      +  "enum": [
      +    "any",
      +    "all",
      +    "phrase"
      +  ],
      +  "examples": [
      +    "phrase"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / provisionType
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Filter by what the provision DOES: `definitional`, `prohibitory`, `procedural`, `penal`, `overriding` and others. Accepts a value or a list.",
      +  "enum": [
      +    "mandatory",
      +    "general",
      +    "prohibitory",
      +    "overriding",
      +    "discretionary",
      +    "declaratory"
      +  ],
      +  "examples": [
      +    "mandatory"
      +  ]
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Search query"New value: +"Search query."
    • addedInput schema / properties / query / examples
      Added value: +[
      +  "assessment of a registered dealer"
      +]
    • changedInput schema / properties / query / maxLength
      Previous value: -10000New value: +1000
    • changedInput schema / properties / sectionNumber / description
      Previous value: -"Filter by exact section number (e.g. '23', '302', '498A')"New value: +"Filter by exact section number. The publisher's own numbering, which is not an integer: `498A`, `376DA` and `2-A` all occur, and the alphabetic suffix is part of the number rather than a sub-provision."
    • addedInput schema / properties / sectionNumber / examples
      Added value: +[
      +  "498A"
      +]
    • addedInput schema / properties / sectionType
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Filter by structural kind: `section`, `sub_section`, `definitions`, `preamble`, `schedule`, `short_title`.",
      +  "enum": [
      +    "amendment_provision",
      +    "article",
      +    "body",
      +    "chapter_heading",
      +    "definition_clause",
      +    "definitions",
      +    "part_heading",
      +    "preamble",
      +    "schedule",
      +    "section",
      +    "short_title",
      +    "sub_section"
      +  ],
      +  "examples": [
      +    "definitions"
      +  ]
      +}
    • changedInput schema / properties / state / description
      Previous value: -"Filter by state slug (e.g. 'maharashtra', 'delhi')"New value: +"Jurisdiction slug. `central` is a value here, for Union legislation. Live counts per jurisdiction are on GET /acts/coverage."
    • addedInput schema / properties / state / enum
      Added value: +[
      +  "andaman-and-nicobar-islands",
      +  "andaman-nicobar",
      +  "andhra-pradesh",
      +  "arunachal-pradesh",
      +  "assam",
      +  "bihar",
      +  "central",
      +  "chandigarh",
      +  "chhattisgarh",
      +  "dadra-and-nagar-haveli-and-daman-and-diu",
      +  "dadra-nagar-haveli",
      +  "delhi",
      +  "goa",
      +  "gujarat",
      +  "haryana",
      +  "himachal-pradesh",
      +  "jammu-and-kashmir",
      +  "jammu-kashmir",
      +  "jharkhand",
      +  "karnataka",
      +  "kerala",
      +  "ladakh",
      +  "lakshadweep",
      +  "madhya-pradesh",
      +  "maharashtra",
      +  "manipur",
      +  "meghalaya",
      +  "mizoram",
      +  "nagaland",
      +  "odisha",
      +  "puducherry",
      +  "punjab",
      +  "rajasthan",
      +  "sikkim",
      +  "tamil-nadu",
      +  "telangana",
      +  "tripura",
      +  "uttar-pradesh",
      +  "uttarakhand",
      +  "west-bengal"
      +]
    • addedInput schema / properties / state / examples
      Added value: +[
      +  "maharashtra"
      +]
    • addedInput schema / properties / yearFrom / examples
      Added value: +[
      +  2015
      +]
    • addedInput schema / properties / yearTo / examples
      Added value: +[
      +  2024
      +]
  5. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds genuinely useful extra context: a cost of 2 credits, the fields returned (title, chapter, sourceUrl) and the cross-tool actId contract. It stops short of describing rate limits or how filters interact to change result depth.

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?

Front-loaded with purpose, then usage, capability, return shape and cost across five tight sentences with no redundancy. It is appropriately sized for a 17-parameter tool, though the return-format sentence is arguably redundant given an output schema exists.

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?

For a 17-parameter tool with 100% schema coverage and an output schema, the description supplies the missing strategic layer: what corpus it covers, when to reach for it and what it costs. Left unstated are the ranking/page-depth constraints and the actId-to-tool handoff mechanics, but those are secondary.

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 all 17 parameters, and 3 is the correct baseline. The description restates only a subset of the filter surface (category, state, year, status) and adds the actId format example, which is an output detail rather than parameter syntax.

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 (search) and resource (Indian legislation down to the individual section), and enumerates scope: Central and State Acts plus regulator instruments (SEBI, RBI, MCA, IRDAI, TRAI, DGFT). An agent can immediately distinguish this from list_acts or get_act_section without opening a schema.

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

Usage Guidelines4/5

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

'Use for any "what does Indian law say" question' gives a clear positive triggering condition, and the note that the returned actId feeds every acts tool establishes the entry-point role. However, it never names an alternative or an exclusion (e.g., when to prefer get_act_section once you know the act, or list_acts for browsing), which the large sibling set would benefit from.

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.