Private reply to comment
facebook_private_replySends one private message to a Facebook comment or visitor post author within 7 days, requiring apply:true and a plan_id from a dry run; no second attempt.
Instructions
Send a private message to the author of a comment, or of a visitor post on the Page (post_id). TWO hard limits, both checked before anything is sent: exactly ONE private reply is possible per comment or post (there is no second attempt, ever — the local journal is checked too) and only within 7 DAYS of it. The message carries text or ONE attachment (a public https URL or a reusable attachment id). It appears in the Page inbox and cannot be unsent, so it always requires apply:true plus the plan_id from a dry run. Do not retry a failed call blindly — a lost response may already have delivered the message. Sending needs a PAGE token with pages_messaging and the MESSAGING task; the comment or post is read first to check the window, which also needs pages_read_engagement (plus pages_read_user_content for a visitor's comment).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | Set true to actually perform the write. Omitted or false ⇒ the server decides from its configured write mode: usually a dry run that returns a plan preview and changes nothing, but a server (or package) configured apply-first performs the write. To be certain nothing happens, read the result: a dry run always reports the plan and says the write was NOT performed. | |
| message | No | The text to send. Written by you — Facebook rejects an empty message. | |
| plan_id | No | The `planId` returned by a preceding dry-run preview of this same tool. Required for irreversible and spend-tier writes; plans expire a few minutes after they are created. | |
| post_id | No | Visitor post id (pageid_postid) to answer privately. Use instead of comment_id. | |
| profile | No | Page profile key (e.g. "brand-a") or a raw Page ID. Omitted ⇒ the default Page (FB_PAGE_ID). | |
| attachment | No | ONE attachment instead of text: exactly one of url / attachment_id. A message carries text or one attachment, never both. | |
| comment_id | No | Comment ID, e.g. "123456_789012" as returned by facebook_list_comments. Not a post ID. | |
| allow_repeat | No | Send even though the local journal records an earlier ATTEMPTED (unconfirmed) private reply to the same comment or post — only after the inbox shows it never arrived. Never overrides one recorded as delivered. | |
| confirm_token | No | Out-of-band operator token (FB_CONFIRM_TOKEN) authorizing this one irreversible or spend-tier apply. Needed only when the MCP client cannot show a confirmation prompt. Ask the human operator for it; it is not stored between calls and is never echoed back. | |
| saved_reply_id | No | Id of a saved reply (facebook_list_saved_replies) to send instead of `message`. Its text is resolved now and bound to the plan, so editing the template after the preview makes the apply diverge. |