Skip to main content
Glama

horizon_scan

Read-onlyIdempotent

Scans recent legal documents across jurisdictions.

When to use: When you need to find legal content for a specific jurisdiction and optional filters. When not: Do not use this to read a document body or download a file. For plain text use list_full_text. For structured Markdown use list_markdown. For a complete citation bundle use evidence_pull. For a temporary source-file URL use document_presigned_url. Do not call without an iso from list_jurisdictions. Skip if you already have this scan for the same iso and filters.

Parameters: iso (required) is a jurisdiction code from list_jurisdictions (e.g. BE, or US_CA for a state). issuing_authority, type_of_authority. Topic, since, date_field, status, include_repealed, max_per_jurisdiction are optional. Empty data means the iso is outside the subscription, or no document matched.

Behavior: Read-only SELECT; does not create, update, or delete records, files, or credentials. The only effect is a database read. Auth: tools/call requires OAuth 2.0 or a Bearer token (401 if missing, invalid, revoked, or no active subscription). Rate limits: none at the MCP layer; safe to retry. Not cached; each call reads current subscription and document data. Documents with total_links of 0 are omitted.

Returns: A list of documents matching the filters, with pagination information.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "iso": "<iso>"
    },
    "name": "horizon_scan"
  }
}

Input Schema

NameRequiredDescriptionDefault
isoYesOne ISO code e.g. "IE", "NL", "US", etc.
sinceNoFreshness window. "yesterday", "today", "Nd"/"Nh"/"Nw" (e.g. "7d"), or ISO date "YYYY-MM-DD"yesterday
topicNoOptional filter (matches title) e.g. "employee monitoring" or "workplace surveillance"
statusNoOptional filter on status field e.g. "new", "updated" String.
date_fieldNoWhich date to window on. "crawling_date" (default) = when Lawstronaut crawled it. "publication_date" = when officially published. "last_updated" = when corpus record last changed.crawling_date
include_repealedNoIf false, drop documents where repealed=true
issuing_authorityNoOptional filter on issuing authority
type_of_authorityNoOptional filter on type of authority
max_per_jurisdictionNoMax docs to return per jurisdiction (1-100)

Output Schema

