Skip to main content
Glama

search

Read-only

Search the TCLP knowledge graph using fusion search (semantic + BM25).

Args:
    query: Free-text search query (max 1000 characters).
    node_type: Content scope — "tclp" (clauses, glossary terms, guides) or "all".
        Laws, regulations, standards and frameworks are not searchable here:
        use `find_legal_resources`.
    content_type: Return only one content type: "clause", "glossary_term" or
        "guide". Omit to search every type.
    limit: Maximum number of results to return (1–50).
    rerank: Whether to apply RRF reranking when combining graph and text results.
    include_full_text: Include each hit's full body text (Markdown). Off by
        default — bodies are large; request only when you need the content,
        and prefer a small `limit` when you do.

Returns:
    JSON with "meta" (totals, timing) and "results" (ranked hits with title,
    url, content_type, scores, summary, optionally relationships_text,
    related and full_text). `summary` is short plain text: the clause
    summary, the first paragraph of a glossary definition, or a guide's
    excerpt. It is null when the item has none.
    Each hit's "references" lists the instruments it cites: pass a
    reference's `work_id` to `get_legal_resource` for details. A reference's
    `edge` (governs, references, describes) says how the content relates to
    the instrument; it is not a statement of the instrument's legal effect.
    An empty list means the hit cites no instruments. null with "lrsf" in
    meta.degraded means references could not be loaded: do not conclude
    that the hit cites no instruments.

Input Schema

NameRequiredDescriptionDefault
limitNo
queryYes
rerankNo
node_typeNoall
content_typeNo
include_full_textNo

Output Schema

NameRequiredDescriptionDefault
metaYes
resultsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / content_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "clause",
      +        "glossary_term",
      +        "guide"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Content Type"
      +}
    • addedOutput schema / $defs / _SearchHit / properties / summary
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Summary"
      +}
  2. Changed4 schema fields changed
    • addedInput schema / properties / limit / maximum
      Added value: +50
    • addedInput schema / properties / limit / minimum
      Added value: +1
    • addedInput schema / properties / query / maxLength
      Added value: +1000
    • addedInput schema / properties / query / minLength
      Added value: +1
  3. Changed5 schema fields changed
    • addedInput schema / properties / node_type / enum
      Added value: +[
      +  "tclp",
      +  "all"
      +]
    • addedOutput schema / $defs / _Reference
      Added value: +{
      +  "properties": {
      +    "edge": {
      +      "title": "Edge",
      +      "type": "string"
      +    },
      +    "jurisdiction": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Jurisdiction",
      +      "type": "array"
      +    },
      +    "name": {
      +      "title": "Name",
      +      "type": "string"
      +    },
      +    "nature": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "title": "Nature"
      +    },
      +    "staleness": {
      +      "title": "Staleness",
      +      "type": "string"
      +    },
      +    "status": {
      +      "title": "Status",
      +      "type": "string"
      +    },
      +    "work_id": {
      +      "title": "Work Id",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "edge",
      +    "work_id",
      +    "name",
      +    "nature",
      +    "jurisdiction",
      +    "status",
      +    "staleness"
      +  ],
      +  "title": "_Reference",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / _Related
      Added value: +{
      +  "properties": {
      +    "id": {
      +      "title": "Id",
      +      "type": "string"
      +    },
      +    "name": {
      +      "title": "Name",
      +      "type": "string"
      +    },
      +    "url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "title": "Url"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "name",
      +    "url"
      +  ],
      +  "title": "_Related",
      +  "type": "object"
      +}
    • addedOutput schema / $defs / _SearchHit / properties / references
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/_Reference"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "References"
      +}
    • addedOutput schema / $defs / _SearchHit / properties / related
      Added value: +{
      +  "items": {
      +    "$ref": "#/$defs/_Related"
      +  },
      +  "title": "Related",
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "_SearchHit": {
      +      "properties": {
      +        "content_type": {
      +          "title": "Content Type",
      +          "type": "string"
      +        },
      +        "entity_matches": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Entity Matches"
      +        },
      +        "full_text": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Full Text"
      +        },
      +        "id": {
      +          "title": "Id",
      +          "type": "string"
      +        },
      +        "ranks": {
      +          "$ref": "#/$defs/_SearchRanks"
      +        },
      +        "relationships_text": {
      +          "title": "Relationships Text",
      +          "type": "string"
      +        },
      +        "scores": {
      +          "$ref": "#/$defs/_SearchScores"
      +        },
      +        "title": {
      +          "title": "Title",
      +          "type": "string"
      +        },
      +        "url": {
      +          "title": "Url",
      +          "type": "string"
      +        }
      +      },
      +      "title": "_SearchHit",
      +      "type": "object"
      +    },
      +    "_SearchMeta": {
      +      "properties": {
      +        "degraded": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "title": "Degraded",
      +          "type": "array"
      +        },
      +        "graph_total": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Graph Total"
      +        },
      +        "request_id": {
      +          "title": "Request Id",
      +          "type": "string"
      +        },
      +        "text_total": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Text Total"
      +        },
      +        "took_ms": {
      +          "title": "Took Ms",
      +          "type": "integer"
      +        },
      +        "total_available": {
      +          "title": "Total Available",
      +          "type": "integer"
      +        }
      +      },
      +      "title": "_SearchMeta",
      +      "type": "object"
      +    },
      +    "_SearchRanks": {
      +      "properties": {
      +        "bm25": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Bm25"
      +        },
      +        "combined": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Combined"
      +        },
      +        "graph": {
      +          "anyOf": [
      +            {
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Graph"
      +        }
      +      },
      +      "title": "_SearchRanks",
      +      "type": "object"
      +    },
      +    "_SearchScores": {
      +      "properties": {
      +        "bm25": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Bm25"
      +        },
      +        "graph": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "title": "Graph"
      +        }
      +      },
      +      "title": "_SearchScores",
      +      "type": "object"
      +    }
      +  },
      +  "properties": {
      +    "meta": {
      +      "$ref": "#/$defs/_SearchMeta"
      +    },
      +    "results": {
      +      "items": {
      +        "$ref": "#/$defs/_SearchHit"
      +      },
      +      "title": "Results",
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "meta",
      +    "results"
      +  ],
      +  "title": "SearchResult",
      +  "type": "object"
      +}
  5. First observed

TDQS

A5/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true, destructiveHint=false), and the description adds substantial behavior the annotations cannot: full-text payload size and default, the RRF rerank behavior, and a degraded-mode caveat that null references plus `lrsf` in meta.degraded must not be read as 'cites no instruments'. That last point actively prevents a wrong inference.

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?

Long but tightly structured: a one-line purpose statement followed by Args and Returns blocks, with the routing constraint front-loaded before the parameter list. Every sentence carries information the agent needs; nothing is 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 a six-parameter hybrid search tool with a null-coverage schema, the definition covers query semantics, scope control, defaults, output shape, cross-tool handoffs (get_legal_resource, find_legal_resources), and a degraded-response edge case. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: it defines each of the six parameters, including enum values for node_type/content_type, the 1–50 limit bound, the 1000-character query cap, the default-off behavior of include_full_text, and the purpose of rerank.

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 opening line states a specific verb (Search), a specific resource (the TCLP knowledge graph), and the retrieval mechanism (fusion search, semantic + BM25). It also carves out what is NOT in this index and names the sibling that handles it (find_legal_resources), so an agent can route without opening schemas.

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?

Explicit when-not guidance: laws, regulations, standards and frameworks are not searchable here and should go to `find_legal_resources`. It also gives operational guidance for include_full_text (off by default because bodies are large; use a small limit when requesting them).

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.