# How to connect Facebook to Hermes Agent (no Facebook developer app)

> Connect a Facebook Page to Hermes Agent with ClawLink: sign in once, no Facebook developer app, no Page Access Token to mint. 39 Facebook tools your agent calls from chat.

Web version: https://claw-link.dev/hermes/facebook

Most guides for giving Hermes Agent Facebook access start with registering your own OAuth app or pasting API keys into env files, then leave the token refresh and tool wiring to you. ClawLink gives Hermes a more practical Facebook setup: pair once in the browser and your always-on Hermes agent can act on Facebook for you, reading and doing real work on your behalf with no auth, token refresh, or tool wiring to build yourself.

**Start here — paste this into Hermes to set up ClawLink:**

> Set up ClawLink for Hermes and tell me when it's ready.
> 1. Install the plugin: `hermes plugins install ClawLink-HQ/hermes-plugin --enable`
> 2. Start pairing with `hermes clawlink begin`. It prints an approval link, so show me the link and stop, don't wait.
> 3. I'll approve it in my browser, then reply "approved".
> 4. When I say approved, finish setup: `hermes clawlink finish`
> 5. Then run `hermes clawlink test` and tell me whether ClawLink is ready.

## Setup

It takes three steps to connect Hermes to Facebook.

1. **Install ClawLink** — add the plugin to Hermes Agent once.
2. **Connect Facebook** — one-click OAuth in the ClawLink dashboard.
3. **Use it from chat** — ask Hermes Agent in plain English.

**Alternative for any agent (no plugin needed):** if the Hermes Agent plugin route isn't available or doesn't work, any AI agent with shell access can use the ClawLink CLI instead:

```bash
npx -y @useclawlink/cli login          # sign in via browser — no API key to paste
npx -y @useclawlink/cli connect facebook  # connect Facebook (browser OAuth)
npx -y @useclawlink/cli actions facebook  # list available actions
npx -y @useclawlink/cli run facebook <action> --input '<json>'  # execute (add --confirm for writes)
```

### Install by command

The prompt above walks Hermes through this. By hand, it is four commands and a browser approval:

```bash
hermes plugins install ClawLink-HQ/hermes-plugin --enable
hermes clawlink begin    # prints an approval link — open it and approve
hermes clawlink finish   # after approving in the browser
hermes clawlink test
```

