Skip to main content
Glama

Reply To Review

reply_to_inbox_review
DestructiveIdempotent

Post the location's public reply to a Google review. Google allows one reply per review, so this replaces any reply already there; show the user the old reply too when there is one. This sends text to a real person from the account: show the user the exact text and the item it answers, and get their yes before calling. A 403 with code inbox_reconnect_required means the account lacks the platform permission for this channel or action (some channels still wait on platform review) or its token expired: tell the user to reconnect the account in AdaptlyPost and do not retry. 404 inbox_item_not_found means the id is unknown in this workspace. 429 inbox_rate_limited means the platform rate limited the call: wait a while before trying again. 503 inbox_platform_error means the platform failed: try again later. Needs the inbox.reply permission, which Admin and Editor hold (403 permission_denied otherwise), and an active plan.

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": {
      "id": "<id>",
      "text": "<text>"
    },
    "name": "reply_to_inbox_review"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYesThe review id, from list_inbox_reviews
textYesThe text to send. Your public reply to the review. Google measures the limit in UTF-8 bytes, not characters: see maxReplyLength on the review from list_inbox_reviews. Empty or too long text answers 400 inbox_reply_invalid
workspaceIdNoWorkspace to act in: an id from list_workspaces. Omit to act in the workspace list_workspaces marks current. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another

Output Schema

NameRequiredDescriptionDefault
resultYesThe review with its new reply. An InboxReview: id, accountId, platform (GOOGLE_BUSINESS), accountName, platformReviewId, reviewer { name, avatarUrl, isAnonymous }, rating (1 to 5), text, reply ({ text, updatedAt } or null), createdAt, updatedAt, status, repliedAt, maxReplyLength and capabilities { canReply }.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / text / description
      Previous value: -"The text to send. Up to 4096 bytes in UTF-8 (maxReplyLength on the review). Empty or too long text answers 400 inbox_reply_invalid"New value: +"The text to send. Your public reply to the review. Google measures the limit in UTF-8 bytes, not characters: see maxReplyLength on the review from list_inbox_reviews. Empty or too long text answers 400 inbox_reply_invalid"
  2. Changed4 schema fields changed
    • addedOutput schema / properties / result / additionalProperties
      Added value: +true
    • addedOutput schema / properties / result / properties
      Added value: +{
      +  "accountId": {
      +    "description": "The account `id` from GET /social-accounts",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "accountName": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "capabilities": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": true,
      +        "properties": {
      +          "canReply": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  "createdAt": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "id": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "maxReplyLength": {
      +    "description": "In UTF-8 bytes",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "platform": {
      +    "description": "One of: FACEBOOK, INSTAGRAM, THREADS, TIKTOK, TWITTER, BLUESKY, LINKEDIN, PINTEREST, YOUTUBE, MASTODON, TELEGRAM, GOOGLE_BUSINESS, TUMBLR, WORDPRESS",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "platformReviewId": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "rating": {
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "repliedAt": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "reply": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": true,
      +        "properties": {
      +          "text": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "updatedAt": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  "reviewer": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": true,
      +        "properties": {
      +          "avatarUrl": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "isAnonymous": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "name": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  "status": {
      +    "description": "One of: UNREAD, READ, DONE",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "text": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "updatedAt": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  }
      +}
    • addedOutput schema / properties / result / type
      Added value: +"object"
    • addedOutput schema / required
      Added value: +[
      +  "result"
      +]
  3. Added

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by explaining that only one reply is allowed and this replaces the existing one (matching destructiveHint), plus a confirmation workflow for a human-facing public action. It also maps 403/404/429/503 error codes to causes and remedies, and states the inbox.reply permission and plan requirement.

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 the one-reply replacement rule, then confirmation, then errors. It is dense but each sentence carries operational value; the error-code catalog is lengthy yet scannable.

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 destructive, human-visible write with an output schema and full annotations, the description covers the replacement semantics, safest-call procedure, permission model, and every documented failure branch. Nothing material is left for the agent to guess.

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 description coverage is 100%, so id, text, and workspaceId are already documented in detail, including the UTF-8 byte limit and the maxReplyLength reference. The description adds no parameter-level meaning beyond error-code context, so the baseline 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?

States a specific verb and resource ('Post the location's public reply to a Google review'), which cleanly separates it from reply_to_inbox_comment and delete_inbox_review_reply without needing their schemas.

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?

Gives clear preconditions: show the user the old reply when replacing, show the exact text and the item answered, and get explicit confirmation before calling. Usage is strongly implied by the review-only scope, though it never names the sibling tools an agent might confuse it with.

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