PostWire

Writes a native post per network from one idea and publishes it: TikTok, Instagram, YouTube & more

我該用這個嗎

品質與安全性

B
說明品質
99%
結構描述完整度
83%
命名品質
94%
汙染風險
20%
權限相符程度
100%
協定合規性
100%

發現項目(6)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'get_post_performance' description contains placeholder text在 get_post_performance 中
  • LOWTool description contains role marker that could confuse chat models在 my_account 中
  • LOWTool description contains role marker that could confuse chat models在 create_connect_link 中
  • LOWTool description contains role marker that could confuse chat models在 create_upload_link 中
  • INFOTool description contains placeholder or incomplete text在 get_post_performance 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~7,628Token(工具定義)
~1.9 KB典型回應大小
顯著的注意力影響(128k 上下文的 5.96%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "postwire-mcp": {
      "command": "npx",
      "args": [
        "postwire-mcp"
      ]
    }
  }
}

可執行的套件

npmpostwire-mcp0.3.5stdio

遠端端點

https://postwire.io/api/mcpstreamable-http

它能做什麼

工具清單

工具(19)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢list_platforms

Lists the social platforms PostWire can publish to and, for each, whether it connects with OAuth or with credentials. Does not need a PostWire account.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢my_account

Shows the signed-in PostWire account: plan, usage against each plan limit (posts this month, brands, AI drafts today, networks per post, scheduled posts waiting), brands, and which social accounts are connected, each with its brand and the handle, display name and picture the network reports for it. When a limit is at least 80 % used, the result includes the plan that raises it, its monthly price and a checkout link. On the free plan it also includes insights_teaser: how many What works patterns are ready and how strong they are. When no social account is connected, it includes a one-hour link to a page where several networks can be connected, and message_for_user: one plain sentence for the person.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢generate_posts(prompt, platforms, media_url, brand_voice)

Writes one draft per platform from a single idea, adapted to each network's rules (character limit, hashtags, title and tags for YouTube, hook-first caption for TikTok and Reels, link placement for LinkedIn). Nothing is published. Returns { drafts: { <platform>: { text, title?, tags? } } } and, if the writer skipped a platform, { missing: [...] }. Counts toward the account's daily AI limit.

輸入結構描述

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000,
      "description": "The idea or message to communicate. More detail gives better drafts."
    },
    "platforms": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "telegram",
          "bluesky",
          "mastodon",
          "discord",
          "tiktok",
          "youtube",
          "reddit",
          "linkedin",
          "facebook",
          "instagram",
          "x"
        ]
      },
      "minItems": 1,
      "description": "Platforms to write for, e.g. [\"linkedin\",\"x\",\"bluesky\"]."
    },
    "media_url": {
      "type": "string",
      "format": "uri",
      "description": "Optional public https URL of the photo or video the post is about."
    },
    "brand_voice": {
      "type": "string",
      "maxLength": 1500,
      "description": "Optional tone or style notes, e.g. \"friendly, no emojis, first person plural\"."
    }
  },
  "required": [
    "prompt",
    "platforms"
  ],
  "additionalProperties": false
}
🔴post_to_social(platforms, text, per_platform, title, video_url, ...)