Then connect Facebook in the [ClawLink dashboard](https://claw-link.dev/dashboard) — a one-click OAuth approval, no API keys.

Verify the connection by asking Hermes:

> Run facebook_list_managed_pages and show me the Pages you can reach. For the one I pick, use facebook_create_post to publish the text I paste next. Show me the post id and the permalink when it is live.

### Using a different agent?

The Hermes plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:

```bash
npx -y @useclawlink/cli login
```

`login` opens the same browser approval and stores a credential locally. Once Facebook is connected in the dashboard, that agent calls the same 39 Facebook tools over MCP. Full setup for MCP clients and shell agents: [connect apps to any AI agent](https://claw-link.dev/learn/connect-apps-to-any-ai-agent).

## Facebook MCP for Hermes

Looking for a Facebook MCP server for Hermes Agent? ClawLink connects Facebook to Hermes Agent and exposes 39 Facebook tools your agent can call over [MCP](https://claw-link.dev/learn/what-is-an-mcp-server), with [hosted auth](https://claw-link.dev/learn/oauth-for-ai-agents) and nothing to run or maintain yourself. Using OpenClaw instead? The [OpenClaw Facebook integration](https://claw-link.dev/openclaw/facebook) works the same way.

Search for this and you will be told to create a Facebook developer app, add Facebook Login, request pages_manage_posts, then exchange a user token for a Page Access Token before you can publish anything. That is the correct way to build your own integration and it is the reason most people give up. ClawLink connects through Facebook's OAuth consent screen using an app that is already registered, so you sign in, choose which Pages to grant, and the 39 tools below work from Hermes chat. There is no app to register, no Page Access Token for you to mint or refresh, and nothing stored on your machine.

## Facebook, Meta Ads, and Instagram are three connections

One Meta login, three separate ClawLink integrations. Knowing which one owns a tool saves a confusing session.

- **This page covers the Page surface**: posts, photos, videos, comments, Page insights, Page roles, and Messenger.
- **Ad spend lives on the [Hermes Meta Ads integration](https://claw-link.dev/hermes/meta-ads)**: campaigns, ad sets, creatives, audiences, and Business Manager structure. It connects differently, by pasting an access token, because Meta's app review for ad management is still open.
- **Instagram publishing and comments live on the [Hermes Instagram integration](https://claw-link.dev/hermes/instagram)**, including Stories, carousels, and Instagram insights.

If a tool you expect is missing, check which of the three you actually connected before assuming the catalog failed to load.

## What the Hermes Agent Facebook integration can do

39 Facebook tools are ready for Hermes Agent once the account is connected. The 30 below are the ones people reach for most; your agent can call all 39.

### 30 of 39 Facebook tools for Hermes

| Tool | What it does |
|---|---|
| **Create comment** `facebook_create_comment` | Comment on a Facebook Page post |
| **Create photo post** `facebook_create_photo_post` | Create a photo post on a Facebook Page |
| **Create post** `facebook_create_post` | Create a post on a Facebook Page |
| **Get comments** `facebook_get_comments` | List comments on a Facebook Page post |
| **Get page conversations** `facebook_get_page_conversations` | List conversations on a Facebook Page |
| **Get page details** `facebook_get_page_details` | Get Facebook Page details |
| **Get page insights** `facebook_get_page_insights` | Get Facebook Page insights |
| **Get page posts** `facebook_get_page_posts` | List posts from a Facebook Page |
| **Get post** `facebook_get_post` | Get a single Facebook Page post |
| **Get post insights** `facebook_get_post_insights` | Get insights for a Facebook Page post |
| **Get post reactions** `facebook_get_post_reactions` | Get reactions on a Facebook Page post |
| **List managed pages** `facebook_list_managed_pages` | List Facebook Pages you manage |
| **Send message** `facebook_send_message` | Send a message from a Facebook Page |
| **Update post** `facebook_update_post` | Update a Facebook Page post |
| **Get comment** `facebook_get_comment` | Retrieves details of a specific Facebook comment |
| **Get conversation messages** `facebook_get_conversation_messages` | Retrieves messages from a specific conversation |
| **Get current user** `facebook_get_current_user` | Validates the access token and retrieves the authenticated user's own profile via /me |
| **Get message details** `facebook_get_message_details` | Retrieves details of a specific message sent or received by the Page |
| **Get page photos** `facebook_get_page_photos` | Retrieves photos from a Facebook Page |
| **Get page roles** `facebook_get_page_roles` | Retrieves a list of people and their tasks/roles on a Facebook Page |
| **Get page tagged posts** `facebook_get_page_tagged_posts` | Retrieves posts where a Facebook Page is tagged or mentioned |
| **Get page videos** `facebook_get_page_videos` | Retrieves videos from a Facebook Page |
| **Get scheduled posts** `facebook_get_scheduled_posts` | Retrieves scheduled and unpublished posts for a Facebook Page |
| **Assign page task** `facebook_assign_page_task` | Assigns tasks/roles to a business-scoped user or system user for a specific Facebook Page |
| **Create photo album** `facebook_create_photo_album` | Creates a new photo album on a Facebook Page |
| **Create video post** `facebook_create_video_post` | Creates a video post on a Facebook Page |
| **Like post or comment** `facebook_like_post_or_comment` | Adds a LIKE reaction to a Facebook post or comment |
| **Mark message seen** `facebook_mark_message_seen` | Marks a user's message as seen by the Page, visibly updating the read status in the user's |
| **Publish scheduled post** `facebook_publish_scheduled_post` | Publishes a previously scheduled or unpublished Facebook post immediately |
| **Reschedule post** `facebook_reschedule_post` | Changes the scheduled publish time of an unpublished Facebook post |

## Example prompts

**Publish to the right Page**

> Run facebook_list_managed_pages and show me the Pages you can reach. For the one I pick, use facebook_create_post to publish the text I paste next. Show me the post id and the permalink when it is live.

**Weekly Page report**

> For my main Page, pull facebook_get_page_insights for the last 7 days and facebook_get_page_posts for the same window, then facebook_get_post_insights on each. Tell me which post earned the most reach and what it had in common with the runner-up.

**Triage the comments**

> Use facebook_get_page_posts to find my three most recent posts, then facebook_get_comments on each. Group the comments into questions, complaints, and praise. Draft a reply to every question and wait for my approval before calling facebook_create_comment.

**Answer unread messages**

> Run facebook_get_page_conversations for my Page and show me the threads with unanswered messages. For each, pull facebook_get_conversation_messages so I can see the context, then draft a reply. Do not call facebook_send_message until I say go.

## How the Facebook tools behave

Facts from the manifest that change how a prompt should be written.

- **`facebook_list_managed_pages` is the first call in almost every workflow.** Nothing else resolves a Page name to an id, and Page ids are long numeric strings that cannot be guessed. Skipping this step is the direct cause of the error-100 card above.
- **Posting has four distinct tools.** `facebook_create_post` for text and links, `facebook_create_photo_post` for a single image, `facebook_upload_photos_batch` with `facebook_create_photo_album` for several, and `facebook_create_video_post` for video. Asking for "post this image" without naming one leaves the choice to the model.
- **Scheduling and publishing are separate.** `facebook_get_scheduled_posts`, `facebook_reschedule_post`, and `facebook_publish_scheduled_post` let an agent stage work for you to release, which is the practical way to keep a human in the loop without blocking the agent.
- **Two insight tools, two levels.** `facebook_get_page_insights` reports on the Page; `facebook_get_post_insights` reports on one post. A request for "engagement last week" usually needs both.
- **Messenger is in this integration.** `facebook_get_page_conversations`, `facebook_send_message`, `facebook_send_media_message`, `facebook_mark_message_seen`, and `facebook_toggle_typing_indicator` cover the inbox. These write to real conversations with real people, so they deserve an explicit approval step in the prompt.
- **Comment tools distinguish reading from moderating.** `facebook_get_comments` reads, `facebook_create_comment` and `facebook_update_comment` write, and `facebook_delete_comment` removes. "Clean up the comments" is ambiguous across three of those.

## ClawLink vs. building it yourself

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want Facebook working from chat.

| | Manual | ClawLink |
|---|---|---|
| **Connection flow** | Register a Facebook app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect Facebook through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| **Ongoing maintenance** | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for Facebook. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| **Agent usability** | You still need to expose the right Facebook actions to the runtime in a format your agent can reliably use. | 39 tools for Facebook are already exposed through ClawLink, so the agent can read and act from chat immediately. |

## ClawLink vs. Composio

Composio also exposes Facebook to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for Hermes Agent users instead. You install the plugin once, connect Facebook in the browser, and the 39 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full [Composio alternatives](https://claw-link.dev/hub/composio-alternatives) comparison.

### Hermes paired but still can't use Facebook
Pairing is a two-step handshake: run `hermes clawlink begin`, approve the link in your browser, then run `hermes clawlink finish`. If you ran finish before approving, or the approval link expired, run `hermes clawlink begin` again to get a fresh link. Confirm the plugin was installed with `--enable`, then verify with `hermes clawlink test`.

### Connection succeeds but no tools appear
Reconnect Facebook from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.

### "Tool schema not loaded yet" error when calling Facebook tools
Facebook tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every Facebook call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.

### Facebook returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.

### Facebook returns error code 100 with "Unsupported get request" or "(#100) Object does not exist" on a Page call
Almost always a placeholder Page id. An agent that has not listed anything yet will invent something like YOUR_PAGE_ID or a plausible numeric string, and because the shape is valid the call reaches Facebook and comes back as a missing object rather than a bad argument. The fix is to list first and act second: facebook_list_managed_pages returns the real ids and names, and facebook_get_page_details confirms you have the one you meant. The second cause is a Page you did not include at consent time, which produces the same error because the connection genuinely cannot see it. Reconnect from the dashboard and tick the Page. Note that on a manual build this same error usually means you passed a user token where a Page Access Token was needed; that cause does not apply here, because the hosted connection handles the token exchange.

Ask the agent to diagnose it:

```text
Run facebook_list_managed_pages and show me every Page id and name you can see. Then run facebook_get_page_details on the one I name. Do not retry the failing call until both have returned.
```

### Facebook returns 403 or "(#200) Permissions error" when publishing, while reads work
Reading a Page and posting to it are different permissions, so a connection can list your Pages, pull insights, and then fail on the first publish. Two things cause it. The first is a partial approval: Facebook's consent screen lets you decline individual permissions, and declining the publishing one leaves a connection that looks healthy until a write is attempted. Reconnect and accept the full set. The second is your own role on the Page: Facebook requires a role with content permissions to publish, so an account with analyst access can read insights and never post. Check the Page's access settings in Meta Business Suite. facebook_get_page_roles shows what the connected identity holds.

Ask the agent to diagnose it:

```text
Run facebook_get_page_roles for the Page I name and tell me what role the connected account has. Then report the exact error body from the failed publish, including the code and error_subcode.
```

### A Facebook tool returns "tool not found", or the agent asks for a Meta Ads tool on this connection
Two different things produce this. If the name looks right, the tool catalog had not loaded when the first call went out; schemas load on demand, so retrying once normally fixes it. If the agent is reaching for something like metaads_get_insights or a campaign tool, the problem is that it is on the wrong integration. Ad campaigns, ad sets, creatives, and ad spend live on the separate Meta Ads connection, and the Facebook tools here cover Pages, posts, comments, photos, videos, and Messenger. Connect Meta Ads as well if you need both, and say which surface you mean in the prompt.

Ask the agent to diagnose it:

```text
List the Facebook tools you actually have access to. Tell me which one posts to a Page, and whether you also have any Meta Ads tools available.
```

### OAuth finished in the browser but the account is still missing
Try reconnecting Facebook and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

### Is there a Hermes Agent Facebook integration?
Yes. ClawLink is the fastest way to connect Hermes to Facebook: link your Facebook account once in the browser and Hermes Agent can call the Facebook API through 39 ready-made tools — no custom code or token handling.

### How do I connect Facebook to Hermes with ClawLink?
Install the plugin with `hermes plugins install ClawLink-HQ/hermes-plugin --enable`, then pair once: run `hermes clawlink begin`, approve the link in your browser, and run `hermes clawlink finish`. Connect Facebook in the dashboard and Hermes can use it from the next message — no config files or API keys to manage.

### How long does it take to connect Facebook to Hermes Agent?
About two minutes. Sign in, click Connect next to Facebook in the dashboard, authenticate, and Hermes Agent can use it from the next chat message.

### Why use ClawLink instead of wiring Facebook up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want Facebook working from chat.

### Do I need a Facebook developer app to connect Facebook to an AI agent?
Not for this connection. The requirement is real when you build the integration yourself, because Meta issues tokens to apps rather than to people, so a DIY route means registering an app, adding Facebook Login, requesting the permissions your calls need, and going through App Review before anyone outside your test list can use it. ClawLink connects through an app that is already registered, so what you do instead is approve access on Facebook's own consent screen and pick the Pages you want to include. The permission model does not change: Facebook still decides what the grant covers and still lets you revoke it from your account's Business Integrations settings.

### Do I have to deal with Page Access Tokens?
No, and this is the part that trips up most manual builds. Publishing to a Page needs a Page Access Token rather than a user token, which is why so many Stack Overflow answers about error 100 end with "switch to a Page Access Token". That exchange happens inside the hosted connection. From chat you name the Page and call the tool; there is no token type for you to pick, and nothing expires that you have to notice and rebuild.

### Which Pages can the agent reach?
Only the ones you granted during sign-in, and only if your Facebook account has a role on them. Facebook's consent screen shows a Page picker, and unticking a Page there keeps it out of the connection permanently until you reconnect. Ask the agent to run facebook_list_managed_pages first: whatever comes back is the complete list of what it can touch, which is the fastest way to confirm the connection matches what you intended.

### Is it safe to connect a Facebook Page to an AI agent?
The mechanics worth checking are these. The grant is scoped to the Pages you selected, so a Page you did not tick is not reachable. Nothing about your login is stored: the connection holds an authorization, not a password, and Facebook lists it under Business Integrations in your settings where you can revoke it without involving us. The agent's reach is the 39 named tools on this page rather than an open API session, and the ones that write are individually named, including facebook_create_post, facebook_delete_post, and facebook_send_message. If you want a read-only period while you build trust, say so in the prompt and ask the agent to draft posts for approval rather than publish them; facebook_get_scheduled_posts and facebook_publish_scheduled_post make a review step easy to keep.

### Hermes paired but still can't use Facebook
Pairing is a two-step handshake: run `hermes clawlink begin`, approve the link in your browser, then run `hermes clawlink finish`. If you ran finish before approving, or the approval link expired, run `hermes clawlink begin` again to get a fresh link. Confirm the plugin was installed with `--enable`, then verify with `hermes clawlink test`.

## Related

- [Stack Exchange tools](https://claw-link.dev/hermes/stack-exchange) — Search and browse questions, answers, and developer knowledge
- [Giphy](https://claw-link.dev/hermes/giphy) — Search GIFs, stickers, and emojis from the GIPHY library
- [Hermes Linkhut integration](https://claw-link.dev/hermes/linkhut) — Save, organize, and share bookmarks and links
