Safe Facebook Pages publishing with brand-voice, image-required & anti-duplication checks.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"fb-publisher": {
"env": {
"OPENAI_API_KEY": "sk-...",
"META_USER_TOKEN": "your_token_here",
"MCP_FB_PUBLISHER_CONFIG": "/absolute/path/to/config.yaml"
},
"command": "mcp-fb-publisher"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
An MCP server that lets Claude (or any MCP-compatible LLM) safely publish posts to multiple Facebook Pages through the Meta Graph API, with built-in guardrails: brand-voice config, banned-topic blocklists, image-required enforcement, and anti-duplication checks across recent feed posts.
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
uvx 'mcp-fb-publisher' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked mcp-fb-publisher against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in other
Pi Coding Agent extension (CLI-first) — routes bash/read/grep/find/ls through lean-ctx CLI for strong token savings. Optional MCP bridge can register advanced tools.
Autonomous spec-to-product coding-agent CLI with an MCP server exposing 34 tools over stdio.
97% token reduction for AI coding sessions — zero deps, 21 languages, MCP server
App framework, testing framework, and inspector for MCP Apps.
MCP Security Weekly
Get CVE alerts and security updates for io.github.anthonyjbolo/mcp-fb-publisher and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
An MCP server that lets Claude (or any MCP-compatible LLM) safely publish posts to multiple Facebook Pages through the Meta Graph API, with built-in guardrails: brand-voice config, banned-topic blocklists, image-required enforcement, and anti-duplication checks across recent feed posts.
Letting an LLM agent post directly to your Facebook Pages is a footgun unless you put guardrails in front. Common failure modes I have hit running 5+ pages:
mcp-fb-publisher ships an MCP server that wraps the Meta Graph API behind 4 deterministic tools, all driven by a single config.yaml. Every publish call goes through validation by default. Validation is pure-Python (no LLM), reproducible in CI, and runs offline.
4 MCP tools:
| Tool | What it does |
|---|---|
fb_publish_post | Publishes (or schedules) a post on a configured page. Runs full validation by default; pass skip_validation=True to bypass. |
fb_validate_pre_publish | Dry-run all guardrails. Returns `verdict: go |
fb_anti_duplicate_check | Compares a candidate message against the page's recent posts using Jaccard similarity over word 4-grams. |
fb_generate_post_with_image | Generates an image via OpenAI (gpt-image-1) or fal.ai (flux-pro) and returns a URL ready for fb_publish_post. |
# 1. Install
pip install mcp-fb-publisher
# 2. Copy and edit the example config
cp config.example.yaml config.yaml
# -> set page_id values, brand voices, banned_topics
# 3. Set required env
export META_USER_TOKEN="<your long-lived Meta page/user token>"
export MCP_FB_PUBLISHER_CONFIG="$PWD/config.yaml"
# 4. (Optional) for image generation
export OPENAI_API_KEY="sk-..." # or
export FAL_KEY="..."
# 5. Run the MCP server (stdio transport)
mcp-fb-publisher
Add to your claude_desktop_config.json:
{
"mcpServers": {
"fb-publisher": {
"command": "mcp-fb-publisher",
"env": {
"META_USER_TOKEN": "your_token_here",
"MCP_FB_PUBLISHER_CONFIG": "/absolute/path/to/config.yaml",
"OPENAI_API_KEY": "sk-..."
}
}
}
}
Then ask Claude things like:
"Post on the marketing page: 'New collection drops Friday'. Generate an image first, validate, then publish."
Claude will call fb_generate_post_with_image → fb_validate_pre_publish → fb_publish_post.
flowchart LR
A[Claude / MCP client] -->|tool call| B[FastMCP server]
B --> C{tool}
C -->|generate| D[OpenAI / fal.ai]
C -->|validate| E[Validator<br/>pure Python]
C -->|anti-dup| F[Meta Graph API<br/>fetch_recent_posts]
C -->|publish| G[Meta Graph API<br/>POST /feed or /photos]
E -.reads.-> H[(config.yaml<br/>per-page rules)]
G -.reads.-> H
F -.reads.-> H
The split between generation, validation and publish is intentional: it lets the LLM iterate on the visual without burnin