{
  "slug": "io-github-ivanbbaev-facebook-mcp",
  "name": "io.github.IvanBBaev/facebook-mcp",
  "title": "facebook-mcp",
  "description": "Facebook Pages MCP server for the Meta Graph API — publishing, insights, moderation, messaging",
  "version": "0.7.0",
  "publishedAt": "2026-08-27T18:36:02.941113Z",
  "updatedAt": "2026-08-27T18:36:02.941113Z",
  "repoUrl": "https://github.com/IvanBBaev/facebook-mcp",
  "websiteUrl": "https://ivanbbaev.github.io/facebook-mcp/",
  "namespace": {
    "type": "github",
    "owner": "IvanBBaev"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@ivanbaev/facebook-mcp",
      "version": "0.7.0",
      "transport": "stdio",
      "runtimeHint": null
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "FB_SYSTEM_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "System-user access token (Business Manager). Takes precedence over FB_ACCESS_TOKEN and FB_PAGE_TOKEN when several are set."
    },
    {
      "name": "FB_ACCESS_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Primary user access token. At least one of FB_SYSTEM_TOKEN, FB_ACCESS_TOKEN or FB_PAGE_TOKEN must be set."
    },
    {
      "name": "FB_PAGE_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Long-lived Page access token used as a fallback credential when no user or system-user token is configured."
    },
    {
      "name": "FB_APP_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "Meta app ID; combined with FB_APP_SECRET it forms the app access token used to authorize /debug_token inspection."
    },
    {
      "name": "FB_APP_SECRET",
      "isSecret": true,
      "isRequired": false,
      "description": "Meta app secret. When set, appsecret_proof is attached to every call so a stolen bare token cannot be used on its own."
    },
    {
      "name": "FB_PAGE_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "Default Facebook Page ID, used when a tool call omits an explicit profile argument."
    },
    {
      "name": "FB_API_VERSION",
      "isSecret": false,
      "isRequired": false,
      "description": "Graph API version to target. Defaults to the tested pinned version; other values are accepted verbatim as an escape hatch but are not tested."
    },
    {
      "name": "FB_REQUEST_TIMEOUT_MS",
      "isSecret": false,
      "isRequired": false,
      "description": "Per-request timeout in milliseconds; integer in [1, 600000]."
    },
    {
      "name": "FB_HOST_CONCURRENCY",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum number of in-flight requests per Graph host; integer in [1, 64]."
    },
    {
      "name": "FB_MAX_RESULT_CHARS",
      "isSecret": false,
      "isRequired": false,
      "description": "Character budget applied by the result shaper before a tool result is truncated; integer in [500, 10000000]."
    },
    {
      "name": "FB_WRITE_MODE",
      "isSecret": false,
      "isRequired": false,
      "description": "Write gating mode: plan (validating dry-run preview, the default) or apply. It never covers the irreversible and spend tiers, which always need a per-call apply plus a plan_id."
    },
    {
      "name": "FB_CONFIRM_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Operator confirmation token for out-of-band approval of irreversible or spend actions. The server prompts through MCP elicitation where the client supports it; otherwise the caller passes this value as the confirm_token tool argument."
    },
    {
      "name": "FB_MEDIA_DIR",
      "isSecret": false,
      "isRequired": false,
      "description": "Directory permitted for local media uploads. Unset means URL-only uploads and no local file access at all."
    },
    {
      "name": "FB_JOURNAL_PATH",
      "isSecret": false,
      "isRequired": false,
      "description": "Path to the append-only write journal. Defaults to the XDG/%APPDATA% state path; the file is created owner-only (0600) and rotates by size."
    },
    {
      "name": "FB_TOOL_PACKAGES",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated tool packages or profiles to expose (e.g. core,posts,reader, or the profiles core|all|reader|publisher|moderator|ads). Omit for the default profile, which excludes ads."
    },
    {
      "name": "FB_PACKAGES_DENY",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated packages to exclude even when FB_TOOL_PACKAGES enables them. Deny wins over allow."
    },
    {
      "name": "FB_PACKAGES_READONLY",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated packages whose write tools are not registered at all; the read tools of those packages stay available."
    },
    {
      "name": "FB_TRANSPORT",
      "isSecret": false,
      "isRequired": false,
      "description": "Transport protocol: stdio (default) or http. The http transport binds 127.0.0.1 only and fails closed without FB_HTTP_TOKEN."
    },
    {
      "name": "FB_HTTP_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Bearer token guarding the HTTP transport; required when FB_TRANSPORT=http (the server refuses to start without it)."
    },
    {
      "name": "FB_HTTP_PORT",
      "isSecret": false,
      "isRequired": false,
      "description": "Port for the HTTP transport (loopback only); used when FB_TRANSPORT=http. Integer in [1, 65535]."
    },
    {
      "name": "FB_AD_ACCOUNT_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "Default ad account ID (act_… or the bare numeric id) for the opt-in ads package."
    },
    {
      "name": "FB_ADS_BUDGET_CEILING",
      "isSecret": false,
      "isRequired": false,
      "description": "Hard ceiling for any ads budget write, in minor currency units (e.g. cents). Non-negative integer; a write above it is refused."
    },
    {
      "name": "FB_LOG_LEVEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Stderr log verbosity: debug, info, warn or error. Logs never go to stdout — that is the stdio protocol channel."
    }
  ],
  "category": "communication",
  "subcategory": "more",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/IvanBBaev/facebook-mcp"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "warn",
      "detail": "Asks for 6 secrets: FB_SYSTEM_TOKEN, FB_ACCESS_TOKEN, FB_PAGE_TOKEN, FB_APP_SECRET, FB_CONFIRM_TOKEN, FB_HTTP_TOKEN"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account IvanBBaev"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "pass",
      "detail": "@ivanbaev/facebook-mcp@0.7.0 runs nothing at install"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "pass",
      "detail": "Read 93 files in @ivanbaev/facebook-mcp@0.7.0: no obfuscation, encoded execution, credential reads or data-collection endpoints found"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "pass",
      "detail": "No hidden characters or instructions to the AI in 93 files, including comments and the README"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (npm)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"facebook-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@ivanbaev/facebook-mcp@0.7.0\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 2,
  "archived": false,
  "pushedAt": "2026-10-28T21:19:58Z",
  "health": {
    "score": 66,
    "parts": {
      "popularity": 0.29264094623525405,
      "activity": 1,
      "issues": 0.88,
      "security": 0.8
    },
    "fail": 0,
    "warn": 1,
    "raw": {
      "stars": 2,
      "forks": 2,
      "downloads": 326,
      "hn": null,
      "issuesOpen": 3,
      "issuesClosed": 22,
      "prsMerged": 1,
      "commits90": 115,
      "release": "2026-10-28T19:23:13Z",
      "pushed": "2026-10-28T21:19:58Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:42:38.200Z"
  }
}
