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. `child_name` is a clause's
    child name (e.g. "Odhran's Clause"), null for other content and for a
    clause that has none; text search also matches it.
    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. Changed1 schema field changed
    • addedOutput schema / $defs / _SearchHit / properties / child_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Child Name"
      +}
  2. 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"
      +}
  3. 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
  4. 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"
      +}
  5. 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"
      +}
  6. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the read-only/open-world profile, but the description adds substantive behavior the annotations cannot: the cost warning on full-text bodies, the meaning of `summary`/`child_name` and their null cases, the semantics of a reference's `edge` (explicitly 'not a statement of the instrument's legal effect'), and critically the degraded-mode rule that null references plus 'lrsf' in meta.degraded must not be read as 'cites nothing'. This is exactly the kind of failure-mode disclosure that prevents misreads.

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?

Front-loaded one-liner, then clean Args/Returns structure with zero filler sentences. The Returns block is lengthy and partly restates what an output schema already encodes, though the degraded-mode and `edge` caveats justify most of it; a small amount could be trimmed.

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 6-parameter fusion search with a sibling set of five tools, the definition covers scoping, cost tradeoffs, result-field semantics, cross-tool handoff (`work_id` to `get_legal_resource`), and a partial-failure interpretation rule. Nothing an agent needs to call it correctly or interpret its output 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 it does: every one of the six parameters gets meaning beyond its type, including the 1000-char query cap, enum intent for `node_type` and `content_type`, the 1-50 limit range, what `rerank` actually reranks (RRF combination of graph and text results), and the default-off rationale for `include_full_text`.

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?

Opens with a specific verb+resource: 'Search the TCLP knowledge graph using fusion search (semantic + BM25)'. It also carves out scope explicitly -- laws/regulations/standards are excluded and routed to the named sibling `find_legal_resources` -- so an agent can separate it from find_legal_resources, entity_lookup, and taxonomy_* without opening a schema.

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?

Gives explicit when-to-use rules per parameter: `node_type` "tclp" vs "all", the exclusion of legal instruments with a named alternative tool, `content_type` to narrow to one type or omit for all, and a cost-based guideline to request `include_full_text` only when needed and with a small `limit`. When-not and alternative-tool guidance are both present.

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.

Resources