Skip to main content
Glama

Search judgments

caselaw_search
Read-onlyIdempotent

Full-text search of Pakistani judgments (Supreme Court, High Courts, Federal Shariat Court and tribunals, 1970 onward), with optional filters by court, judge, author, law report and year.

Ranking follows how lawyers research: nearness to the legal point decides which cases are
returned; among comparably-near cases, more senior court > larger bench > more recent >
more cited. For the current state of the law, add year_from (e.g. 2025); use sort='court'
for the most authoritative first.

With no query, the filters list judgments newest first - e.g. court='Supreme Court' gives the
latest Supreme Court judgments, journal='PLD' with year_from=year_to=2024 gives that volume,
and sort='recently_added' alone shows what was added to the site most recently.

Returns cases with id, title, citation, court, year, outcome, author (the judge who wrote it, when
known) and the public URL; a keyword search also gives the number of judges on the bench and the
words of the judgment that matched. For an exact
report citation use caselaw_lookup_citation. To read a case, pass its id to caselaw_get_case.

Input Schema

NameRequiredDescriptionDefault
sortNorelevance (default: nearest on the point, then court/bench/recency/citations) | newest (the ~200 closest matches in strict date order) | court (most senior court first) | recently_added (newest additions to the site). For the CURRENT law on a point, keep relevance and set year_from (e.g. 2025): strict date order can surface judgments that only mention the point in passing.relevance
courtNoOnly this court: 'Supreme Court', 'Federal Constitutional Court' (or 'FCC'), 'Lahore High Court' (or 'LHC'), 'Sindh High Court', 'Peshawar High Court', 'Islamabad High Court', 'Balochistan High Court', 'Federal Shariat Court', or a tribunal's name
judgeNoOnly judgments where this judge sat on the bench. Spelling-tolerant: 'Asif Khosa', 'Qazi Faez Isa'. The reply names the judge it matched.
limitNo
queryNoKeywords, e.g. 'bail murder 302' or 'khula dower'. May be left out when a filter is given.
authorNoOnly judgments this judge WROTE (the author of the judgment, who also sat on its bench) - narrower than `judge`, which includes every case the judge sat on. Spelling-tolerant like `judge`.
offsetNo
journalNoOnly judgments reported in this law report: 'PLD', 'SCMR', 'CLC', 'YLR', 'PLC(CS)', 'PTD' ... With year_from/year_to it selects that volume, e.g. SCMR 2025.
year_toNoLatest year (inclusive)
year_fromNoEarliest year (inclusive)
response_formatNomarkdown

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / court / description
      Previous value: -"Only this court: 'Supreme Court', 'Lahore High Court' (or 'LHC'), 'Sindh High Court', 'Peshawar High Court', 'Islamabad High Court', 'Balochistan High Court', 'Federal Shariat Court', or a tribunal's name"New value: +"Only this court: 'Supreme Court', 'Federal Constitutional Court' (or 'FCC'), 'Lahore High Court' (or 'LHC'), 'Sindh High Court', 'Peshawar High Court', 'Islamabad High Court', 'Balochistan High Court', 'Federal Shariat Court', or a tribunal's name"
  2. Changed1 schema field changed
    • addedInput schema / properties / author
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only judgments this judge WROTE (the author of the judgment, who also sat on its bench) - narrower than `judge`, which includes every case the judge sat on. Spelling-tolerant like `judge`.",
      +  "title": "Author"
      +}
  3. Changed5 schema fields changed
    • removedInput schema / $defs
      Removed value: -{
      -  "Fmt": {
      -    "enum": [
      -      "markdown",
      -      "json"
      -    ],
      -    "title": "Fmt",
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / response_format / $ref
      Removed value: -"#/$defs/Fmt"
    • addedInput schema / properties / response_format / enum
      Added value: +[
      +  "markdown",
      +  "json"
      +]
    • addedInput schema / properties / response_format / title
      Added value: +"Response Format"
    • addedInput schema / properties / response_format / type
      Added value: +"string"
  4. Changed13 schema fields changed
    • addedInput schema / properties / court
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only this court: 'Supreme Court', 'Lahore High Court' (or 'LHC'), 'Sindh High Court', 'Peshawar High Court', 'Islamabad High Court', 'Balochistan High Court', 'Federal Shariat Court', or a tribunal's name",
      +  "title": "Court"
      +}
    • addedInput schema / properties / journal
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 20,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only judgments reported in this law report: 'PLD', 'SCMR', 'CLC', 'YLR', 'PLC(CS)', 'PTD' ... With year_from/year_to it selects that volume, e.g. SCMR 2025.",
      +  "title": "Journal"
      +}
    • addedInput schema / properties / judge
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only judgments where this judge sat on the bench. Spelling-tolerant: 'Asif Khosa', 'Qazi Faez Isa'. The reply names the judge it matched.",
      +  "title": "Judge"
      +}
    • addedInput schema / properties / query / anyOf
      Added value: +[
      +  {
      +    "maxLength": 200,
      +    "minLength": 2,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / query / default
      Added value: +null
    • changedInput schema / properties / query / description
      Previous value: -"Keywords, e.g. 'bail murder 302' or 'khula dower'"New value: +"Keywords, e.g. 'bail murder 302' or 'khula dower'. May be left out when a filter is given."
    • removedInput schema / properties / query / maxLength
      Removed value: -200
    • removedInput schema / properties / query / minLength
      Removed value: -2
    • removedInput schema / properties / query / type
      Removed value: -"string"
    • changedInput schema / properties / sort / description
      Previous value: -"relevance (default: nearest on the point, then court/bench/recency/citations) | newest (latest law first — useful because amendments supersede) | court (most senior court first)"New value: +"relevance (default: nearest on the point, then court/bench/recency/citations) | newest (the ~200 closest matches in strict date order) | court (most senior court first) | recently_added (newest additions to the site). For the CURRENT law on a point, keep relevance and set year_from (e.g. 2025): strict date order can surface judgments that only mention the point in passing."
    • addedInput schema / properties / year_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 2100,
      +      "minimum": 1900,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Earliest year (inclusive)",
      +  "title": "Year From"
      +}
    • addedInput schema / properties / year_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 2100,
      +      "minimum": 1900,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Latest year (inclusive)",
      +  "title": "Year To"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond that: the exact ranking model (nearness to the legal point, then court seniority, bench size, recency, citations), the behavior with no query (filter-only listing newest first), and the fields returned including bench size and matched words for keyword searches.

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 corpus scope, then ranking, then usage patterns, then return values and handoffs – a logical order. It is somewhat long and repeats schema-level detail (sort modes, journal examples), and one sentence breaks awkwardly mid-line, but no sentence is pure filler.

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 an 11-parameter, all-optional search tool this covers everything an agent needs: what corpus, how results are ranked, how to combine filters, what a filter-only call returns, what fields come back, and which sibling to use next. Output schema exists, so the return-value summary is a bonus rather than a gap-filler.

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?

With 73% schema coverage the schema carries most parameter documentation, but the description adds real value by explaining how parameters combine (journal + year_from/year_to selects a volume, year_from alone anchors to current law) and by clarifying the author-vs-judge distinction. limit, offset and response_format are left entirely to the schema.

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 and resource ('Full-text search of Pakistani judgments') with the exact corpus scope (Supreme Court, High Courts, Federal Shariat Court, tribunals, 1970 onward). It also explicitly routes away from siblings by naming caselaw_lookup_citation for exact citations and caselaw_get_case for reading a case.

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 concrete when-to-use guidance: add year_from (e.g. 2025) for the current state of the law, sort='court' for authority-first ordering, and filter-only usage when no query is supplied, with three worked examples. Alternatives and exclusions are named explicitly (citation lookup vs. case read vs. this search).

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.

Resources