Publishes a post immediately and publicly to the listed platforms through the social accounts connected to the user's PostWire account. A published post cannot be withdrawn from PostWire. Accepts one text for all platforms or a separate per_platform draft for each. YouTube requires video_url; TikTok requires video_url or photos (photo_url or media); Instagram requires a photo or video, and two or more media items make a carousel. Every platform must already be connected; otherwise nothing is published and the error names the missing ones. The same payload sent twice within 2 minutes is refused as a duplicate unless idempotency_key differs. When a platform is connected in more than one brand and brand_id is omitted, nothing is published and the error lists the brands. Returns { posted, published_to, results: [{ platform, ok, id?, url?, account?, error? }] }, where account and published_to name the handle and brand each post went to. The plan sets how many networks one post goes out to (Free: 2): only the first platforms in the list are published and each of the others comes back with ok: false, held: true and code networks_per_post (its version was written and not sent), listed in held_networks with a one-sentence held_message, and message_for_user says it in plain words for the person; every network can still be connected and written for. TikTok and Instagram videos may still be processing when this returns (status processing, no url yet). When the networks-per-post or the monthly post limit stops a platform, the result also names the plan that lifts it, its price and a checkout link, and, for a free account that has not had one, a link to a 3-day free trial (trial_offer). Such an account also gets the trial link once after its first post from an assistant, with a one-sentence trial_message. X (Twitter) is a pay-per-use add-on on paid plans: each X post uses X credits (1 for a plain post, 10 for a post with a link, +1 per image or video) from the plan's monthly X credits, then from top-up credits; a post without enough credits is not sent to X and its result says how to get more. An X thread: per_platform.x.thread is the list of posts after per_platform.x.text (up to 25, each at most 280 characters as X counts them, a link counts 23); per_platform.x.reply is one more post under the last one, the usual place for a link. Each post of a thread or reply is an X post: it uses credits by the same rule and counts toward the daily X limit, and the whole chain is reserved before anything is sent. Write a thread only when the user asks for one. The X result then has thread.tweets (every post's id), thread_url, and thread.status: complete, or pending when X refused a later post (the first post stays published and PostWire retries the rest on its own). If the brand's approval rules or a limit on this API key or connected app hold the post, nothing is published: the result has status "pending_approval", the post's id and approval_id, who was notified and a review link, and the post goes out once a person approves it from the emailed link or the PostWire dashboard — an AI assistant or an API key cannot approve it. A limit on this key or app can also refuse a post with code key_network_not_allowed, key_brand_not_allowed or key_monthly_cap_reached.

輸入結構描述

{
  "type": "object",
  "properties": {
    "platforms": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "telegram",
          "bluesky",
          "mastodon",
          "discord",
          "tiktok",
          "youtube",
          "reddit",
          "linkedin",
          "facebook",
          "instagram",
          "x"
        ]
      },
      "minItems": 1,
      "description": "Platforms to publish to, all in one call, e.g. [\"linkedin\",\"bluesky\"]."
    },
    "text": {
      "type": "string",
      "description": "Post text used for every platform that has no per_platform draft."
    },
    "per_platform": {
      "type": "object",
      "description": "Per-platform drafts: { \"<platform>\": { \"text\": \"…\", \"title\": \"…\", \"tags\": [\"…\"] } }. X also takes \"thread\" (the posts after text, in order) and \"reply\" (one post under the last one, e.g. the link).",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "thread": {
            "type": "array",
            "maxItems": 25,
            "items": {
              "type": "string",
              "maxLength": 1000
            },
            "description": "X only: the posts of a thread after text, each a reply to the one before (max 25, each <= 280 as X counts)."
          },
          "reply": {
            "type": "string",
            "maxLength": 1000,
            "description": "X only: one post under the last post of the chain, e.g. the link."
          }
        }
      }
    },
    "title": {
      "type": "string",
      "description": "Title, used by YouTube."
    },
    "video_url": {
      "type": "string",
      "format": "uri",
      "description": "Public https URL of a video. Required for YouTube; TikTok takes a video or photos."
    },
    "photo_url": {
      "type": "string",
      "format": "uri",
      "description": "Public https URL of an image."
    },
    "media": {
      "type": "array",
      "minItems": 1,
      "maxItems": 35,
      "description": "Several images (or images and videos) in one post, in order: an Instagram carousel (up to 10), TikTok photo post (up to 35 images; PNG is converted to JPEG automatically for Instagram and TikTok), Bluesky (up to 4 images), Mastodon (up to 4), LinkedIn (up to 20 images, or one PDF document). Networks that take one item get the first. Each item: { url, type: image|video|document, alt? }.",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public https URL of the file."
          },
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video",
              "document"
            ],
            "description": "Default image."
          },
          "alt": {
            "type": "string",
            "maxLength": 1500,
            "description": "Alt text (used by Bluesky, Mastodon and LinkedIn)."
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "description": "Document title, used by LinkedIn."
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      }
    },
    "privacy": {
      "type": "string",
      "enum": [
        "public",
        "unlisted",
        "friends",
        "private"
      ],
      "description": "Who can see the TikTok and YouTube posts: public (everyone), unlisted (YouTube), friends (TikTok mutual followers) or private (only the account owner). TikTok asks that the account owner choose this for each TikTok post. Without it a TikTok post goes out private and YouTube uses the channel default."
    },
    "brand_id": {
      "type": "string",
      "description": "Which brand's accounts to use. Omit to use the default brand."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional unique key; a repeat with the same key within 24 h is refused instead of posted twice."
    }
  },
  "required": [
    "platforms"
  ],
  "additionalProperties": false
}
🔴schedule_post(run_at, timezone, platforms, text, per_platform, ...)

