Skip to main content
Glama

Search Norms

search_norms
Read-onlyIdempotent

Find legal articles from their subject, their wording, or an article number with no code named; returns a shortlist with highlighted snippets and the exact total. Query in French, descriptive terms (« délai de recours contentieux refus implicite »); put the code in the code filter (slug or exact name), keep the query for the subject. With no query, hits are whole texts, the most recently changed first. The response carries a facets block (code, jurisdiction): per filter name, a map of filter value to article count, reuse those keys verbatim to refine. Chain a hit into get_norm with its url, plus as_of when the dispute is governed by an earlier version.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "search_norms"
  }
}

Input Schema

NameRequiredDescriptionDefault
codeNoRestrict to one code/text by its URL slug ("code-civil", as in facets.code) or exact name. Omit to search the whole navigable referential.
as_ofNoConsultation date (YYYY-MM-DD): searches the versions valid at that date (point-in-time, same semantics as get_norm). Omit to search the versions currently in force.
limitNoMaximum number of results (default 10).
queryNoFrench query over legal articles. Matches article titles (boosted) and bodies; alias expansion handles acronyms and usual names.
valid_fromNoEarliest entry into force (YYYY-MM-DD) of the versions served, which are those in force at `as_of`, else today. A text's publication counts as its first version.
jurisdictionNoFilter by country/legal order, as an ISO 3166 alpha-2 country code: "FR" (France, the bulk of the corpus) or a foreign code ("SN", "DZ", "MA", "VN", "PE", …); plus "EU" for EU law and "INTL" for treaties/international law. A dotted path narrows to a type of text: "FR.LOI", "FR.DECRET", "EU.DIRECTIVE", "INTL.TREATY", as in facets.jurisdiction.

Output Schema

NameRequiredDescriptionDefault
hitsYes
queryYes
totalYes
facetsYes
pinnedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / jurisdiction / description
      Previous value: -"Filter by country/legal order, as an ISO 3166 alpha-2 country code: \"FR\" (France, the bulk of the corpus) or a foreign code (\"SN\", \"DZ\", \"MA\", \"VN\", \"PE\", …); plus \"UE\" for EU law and \"INTL\" for treaties/international law. A dotted path narrows to a type of text: \"FR.LOI\", \"FR.DECRET\", \"UE.DIRECTIVE\", \"INTL.TREATY\", as in facets.jurisdiction."New value: +"Filter by country/legal order, as an ISO 3166 alpha-2 country code: \"FR\" (France, the bulk of the corpus) or a foreign code (\"SN\", \"DZ\", \"MA\", \"VN\", \"PE\", …); plus \"EU\" for EU law and \"INTL\" for treaties/international law. A dotted path narrows to a type of text: \"FR.LOI\", \"FR.DECRET\", \"EU.DIRECTIVE\", \"INTL.TREATY\", as in facets.jurisdiction."
  2. Changed6 schema fields changed
    • removedInput schema / properties / date_from
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Earliest text date, inclusive (YYYY-MM-DD): its signature or adoption, else its publication."
      -}
    • removedInput schema / properties / date_to
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Latest text date, inclusive (YYYY-MM-DD)."
      -}
    • addedInput schema / properties / valid_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Earliest entry into force (YYYY-MM-DD) of the versions served, which are those in force at `as_of`, else today. A text's publication counts as its first version."
      +}
    • removedOutput schema / properties / hits / items / properties / date
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "format": "date"
      -}
    • addedOutput schema / properties / hits / items / properties / valid_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "format": "date"
      +}
    • addedOutput schema / properties / hits / items / properties / valid_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "format": "date"
      +}
  3. Changed5 schema fields changed
    • addedInput schema / properties / date_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Earliest text date, inclusive (YYYY-MM-DD): its signature or adoption, else its publication."
      +}
    • addedInput schema / properties / date_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Latest text date, inclusive (YYYY-MM-DD)."
      +}
    • changedInput schema / properties / jurisdiction / description
      Previous value: -"Filter by country/legal order, as an ISO 3166 alpha-2 country code: \"FR\" (France, the bulk of the corpus) or a foreign code (\"SN\", \"DZ\", \"MA\", \"VN\", \"PE\", …); plus \"UE\" for EU law and \"INTL\" for treaties/international law."New value: +"Filter by country/legal order, as an ISO 3166 alpha-2 country code: \"FR\" (France, the bulk of the corpus) or a foreign code (\"SN\", \"DZ\", \"MA\", \"VN\", \"PE\", …); plus \"UE\" for EU law and \"INTL\" for treaties/international law. A dotted path narrows to a type of text: \"FR.LOI\", \"FR.DECRET\", \"UE.DIRECTIVE\", \"INTL.TREATY\", as in facets.jurisdiction."
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
    • addedOutput schema / properties / hits / items / properties / date
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "format": "date"
      +}
  4. Changed4 schema fields changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Consultation date (YYYY-MM-DD): searches the versions valid at that date (point-in-time, same semantics as get_norm). Omit to search the versions currently in force."
      +}
    • removedInput schema / properties / date
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Consultation date (YYYY-MM-DD): searches the versions valid at that date (point-in-time, same semantics as get_norm). Omit to search the versions currently in force."
      -}
    • removedOutput schema / properties / hits / items / properties / titlePath
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
    • addedOutput schema / properties / hits / items / properties / title_path
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  5. Added

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, non-destructive, closed-world behavior, and the description adds valuable operational context: highlighted snippets, exact `total`, facets structure, sorting behavior with no query, and version semantics via `as_of`/`valid_from`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with purpose and return shape, then proceeds through query guidance, no-query behavior, facets, and chaining. Every sentence contributes actionable information for selecting or invoking the tool.

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, annotations covering safety, and full schema descriptions, the description completes the picture by explaining query strategy, filter interaction, response facets, and next-step chaining into get_norm.

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 schema already documents all six parameters in detail. The description still adds useful semantics around French query phrasing, using `code` instead of mixing code names into `query`, no-query behavior, and reusing facet keys verbatim for refinement.

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 states a specific action and resource: finding legal articles by subject, wording, or article number, and returning a ranked shortlist with snippets and an exact total. It also distinguishes this discovery step from get_norm, which is used when chaining a hit into a specific norm.

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?

It explicitly tells the agent to use French descriptive queries, place code lookups in the `code` filter, keep subject terms in `query`, and expect whole-text hits when `query` is omitted. It also names get_norm as the next step with `url` and `as_of` for earlier-version disputes.

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.