Skip to main content
Glama

resolve_person

Read-onlyIdempotent

Deterministically resolve a (possibly misheard) name — optionally with a company hint — to ONE person in your network (scope:'own', default) or your team's pooled network (scope:'team', the same scopes as search_people). A near-exact match to your own name resolves to you, flagged is_self. Returns 'matched' (with confidence), 'ambiguous' (ranked alternatives to ask the user about), or 'none'. Team results list the teams and teammates (known_by) who know each person. PREFER THIS over hand-rolled search_people ladders whenever the task is "who is X?" from a voice note, capture, or mention — same input always gives the same answer.

Input Schema

NameRequiredDescriptionDefault
nameYesThe person's name as heard/known — misspellings are expected and handled.
scopeNo'own' (default) — your network. 'team' — your POOLED TEAM network, as in search_people.
companyNoCompany hint if known (also fuzzy) — sharply improves disambiguation.
team_idNoFor scope:'team' — one team to search (from account_status.teams). Omit it to resolve across every team you're in. A team you don't belong to is rejected.

Output Schema

NameRequiredDescriptionDefault
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / team_id / description
      Previous value: -"For scope:'team' — the team to search (from account_status.teams). Optional when you're in exactly one team; required to pick when you're in more than one. A team you don't belong to is rejected."New value: +"For scope:'team' — one team to search (from account_status.teams). Omit it to resolve across every team you're in. A team you don't belong to is rejected."
  2. Changed2 schema fields changed
    • addedInput schema / properties / scope
      Added value: +{
      +  "description": "'own' (default) — your network. 'team' — your POOLED TEAM network, as in search_people.",
      +  "enum": [
      +    "own",
      +    "team"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / team_id
      Added value: +{
      +  "description": "For scope:'team' — the team to search (from account_status.teams). Optional when you're in exactly one team; required to pick when you're in more than one. A team you don't belong to is rejected.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "data": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "confidence": {
      +              "type": "number"
      +            },
      +            "match": {
      +              "additionalProperties": true,
      +              "properties": {
      +                "company": {
      +                  "$ref": "#/properties/data/anyOf/0/properties/match/properties/person_id"
      +                },
      +                "display_name": {
      +                  "type": "string"
      +                },
      +                "headline": {
      +                  "$ref": "#/properties/data/anyOf/0/properties/match/properties/person_id"
      +                },
      +                "id": {
      +                  "type": "string"
      +                },
      +                "name": {
      +                  "type": "string"
      +                },
      +                "person_id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "status": {
      +              "const": "matched",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "match",
      +            "confidence"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "status": {
      +              "const": "none",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "status"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "alternatives": {
      +              "items": {
      +                "additionalProperties": true,
      +                "properties": {
      +                  "company": {
      +                    "$ref": "#/properties/data/anyOf/0/properties/match/properties/company"
      +                  },
      +                  "confidence": {
      +                    "type": "number"
      +                  },
      +                  "display_name": {
      +                    "$ref": "#/properties/data/anyOf/0/properties/match/properties/display_name"
      +                  },
      +                  "headline": {
      +                    "$ref": "#/properties/data/anyOf/0/properties/match/properties/headline"
      +                  },
      +                  "id": {
      +                    "$ref": "#/properties/data/anyOf/0/properties/match/properties/id"
      +                  },
      +                  "name": {
      +                    "$ref": "#/properties/data/anyOf/0/properties/match/properties/name"
      +                  },
      +                  "person_id": {
      +                    "$ref": "#/properties/data/anyOf/0/properties/match/properties/person_id"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "status": {
      +              "const": "ambiguous",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "alternatives"
      +          ],
      +          "type": "object"
      +        }
      +      ],
      +      "description": "The operation result when ok is true."
      +    },
      +    "error": {
      +      "description": "A human-readable error when ok is false.",
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "Whether noticed completed the operation.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld=false, so the bar is lower; the description still adds a determinism contract ("same input always gives the same answer"), the self-resolution rule with is_self, and the three outcome states. It does not mention latency or cost of team-wide resolution, which keeps it off a 5.

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 purpose and the decisive preference guidance, and every sentence carries information. It is a dense block of prose with parenthetical asides (scope labels, flag names) that could be split for readability.

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 scope semantics, fuzzy input handling, disambiguation hints, and the matched/ambiguous/none outcome model, which is enough to call it correctly. An output schema exists so return-value detail is not required, though how confidence should be interpreted is left unstated.

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 100%, so the baseline is 3; the description goes further by framing company as a disambiguation lever and tying scope:'team' semantics to search_people, and by noting the implicit "all teams" behavior when team_id is omitted. It mostly echoes rather than extends the schema's own wording.

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 and resource ("deterministically resolve a name ... to ONE person") plus the two scopes, and explicitly contrasts with search_people. An agent can tell this apart from search_people, get_person, or research_person without opening any 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 an explicit use case ("who is X?" from a voice note, capture, or mention) and names the alternative to avoid ("hand-rolled search_people ladders"). Scope selection guidance is also given ('own' default vs 'team').

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