mcpField
F
Facebook Publisher

Facebook Publisher

本地服务
github.com社交媒体025 周前更新

关于 Facebook Publisher

Facebook Publisher 是通过 Meta Graph API 向多个 Facebook Pages 发布或排期内容的 MCP 服务,面向需要按页面配置发布规则的运营者。它在发布前运行可离线检查的校验,并支持近期内容查重。

主要功能

  1. 01向配置的页面发布或排期帖子
  2. 02发布前检查并返回放行或拦截结果
  3. 03按近期帖子检测内容重复
  4. 04通过 OpenAI 或 fal.ai 生成图片
  5. 05按页面配置品牌语气与禁发主题

适用场景

  1. 01为多个客户页面设置不同发布规则
  2. 02检查帖子是否与近期内容重复
  3. 03生成配图后发布营销内容
  4. 04为促销内容安排发布时间

MCP 相关

向 MCP 客户端提供 Facebook 帖子发布、校验、查重和图片生成工具,并通过 Meta Graph API 操作页面。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"anthonyjbolo-mcp-fb-publisher": {
"command": "uvx",
"args": [
"mcp-fb-publisher"
],
"env": {
"META_USER_TOKEN": "<META_USER_TOKEN>",
"MCP_FB_PUBLISHER_CONFIG": "<MCP_FB_PUBLISHER_CONFIG>",
"MCP_FB_PUBLISHER_CONFIG_JSON": "<MCP_FB_PUBLISHER_CONFIG_JSON>",
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"FAL_KEY": "<FAL_KEY>"
}
}
}
}
启动命令uvx mcp-fb-publisher
需要配置的环境变量
META_USER_TOKEN密钥Long-lived Meta Graph API user or page token. Required for publishing.
MCP_FB_PUBLISHER_CONFIGAbsolute path to your config.yaml (per-page brand voices, banned topics, image policy).
MCP_FB_PUBLISHER_CONFIG_JSONInline JSON config (alternative to file path, useful for serverless deploys).
OPENAI_API_KEY密钥OpenAI API key for image generation via gpt-image-1 (optional).
FAL_KEY密钥fal.ai API key for image generation via Flux Pro (optional).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-fb-publisher0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-fb-publisher

一个 MCP 服务,可通过 Meta Graph API,让 Claude(或任何兼容 MCP 的大模型)安全地向多个 Facebook 专页发布帖子,并内置防护措施:品牌语气配置、违禁话题黑名单、强制要求图片,以及针对近期动态帖子的反重复检查。

Tests License: MIT Python 3.12+ #BuiltOnClaudeCode

为什么要开发这个项目

如果不先设置防护措施,让 LLM Agent 直接向你的 Facebook 专页发帖,就像给自己埋下隐患。我在运营 5 个以上专页时遇到过以下常见问题:

  1. 令牌悄然过期——帖子在午夜发布失败,3 天后才有人发现。
  2. 14 天内发布两篇角度相同的帖子——受众失去兴趣,触达率下降。
  3. 只发文字,而品牌语气规范要求配图——互动率骤降。
  4. 泄露违禁话题——提及竞争对手名称、内部代号或已停用的产品。

mcp-fb-publisher 提供了一个 MCP 服务,通过 4 个确定性工具封装 Meta Graph API,所有工具均由一个 config.yaml 驱动。默认情况下,每次发布都会经过验证。验证使用纯 Python 实现(不依赖 LLM),可在 CI 中复现,也可离线运行。

功能

4 个 MCP 工具:

