Skip to main content
Glama

Change people

person_write
Destructive

Change the caller's private address book of people — crew and contacts (create, update, delete, unlink_account, mark_self, unmark_self, invite, accept_invitation). Personal data (birth date, passport) is never shared across users. linkedAccount reports whether this person has accepted an invitation and is linked to a Seamark account. isSelf marks the ONE person in the caller's book that is the caller, so voyages with them on the crew list count as the caller's own. invite mails a Seamark invitation to a person who crews at least one of the caller's trips (409 invitation_no_trips otherwise — the person must be on a trip's crew first); accepting it links their account to this person, which opens EVERY trip of the caller's they crew, past and future, so the mail lists all of them. It is rate-limited to one send per person per minute and 3 sends per recipient address per hour (a budget shared with trip_write's announce, keyed on the address rather than the feature), remembers the address on the person's email (advancing the person's updatedAt version token — the response carries the new value), and re-inviting replaces the previous invitation, so a mistyped address's link stops working. accept_invitation is the other side: it binds the CALLER's own account to the person named by the token, requires the caller's address to match the one invited, and returns every trip it opened. unlink_account revokes a person's account link everywhere at once AND cancels any invitation to that person that has not been accepted yet — a pending invite mail stops working, which is what makes the revocation final rather than something the other party can undo by re-clicking their link. It is idempotent, and on someone who was never linked its only effect is to cancel a pending invitation. mark_self sets isSelf (marking someone new moves the marker off whoever held it — at most one person is the caller), unmark_self clears it. Both are idempotent and unrelated to linkedAccount/invitations — "this is me" is the caller's own identity, not an access grant. IDs are 6-character case-sensitive alphanumeric strings. Timestamps are UTC ISO 8601. Distances are integer meters. Durations are integer seconds.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Goes far beyond the lone destructiveHint annotation: it discloses invite rate limits (1/min per person, 3/hr per address, shared budget), the 409 invitation_no_trips precondition, idempotency of unlink_account/mark_self, that invite replaces prior invitations and advances updatedAt, and that unlink_account cancels pending invites. This is exactly the kind of hidden-behavior context that prevents wrong calls.

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?

Purpose is front-loaded in the first sentence and every subsequent sentence carries substantive operational detail, but the dense single-block layout with heavy parentheticals and backtick tokens is harder to scan than it needs to be. No sentence is pure filler though.

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?

For an eight-action mutation tool with no output schema, the description is unusually complete: it explains invitation lifecycle, response contents (new updatedAt, list of opened trips), and error conditions. The notable gap is that delete's consequences (e.g., effect on crew lists of trips) are not described despite destructiveHint.

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 reported at 100%, so the baseline is 3, but the description adds real meaning: ID format (6-character case-sensitive alphanumeric), UTC ISO 8601 timestamps, that invite's email is remembered on the person's email field, that accept_invitation's token must match the caller's own address, and expectedUpdatedAt's role as a version token.

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 first sentence names a specific verb (Change) and resource (the caller's private address book of people — crew and contacts) and enumerates all eight supported actions, so the tool's scope is unambiguous. It is clearly differentiable from person_read.

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

Usage Guidelines3/5

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

The description disambiguates sub-actions well (invite vs accept_invitation, unlink_account vs mark_self) and notes the shared rate-limit budget with trip_write's announce, but it never states when to call this tool versus siblings like person_read. The guidance is implied rather than explicit.

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