Skip to main content
Glama

CallMCP — Phone Call MCP Server

Set Invoice Email Recipients

set_billing_contacts
Idempotent

Replace the extra addresses that get the monthly invoice email (at most 3; an empty list clears them). The business owner always keeps getting every invoice and cannot be removed. Requires the current owner role on the business.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "emails": "<emails>"
    },
    "name": "set_billing_contacts"
  }
}

Input Schema

NameRequiredDescriptionDefault
emailsYesThe full list of extra invoice email addresses. Replaces the current list; [] clears it.
business_idNoBusiness ID (optional only when the token can access exactly one business).

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when success is false
successYesWhether the tool completed successfully
business_idNo
extra_emailsNo
max_extra_emailsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) the description discloses two things annotations cannot: the authorization requirement (current owner role) and a side effect that survives the operation (the business owner is always retained and cannot be removed). That materially changes how an agent composes the call.

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?

Three short sentences, each load-bearing: replacement semantics and cap first, the immovable owner constraint second, the authorization requirement last. No filler and no repetition of the tool name.

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?

The tool is a small mutation with an output schema, so return values need not be explained, and the description covers scope, clearing, authorization, and the owner invariant. The only residual gap is what happens on validation failure (e.g. an invalid or fourth address) and which sibling to read the current list from.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented — including the replace-vs-clear semantics of emails and the optional business_id condition. The description restates the 3-item cap and clearing behavior but adds no meaning the schema does not already carry; baseline 3 applies.

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 names a specific verb ("Replace") and a precise resource (the extra addresses receiving the monthly invoice email), plus scope limits (at most 3) and the clear semantics of an empty list. An agent can distinguish this write operation from the read-side get_billing_contacts sibling purely from the verb and scope.

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?

It makes the usage model explicit — this is a full replacement of the list, not an append, and [] clears it — and states the precondition of the current owner role. It stops short of naming the natural companion call (get_billing_contacts) for reading the existing list before replacing it, so an alternative is left implicit.

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.