NameRequiredDescriptionDefault
dataYesDocuments in the requested jurisdiction that have crawled links; empty if none match. Each item is a content item.
messageYesResult message
paginationNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / date_field / enum
      Previous value: -[
      -  "crawling_date",
      -  "publication_date",
      -  "last_updated"
      -]New value: +[
      +  "crawl_date",
      +  "publication_date",
      +  "last_updated"
      +]
  2. Changed4 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"
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / max_per_jurisdiction / default
      Previous value: -50New value: +20
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "data": {
      +      "description": "Documents in the requested jurisdiction that have crawled links; empty if none match. Each item is a content item.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "classification": {
      +            "additionalProperties": false,
      +            "description": "Classification",
      +            "properties": {
      +              "authority_type": {
      +                "description": "Authority Type of the content",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "issuing_authority": {
      +                "description": "Issuing Authority of the content",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "issuing_authority_tags": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Issuing Authority Tags of the content"
      +              },
      +              "keywords": {
      +                "description": "Keywords of the content",
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              "source_keywords": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Source Keywords of the content"
      +              },
      +              "tags": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Tags of the content"
      +              }
      +            },
      +            "required": [
      +              "authority_type",
      +              "issuing_authority",
      +              "issuing_authority_tags",
      +              "keywords",
      +              "tags",
      +              "source_keywords"
      +            ],
      +            "type": "object"
      +          },
      +          "content": {
      +            "additionalProperties": false,
      +            "description": "Content",
      +            "properties": {
      +              "file": {
      +                "anyOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "content_type": {
      +                        "description": "Content Type",
      +                        "type": [
      +                          "string",
      +                          "null"
      +                        ]
      +                      },
      +                      "size_bytes": {
      +                        "description": "Size in bytes",
      +                        "type": [
      +                          "number",
      +                          "null"
      +                        ]
      +                      },
      +                      "url": {
      +                        "description": "Source-file metadata, not a downloadable URL. Call document_presigned_url for a temporary source-file URL.",
      +                        "type": [
      +                          "string",
      +                          "null"
      +                        ]
      +                      }
      +                    },
      +                    "required": [
      +                      "content_type",
      +                      "size_bytes",
      +                      "url"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "File metadata, or null when the document has no file. Not a citation bundle; call evidence_pull for that."
      +              },
      +              "markdown": {
      +                "description": "Path hint for the structured Markdown body. Call list_markdown to read it; this field is not the Markdown.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "text": {
      +                "description": "Path hint for the plain-text body. Call list_full_text to read it; this field is not the text.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "text",
      +              "markdown",
      +              "file"
      +            ],
      +            "type": "object"
      +          },
      +          "dates": {
      +            "additionalProperties": false,
      +            "description": "Dates",
      +            "properties": {
      +              "decided": {
      +                "description": "Decision Date",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "effective": {
      +                "description": "Effective Date",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "enacted": {
      +                "description": "Date of Enactment",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "expired": {
      +                "description": "Expiration Date",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "last_amended": {
      +                "description": "Date of Last Amendment",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "published": {
      +                "description": "Publication Date",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "repealed": {
      +                "description": "Date of Repeal",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "published",
      +              "enacted",
      +              "effective",
      +              "decided",
      +              "last_amended",
      +              "expired",
      +              "repealed"
      +            ],
      +            "type": "object"
      +          },
      +          "id": {
      +            "description": "ID",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "is_repealed": {
      +            "description": "Is Repealed",
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "jurisdiction": {
      +            "additionalProperties": false,
      +            "description": "Jurisdiction",
      +            "properties": {
      +              "country": {
      +                "description": "Country",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "iso": {
      +                "description": "ISO code of the jurisdiction",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "state": {
      +                "description": "State",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "iso",
      +              "country",
      +              "state"
      +            ],
      +            "type": "object"
      +          },
      +          "language": {
      +            "description": "Language",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "provenance": {
      +            "additionalProperties": false,
      +            "description": "Provenance",
      +            "properties": {
      +              "crawled_at": {
      +                "description": "Date and time the content was crawled",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "source_updated_at": {
      +                "description": "Date and time the source was updated",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "crawled_at",
      +              "source_updated_at"
      +            ],
      +            "type": "object"
      +          },
      +          "section_title": {
      +            "description": "Section Title",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "source": {
      +            "additionalProperties": false,
      +            "description": "Source",
      +            "properties": {
      +              "domain": {
      +                "description": "Domain of the source",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "identifier": {
      +                "description": "Identifier of the source",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "portal_id": {
      +                "description": "Portal ID of the source",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "portal_name": {
      +                "description": "Portal Name of the source",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "portal_tags": {
      +                "anyOf": [
      +                  {
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Portal Tasks of the source"
      +              },
      +              "secondary_identifier": {
      +                "description": "Secondary Identifier of the source",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "url": {
      +                "description": "URL of the source",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "portal_id",
      +              "portal_name",
      +              "portal_tags",
      +              "domain",
      +              "url",
      +              "identifier",
      +              "secondary_identifier"
      +            ],
      +            "type": "object"
      +          },
      +          "summary": {
      +            "description": "Summary",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "title": {
      +            "description": "Title",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "uuid": {
      +            "description": "UUID",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "version": {
      +            "description": "Version",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "uuid",
      +          "version",
      +          "title",
      +          "section_title",
      +          "language",
      +          "is_repealed",
      +          "summary",
      +          "jurisdiction",
      +          "source",
      +          "classification",
      +          "dates",
      +          "content",
      +          "provenance"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "message": {
      +      "description": "Result message",
      +      "type": "string"
      +    },
      +    "pagination": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "limit": {
      +          "description": "Maximum number of documents returned",
      +          "type": "number"
      +        },
      +        "next_id": {
      +          "description": "Cursor ID for the next page, or null when there is no next page",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "total_count": {
      +          "description": "Total number of matching documents",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "limit",
      +        "next_id"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "message",
      +    "data"
      +  ],
      +  "type": "object"
      +}
  3. 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 readOnlyHint=true, destructiveHint=false and idempotentHint=true, yet the description still adds material context: OAuth/Bearer auth requirements with 401 conditions, no MCP-layer rate limits, no caching (each call reads current subscription data), and the rule that documents with total_links of 0 are omitted. It also explains what an empty result means, which is genuinely useful failure interpretation.

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 front-loaded and cleanly sectioned (When to use / Parameters / Behavior / Returns), so an agent can jump to the relevant block. Some content is redundant: "Read-only SELECT; does not create, update, or delete records, files, or credentials" largely restates readOnlyHint/destructiveHint, and the parameter list repeats the required/optional split already encoded in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, open-world search tool, the definition covers selection criteria, prerequisites, auth, caching, filtering edge cases and empty-result semantics. An output schema exists, so the brief Returns line is sufficient rather than under-specified.

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 100% schema coverage the baseline is 3, but the description adds meaning beyond the schema: it marks iso as required and sourced from list_jurisdictions, gives BE/US_CA style code examples, groups the remaining eight as optional filters, and explains the empty-result case. It stops short of clarifying per-parameter format details like valid date_window syntax, which the schema already handles.

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?

"Scans recent legal documents across jurisdictions" gives a specific verb (scans) plus resource (legal documents) and scope (across jurisdictions). It is immediately distinguishable from the read/retrieval siblings such as list_full_text or document_presigned_url, which are named explicitly.

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?

Provides an explicit "When to use" and "When not" block, naming the alternative tool for each disqualifying case (list_full_text for plain text, list_markdown for structured Markdown, evidence_pull for citation bundles, document_presigned_url for temporary URLs). It also states a hard prerequisite (iso must come from list_jurisdictions) and a skip condition (already have this scan for the same iso/filters).

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.