Skip to main content
Glama

Server Details

Polish law: search statutes (ISAP), court rulings, verify citations. Free tier + paid plans + x402.

Ownership verified
Status
Unhealthy
Last Tested
Transport
Streamable HTTP
URL

TDQS

A4.4/5.0

Scored across 8 tools

Disambiguation4/5

The tool set is clearly split into statute discovery/retrieval and ruling discovery/verification. The slight ambiguity lies in search_rulings and verify_ruling both being usable to check that a court case exists, but their descriptions make the verification scope different enough (database/excerpts vs external authoritative check).

Naming Consistency5/5

Tool names follow a consistent verb-first pattern: search_* for discovery, get_* for retrieval, and verify_* for checking legal references and signatures. Even the longer names like search_rulings_by_article remain predictable and readable.

Tool Count5/5

Eight tools is well-scoped for a legal research and verification server. Each tool serves a distinct stage of the workflow: find an act, find an article, read an article, find rulings, read rulings, and verify citations or court cases.

Completeness5/5

The tool surface covers the full legal research workflow: locate relevant statutes and articles, retrieve article text, search rulings, retrieve ruling text, and audit either article references or court signatures. There are no obvious dead ends, and the verification tools close the gap left by retrieval-style sources.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Addedget_tax_document
    • Addedsearch_tax_interpretations
  2. 8 tool updates
    • Changedget_article1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "The authoritative text of one statute article, split into clauses.",
        +  "properties": {
        +    "act_shortname": {
        +      "description": "Echo of the requested act. Present when found is false.",
        +      "type": "string"
        +    },
        +    "act_title": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "act_unified_url": {
        +      "description": "ISAP unified-text URL of the act.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "article_content": {
        +      "description": "Full article text as one string.",
        +      "type": "string"
        +    },
        +    "article_number": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "clauses": {
        +      "description": "One entry per ustep. Empty when the text carries no recognisable clause labels - fall back to article_content.",
        +      "items": {
        +        "properties": {
        +          "clause": {
        +            "description": "Clause label, e.g. '1.', '2a.'.",
        +            "type": "string"
        +          },
        +          "text": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "clause",
        +          "text"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "found": {
        +      "description": "False means the act or the article number does not exist - not that the lookup failed. See error_code to tell which.",
        +      "type": "boolean"
        +    },
        +    "note": {
        +      "description": "Reading guidance, or an explanation of a miss.",
        +      "type": "string"
        +    },
        +    "related_regulations": {
        +      "description": "Executive regulations tied to the article. Only when include_regulations was true.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedget_ruling_text1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Full plain text of one court ruling.",
        +  "properties": {
        +    "char_count": {
        +      "description": "Length of `text` in characters.",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "found": {
        +      "description": "False when the link resolves to no stored text.",
        +      "type": "boolean"
        +    },
        +    "ruling_link": {
        +      "description": "Echo of the requested link.",
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "description": "Ruling text with HTML stripped and whitespace collapsed.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_act_articles1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Articles inside one statute that match a topic.",
        +  "properties": {
        +    "articles": {
        +      "items": {
        +        "description": "One matched article.",
        +        "properties": {
        +          "act_title": {
        +            "type": "string"
        +          },
        +          "article_maxim": {
        +            "description": "Legal maxim (paremia) tied to the article.",
        +            "type": "string"
        +          },
        +          "article_number": {
        +            "type": "string"
        +          },
        +          "content": {
        +            "description": "Article text, truncated to an excerpt. Use get_article for the full wording before citing.",
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "count": {
        +      "description": "Number of entries in `articles`.",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_acts1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Polish statutes and codes matching a topic.",
        +  "properties": {
        +    "acts": {
        +      "items": {
        +        "description": "One matched act.",
        +        "properties": {
        +          "shortname": {
        +            "description": "Abbreviation such as 'KC' or 'KPC', when one exists.",
        +            "type": "string"
        +          },
        +          "summary": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "Full official title.",
        +            "type": "string"
        +          },
        +          "unified_url": {
        +            "description": "ISAP unified-text URL; pass it to search_act_articles as act_unified for the fast path.",
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "count": {
        +      "description": "Number of entries in `acts`.",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_rulings1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Rulings matching a topic or a case signature.",
        +  "properties": {
        +    "count": {
        +      "description": "Number of entries in `rulings`.",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "rulings": {
        +      "items": {
        +        "description": "One matched court ruling.",
        +        "properties": {
        +          "case_number": {
        +            "description": "Court case signature, e.g. 'III CZP 8/22'.",
        +            "type": "string"
        +          },
        +          "court": {
        +            "description": "Court or division that issued the ruling.",
        +            "type": "string"
        +          },
        +          "date": {
        +            "description": "Judgment date, ISO 'YYYY-MM-DD' when the source stores a real date.",
        +            "type": "string"
        +          },
        +          "excerpt": {
        +            "description": "Text fragment of the ruling that matched the query.",
        +            "type": "string"
        +          },
        +          "link": {
        +            "description": "Ruling id; pass it back as get_ruling_text's ruling_link.",
        +            "type": "string"
        +          },
        +          "relevance_score": {
        +            "description": "Similarity score; 1.0 for an exact case-number hit.",
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "search_type": {
        +      "description": "Which retrieval path produced the hits: 'semantic', 'case_number', 'hybrid' or 'unknown'.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_rulings_by_article1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Rulings that cite a specific statute article.",
        +  "properties": {
        +    "article": {
        +      "description": "The article the search ran for, e.g. 'art. 415 KC'.",
        +      "type": "string"
        +    },
        +    "count": {
        +      "description": "Number of entries in `rulings`.",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "rulings": {
        +      "items": {
        +        "description": "One matched court ruling.",
        +        "properties": {
        +          "case_number": {
        +            "description": "Court case signature, e.g. 'III CZP 8/22'.",
        +            "type": "string"
        +          },
        +          "court": {
        +            "description": "Court or division that issued the ruling.",
        +            "type": "string"
        +          },
        +          "date": {
        +            "description": "Judgment date, ISO 'YYYY-MM-DD' when the source stores a real date.",
        +            "type": "string"
        +          },
        +          "excerpt": {
        +            "description": "Text fragment of the ruling that matched the query.",
        +            "type": "string"
        +          },
        +          "link": {
        +            "description": "Ruling id; pass it back as get_ruling_text's ruling_link.",
        +            "type": "string"
        +          },
        +          "relevance_score": {
        +            "description": "Similarity score; 1.0 for an exact case-number hit.",
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedverify_article_reference1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Audit of every article reference and case signature found in a text.",
        +  "properties": {
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "issues": {
        +      "items": {
        +        "description": "One citation that failed verification.",
        +        "properties": {
        +          "message": {
        +            "description": "Polish explanation of the problem.",
        +            "type": "string"
        +          },
        +          "type": {
        +            "enum": [
        +              "missing_act",
        +              "invalid_article",
        +              "invalid_case_number",
        +              "invalid_date"
        +            ],
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "The offending reference as it appears in the text.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "type",
        +          "value",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "issues_count": {
        +      "description": "Number of entries in `issues`.",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    },
        +    "suggestions": {
        +      "description": "Polish remediation hint, one per issue.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "valid": {
        +      "description": "True when no issue was found, i.e. issues is empty.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedverify_ruling1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "description": "Verdict on whether a court case signature exists, plus the audit trail of every source consulted.",
        +  "properties": {
        +    "case_number": {
        +      "description": "The signature in normalised form.",
        +      "type": "string"
        +    },
        +    "checked_sources": {
        +      "description": "Every source that was tried, in the order tried.",
        +      "items": {
        +        "description": "What one source was asked and how it answered.",
        +        "properties": {
        +          "elapsed_ms": {
        +            "description": "Wall-clock time spent on this source.",
        +            "type": "integer"
        +          },
        +          "error": {
        +            "description": "Truncated error detail. Present only for status 'error'.",
        +            "type": "string"
        +          },
        +          "error_code": {
        +            "description": "Why the source failed. Present only for status 'error'.",
        +            "enum": [
        +              "RATE_LIMITED",
        +              "TIMEOUT",
        +              "UNAVAILABLE",
        +              "BLOCKED",
        +              "PARSE_ERROR",
        +              "UNKNOWN"
        +            ],
        +            "type": "string"
        +          },
        +          "source": {
        +            "description": "Source id: 'prawmi_db', 'saos', 'nsa' or 'sn'.",
        +            "type": "string"
        +          },
        +          "status": {
        +            "description": "'miss' means the source answered cleanly with no match; 'error' and 'skipped' mean it could not be consulted.",
        +            "enum": [
        +              "hit",
        +              "miss",
        +              "error",
        +              "skipped"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "source",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "court": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "date": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "error": {
        +      "description": "Failure reason. Present only when success is false.",
        +      "type": "string"
        +    },
        +    "error_code": {
        +      "description": "Machine-readable failure code (INVALID_INPUT, DB_ERROR, NO_RESULTS, ACT_NOT_FOUND, ARTICLE_NOT_FOUND, UNKNOWN, ...).",
        +      "type": "string"
        +    },
        +    "found_in_db": {
        +      "description": "True only when PrawMi's own corpus holds the ruling.",
        +      "type": "boolean"
        +    },
        +    "link": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "matches": {
        +      "items": {
        +        "description": "A signature match reported by the source that verified it.",
        +        "properties": {
        +          "case_number": {
        +            "type": "string"
        +          },
        +          "court": {
        +            "type": "string"
        +          },
        +          "date": {
        +            "type": "string"
        +          },
        +          "link": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "case_number"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "note": {
        +      "description": "Polish caveat explaining how far the verdict actually reaches.",
        +      "type": "string"
        +    },
        +    "reason": {
        +      "description": "Why the input was rejected. Only for 'invalid_signature'.",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Source that produced the hit. Present only for verdict 'verified'.",
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "False only when the tool could not run (bad input, no DB). A successful call that found nothing still reports true.",
        +      "type": "boolean"
        +    },
        +    "uncertain_reason": {
        +      "description": "Why the check stopped short. Only for 'uncertain'.",
        +      "enum": [
        +        "external_disabled",
        +        "external_failure"
        +      ],
        +      "type": "string"
        +    },
        +    "verdict": {
        +      "description": "'uncertain' means at least one source could not be reached - it is neither confirmation nor denial.",
        +      "enum": [
        +        "verified",
        +        "not_found_anywhere",
        +        "uncertain",
        +        "invalid_signature"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
  3. 8 tool updates
    • First observedget_article
    • First observedget_ruling_text
    • First observedsearch_act_articles
    • First observedsearch_acts
    • First observedsearch_rulings
    • First observedsearch_rulings_by_article
    • First observedverify_article_reference
    • First observedverify_ruling

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources