Skip to main content
Glama

unrelate

End a relationship as of a date by closing its edge with valid_until, removing it from current reads while preserving its history; optionally note a newer relation that supersedes it.

Instructions

End a relation as of a date — the temporal counterpart to relate. Records that a relationship STOPPED being true (someone left a job, a project ended) by closing the edge with a valid_until: it drops out of current reads but its history is PRESERVED (unlike forget, which deletes the edge). Identify the edge by its relations/{uid} or by the (subject, predicate, object) triple (which closes the single open match). Pass endedAt for when it ended (defaults to now); pass supersededBy when a newer relation replaces it.

Input Schema

NameRequiredDescriptionDefault
objectNoObject of the relation to close: entities/{uid}, a bare ULID, "self", or a display name.
scopesNoScopes to search when identifying the edge by triple: project, personal, team. Defaults to project+personal.
endedAtNoWhen the relationship ended (RFC 3339 UTC); becomes the edge's valid_until. Defaults to now.
subjectNoSubject of the relation to close: entities/{uid}, a bare ULID, "self", or a display name. Provide with predicate+object as an alternative to relation.
relationNoThe relation to close: relations/{uid} or a bare ULID (as returned by relations() or recall). Use THIS or a (subject, predicate, object) triple, not both.
predicateNoPredicate of the relation to close, e.g. works_at.
supersededByNoOptional relations/{uid} of a newer relation that replaces this one (a correction). Omit for a pure close — the relationship simply ended.

Output Schema

NameRequiredDescriptionDefault
nameYesResource name of the closed relation.
statusYesAlways "retracted" on success: the edge is closed (valid_until set) but its history is preserved.
validUntilYesThe valid_until the relation was closed at (RFC 3339 UTC).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the edge drops out of current reads while history survives, that the triple form 'closes the single open match', and that endedAt defaults to now. It does not cover failure modes (no open match, multiple open matches, permission requirements), which is the only remaining gap.

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 with the core action and its key distinction, then parameter guidance. It is dense — three parenthetical explanations in four sentences — but every clause adds information an agent needs; nothing is filler.

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

Completeness4/5

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

Covers the two identification modes, temporal defaults, the correction-vs-close distinction, and the read-visibility consequence; an output schema exists so return values need no explanation. The one thing an agent might still want — what happens when zero or multiple open edges match — is left implicit in 'the single open match'.

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 already 100%, so the baseline is 3, but the description adds decision-level meaning beyond the schema: it explains the either/or between relations/{uid} and the triple form, states that endedAt defaults to now, and clarifies that supersededBy is for corrections while omission means a pure close.

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?

States a specific verb (end a relation) with a specific temporal mechanism (closing the edge with valid_until), and immediately distinguishes itself from both `relate` (its inverse) and `forget` (which deletes rather than preserves). An agent can pick it out of a 60-tool sibling list without opening the 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?

Explicitly frames itself as 'the temporal counterpart to relate' and gives concrete when-to-use scenarios (someone left a job, a project ended). It also names the wrong-tool alternative and the consequence: 'unlike forget, which deletes the edge' — history is preserved here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.