Queues a post to be published at a future time (run_at, ISO 8601 with timezone, up to 365 days ahead), or in the brand's next free queue slot (run_at "next_slot": the earliest weekly slot all its platforms share that no other waiting post of the brand uses; the result gives the time chosen) through the connected accounts. Takes the same content fields as publishing now. Every platform must already be connected and media must suit each platform, or it is refused now instead of failing later. When a platform is connected in more than one brand and brand_id is omitted, nothing is queued and the error lists the brands. Returns the queued item with its id and, for each platform, the handle and brand it will publish to. The plan sets how many posts can wait in the queue at once (Free: 3): past that the post is not refused but saved as held (code queue_limit, status held) — kept, never published on the current plan, and scheduled automatically when the plan is upgraded; the result then also gives that plan, its price and a checkout link. On a plan with a networks-per-post limit (Free: 2) only the first platforms are published when it runs; the result names the others in held_networks. A queued or held post can be canceled before it runs. X (Twitter) is a pay-per-use add-on on paid plans: each X post uses X credits (1 for a plain post, 10 for a post with a link, +1 per image or video) from the plan's monthly X credits, then from top-up credits; a post without enough credits is not sent to X and its result says how to get more. An X thread: per_platform.x.thread is the list of posts after per_platform.x.text (up to 25, each at most 280 characters as X counts them, a link counts 23); per_platform.x.reply is one more post under the last one, the usual place for a link. Each post of a thread or reply is an X post: it uses credits by the same rule and counts toward the daily X limit, and the whole chain is reserved before anything is sent. Write a thread only when the user asks for one. The X result then has thread.tweets (every post's id), thread_url, and thread.status: complete, or pending when X refused a later post (the first post stays published and PostWire retries the rest on its own). If the brand's approval rules or a limit on this API key or connected app hold the post, nothing is published: the result has status "pending_approval", the post's id and approval_id, who was notified and a review link, and the post goes out once a person approves it from the emailed link or the PostWire dashboard — an AI assistant or an API key cannot approve it. A limit on this key or app can also refuse a post with code key_network_not_allowed, key_brand_not_allowed or key_monthly_cap_reached.

輸入結構描述

{
  "type": "object",
  "properties": {
    "run_at": {
      "type": "string",
      "description": "When to publish: ISO 8601 with offset, e.g. \"2026-10-01T09:00:00-05:00\", or \"next_slot\" for the brand's next free queue slot."
    },
    "timezone": {
      "type": "string",
      "description": "With run_at next_slot: the IANA timezone to read the slots in when the brand has none saved, e.g. \"America/Lima\"."
    },
    "platforms": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "telegram",
          "bluesky",
          "mastodon",
          "discord",
          "tiktok",
          "youtube",
          "reddit",
          "linkedin",
          "facebook",
          "instagram",
          "x"
        ]
      },
      "minItems": 1,
      "description": "Platforms to publish to."
    },
    "text": {
      "type": "string",
      "description": "Post text for platforms without a per_platform draft."
    },
    "per_platform": {
      "type": "object",
      "description": "Per-platform drafts: { \"<platform>\": { \"text\": \"…\" } }. X also takes \"thread\": [\"…\"] (the posts after text, max 25) and \"reply\": \"…\" (one post under the last one).",
      "additionalProperties": {
        "type": "object"
      }
    },
    "title": {
      "type": "string",
      "description": "Title, used by YouTube."
    },
    "privacy": {
      "type": "string",
      "enum": [
        "public",
        "unlisted",
        "friends",
        "private"
      ],
      "description": "Who can see the TikTok and YouTube posts: public (everyone), unlisted (YouTube), friends (TikTok mutual followers) or private (only the account owner). TikTok asks that the account owner choose this for each TikTok post. Without it a TikTok post goes out private and YouTube uses the channel default."
    },
    "video_url": {
      "type": "string",
      "format": "uri",
      "description": "Public https URL of a video (YouTube needs one; TikTok takes a video or photos)."
    },
    "photo_url": {
      "type": "string",
      "format": "uri",
      "description": "Public https URL of an image."
    },
    "media": {
      "type": "array",
      "minItems": 1,
      "maxItems": 35,
      "description": "Several images (or images and videos) in one post, in order: an Instagram carousel (up to 10), TikTok photo post (up to 35 images; PNG is converted to JPEG automatically for Instagram and TikTok), Bluesky (up to 4 images), Mastodon (up to 4), LinkedIn (up to 20 images, or one PDF document). Networks that take one item get the first. Each item: { url, type: image|video|document, alt? }.",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Public https URL of the file."
          },
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video",
              "document"
            ],
            "description": "Default image."
          },
          "alt": {
            "type": "string",
            "maxLength": 1500,
            "description": "Alt text (used by Bluesky, Mastodon and LinkedIn)."
          },
          "title": {
            "type": "string",
            "maxLength": 200,
            "description": "Document title, used by LinkedIn."
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      }
    },
    "brand_id": {
      "type": "string",
      "description": "Brand whose accounts to use; omit for the default brand."
    },
    "label": {
      "type": "string",
      "maxLength": 120,
      "description": "Optional short label shown in the PostWire queue."
    }
  },
  "required": [
    "run_at",
    "platforms"
  ],
  "additionalProperties": false
}
🟢list_scheduled_posts(from, to)