工具功能
fb_publish_post在已配置的专页上发布(或定时发布)帖子。默认执行完整验证;传入 skip_validation=True 可跳过验证。
fb_validate_pre_publish试运行所有防护措施。返回 `verdict: go
fb_anti_duplicate_check使用基于单词 4-gram 的 Jaccard 相似度,将候选消息与专页近期帖子进行比较。
fb_generate_post_with_image通过 OpenAI(gpt-image-1)或 fal.ai(flux-pro)生成图片,并返回可用于 fb_publish_post 的 URL。

5 分钟快速入门

# 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
将其接入 Claude Desktop / Claude Code

将以下内容添加到你的 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-..."
      }
    }
  }
}

然后可以向 Claude 提出类似这样的请求:

“在营销专页发布:‘新系列将于周五推出’。先生成图片,再验证,然后发布。”

Claude 会依次调用 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

将生成、验证和发布分开是有意为之:这样 LLM 可以反复调整视觉内容,而不会消耗 Meta API 配额;同时也便于在没有 Meta 账号的情况下,于 CI 中检查防护措施。

反重复策略

我们会使用基于单词 4-gram 的 Jaccard 相似度,将候选消息与 anti_duplicate_lookback_days 指定时间范围内的每篇帖子进行比较(按专页设置,默认 14 天):

  1. 规范化:转为小写、去除重音符号(NFKD)、删除 URL、删除标点符号、合并空白字符。
  2. 分别为两段文本生成单词级 4-gram 集合。
  3. similarity = |A ∩ B| / |A ∪ B|
  4. 如果 similarity >= similarity_threshold(默认值为 0.5),则阻止发布。

为什么不用嵌入:结果确定、免费、无需额外的 API 密钥,对于每次调用检查 50 个候选项来说速度足够快。如果你想进行 LLM 级别的语义比较,可以在此基础上添加一层检查——fb_validate_pre_publish 工具会返回相似度分数,供你的 Agent 作出判断。

品牌语气配置

defaults:
  language: en
  brand_voice: |
    Direct, professional, no fluff.
  banned_topics: []
  image_required: true
  anti_duplicate_lookback_days: 14

pages:
  marketing_main:
    page_id: "0000000000000000"
    name: "My Brand — Main"
    brand_voice: |
      Confident, concise, customer-first.
    banned_topics:
      - competitor_brand_a
      - leaked_codename
    image_required: true

  community:
    page_id: "0000000000000002"
    name: "Community"
    image_required: false

注意:brand_voice 字段仅供参考——它会通过工具描述呈现给调用方的 LLM,但服务本身不会使用 LLM 验证内容是否符合该字段的要求。这是有意为之(测试必须能够离线运行)。如果需要强制执行,可以在此基础上添加自己的 LLM 检查。

使用场景

1. 多页面代理机构

你为客户管理 5 个 Facebook 页面。每个页面都有自己的品牌语调、禁用话题(竞争对手名称)和图片政策。将它们全部配置在一个 config.yaml 中,把工具提供给 Claude,然后让 Agent 在安全措施的保障下,为所有页面起草、验证并发布内容。

2. 独立创始人

你运营一个产品页面,希望 Claude 安排接下来 30 天的帖子。设置 image_required: true,向 Agent 提供你的产品简介,并使用 fb_anti_duplicate_check 确保两周内没有两篇帖子采用相同的切入角度。

3. 电商

你会轮换发布限时促销。为促销页面设置 anti_duplicate_lookback_days: 7,为常青内容页面设置 14。结合 scheduled_at,一次性将一周的帖子加入队列。

开发

git clone https://github.com/anthonyjbolo/mcp-fb-publisher.git
cd mcp-fb-publisher

python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,openai,fal]"

# Run the test suite (offline, no Meta credentials needed)
pytest

# Lint
ruff check .

所有测试均使用 httpx.MockTransport 和 pytest-mock。测试中不会调用真实的 Meta API。

安全

  • Meta 令牌仅从 META_USER_TOKEN 读取。切勿将其硬编码。
  • 令牌字符串会在离开进程前从错误消息中脱敏(***REDACTED***)。
  • 验证器是同步且离线的,可安全地在 CI 中运行,无需暴露凭据。
  • config.yaml 已列入 .gitignore。仅提交 config.example.yaml。

路线图

  • 支持 Instagram Graph API(验证器已可使用,只需调整 meta_client 的发布路径)。
  • 发布失败时可选触发 ntfy webhook。
  • 可选工具:基于大模型的品牌语调评分。
  • 令牌轮换助手(fb_check_token_expiry)。

En français — ce projet, et pourquoi

项目在新喀里多尼亚开发,用于并行管理 5 个 FB 页面(驾校、宾果市场、应用工作室、T 恤品牌、媒体页面)。上述所有陷阱都是我亲身遇到过的 bug。MCP 服务正是我希望第一天就能拥有的那一层——现在它已开源。

许可证

MIT — 参见 LICENSE。

参与贡献

欢迎提交 Issues 和 PR。提交 PR 前,请运行 pytest 和 ruff check .。对于重要功能,请先开 Issue 进行讨论。

#BuiltOnClaudeCode

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。