Skip to main content
Glama

relationships

Read-only

Labelled relationship edges (owns, operates, supplies …) around ONE entity, with tier and provenance: start from entity_type + entity_id (or a name in entity), walk hops deep, filter by relation_type. as_of answers for a past date. An ambiguous name fails uncharged and lists the candidates. Metered: see CHARGING in the server instructions; quote first with billing_quote.

Input Schema

NameRequiredDescriptionDefault
hopsNoTraversal depth, 1-10 (agent keys). Default 1. The billing unit: priced per hop.
as_ofNoAnswer for a past date: YYYY-MM-DD or a UTC datetime.
limitNoMaximum edges to return, up to 100. Default 50.
entityNoStart entity by NAME: an exact (case-insensitive) match, else a name that contains it.
fieldsNoOnly these keys in each row (plus id). Omit for all.
offsetNoRows to skip, for paging. Default 0.
searchNoFree-text filter over edge text.
entity_idNoThe start entity's numeric id (with entity_type) — the unambiguous way to name it.
entity_typeNoEntity kind: deposit | infrastructure | company | project. Pins the start node with entity_id.
relation_typeNoOnly edges with this relation label, e.g. OPERATES, CONTAINS, MEMBER_OF.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed21 schema fields changed
    • removedInput schema / properties / as_of / default
      Removed value: -null
    • changedInput schema / properties / as_of / description
      Previous value: -"Answer for a past date: YYYY-MM-DD or a UTC datetime. Needs one start entity; a future date is a 400, not charged."New value: +"Answer for a past date: YYYY-MM-DD or a UTC datetime."
    • removedInput schema / properties / as_of / title
      Removed value: -"As Of"
    • removedInput schema / properties / entity / default
      Removed value: -null
    • changedInput schema / properties / entity / description
      Previous value: -"Start entity by NAME: an exact (case-insensitive) match, else a name that contains it. A name matching several entities is a 409 listing candidates."New value: +"Start entity by NAME: an exact (case-insensitive) match, else a name that contains it."
    • removedInput schema / properties / entity / title
      Removed value: -"Entity"
    • removedInput schema / properties / entity_id / default
      Removed value: -null
    • removedInput schema / properties / entity_id / title
      Removed value: -"Entity Id"
    • removedInput schema / properties / entity_type / default
      Removed value: -null
    • removedInput schema / properties / entity_type / title
      Removed value: -"Entity Type"
    • addedInput schema / properties / fields
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Only these keys in each row (plus id). Omit for all."
      +}
    • removedInput schema / properties / hops / title
      Removed value: -"Hops"
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • removedInput schema / properties / offset / title
      Removed value: -"Offset"
    • removedInput schema / properties / relation_type / default
      Removed value: -null
    • changedInput schema / properties / relation_type / description
      Previous value: -"Only edges with this relation label, e.g. OPERATES, CONTAINS, MEMBER_OF. Checked against the allowed set: an unknown label is a 400 before any charge."New value: +"Only edges with this relation label, e.g. OPERATES, CONTAINS, MEMBER_OF."
    • removedInput schema / properties / relation_type / title
      Removed value: -"Relation Type"
    • removedInput schema / properties / search / default
      Removed value: -null
    • removedInput schema / properties / search / title
      Removed value: -"Search"
    • removedInput schema / title
      Removed value: -"relationshipsArguments"
    • removedOutput schema / title
      Removed value: -"relationshipsDictOutput"
  2. Changed1 schema field changed
    • changedInput schema / properties / entity_id / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed21 schema fields changed
    • addedInput schema / properties / as_of / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / as_of / description
      Added value: +"Answer for a past date: YYYY-MM-DD or a UTC datetime. Needs one start entity; a future date is a 400, not charged."
    • removedInput schema / properties / as_of / type
      Removed value: -"string"
    • addedInput schema / properties / entity / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / entity / description
      Added value: +"Start entity by NAME: an exact (case-insensitive) match, else a name that contains it. A name matching several entities is a 409 listing candidates."
    • removedInput schema / properties / entity / type
      Removed value: -"string"
    • addedInput schema / properties / entity_id / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / entity_id / description
      Added value: +"The start entity's numeric id (with entity_type) — the unambiguous way to name it."
    • removedInput schema / properties / entity_id / type
      Removed value: -"string"
    • addedInput schema / properties / entity_type / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / entity_type / description
      Added value: +"Entity kind: deposit | infrastructure | company | project. Pins the start node with entity_id."
    • removedInput schema / properties / entity_type / type
      Removed value: -"string"
    • addedInput schema / properties / hops / description
      Added value: +"Traversal depth, 1-10 (agent keys). Default 1. The billing unit: priced per hop."
    • addedInput schema / properties / limit / description
      Added value: +"Maximum edges to return, up to 100. Default 50."
    • addedInput schema / properties / offset / description
      Added value: +"Rows to skip, for paging. Default 0."
    • addedInput schema / properties / relation_type / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / relation_type / description
      Added value: +"Only edges with this relation label, e.g. OPERATES, CONTAINS, MEMBER_OF. Checked against the allowed set: an unknown label is a 400 before any charge."
    • removedInput schema / properties / relation_type / type
      Removed value: -"string"
    • addedInput schema / properties / search / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / search / description
      Added value: +"Free-text filter over edge text."
    • removedInput schema / properties / search / type
      Removed value: -"string"
  4. Changed1 schema field changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "default": null,
      +  "title": "As Of",
      +  "type": "string"
      +}
  5. Changed2 schema fields changed
    • addedInput schema / properties / entity_id
      Added value: +{
      +  "default": null,
      +  "title": "Entity Id",
      +  "type": "string"
      +}
    • addedInput schema / properties / entity_type
      Added value: +{
      +  "default": null,
      +  "title": "Entity Type",
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "title": "relationshipsDictOutput",
      +  "type": "object"
      +}
  7. Added

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only and closed-world safety; the description adds genuinely non-obvious behavior: the call is metered and priced per hop, and an ambiguous name fails without charge and returns candidate names. It does not quantify cost, rate limits, or default result size, but the core behavioral risks are disclosed.

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?

Three tight sentences that front-load the resource and its one-entity scope before traversal mechanics and billing. No filler, though the 'Metered: see CHARGING' pointer is somewhat compressed and depends on external server instructions.

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 10-parameter read tool with an output schema, full schema descriptions, and annotations, the description covers everything an agent needs: how to anchor the traversal, how deep, how to filter, historical queries, ambiguity handling, and the billing precondition.

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

Parameters3/5

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

Schema coverage is 100%, and the description largely restates what the schema documents (hops as traversal depth, as_of as a past date, relation_type as an edge label filter). Its only marginal addition is framing entity_id as the unambiguous identifier versus name lookup, which the schema already hints at.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete resource (labelled relationship edges: owns, operates, supplies) and a clear scope constraint ('around ONE entity'), which separates it from broad lookups like nearby or company_search. It does not name a specific sibling tool it is the alternative to, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit entry recipe (start from entity_type + entity_id, or a name in `entity`), options for depth and relation filtering, and a concrete workflow rule: quote first with `billing_quote` before spending. It never states when NOT to use it versus entity_state, entity_history, or look_through, so no exclusion guidance.

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