MCPサーバー

PostWire

io.github.Perufitlife/postwire-mcp

このMCPでできること

Generates platform-specific social posts and publishes or schedules text, photo, and video content across connected social accounts.

cancel_scheduled_post
Cancel a scheduled post
Cancels a queued or held post so it is never published. Only works before it starts publishing. Takes the id of the scheduled post.
破壊的操作あり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Scheduled post id.'}}, 'additionalProperties': False}
create_brand
Create a brand
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', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': "Brand name, e.g. the client's business name."}}, 'additionalProperties': False}
create_connect_link
Get a link to connect a social account
Creates a one-hour link the user opens in a browser to connect a social account (TikTok, YouTube, LinkedIn, Bluesky…) to their PostWire account. Nothing is connected until the user completes it on the page. With brand_id the account is connected to that brand. Returns the url of that page.
入力スキーマ
{'type': 'object', 'properties': {'brand_id': {'type': 'string', 'description': 'Brand to connect it to. Omit for the default brand.'}, 'platform': {'enum': ['telegram', 'bluesky', 'mastodon', 'discord', 'tiktok', 'youtube', 'reddit', 'linkedin', 'facebook', 'instagram'], 'type': 'string', 'description': 'Platform to connect. Omit to let the user choose on the page.'}}, 'additionalProperties': False}
create_upload_link
Get a link to upload a photo or video
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. Returns the page url and an upload_id for checking the upload's status.
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
generate_posts
Write a native draft for each platform
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', 'required': ['prompt', 'platforms'], 'properties': {'prompt': {'type': 'string', 'maxLength': 4000, 'minLength': 1, 'description': 'The idea or message to communicate. More detail gives better drafts.'}, 'media_url': {'type': 'string', 'format': 'uri', 'description': 'Optional public https URL of the photo or video the post is about.'}, 'platforms': {'type': 'array', 'items': {'enum': ['telegram', 'bluesky', 'mastodon', 'discord', 'tiktok', 'youtube', 'reddit', 'linkedin', 'facebook', 'instagram'], 'type': 'string'}, 'minItems': 1, 'description': 'Platforms to write for, e.g. ["linkedin","x","bluesky"].'}, 'brand_voice': {'type': 'string', 'maxLength': 1500, 'description': 'Optional tone or style notes, e.g. "friendly, no emojis, first person plural".'}}, 'additionalProperties': False}
get_post_status
Check a post's publishing status
Returns the status and link of a published post, by platform and the post id returned when it was published. 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', 'required': ['platform', 'id'], 'properties': {'id': {'type': 'string', 'description': 'The post id returned when it was published on that platform.'}, 'brand_id': {'type': 'string', 'description': 'Brand whose account published it; omit for the default brand.'}, 'platform': {'enum': ['telegram', 'bluesky', 'mastodon', 'discord', 'tiktok', 'youtube', 'reddit', 'linkedin', 'facebook', 'instagram'], 'type': 'string', 'description': 'Platform of the post, e.g. "tiktok".'}}, 'additionalProperties': False}
get_upgrade_link
Show plans and get an upgrade link
Returns PostWire's paid plans with their monthly price and what each includes (posts a month, brands, AI drafts a day), 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': {'enum': ['starter', 'pro', 'agency', 'scale'], 'type': 'string', 'description': 'Plan to check out. Omit for the next plan up.'}}, 'additionalProperties': False}
get_uploaded_file
Check an uploaded file
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', 'required': ['upload_id'], 'properties': {'upload_id': {'type': 'string', 'maxLength': 40, 'minLength': 8, 'description': 'The upload_id returned with the upload link.'}}, 'additionalProperties': False}
list_brands
List brands and their connected accounts
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}
list_platforms
List supported 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}
list_scheduled_posts
List scheduled posts
Lists the account's scheduled posts (queued, publishing, processing = sent and Instagram is still processing the video, done, failed or canceled) with their id, time, platforms and status. Optional from/to limit the time range.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'properties': {'to': {'type': 'string', 'format': 'date-time', 'description': 'Only posts scheduled before this time.'}, 'from': {'type': 'string', 'format': 'date-time', 'description': 'Only posts scheduled at or after this time.'}}, 'additionalProperties': False}
my_account
Show my PostWire account
Shows the signed-in PostWire account: plan, usage against each plan limit (posts this month, brands, AI drafts today), 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. When no social account is connected, it includes a one-hour link to connect one.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
plan_week
Plan and schedule a week of posts
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. Each day counts as one AI draft toward the daily AI limit. Days that do not fit in the plan's monthly post limit are saved as held (never published on the current plan) and are scheduled automatically when the plan is upgraded; the result then also gives that plan, its price and a checkout link. 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.
破壊的操作あり 外部アクセスあり
入力スキーマ
{'type': 'object', 'required': ['topic', 'platforms'], 'properties': {'days': {'type': 'integer', 'maximum': 7, 'minimum': 1, 'description': 'How many days, starting tomorrow. Default 5.'}, 'hour': {'type': 'integer', 'maximum': 23, 'minimum': 0, 'description': "Hour of the day to publish, on the timezone's clock. Default 10."}, 'topic': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'What the week is about, e.g. "our new autumn menu and the farmers behind it".'}, 'brand_id': {'type': 'string', 'description': 'Brand whose accounts to use; omit for the default brand.'}, 'timezone': {'type': 'string', 'maxLength': 60, 'description': 'IANA timezone of that hour, e.g. "America/Lima". Default UTC.'}, 'platforms': {'type': 'array', 'items': {'enum': ['telegram', 'bluesky', 'mastodon', 'discord', 'tiktok', 'youtube', 'reddit', 'linkedin', 'facebook', 'instagram'], 'type': 'string'}, 'minItems': 1, 'description': 'Text-capable platforms to post to each day, e.g. ["linkedin","bluesky"].'}, 'brand_voice': {'type': 'string', 'maxLength': 1500, 'description': 'Optional tone or style notes.'}}, 'additionalProperties': False}
post_to_social
Publish a post now
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; when the monthly post limit stops a platform, the result also names the plan that raises it, its price and a checkout link.
破壊的操作あり 外部アクセスあり
入力スキーマ
{'type': 'object', 'required': ['platforms'], 'properties': {'text': {'type': 'string', 'description': 'Post text used for every platform that has no per_platform draft.'}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'alt': {'type': 'string', 'maxLength': 1500, 'description': 'Alt text (used by Bluesky, Mastodon and LinkedIn).'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Public https URL of the file.'}, 'type': {'enum': ['image', 'video', 'document'], 'type': 'string', 'description': 'Default image.'}, 'title': {'type': 'string', 'maxLength': 200, 'description': 'Document title, used by LinkedIn.'}}, 'additionalProperties': False}, 'maxItems': 35, 'minItems': 1, '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? }.'}, 'title': {'type': 'string', 'description': 'Title, used by YouTube.'}, 'privacy': {'enum': ['public', 'unlisted', 'private'], 'type': 'string', 'description': "YouTube visibility. Default: the platform's default."}, 'brand_id': {'type': 'string', 'description': "Which brand's accounts to use. Omit to use the default brand."}, 'photo_url': {'type': 'string', 'format': 'uri', 'description': 'Public https URL of an image.'}, 'platforms': {'type': 'array', 'items': {'enum': ['telegram', 'bluesky', 'mastodon', 'discord', 'tiktok', 'youtube', 'reddit', 'linkedin', 'facebook', 'instagram'], 'type': 'string'}, 'minItems': 1, 'description': 'Platforms to publish to, all in one call, e.g. ["linkedin","bluesky"].'}, 'video_url': {'type': 'string', 'format': 'uri', 'description': 'Public https URL of a video. Required for YouTube; TikTok takes a video or photos.'}, 'per_platform': {'type': 'object', 'description': 'Per-platform drafts: { "<platform>": { "text": "…", "title": "…", "tags": ["…"] } }.', 'additionalProperties': {'type': 'object', 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}}, 'text': {'type': 'string'}, 'title': {'type': 'string'}}}}, '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.'}}, 'additionalProperties': False}
schedule_post
Schedule a post
Queues a post to be published publicly at a future time (run_at, ISO 8601 with timezone, up to 365 days ahead) 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. A queued post can be canceled before it runs.
破壊的操作あり 外部アクセスあり
入力スキーマ
{'type': 'object', 'required': ['run_at', 'platforms'], 'properties': {'text': {'type': 'string', 'description': 'Post text for platforms without a per_platform draft.'}, 'label': {'type': 'string', 'maxLength': 120, 'description': 'Optional short label shown in the PostWire queue.'}, 'media': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'alt': {'type': 'string', 'maxLength': 1500, 'description': 'Alt text (used by Bluesky, Mastodon and LinkedIn).'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Public https URL of the file.'}, 'type': {'enum': ['image', 'video', 'document'], 'type': 'string', 'description': 'Default image.'}, 'title': {'type': 'string', 'maxLength': 200, 'description': 'Document title, used by LinkedIn.'}}, 'additionalProperties': False}, 'maxItems': 35, 'minItems': 1, '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? }.'}, 'title': {'type': 'string', 'description': 'Title, used by YouTube.'}, 'run_at': {'type': 'string', 'format': 'date-time', 'description': 'When to publish, ISO 8601 with offset, e.g. "2026-10-01T09:00:00-05:00".'}, 'brand_id': {'type': 'string', 'description': 'Brand whose accounts to use; omit for the default brand.'}, 'photo_url': {'type': 'string', 'format': 'uri', 'description': 'Public https URL of an image.'}, 'platforms': {'type': 'array', 'items': {'enum': ['telegram', 'bluesky', 'mastodon', 'discord', 'tiktok', 'youtube', 'reddit', 'linkedin', 'facebook', 'instagram'], 'type': 'string'}, 'minItems': 1, 'description': 'Platforms to publish to.'}, 'video_url': {'type': 'string', 'format': 'uri', 'description': 'Public https URL of a video (YouTube needs one; TikTok takes a video or photos).'}, 'per_platform': {'type': 'object', 'description': 'Per-platform drafts: { "<platform>": { "text": "…" } }.', 'additionalProperties': {'type': 'object'}}}, 'additionalProperties': False}
変更
create_upload_link
2026年10月1日2:42
変更
plan_week
2026年10月1日2:42
変更
create_connect_link
2026年10月1日2:42
変更
get_post_status
2026年10月1日2:42
変更
list_scheduled_posts
2026年10月1日2:42
変更
schedule_post
2026年10月1日2:42
変更
post_to_social
2026年10月1日2:42
変更
generate_posts
2026年10月1日2:42
追加
get_upgrade_link
2026年9月27日2:40
追加
get_uploaded_file
2026年9月27日2:40
追加
create_upload_link
2026年9月27日2:40
追加
create_brand
2026年9月27日2:40
追加
list_brands
2026年9月27日2:40
追加
plan_week
2026年9月27日2:40
追加
create_connect_link
2026年9月27日2:40
追加
get_post_status
2026年9月27日2:40
追加
cancel_scheduled_post
2026年9月27日2:40
追加
list_scheduled_posts
2026年9月27日2:40
追加
schedule_post
2026年9月27日2:40
追加
post_to_social
2026年9月27日2:40
追加
generate_posts
2026年9月27日2:40
追加
my_account
2026年9月27日2:40
追加
list_platforms
2026年9月27日2:40