Skip to main content
Glama

Messaging: Send to contact

messaging_send_to_contact
Destructive

One-step send for voice-style requests: 'send a WhatsApp to Julien saying I'm 10 minutes late'. Resolves the recipient like messaging_resolve_recipient and sends the text ONLY when exactly one person matches (existing conversation or contact). When several people match, nothing is sent and the candidates are returned so you can ask the user which one. The user must have stated the message content; do not invent it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesHow the user refers to the recipient.
textYesExact message text the user asked to send.
providerYesMessaging provider named by the user. LinkedIn recipients use linkedin_resolve_person + linkedin_start_conversation instead.
account_idNoOptional Nilyo connection ID (unipile_account_id from list_connected_accounts). Required when the user has several accounts for the provider: pick the one the user named.
recipient_user_idNoExact provider user ID chosen by the user after an ambiguous result; skips name matching.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description adds valuable behavioral context: it sends ONLY when exactly one person matches, returns candidates on ambiguity, and requires the user to have stated the message content (do not invent it). It also notes that account_id is required when the user has several accounts. This goes beyond the annotations and helps the agent understand the tool's safety and decision behavior. A 4 is appropriate because the description doesn't cover every edge case (e.g., what happens if no one matches), but it adds substantial context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary use case and example, then the resolution behavior, then the safety constraint. Every sentence earns its place: the example clarifies the voice-style input, the ambiguity rule is critical for correct invocation, and the 'do not invent it' instruction prevents hallucination. No wasted words.

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 a tool with 5 parameters, 100% schema coverage, and no output schema, the description covers the key decision logic (single match vs. multiple matches), the provider routing, and the account_id requirement. It doesn't explicitly state what happens when zero people match, but the schema and annotations cover the rest. The description is complete enough for an agent to invoke it correctly in most cases.

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 description coverage is 100%, so the schema already documents all five parameters. The description adds meaning by explaining the resolution behavior tied to 'name' and 'recipient_user_id' (skips name matching), and the provider enum's LinkedIn exclusion. It also clarifies that 'text' must be the exact message the user asked to send. This is above the baseline 3 because the description enriches the parameters with behavioral context, though the schema already does the heavy lifting.

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 description states a specific verb ('send'), a resource ('voice-style requests'), and the exact behavior: resolves the recipient and sends only when exactly one person matches. It also distinguishes itself from messaging_resolve_recipient and messaging_send_message by describing the one-step combined flow. This is a clear, specific purpose that an agent can act on.

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?

The description explicitly says when to use this tool: for one-step voice-style requests where the user has stated the message content. It also names the alternative messaging_resolve_recipient and explains the disambiguation behavior (when several people match, nothing is sent and candidates are returned). The provider enum also routes LinkedIn users to linkedin_resolve_person + linkedin_start_conversation, which is an explicit exclusion. This is strong usage 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.