Skip to main content
Glama
dinwal
by dinwal

post_content

Publish or schedule social media posts with text, images, videos, and links across multiple platforms using platform-specific customizations.

Instructions

Post content immediately or schedule it for a future time on a social account

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesSocial account ID (from social_account_list)
messageYesPost content text
schedule_date_timeNoSchedule time in YYYY-MM-DD HH:MM:SS format. Omit for immediate posting.
image_urlNoArray of image URLs to attach
video_urlNoPublic video URL to attach
urlNoWebsite link to include
host_images_on_recurpostNoHost images on RecurPost (default: true)
fb_messageNoFacebook-specific message override
tw_messageNoTwitter/X-specific message override
ln_messageNoLinkedIn-specific message override
in_messageNoInstagram-specific message override
gmb_messageNoGoogle Business Profile-specific message override
pi_messageNoPinterest-specific message override
yt_messageNoYouTube-specific message override
tk_messageNoTikTok-specific message override
th_messageNoThreads-specific message override
bs_messageNoBluesky-specific message override
fb_post_typeNoFacebook post type
in_post_typeNoInstagram post type
in_reel_share_in_feedNoShare Instagram reel in feed
first_commentNoDefault first comment
fb_first_commentNoFacebook first comment
ln_first_commentNoLinkedIn first comment
in_first_commentNoInstagram first comment
ln_documentNoLinkedIn document URL (PPT/PDF/DOCX)
ln_document_titleNoLinkedIn document title
pi_titleNoPinterest pin title
gbp_ctaNoGoogle Business Profile call to action
gbp_cta_urlNoGoogle Business Profile CTA URL
yt_titleNoYouTube video title
yt_categoryNoYouTube video category
yt_privacy_statusNoYouTube privacy status
yt_user_tagsNoYouTube tags
yt_thumbNoYouTube custom thumbnail URL
yt_video_made_for_kidsNoIs the YouTube video made for kids
tk_privacy_statusNoTikTok privacy status
tk_allow_commentsNoAllow TikTok comments
tk_allow_duetNoAllow TikTok duets
tk_allow_stitchesNoAllow TikTok stitches

