Skip to main content
Glama
Upload-Post

Upload-Post

Official

Send a direct message

send_dm
Destructive

Send an Instagram direct message from a connected Upload-Post profile using a recipient ID, with a preview-first approval step before anything is sent.

Instructions

Send an Instagram DM to a recipient from a connected Upload-Post profile. Use a recipient_id returned by Instagram comments or DM conversation tools. Needs the user's approval: call it first without confirmed to get a preview (nothing is sent), show the user exactly what will go out, and repeat the call with confirmed: true only after they approve.

Input Schema

NameRequiredDescriptionDefault
userYesUpload-Post profile name that owns the connected Instagram account.
buttonsNoUp to 3 web_url buttons rendered in the DM. Each item is { title, url }.
messageYesDM body to send.
platformYesDM platform. Currently only Instagram DMs are supported.
confirmedNoSet to true only after the user has seen the preview this tool returns without it and approved it. Without it nothing is sent.
recipient_idYesInstagram recipient/commenter ID. Required by the Upload-Post API.

Output Schema

NameRequiredDescriptionDefault
resultNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.17.2
    • addedInput schema / properties / confirmed
      Added value: +{
      +  "description": "Set to true only after the user has seen the preview this tool returns without it and approved it. Without it nothing is sent.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changedv0.11.1
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  3. Changed1 schema field changedv0.7.0
    • addedInput schema / properties / buttons
      Added value: +{
      +  "description": "Up to 3 web_url buttons rendered in the DM. Each item is { title, url }.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "title": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "format": "uri",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "title",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
  4. First observedv0.4.0

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and openWorldHint=true, but the description adds behavior they cannot convey: the first call sends nothing and returns a preview, and confirmation must be obtained from the user before the second call. This is exactly the kind of context that prevents an agent from firing an irreversible message.

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 sentences, front-loaded with purpose, then sourcing guidance, then the approval protocol. No sentence restates the title or wastes tokens.

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, open-world send tool with an output schema already documenting return values, the description covers the purpose, required inputs' provenance, and the safety workflow. Nothing an agent needs to invoke it safely is missing.

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 beyond it by explaining the provenance of `recipient_id` and the two-phase meaning of `confirmed`, which the schema states more tersely. It adds nothing for `buttons` or `message`, though the schema already covers those adequately.

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 ("Send an Instagram DM") plus the scoping constraint that it comes from a connected Upload-Post profile. This clearly separates it from sibling tools like list_dm_conversations and reply_to_comment without needing the schema opened.

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 where the recipient_id comes from (Instagram comments or DM conversation tools) and prescribes the exact two-step protocol: call without `confirmed` for a preview, show the user, then repeat with `confirmed: true`. That is when-to-use and how-to-sequence guidance, not inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.