Lists the account's scheduled posts (queued, held, pending_approval = waiting for a person to approve it, publishing, processing = sent and Instagram is still processing the video, done, failed, rejected = not approved, or canceled) with their id, time, platforms and status. Optional from/to limit the time range.

輸入結構描述

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "format": "date-time",
      "description": "Only posts scheduled at or after this time."
    },
    "to": {
      "type": "string",
      "format": "date-time",
      "description": "Only posts scheduled before this time."
    }
  },
  "additionalProperties": false
}
🔴cancel_scheduled_post(id)

Cancels a queued or held post, or withdraws one waiting for approval, so it is never published (a withdrawn post's approval links stop working). Only works before it starts publishing. Takes the id of the scheduled post.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Scheduled post id."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢get_post_status(platform, id, brand_id)

Returns the status and link of a published post, by platform and the post id returned when it was published. For a post that is waiting for approval or scheduled, pass the id PostWire returned for it (platform can then be omitted): the status is pending_approval (with who was asked and the review link), rejected (with the reason), scheduled, or each network's result once it went out. For TikTok and YouTube it asks the platform for the processing status and returns the public link once there is one. For an Instagram video returned as "processing", pass the id it returned: the answer is processing, published (with its id and link) or failed (with the reason). For networks that publish immediately it returns status "published" and, where the id allows it, the post's link (Telegram channels, including private ones as t.me/c/<channel>/<message>; Bluesky; LinkedIn; Facebook).

輸入結構描述

{
  "type": "object",
  "properties": {
    "platform": {
      "type": "string",
      "enum": [
        "telegram",
        "bluesky",
        "mastodon",
        "discord",
        "tiktok",
        "youtube",
        "reddit",
        "linkedin",
        "facebook",
        "instagram",
        "x"
      ],
      "description": "Platform of the post, e.g. \"tiktok\". Can be omitted for a post waiting for approval or scheduled."
    },
    "id": {
      "type": "string",
      "description": "The post id returned when it was published on that platform, or the id PostWire returned for a post waiting for approval or scheduled."
    },
    "brand_id": {
      "type": "string",
      "description": "Brand whose account published it; omit for the default brand."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟡create_connect_link(platform, brand_id)

Creates a one-hour link the user opens in a browser to connect social accounts (TikTok, Instagram, YouTube, Facebook Pages, LinkedIn, Bluesky…) to their PostWire account: the page shows each network as a button, signs in to it on the network's own page, and then offers the next one, so several networks can be connected from one link. Nothing is connected until the user completes it on the page. With platform the page offers only that network; with brand_id the accounts are connected to that brand. Returns the url of that page and message_for_user: one plain sentence telling the person what to do.

輸入結構描述

{
  "type": "object",
  "properties": {
    "platform": {
      "type": "string",
      "enum": [
        "telegram",
        "bluesky",
        "mastodon",
        "discord",
        "tiktok",
        "youtube",
        "reddit",
        "linkedin",
        "facebook",
        "instagram",
        "x"
      ],
      "description": "Platform to connect. Omit to let the user choose on the page."
    },
    "brand_id": {
      "type": "string",
      "description": "Brand to connect it to. Omit for the default brand."
    }
  },
  "additionalProperties": false
}
🔴plan_week(topic, platforms, days, hour, timezone, ...)

Writes one post per day for 1 to 7 days from a single topic, each day from a different angle and each platform in its own native format, and queues them to be published publicly at the given hour on each day starting tomorrow, through the connected accounts. Text only: platforms that require a video or photo (TikTok, YouTube, Instagram) are refused. Every platform must already be connected. The whole week counts as one AI draft toward the daily AI limit. Every day is written; days that do not fit in the plan's monthly post limit or in its scheduled-posts limit (Free: 3 waiting at a time) are saved as held (never published on the current plan; each says held_for) and are scheduled automatically when the plan is upgraded; the result then also gives that plan, its price and a checkout link. On a plan with a networks-per-post limit (Free: 2) each day goes out to the first platforms only, named in held_networks. Returns the queued and held items with their id, time and a preview of each platform's text; any of them can be canceled before it runs. If the brand's approval rules or a limit on this API key or connected app hold the post, nothing is published: the result has status "pending_approval", the post's id and approval_id, who was notified and a review link, and the post goes out once a person approves it from the emailed link or the PostWire dashboard — an AI assistant or an API key cannot approve it. A limit on this key or app can also refuse a post with code key_network_not_allowed, key_brand_not_allowed or key_monthly_cap_reached.

輸入結構描述

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "What the week is about, e.g. \"our new autumn menu and the farmers behind it\"."
    },
    "platforms": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "telegram",
          "bluesky",
          "mastodon",
          "discord",
          "tiktok",
          "youtube",
          "reddit",
          "linkedin",
          "facebook",
          "instagram",
          "x"
        ]
      },
      "minItems": 1,
      "description": "Text-capable platforms to post to each day, e.g. [\"linkedin\",\"bluesky\"]."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7,
      "description": "How many days, starting tomorrow. Default 5."
    },
    "hour": {
      "type": "integer",
      "minimum": 0,
      "maximum": 23,
      "description": "Hour of the day to publish, on the timezone's clock. Default 10."
    },
    "timezone": {
      "type": "string",
      "maxLength": 60,
      "description": "IANA timezone of that hour, e.g. \"America/Lima\". Default UTC."
    },
    "brand_voice": {
      "type": "string",
      "maxLength": 1500,
      "description": "Optional tone or style notes."
    },
    "brand_id": {
      "type": "string",
      "description": "Brand whose accounts to use; omit for the default brand."
    }
  },
  "required": [
    "topic",
    "platforms"
  ],
  "additionalProperties": false
}
🟢list_brands

