Skip to main content
Glama

Search Draft Legislation

ris_search_drafts
Read-onlyIdempotent

Search Austria’s federal lawmaking pipeline BEFORE promulgation — the monitoring counterpart to ris_search_gazette (what will become law). stage selects the phase: review_drafts (Begutachtungsentwürfe — draft laws a ministry has put into public review, before any government bill exists) or government_bills (Regierungsvorlagen — bills the council of ministers adopted and submitted to parliament, 2004+). Filter by query (full text), title, ministry (accepts an abbreviation like "BMF" — expanded to RIS’s exact designation; the historical name at submission time counts), in_review_on (review_drafts only — drafts whose review window covers the date; today = "what is in Begutachtung right now"), or decided_from/to (government_bills only — council adoption date). changed_since gives coarse recency. Each record carries materials — the companion documents filed with the draft (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA, covering letter, annexes); the Erläuterungen carry the drafting reasoning the bill text omits, and passing a materials[].url to ris_get_document as document_url is the only way to read one (format there picks the rendition returned). Documents are preparatory, not binding law. Ministry codes: ris_list_reference topic ministries.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNo1-based result page. Default 1.
queryNoFull-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Omit to leave unfiltered; a blank value is rejected.
stageYesWhich pipeline stage to search — one per call. review_drafts (Begut, ministerial review) or government_bills (RegV, council-adopted bills). Details: ris_list_reference topic stages.
titleNoTitle search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected.
sort_byNoSort column: date (review deadline or adoption date per stage), ministry, or title. Default: upstream order.
ministryNoSubmitting ministry (EinbringendeStelle). Accepts an abbreviation ("BMF", "BMWET") or a full designation; use the ministry’s name at the time of submission. An abbreviation missing from the table is rejected; a full designation missing from it is sent as written. Table: ris_list_reference topic ministries. Omit to leave unfiltered; a blank value is rejected.
page_sizeNoDocuments per page: 10 or 20 (default 20). For more results, keep the size and raise page.
decided_toNogovernment_bills only. Latest adoption date (YYYY-MM-DD).
decided_fromNogovernment_bills only. Earliest council-of-ministers adoption date (YYYY-MM-DD).
in_review_onNoreview_drafts only. Drafts whose public-review window covers this date (YYYY-MM-DD). Today = drafts currently in Begutachtung.
changed_sinceNoCoarse recency filter — documents changed in RIS within the interval. For exact windows use ris_track_changes.
sort_directionNoSort direction; applies with sort_by.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number RIS served.
errorNoPresent when the call failed. Absent on success.
noticeNoZero-hit guidance — names the likely cause and the concrete next call.
resultsNoMatching pipeline documents for the requested page. Totals and paging in enrichment.
pageSizeNoPage size RIS applied.
truncatedNoPresent and true when more pages exist beyond this one — raise page to continue.
totalCountNoTotal matching documents across all pages.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • changedInput schema / properties / ministry / description
      Previous value: -"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\") — expanded to RIS’s exact-match designation; use the ministry’s name at the time of submission. Table: ris_list_reference topic ministries."New value: +"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\", \"BMWET\") or a full designation; use the ministry’s name at the time of submission. An abbreviation missing from the table is rejected; a full designation missing from it is sent as written. Table: ris_list_reference topic ministries. Omit to leave unfiltered; a blank value is rejected."
    • addedInput schema / properties / ministry / pattern
      Added value: +"\\S"
    • removedInput schema / properties / page_size / anyOf
      Removed value: -[
      -  {
      -    "const": 10,
      -    "type": "number"
      -  },
      -  {
      -    "const": 20,
      -    "type": "number"
      -  },
      -  {
      -    "const": 50,
      -    "type": "number"
      -  },
      -  {
      -    "const": 100,
      -    "type": "number"
      -  }
      -]
    • changedInput schema / properties / page_size / description
      Previous value: -"Documents per page — RIS accepts 10, 20, 50, or 100. Default 20."New value: +"Documents per page: 10 or 20 (default 20). For more results, keep the size and raise page."
    • addedInput schema / properties / page_size / enum
      Added value: +[
      +  10,
      +  20
      +]
    • addedInput schema / properties / page_size / type
      Added value: +"number"
    • changedInput schema / properties / query / description
      Previous value: -"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only."New value: +"Full-text search (Suchworte). Boolean operators UND/ODER/NICHT or AND/OR/NOT, parentheses, quoted phrases; wildcard * is trailing-only. Omit to leave unfiltered; a blank value is rejected."
    • addedInput schema / properties / query / pattern
      Added value: +"\\S"
    • changedInput schema / properties / title / description
      Previous value: -"Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it."New value: +"Title search (Titel) — phrase field: * allowed leading or trailing with ≥2 characters beside it. Omit to leave unfiltered; a blank value is rejected."
    • addedInput schema / properties / title / pattern
      Added value: +"\\S"
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `stage_filter_mismatch`: in_review_on was combined with stage: government_bills, or decided_from/to with stage: review_drafts — rejected locally before any upstream call; the message names the offending pair. `invalid_query`: A page past the last page of results; or a parameter value rejected locally (ministry matched no entry in the RIS ministries table, or matched more than one); or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `stage_filter_mismatch`: in_review_on was combined with stage: government_bills, or decided_from/to with stage: review_drafts — rejected locally before any upstream call; the message names the offending pair. `unresolved_ministry`: ministry is an abbreviation-shaped value matching no row of the RIS ministries table (the message names the closest matches), or a ministry the table lists only for another issuer parameter (the message names the parameters that accept it) — rejected locally before any upstream call. A value the table does not know that contains a space is sent to RIS as written instead. `invalid_query`: A page past the last page of results; or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "stage_filter_mismatch",
      -  "invalid_query",
      -  "upstream_error",
      -  "upstream_timeout"
      -]New value: +[
      +  "stage_filter_mismatch",
      +  "unresolved_ministry",
      +  "invalid_query",
      +  "upstream_error",
      +  "upstream_timeout"
      +]
  2. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "results",
      +      "totalCount",
      +      "page",
      +      "pageSize"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `stage_filter_mismatch`: in_review_on was combined with stage: government_bills, or decided_from/to with stage: review_drafts — rejected locally before any upstream call; the message names the offending pair. `invalid_query`: A page past the last page of results; or a parameter value rejected locally (ministry matched no entry in the RIS ministries table, or matched more than one); or RIS rejecting a value in-band (the Client error message is passed through verbatim, in German, and it does not name the page). `upstream_error`: RIS is unreachable, returned a server error, or served an HTML error page. `upstream_timeout`: RIS did not answer the search within the request deadline. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "stage_filter_mismatch",
      +            "invalid_query",
      +            "upstream_error",
      +            "upstream_timeout"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "results",
      -  "totalCount",
      -  "page",
      -  "pageSize"
      -]
  3. Changed4 schema fields changed
    • changedOutput schema / properties / results / items / properties / materials / description
      Previous value: -"Companion documents filed with the draft — the Erläuterungen (explanatory notes, carrying the reasoning the bill text omits), Textgegenüberstellung (redline against the current law), Vorblatt/WFA (impact assessment), the covering letter, and any annexes. Read one by passing a urls entry to ris_get_document as document_url. Empty when the ministry filed none; coverage is uneven by design."New value: +"Companion documents filed with the draft — the Erläuterungen (explanatory notes, carrying the reasoning the bill text omits), Textgegenüberstellung (redline against the current law), Vorblatt/WFA (impact assessment), the covering letter, and any annexes. Read one by passing its url to ris_get_document as document_url. Empty when the ministry filed none; coverage is uneven by design."
    • addedOutput schema / properties / results / items / properties / materials / items / properties / url
      Added value: +{
      +  "description": "One rendition URL for this companion — its HTML rendition, or its PDF where RIS files no HTML one (roughly one companion in eight, nearly all of them review-draft covering letters). Pass it to ris_get_document as document_url: the extension is discarded there and format selects what comes back (markdown, html, or the RIS Nutzdaten xml of this companion, plus the companion’s own rendition URLs under urls_only), so this one URL reaches every text rendition the companion has. A PDF-only companion has none, and the URL is a direct download. The filename is opaque and per-record, so no document number reaches it.",
      +  "type": "string"
      +}
    • removedOutput schema / properties / results / items / properties / materials / items / properties / urls
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Rendition URLs of this companion document. Pass one to ris_get_document as document_url — the filename is opaque and per-record, so this is the only handle to it.",
      -  "properties": {
      -    "html": {
      -      "description": "HTML rendition URL.",
      -      "type": "string"
      -    },
      -    "pdf": {
      -      "description": "PDF rendition URL.",
      -      "type": "string"
      -    },
      -    "rtf": {
      -      "description": "RTF rendition URL, where RIS publishes one.",
      -      "type": "string"
      -    },
      -    "xml": {
      -      "description": "XML rendition URL (RIS Nutzdaten schema).",
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • changedOutput schema / properties / results / items / properties / materials / items / required
      Previous value: -[
      -  "type",
      -  "urls"
      -]New value: +[
      +  "type",
      +  "url"
      +]
  4. Changed4 schema fields changed
    • changedOutput schema / properties / results / items / properties / content_urls / description
      Previous value: -"Rendition URLs of the main document (attachments are excluded)."New value: +"Rendition URLs of the main document (companion documents ride in materials)."
    • addedOutput schema / properties / results / items / properties / document_url
      Added value: +{
      +  "description": "RIS web view of the draft document (DokumentUrl) — for humans.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / materials
      Added value: +{
      +  "description": "Companion documents filed with the draft — the Erläuterungen (explanatory notes, carrying the reasoning the bill text omits), Textgegenüberstellung (redline against the current law), Vorblatt/WFA (impact assessment), the covering letter, and any annexes. Read one by passing a urls entry to ris_get_document as document_url. Empty when the ministry filed none; coverage is uneven by design.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One companion document filed alongside the draft.",
      +    "properties": {
      +      "name": {
      +        "description": "RIS-supplied label, as filed. Unstable across records — the same content appears as \"Vorblatt und WFA\", \"Vorblatt+WFA\", or \"WFA\"; \"Textgegenüberstellung\" or \"TGÜ\". Read type, not this, to classify.",
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Content type — Material (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA), Letter (the Begleitschreiben covering the review draft), or Attachment (annex texts, e.g. treaty translations). The reliable discriminator: name is free text and varies per record.",
      +        "type": "string"
      +      },
      +      "urls": {
      +        "additionalProperties": false,
      +        "description": "Rendition URLs of this companion document. Pass one to ris_get_document as document_url — the filename is opaque and per-record, so this is the only handle to it.",
      +        "properties": {
      +          "html": {
      +            "description": "HTML rendition URL.",
      +            "type": "string"
      +          },
      +          "pdf": {
      +            "description": "PDF rendition URL.",
      +            "type": "string"
      +          },
      +          "rtf": {
      +            "description": "RTF rendition URL, where RIS publishes one.",
      +            "type": "string"
      +          },
      +          "xml": {
      +            "description": "XML rendition URL (RIS Nutzdaten schema).",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "urls"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / results / items / required
      Previous value: -[
      -  "document_number",
      -  "stage",
      -  "content_urls"
      -]New value: +[
      +  "document_number",
      +  "stage",
      +  "materials",
      +  "content_urls"
      +]
  5. Changed3 schema fields changed
    • changedInput schema / properties / decided_from / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • changedInput schema / properties / decided_to / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
    • changedInput schema / properties / in_review_on / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$"
  6. Changed1 schema field changed
    • changedInput schema / properties / ministry / description
      Previous value: -"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\") — expanded server-side to RIS’s exact-match designation; use the ministry’s name at the time of submission. Table: ris_list_reference topic ministries."New value: +"Submitting ministry (EinbringendeStelle). Accepts an abbreviation (\"BMF\") — expanded to RIS’s exact-match designation; use the ministry’s name at the time of submission. Table: ris_list_reference topic ministries."
  7. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context: documents are preparatory and not binding law, materials carry drafting reasoning, and passing materials[].url to ris_get_document is the only way to read them. It also discloses that ministry abbreviations are expanded to RIS's exact designation and historical names count. Minor gap: no explicit statement about pagination behavior beyond schema, but the description adds substantial context beyond annotations.

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?

The description is dense but well-organized, front-loading the core purpose and stage distinction before diving into parameters. Every sentence carries information, though the materials explanation is somewhat long. It earns a 4 for being information-dense without being bloated, but loses a point for the slightly extended materials digression that could be tightened.

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?

With an output schema present, the description doesn't need to explain return values. The description covers the tool's position in the workflow (pre-promulgation counterpart to ris_search_gazette), the stage semantics, parameter interactions (stage-specific filters), the materials relationship to ris_get_document, and the legal status of results. For a complex 12-parameter tool, this is complete.

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 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains the stage parameter's phases in context (Begutachtungsentwürfe vs Regierungsvorlagen), clarifies that ministry accepts abbreviations and expands them, explains in_review_on's 'today' semantics, and describes what materials contain. This goes beyond the schema's field-level descriptions, justifying a 4.

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?

The description clearly identifies the tool as a search over Austria's federal lawmaking pipeline before promulgation, with a specific verb ('search'), resource ('drafts'), and scope ('before promulgation'). It explicitly distinguishes itself from ris_search_gazette as the monitoring counterpart, making the purpose unambiguous.

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?

The description provides explicit guidance on when to use this tool versus alternatives: it names ris_search_gazette as the counterpart for post-promulgation law, and mentions ris_track_changes for exact change windows. It also explains stage selection (review_drafts vs government_bills) and points to ris_list_reference for ministry codes, giving clear routing context.

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.