Implementation Reference

  • The 'post_content' tool is registered using `server.tool` and its handler calls `callAPI("/api/post_content", params)`.
    server.tool(
      "post_content",
      "Post content immediately or schedule it for a future time on a social account",
      {
        id: z
          .string()
          .describe("Social account ID (from social_account_list)"),
        message: z.string().describe("Post content text"),
        schedule_date_time: z
          .string()
          .optional()
          .describe(
            "Schedule time in YYYY-MM-DD HH:MM:SS format. Omit for immediate posting."
          ),
        image_url: z
          .array(z.string().url())
          .optional()
          .describe("Array of image URLs to attach"),
        video_url: z
          .string()
          .url()
          .optional()
          .describe("Public video URL to attach"),
        url: z.string().url().optional().describe("Website link to include"),
        host_images_on_recurpost: z
          .boolean()
          .optional()
          .describe("Host images on RecurPost (default: true)"),
        fb_message: z
          .string()
          .optional()
          .describe("Facebook-specific message override"),
        tw_message: z
          .string()
          .optional()
          .describe("Twitter/X-specific message override"),
        ln_message: z
          .string()
          .optional()
          .describe("LinkedIn-specific message override"),
        in_message: z
          .string()
          .optional()
          .describe("Instagram-specific message override"),
        gmb_message: z
          .string()
          .optional()
          .describe("Google Business Profile-specific message override"),
        pi_message: z
          .string()
          .optional()
          .describe("Pinterest-specific message override"),
        yt_message: z
          .string()
          .optional()
          .describe("YouTube-specific message override"),
        tk_message: z
          .string()
          .optional()
          .describe("TikTok-specific message override"),
        th_message: z
          .string()
          .optional()
          .describe("Threads-specific message override"),
        bs_message: z
          .string()
          .optional()
          .describe("Bluesky-specific message override"),
        fb_post_type: z
          .enum(["feed", "story", "reel"])
          .optional()
          .describe("Facebook post type"),
        in_post_type: z
          .enum(["feed", "story", "reel"])
          .optional()
          .describe("Instagram post type"),
        in_reel_share_in_feed: z
          .enum(["yes", "no"])
          .optional()
          .describe("Share Instagram reel in feed"),
        first_comment: z.string().optional().describe("Default first comment"),
        fb_first_comment: z
          .string()
          .optional()
          .describe("Facebook first comment"),
        ln_first_comment: z
          .string()
          .optional()
          .describe("LinkedIn first comment"),
        in_first_comment: z
          .string()
          .optional()
          .describe("Instagram first comment"),
        ln_document: z
          .string()
          .url()
          .optional()
          .describe("LinkedIn document URL (PPT/PDF/DOCX)"),
        ln_document_title: z
          .string()
          .optional()
          .describe("LinkedIn document title"),
        pi_title: z.string().optional().describe("Pinterest pin title"),
        gbp_cta: z
          .enum([
            "None",
            "Learn more",
            "Sign up",
            "Buy",
            "Order online",
            "Book",
            "Call now",
            "Offer",
          ])
          .optional()
          .describe("Google Business Profile call to action"),
        gbp_cta_url: z
          .string()
          .url()
          .optional()
          .describe("Google Business Profile CTA URL"),
        yt_title: z.string().optional().describe("YouTube video title"),
        yt_category: z.string().optional().describe("YouTube video category"),
        yt_privacy_status: z
          .enum(["Public", "Private", "Unlisted"])
          .optional()
          .describe("YouTube privacy status"),
        yt_user_tags: z.string().optional().describe("YouTube tags"),
        yt_thumb: z
          .string()
          .url()
          .optional()
          .describe("YouTube custom thumbnail URL"),
        yt_video_made_for_kids: z
          .enum(["yes", "no"])
          .optional()
          .describe("Is the YouTube video made for kids"),
        tk_privacy_status: z
          .enum(["Public to Everyone", "Mutual Follow Friends", "Self Only"])
          .optional()
          .describe("TikTok privacy status"),
        tk_allow_comments: z
          .enum(["yes", "no"])
          .optional()
          .describe("Allow TikTok comments"),
        tk_allow_duet: z
          .enum(["yes", "no"])
          .optional()
          .describe("Allow TikTok duets"),
        tk_allow_stitches: z
          .enum(["yes", "no"])
          .optional()
          .describe("Allow TikTok stitches"),
      },
      async (params) => {
        try {
          return toolResult(await callAPI("/api/post_content", params));
        } catch (e) {
          return toolResult({ error: String(e) }, true);
        }
      }
    );
Behavior2/5

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

Zero annotations provided, so description carries full burden of behavioral disclosure. It fails to mention side effects (e.g., content becomes public), reversibility, error conditions, timezone handling for scheduling, or rate limits. 'Post' implies publication but lacks critical safety/behavioral context for a publishing tool.

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?

Single sentence is efficient and front-loaded with no waste words. However, given the tool's high complexity (39 parameters), it may be excessively brief rather than appropriately concise, though technically well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Inadequate for a 39-parameter multi-platform tool with no output schema. The description omits the extensive platform-specific capabilities (Facebook/Instagram/TikTok/YouTube variations), media handling complexities, and library vs. publishing distinction that are critical for successful invocation.

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%, establishing baseline 3. The description hints at the schedule_date_time parameter's optionality via 'immediately or schedule', but adds no syntax details, validation rules, or guidance on platform-specific overrides (fb_message, in_post_type, etc.) beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States clear verbs (Post, schedule) and resource (content on social account) and distinguishes temporal modes. However, it does not explicitly differentiate from sibling 'add_content_in_library' or mention the multi-platform nature evident in the 39 parameters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implied usage guidance by contrasting immediate posting versus scheduling. However, it lacks explicit when-not-to-use conditions, prerequisites (e.g., obtaining account ID first), or guidance on choosing between this and the library-related sibling tool.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dinwal/recurpost-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server