Lists the account's brands (one business each) with the social accounts connected to each: platform, the handle, display name, picture and profile link the network reports, when it was connected, and whether posts to it need only text, a video, or a photo or video. Also returns the plan's brand limit.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡create_brand(name)

Creates a new, empty brand (a separate business with its own connected social accounts) on the PostWire account and returns its id. The plan limits the number of brands; at the limit nothing is created and the response names the plan that includes more brands, its monthly price and a checkout link.

輸入結構描述

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Brand name, e.g. the client's business name."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
🟡create_upload_link

Creates a single-use link, valid for 24 hours, to a PostWire page where the user picks one photo or video from any device (JPG, PNG, WebP, GIF, MP4, MOV or WebM, up to 1 GB; big videos upload in parts automatically). The file is kept in the account's PostWire media storage for 30 days. A file attached to a chat does not reach PostWire; this page is how it gets there. Returns the page url, an upload_id for checking the upload's status, and message_for_user: one plain sentence telling the person what to open and do.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
⚪make_video_from_text(text, style, music, footer)

Makes a short vertical video from the words of a post, for networks that take only video (YouTube) or video or photos (TikTok): an MP4 of 1080x1920, 8 to 12 seconds, H.264 with AAC sound. The first line appears as a large heading and up to two more sentences appear one after another over a softly moving plain background, with royalty-free background music or silence; an optional footer line (for example the brand's name) sits under the text. Emoji, links and trailing hashtags are left out and no PostWire mark is added. Draws Latin, Greek and Cyrillic text. No AI is used and nothing is published. The file is kept in the account's PostWire media storage for 30 days. Returns media_url (an https URL valid for 24 hours that works as video_url), duration_s, text_on_video (the lines shown) and message_for_user. Up to 10 videos an hour per account, and per day 10 on the Free plan and 60 on paid plans.

輸入結構描述

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "minLength": 3,
      "maxLength": 5000,
      "description": "The post's words. The first line or sentence becomes the heading."
    },
    "style": {
      "type": "string",
      "enum": [
        "light",
        "dark"
      ],
      "description": "Light (warm off-white, default) or dark background."
    },
    "music": {
      "type": "string",
      "enum": [
        "auto",
        "lofi",
        "piano",
        "upbeat",
        "none"
      ],
      "description": "Background music: auto picks one of the three beds; none gives a silent track. Default auto."
    },
    "footer": {
      "type": "string",
      "maxLength": 40,
      "description": "Optional short line under the text, such as the brand or shop name. Omit for none."
    }
  },
  "required": [
    "text"
  ],
  "additionalProperties": false
}
🟢get_uploaded_file(upload_id)

