Skip to main content

facebook-mcp

CI PyPI Python License: MIT

An open-source Model Context Protocol server that lets AI assistants manage your Facebook Pages: publish and schedule posts, moderate comments, and read analytics. It's built on FastMCP and works with Claude Desktop, Claude Code, ChatGPT, Gemini CLI, Cursor, VS Code and any other MCP client.

"Schedule tomorrow's 9am post on Acme Coffee announcing the new menu, then hide any spam comments on yesterday's post."

Features

  • Multi-page: give it one user token and it finds every Page you manage. Each Page uses its own Page token automatically.
  • 15 tools covering posts, scheduling, photos, comments, moderation and insights.
  • Safe by default: tools are labelled read-only or destructive (MCP annotations), a --read-only mode hides write tools, requests are signed with appsecret_proof, and tokens never appear in URLs or logs.
  • Runs anywhere: stdio for desktop clients, streamable HTTP (with optional bearer auth) for remote clients, or the Docker image.
  • Production-quality code: typed (mypy --strict), layered architecture, and over 95% test coverage against a mocked Graph API.

Quick start

1. Get a token. Create a Meta app and generate an access token with the Page permissions listed in docs/setup-meta-app.md. This takes about 5 minutes.

2. Add the server to your MCP client. You'll need uv. For example, in Claude Desktop's claude_desktop_config.json:

{
  "mcpServers": {
    "facebook": {
      "command": "uvx",
      "args": ["facebook-mcp"],
      "env": {
        "FB_USER_ACCESS_TOKEN": "your-long-lived-user-token",
        "FB_APP_SECRET": "your-app-secret"
      }
    }
  }
}

Config for every other client (Claude Code, ChatGPT, Gemini CLI, Cursor, VS Code, Docker) is in docs/clients.md.

3. Ask your assistant something like "Which Facebook Pages can you manage?"

Tools

Every tool except list_pages accepts an optional page (a Page id or exact name). Leave it out and the server uses the default Page. For post ids, it uses the Page that owns the post.

Tool Type Description
list_pages read Pages this server can manage
get_page_info read Name, category, about, link, fans and followers
list_posts read Published posts with reaction, comment and share counts (paginated)
list_scheduled_posts read Scheduled, not-yet-published posts
get_post read One post with engagement counts
create_post write Publish or schedule a text/link post
create_photo_post write Publish a photo from a public URL
update_post write Edit a post's text
delete_post destructive Delete a post
list_comments read Comments on a post, or replies to a comment (paginated)
add_comment write Comment as the Page, or reply to a comment
set_comment_hidden write Hide or unhide a comment
delete_comment destructive Delete a comment
get_page_insights read Page analytics over a period or date range
get_post_insights read Analytics for one post

Configuration

Settings come from environment variables, or from a .env file in the working directory (see .env.example).

Variable Default Description
FB_USER_ACCESS_TOKEN Multi-page mode. A long-lived user token; every Page you manage is discovered.
FB_PAGE_ID + FB_PAGE_ACCESS_TOKEN Single-page mode. Use instead of the user token.
FB_DEFAULT_PAGE Page id or name to use when a tool call doesn't name one
FB_APP_SECRET Your app secret. Turns on appsecret_proof signing (recommended).
FB_GRAPH_API_VERSION v26.0 Graph API version
FB_TIMEOUT 30 Graph request timeout, in seconds
MCP_TRANSPORT stdio stdio or http
MCP_HOST / MCP_PORT / MCP_PATH 127.0.0.1 / 8000 / /mcp HTTP transport only
MCP_AUTH_TOKEN HTTP only: require Authorization: Bearer <token>
MCP_READ_ONLY false Hide every write tool
MCP_LOG_LEVEL INFO Log level (logs go to stderr)

CLI flags override environment variables:

facebook-mcp --transport http --port 8000 --read-only
facebook-mcp exchange-token --app-id 123 --token SHORT_LIVED_TOKEN   # reads FB_APP_SECRET

Security

  • Use --read-only until you trust your setup.
  • Always set MCP_AUTH_TOKEN when serving over HTTP, and never expose an unauthenticated server to the internet.
  • Turn on Require App Secret in your Meta app's advanced settings, so a leaked token can't be used without your app secret.
  • Never commit tokens. .env is git-ignored.

To report a vulnerability, see SECURITY.md.

Documentation

Contributing

Contributions are welcome. See CONTRIBUTING.md for the dev setup and guidelines. In short: uv sync, then uv run pytest.

License

MIT © Salinda Hulangamuwa

This is an independent project. It is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. Facebook is a trademark of Meta Platforms, Inc.

Metadata

Release files for facebook-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for facebook-mcp 0.1.0
File Size Uploaded
facebook_mcp-0.1.0.tar.gz 25.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for facebook-mcp 0.1.0
File Interpreter ABI Platform
facebook_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 56.6 kB

Release files / facebook_mcp-0.1.0.tar.gz

Download URL facebook_mcp-0.1.0.tar.gz
Size 25.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0d9ddce59233834211efaa0fc2ca9b44b4505f224ebfd48db9892fb8b773c9b2
BLAKE2b-256 checksum
How to use checksums
244c5c82e7b4eb62568532885119b6fd63293e54d85cbb7bbfa6e53bd782a746
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.4 {"installer":{"name":"uv","version":"0.11.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / facebook_mcp-0.1.0-py3-none-any.whl

Download URL facebook_mcp-0.1.0-py3-none-any.whl
Size 31.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c1bfeab8a7cb517e91ccc8f9ca4a415e5ae0d3df489ffd1a659e121542743508
BLAKE2b-256 checksum
How to use checksums
34836023810bc38f601cf0fa2c8d36a40ab08bf0bb9f211070ade88c42d37b1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.4 {"installer":{"name":"uv","version":"0.11.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page