Skip to main content
Glama

Postkey: Instagram DM Automation and Comment-to-DM

Postkey: start here

postkey_get_started
Read-onlyIdempotent

Postkey: Start here for Postkey work (Instagram DM automation such as comment-to-DM and follow to unlock, the Instagram inbox, scheduling posts): when the person asks about their Postkey profile, what is set up or what to do next, and before creating, scheduling or publishing in Postkey. Returns the profile you act in (account, with its time_zone and its own today_local and tomorrow_local dates), what this connection may do (you.can, you.send_policy), plan usage against every limit, social accounts with ids, what is on and off, what needs attention, and up to 3 suggestions (each says whether you or the person does it). One call is enough for a piece of work; call again after a refusal or when the person asks. For how Postkey works (recipes, rules, each plan's limits) use postkey_guide.

Input Schema

NameRequiredDescriptionDefault
detailNo"concise" (default): everything above. "full" adds the team members with an Inbox seat (inbox_team, the member ids for postkey_assign_conversation), the setup steps (onboarding), this connection's scopes and what agents may never do.

Output Schema

NameRequiredDescriptionDefault
okYesfalse: refused (isError; code, message, guide_topic, url); no change.
onNoParts switched on.
offNoParts switched off, with why.
youNoThis connection: connection, send_policy for replies and automations, publish_policy for posts (each held_in_postkey or confirm_in_chat), can (the tools it may call).
planNoname, status, trial_days_left.
guideNoversion, tool, skill_url.
stageNoHow far the profile is set up.
cachedNotrue: the same answer as up to 30 seconds ago.
limitsNoPlan usage, one row per limit: key, used, limit, resets_at. { unavailable: true } if it could not be read.
accountNoThe profile you act in: id, name, time_zone, now, now_local, today_local and tomorrow_local (the profile's own dates with the weekday, when it has a time zone), reconnect_url.
attentionNowaiting_for_approval, problems (code, message, who, url), near_limits.
inbox_teamNodetail full: team members with an Inbox seat (member_id, name).
onboardingNodetail full: the setup steps.
suggestionsNoUp to 3: title, who (you or the person), and the tool or url.
social_accountsNoActive social accounts: id, platform, handle, used_for, needs_reconnect.
suggested_openingNoA first line to offer the person.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / ok / description
      Previous value: -"false: refused (isError true; code, message, guide_topic, url), nothing changed."New value: +"false: refused (isError; code, message, guide_topic, url); no change."
  2. Changed1 schema field changed
    • changedOutput schema / properties / you / description
      Previous value: -"This connection: connection, send_policy (held_in_postkey or confirm_in_chat), can (the tools it may call)."New value: +"This connection: connection, send_policy for replies and automations, publish_policy for posts (each held_in_postkey or confirm_in_chat), can (the tools it may call)."
  3. Changed2 schema fields changed
    • changedInput schema / properties / detail / description
      Previous value: -"Default concise."New value: +"\"concise\" (default): everything above. \"full\" adds the team members with an Inbox seat (inbox_team, the member ids for postkey_assign_conversation), the setup steps (onboarding), this connection's scopes and what agents may never do."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "account": {
      +      "description": "The profile you act in: id, name, time_zone, now, now_local, today_local and tomorrow_local (the profile's own dates with the weekday, when it has a time zone), reconnect_url.",
      +      "type": "object"
      +    },
      +    "attention": {
      +      "description": "waiting_for_approval, problems (code, message, who, url), near_limits.",
      +      "type": "object"
      +    },
      +    "cached": {
      +      "description": "true: the same answer as up to 30 seconds ago.",
      +      "type": "boolean"
      +    },
      +    "guide": {
      +      "description": "version, tool, skill_url.",
      +      "type": "object"
      +    },
      +    "inbox_team": {
      +      "description": "detail full: team members with an Inbox seat (member_id, name).",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "limits": {
      +      "description": "Plan usage, one row per limit: key, used, limit, resets_at. { unavailable: true } if it could not be read."
      +    },
      +    "off": {
      +      "description": "Parts switched off, with why.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "ok": {
      +      "description": "false: refused (isError true; code, message, guide_topic, url), nothing changed.",
      +      "type": "boolean"
      +    },
      +    "on": {
      +      "description": "Parts switched on.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "onboarding": {
      +      "description": "detail full: the setup steps."
      +    },
      +    "plan": {
      +      "description": "name, status, trial_days_left."
      +    },
      +    "social_accounts": {
      +      "description": "Active social accounts: id, platform, handle, used_for, needs_reconnect."
      +    },
      +    "stage": {
      +      "description": "How far the profile is set up.",
      +      "type": "string"
      +    },
      +    "suggested_opening": {
      +      "description": "A first line to offer the person.",
      +      "type": "string"
      +    },
      +    "suggestions": {
      +      "description": "Up to 3: title, who (you or the person), and the tool or url.",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "you": {
      +      "description": "This connection: connection, send_policy (held_in_postkey or confirm_in_chat), can (the tools it may call).",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: it is a bootstrap read meant to precede mutations, it lists what the response surfaces (you.can, you.send_policy, per-limit usage, what's on/off, what needs attention), and it explains that suggestions attribute each action to the agent or the person. It stops short of describing partial-failure or staleness behavior.

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

Conciseness3/5

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

The opening clause is well front-loaded, but the second sentence is a long nested enumeration of return fields that largely duplicates the output schema, and the parenthetical asides ("Instagram DM automation such as comment-to-DM and follow to unlock...") add bulk before the actionable content. Every sentence roughly earns its place, but the return-value inventory is 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?

With an output schema already present, the description is more than complete for a zero-required-param read: it covers when to call, when to re-call, and how to interpret the suggestion ownership. The only redundancy is that it restates return fields the output schema already defines.

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% and the single `detail` enum is fully documented in-schema (concise vs. full, with the extra fields enumerated). The description adds nothing about the parameter, so the baseline of 3 applies — the schema does all the work here.

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 role — the entry-point read that returns the acting profile, connection capabilities, plan usage, social accounts and next-step suggestions — and explicitly separates itself from postkey_guide ("For how Postkey works ... use postkey_guide"). An agent can tell it apart from the ~50 siblings 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?

It gives explicit triggers (person asks about profile/setup/next steps; before creating, scheduling or publishing), a re-call policy ("One call is enough for a piece of work; call again after a refusal or when the person asks"), and routes explainer questions to the named alternative postkey_guide.

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