Skip to main content
Glama

get_writing_style

Read-only

Shows how the user writes, so messages you write for them sound like them. Call it before drafting a message for the user (send_message, schedule_message, edit_message) when you are composing the words; skip it when the user dictated the exact text. With chat, returns the user's own recent messages in that chat; if they wrote fewer than 5 there (a new contact or a mostly incoming chat), or without chat, adds a few of their messages from each of their one-to-one chats of the last 30 days, labelled by chat, so you can pick the closest relationship. Only messages the user typed themselves are included; messages sent through this server are left out (best effort: a few may appear after WhatsApp is re-linked). Returns { source (chat, chat+global or global), chat, chat_messages, other_chats: [{ chat, messages }], hints, guidance }: chat and each other_chats chat have the contact fields (name; name_source: address_book, push_name, group_subject, business, phone or unresolved; canonical_jid: the JID to pass to send_message and read_chat_history; phone_jid and lid_jid: the chat's phone-number and LID forms, null when unknown or for groups; phone_display: the number as +). hints summarizes the sample (median_length, emoji_rate, top_emoji, laughs, capitalized_rate, ending_punctuation_rate, burst_rate). Copy the style, never the content.

Input Schema

NameRequiredDescriptionDefault
chatNoOptional. The chat you're about to write in: a contact or group name, a phone number with country code, or a JID. Leave it out for the user's general style.

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 only declare readOnly/openWorld=false, so the description carries the behavioral load and does it well: it discloses the <5-message fallback, per-chat labelling, that only self-typed messages are included, and a best-effort caveat about re-linking. This is rich context beyond the annotations, though the sampling caveat is a bit buried mid-paragraph.

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 and usage are front-loaded in the first two sentences, which is strong. The long return-shape sentence is dense and somewhat heavy, but since no output schema exists, that detail is doing necessary work rather than padding.

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?

With no output schema, the description fully explains the return object (source, chat, chat_messages, other_chats, hints, guidance, contact fields) and the sampling logic. An agent has everything needed to call it correctly and interpret the response.

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% and already documents `chat`, so baseline is 3. The description adds genuine meaning beyond the schema: with `chat` it returns that chat's own messages, and it explains the fallback to global one-to-one samples when that chat is sparse, which the schema does not convey.

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 — it shows how the user writes so composed messages sound like them — and names the sibling tools (send_message, schedule_message, edit_message) it supports. An agent can distinguish this from read_chat_history or search_messages without opening a 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 says when to call it (before composing words for the user) and when to skip it (when the user dictated the exact text), with the relevant sibling tools named. Nothing is left to inference.

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