Returns the status of a file uploaded through a PostWire upload link, by upload_id: "waiting" until the file has arrived, then "done" with its media_url (an https URL valid for 24 hours that works as video_url or photo_url), kind (photo or video), size and content type.

輸入結構描述

{
  "type": "object",
  "properties": {
    "upload_id": {
      "type": "string",
      "minLength": 8,
      "maxLength": 40,
      "description": "The upload_id returned with the upload link."
    }
  },
  "required": [
    "upload_id"
  ],
  "additionalProperties": false
}
🟢get_upgrade_link(plan)

Returns PostWire's paid plans with their monthly price and what each includes (posts a month, brands, AI drafts a day, networks per post, scheduled posts at a time), the account's current plan, and a checkout link for one plan (the next plan up when none is given). The link opens a Stripe payment page in the browser and nothing is charged unless the user pays there; for an account that already has a subscription it opens the plan page of the PostWire dashboard.

輸入結構描述

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "enum": [
        "starter",
        "pro",
        "agency",
        "scale"
      ],
      "description": "Plan to check out. Omit for the next plan up."
    }
  },
  "additionalProperties": false
}
🟢get_x_credits(text, images, video, thread, reply)

Shows what posting to X (Twitter) costs this account and what it has left. X is a pay-per-use add-on of the paid plans (Starter, Pro, Agency, Scale; not Free, not during a trial): 1 X credit = 1 plain X post, a post with a link uses 10, each image or video adds 1. Returns mode (paid, free, trial or internal), the plan's monthly X credits, used and left, top-up credits, X posts today against the daily limit, the price table, the last movements, and links to buy top-up credits (80 credits for $5, 340 for $20; each opens a Stripe payment page, nothing is charged unless paid there). With text, it also returns how many credits that post would use (with thread or reply: the whole chain).

