Skip to main content
Glama

Say hello

event_say_hello
Idempotent

Sends a hello (a connection request) from the person to somebody listed in their event matches; when it is accepted, a conversation opens that both can read and answer from the app, the web page or an assistant. Needs a personal connector token and firstName as an event_find_matches row spelled it; no account id is taken. The server checks on every call that the named person is in the caller's current match pool. It is a single call: the hello is sent when the call succeeds. Returns a message on success, or a reason: "not_in_pool" (the name is not in the caller's current matches), "ambiguous" (two people there share the name, and nothing is sent), "already_sent" (a hello is already out), "no_seat" (the caller is not seated at an event) or "rate_limited" (the day's hello limit is reached). Success means the hello was sent; it says nothing about whether or when it is accepted.

Input Schema

NameRequiredDescriptionDefault
firstNameYesThe first name of the person, as an event_find_matches row spelled it, up to 40 characters; no surname and no account id. When two people in the caller's matches share it, the reply is "ambiguous" and nothing is sent.

Output Schema

NameRequiredDescriptionDefault
okNo
sentNo
errorNo
mutualNo
reasonNo
messageNo
servedByNo
firstNameNo
candidatesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "anyOf": [
      +    {
      +      "required": [
      +        "ok",
      +        "sent",
      +        "reason"
      +      ]
      +    },
      +    {
      +      "properties": {
      +        "ok": {
      +          "const": false
      +        }
      +      },
      +      "required": [
      +        "ok"
      +      ]
      +    },
      +    {
      +      "properties": {
      +        "found": {
      +          "const": false
      +        }
      +      },
      +      "required": [
      +        "found"
      +      ]
      +    },
      +    {
      +      "required": [
      +        "error"
      +      ]
      +    }
      +  ],
      +  "properties": {
      +    "candidates": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "error": {
      +      "type": "string"
      +    },
      +    "firstName": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "mutual": {
      +      "type": "boolean"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "sent": {
      +      "type": "boolean"
      +    },
      +    "servedBy": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / firstName / description
      Previous value: -"REQUIRED. The FIRST NAME of the person, exactly as an event_find_matches row spelled it. Never a surname, never an account id, never a name the person has not been shown on a row. If two people in their matches answer to it the reply is `ambiguous` and nothing is sent, and you ask which one they mean."New value: +"The first name of the person, as an event_find_matches row spelled it, up to 40 characters; no surname and no account id. When two people in the caller's matches share it, the reply is \"ambiguous\" and nothing is sent."
  3. Added

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the auth requirement (personal connector token), that the send is atomic ('single call: the hello is sent when the call succeeds'), the full set of failure reasons (not_in_pool, ambiguous, already_sent, no_seat, rate_limited) with their meanings, and the important caveat that success says nothing about acceptance. This is consistent with idempotentHint=true, since a repeat call yields already_sent rather than a duplicate send.

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 action and effect, then constraints, then failure modes — a logical order. It is dense and longer than typical, but nearly every sentence (auth requirement, pool check, error semantics, acceptance caveat) carries operational weight rather than 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 single-parameter mutation with an output schema present, the description covers everything an agent needs: prerequisites, input spelling rules, server-side validation, all documented failure reasons, and what success does and does not imply. Nothing material is left to inference.

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; the description nonetheless adds real meaning by explaining the firstName must match the event_find_matches spelling exactly, excludes surname and account id, and ties the ambiguous case to duplicate first names.

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?

The description states a specific verb and resource — sending a hello (connection request) to a person in the caller's event matches — and explains the downstream effect (a conversation opens). It clearly ties the name to an event_find_matches row, but it never contrasts itself with close siblings like event_send_request or event_accept, so an agent must infer the boundary.

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?

Implicit but strong: it says the name must be spelled as an event_find_matches row spelled it and that the server verifies the person is in the current match pool, which tells an agent to run a match lookup first. It also states a prerequisite personal connector token. It stops short of naming alternatives or stating when not to use it.

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