輸入結構描述

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 4000,
      "description": "Optional: an X post to price before sending it."
    },
    "images": {
      "type": "integer",
      "minimum": 0,
      "maximum": 4,
      "description": "Optional: images attached to that post."
    },
    "video": {
      "type": "boolean",
      "description": "Optional: a video attached to that post."
    },
    "thread": {
      "type": "array",
      "maxItems": 25,
      "items": {
        "type": "string",
        "maxLength": 1000
      },
      "description": "Optional: the posts of a thread after text, to price the whole thread."
    },
    "reply": {
      "type": "string",
      "maxLength": 1000,
      "description": "Optional: a reply under the post (or the thread), priced with it."
    }
  },
  "additionalProperties": false
}
🟢get_post_performance(brand_id, platform, timezone)

Returns what the account's own numbers say works, over the last 90 days, computed from the numbers each network reports (no estimates): the published posts ranked against the median of the same social account on the same network, each with its network, brand, link, excerpt, metric (views where the network reports them, otherwise likes + reposts + replies), value, that median, n (posts in the median), a verdict (winner at 2x the median or more, under at half or less) and what the post had (format, first-line type, question, emoji, number up front, day and time, length, hashtags); best_times: the time of day and day of week whose posts did best, with the size of the effect and both sample sizes, or — below 8 measured posts or without a clear difference — two hours to post at to learn it; streak: weeks in a row with at least one post; headline_pattern: the strongest pattern, as a sentence with its numbers; next: three concrete suggestions for the next post, each with the numbers behind it; competitors: public accounts the user watches (YouTube, Bluesky, Mastodon; TikTok captions only), their posts against their own median and what their best posts share; measurable: what each network lets PostWire read, and why the rest is not measurable. Posts younger than 24 hours are not ranked; patterns need at least 10 measured posts and 3 per group. Depending on the account's plan it also returns every pattern, the per-network detail and which formats to double down on or rethink; on a plan without them, locked.patterns_preview says which further patterns are ready and how large each effect is, without the winning value. Read-only; nothing here uses AI.

輸入結構描述

{
  "type": "object",
  "properties": {
    "brand_id": {
      "type": "string",
      "description": "Only this brand's posts. Omit for all brands."
    },
    "platform": {
      "type": "string",
      "enum": [
        "telegram",
        "bluesky",
        "mastodon",
        "discord",
        "tiktok",
        "youtube",
        "reddit",
        "linkedin",
        "facebook",
        "instagram",
        "x"
      ],
      "description": "Only posts on this network."
    },
    "timezone": {
      "type": "string",
      "maxLength": 60,
      "description": "IANA timezone for the day and time patterns, e.g. \"America/Lima\". Default UTC."
    }
  },
  "additionalProperties": false
}
🟢replicate_top_post(post_id, platforms, topic, brand_voice)

Writes new drafts, one per platform, that reuse the structure, opening type, length, format and tone of one of the account's published posts, on a new topic or a new angle; the reference post's sentences are not reused. Nothing is published or scheduled. Takes the id of a published post of the account (the ids that the account's post performance results list). Counts toward the account's daily AI limit. Available depending on the account's plan. Returns { drafts: { <platform>: { text, title?, tags? } }, reference }.

輸入結構描述

{
  "type": "object",
  "properties": {
    "post_id": {
      "type": "string",
      "description": "The id of the reference post: one of the account's published posts, as listed in its post performance results."
    },
    "platforms": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "telegram",
          "bluesky",
          "mastodon",
          "discord",
          "tiktok",
          "youtube",
          "reddit",
          "linkedin",
          "facebook",
          "instagram",
          "x"
        ]
      },
      "minItems": 1,
      "description": "Platforms to write for. Default: the reference post's platform."
    },
    "topic": {
      "type": "string",
      "maxLength": 1000,
      "description": "Optional new topic. Omit for a new angle on the same subject."
    },
    "brand_voice": {
      "type": "string",
      "maxLength": 1500,
      "description": "Optional tone or style notes."
    }
  },
  "required": [
    "post_id"
  ],
  "additionalProperties": false
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本19 個工具
已驗證未記錄版本15 個工具