How to connect LinkedIn to Hermes Agent
Connect LinkedIn to Hermes with ClawLink in one click — 10 tools your AI agent can call from chat via hosted OAuth. No API keys, no manual setup.


Post updates, manage pages, and grow your network. Once connected, Hermes Agent can read and act on LinkedIn from chat — pairing, token refresh, and tool wiring handled for you.
Most guides for giving Hermes Agent LinkedIn 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 LinkedIn setup: pair once in the browser and your always-on Hermes agent can act on LinkedIn for you, reading and doing real work on your behalf with no auth, token refresh, or tool wiring to build yourself.
Copy this prompt into Hermes to install the plugin and pair your account.
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. It prints an approval link, so show me the link and stop, don't wait:
hermes clawlink begin
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 LinkedIn.
1Install and pair
Install the ClawLink plugin, then pair Hermes with a one-time browser approval:
hermes plugins install ClawLink-HQ/hermes-plugin --enable- 2
Connect LinkedIn
One-click OAuth in the dashboard.
- 3
Use it from chat
Ask Hermes Agent: "What can you do with LinkedIn?"
Install by command
The prompt above walks Hermes through this. By hand, it is four commands and a browser approval:
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 testThen connect LinkedIn in the ClawLink dashboard — a one-click OAuth approval, no API keys.
Verify the connection by asking Hermes:
Run linkedin_get_my_info first to confirm the connection works. Then write a 1,200 character post about [topic] and show it to me before you publish. When I approve, call linkedin_create_linked_in_post with the author URN from my profile, visibility set to CONNECTIONS, and lifecycleState PUBLISHED. Give me the post URL 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:
npx -y @useclawlink/cli loginlogin opens the same browser approval and stores a credential locally. Once LinkedIn is connected in the dashboard, that agent calls the same 10 LinkedIn tools over MCP. Full setup for MCP clients and shell agents: connect apps to any AI agent.
LinkedIn MCP for Hermes
Looking for a LinkedIn MCP server for Hermes Agent? ClawLink connects LinkedIn to Hermes Agent and exposes 10 LinkedIn tools your agent can call over MCP, with hosted auth and nothing to run or maintain yourself. Using OpenClaw instead? The OpenClaw LinkedIn integration works the same way.
Search for this and the first answer you get is a terminal: a curl install of Composio's CLI, then a block of MCP config to paste into ~/.hermes/config.yaml, with your OAuth app and API keys somewhere in the chain. ClawLink connects LinkedIn through an app that is already registered: you approve access on LinkedIn's own consent screen, the connection holds an authorization rather than a password, and the 10 tools below work from Hermes chat with no config file, no CLI, and no key you manage. One honest limit: this connection requests the member scope w_member_social, so it posts as you, not as your company pages.
What this LinkedIn integration does not do
Stated plainly, because the query space around LinkedIn expects several capabilities this 10-tool set does not have.
- No company-page posting. The connection requests
w_member_socialonly, so posts and comments run as your member account. Organization posting needsw_organization_social, which is not in this connection's scope list, and LinkedIn gates that capability behind its Partner Program and page-admin roles. - No ad campaign management. The two ad tools here,
linkedin_get_ad_targeting_facetsandlinkedin_search_ad_targeting_entities, only research audiences. Creating campaigns, uploading creatives, and reading spend are not in the set. - No profile browsing beyond your own.
linkedin_get_my_inforeads the authenticated member. There is no tool that searches profiles, pulls other members' activity, or reads your feed as a list.
If a search result promised any of those, it was describing the LinkedIn Marketing API or a browser-automation tool, not this page. The "best LinkedIn MCP server" roundup shape is covered on /hub rather than here.
What the Hermes Agent LinkedIn integration can do
10 LinkedIn tools are ready for Hermes Agent once the account is connected. The 8 below are the ones people reach for most; your agent can call all 10.
8 of 10 LinkedIn tools for Hermes
| Tool | What it does |
|---|---|
Create comment on post linkedin_create_comment_on_post | Comment on a LinkedIn post |
Create linked in post linkedin_create_linked_in_post | Publish a post on LinkedIn |
Get ad targeting facets linkedin_get_ad_targeting_facets | Get LinkedIn ad targeting facets |
Get images linkedin_get_images | Get images from a LinkedIn post |
Get my info linkedin_get_my_info | Get the authenticated LinkedIn member profile |
Search ad targeting entities linkedin_search_ad_targeting_entities | Search LinkedIn ad targeting entities |
Get image linkedin_get_image | Retrieve details of a LinkedIn image using its URN |
Create article or URL share linkedin_create_article_or_url_share | Create an article or URL share on LinkedIn using the UGC Posts API |
Try it: find the LinkedIn tool you need
Browse the 8 LinkedIn tools
Click any tool to see exactly what Hermes can do and copy a ready-to-use prompt.
Example prompts
Run linkedin_get_my_info first to confirm the connection works. Then write a 1,200 character post about [topic] and show it to me before you publish. When I approve, call linkedin_create_linked_in_post with the author URN from my profile, visibility set to CONNECTIONS, and lifecycleState PUBLISHED. Give me the post URL when it is live.
I will give you the URL of a LinkedIn post. Extract the share URN from it, then use linkedin_create_comment_on_post to post the comment I paste. Do not call the tool until I confirm the comment text.
Using my LinkedIn tools, look through the posts and comments available to my account and summarize what my network discussed this week: the themes, the posts with the most engagement, and which of my own posts, if any, earned replies. Where you cannot see data, say so rather than guessing.
Use linkedin_search_ad_targeting_entities to find audiences for a B2B fintech product targeting finance directors in the UK: the entity types available, the audience size ranges, and any geographic or industry facets from linkedin_get_ad_targeting_facets that fit. Summarize what an ads setup could target and flag which fields are the actual targeting values.
How the LinkedIn tools behave
Facts from the live tool schemas that change how a prompt should be written.
linkedin_create_linked_in_postrequiresauthorandcommentary. The author is a URN,urn:li:person:\<id>for your own profile or an organization URN, andcommentaryis capped at 3,000 characters. Skipping either is the direct cause of the two most common errors in production.lifecycleStatecontrols whether a post goes live.PUBLISHEDposts immediately,DRAFTsaves it for later,PUBLISH_REQUESTEDsends it for review. "Draft it first" is a schema-level option, not a workaround.visibilityis set per post.PUBLIC,CONNECTIONS,LOGGED_IN, orCONTAINERfor group posts. A prompt that does not name one leaves the choice to the model, which will usually pick PUBLIC.- Images arrive as an array, fetched from URLs or uploads.
imagesaccepts 1 to 20 items, and a media URL the server cannot fetch fails with "Fetching the media URL for images[] returned HTTP 403" or a sibling status. Give the agent a reachable URL rather than a local file path. - Commenting is separate from posting.
linkedin_create_comment_on_posttargets a post URN and supports mentions and image attachments. It cannot edit an existing comment, and deleting posts useslinkedin_delete_linked_in_postorlinkedin_delete_post, both of which sit outside the page's table. - Deletes and creates carry a confirmation step. Production logs show "requires explicit confirmation before execution" for
linkedin_create_linked_in_postandlinkedin_delete_post, so an agent will ask before either of them runs.
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 LinkedIn working from chat.
| Manual | ClawLink | |
|---|---|---|
| Connection flow | Register a LinkedIn app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect LinkedIn 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 LinkedIn. | 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 LinkedIn actions to the runtime in a format your agent can reliably use. | 10 tools for LinkedIn are already exposed through ClawLink, so the agent can read and act from chat immediately. |
ClawLink vs. Composio
Composio also exposes LinkedIn 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 LinkedIn in the browser, and the 10 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 comparison.
Troubleshooting
Hermes paired but still can't use LinkedIn
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 LinkedIn 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 LinkedIn tools
LinkedIn 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 LinkedIn 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.
LinkedIn 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.
LinkedIn returns 403 or "insufficient permissions" on one action while others work
Most guides for this error walk you through the Developer Portal: add scopes, request Products, clear a token cache, add a LinkedIn-Version header. None of that applies here, because you have no app and no token cache. What the engines are really teaching is scope-first thinking, and the scoped version of this error is real: posting as an organization fails because this connection does not hold w_organization_social, and commenting on a post from a company page your account has no role on fails the same way. The second cause is a stale grant: if the account's consent has been revoked or the connection expired, reads keep working through a cached session while writes fail. Reconnect from the dashboard and complete the consent screen again. Do not ask the agent to fabricate scopes or re-request the post, and note that a placeholder author URN produces this same shape and is covered in its own card below.
Ask the agent to diagnose it:
Run linkedin_get_my_info and report what it returns. Then retry the failing call once and quote the exact error body, including any status code."arguments.author is required" when calling linkedin_create_linked_in_post
The create-post tool requires an author argument in URN form, urn:li:person:\<id> for a person, and agents invent it or skip it when they have never listed anything. This is the most common failure on this integration in production. The fix is list-first: run linkedin_get_my_info to get your own profile, then call linkedin_create_linked_in_post with the author URN built from that profile's person identifier and your commentary. A placeholder string that resembles a URN but is not yours produces a different, later error, so the order matters.
Ask the agent to diagnose it:
Run linkedin_get_my_info and show me the profile response. Then retry the post with the author value set to the person URN from that response. Do not guess the author value.Tool 'linkedin_create_post' not found. Did you mean: 'linkedin_create_linked_in_post', 'linkedin_create_comment_on_post', 'linkedin_delete_post'?
The tool is named linkedin_create_linked_in_post. If the agent reached for a shorter name like linkedin_create_post or linkedin_post_share, the error message lists the real names, so retrying with one of those works. If the name you asked for already matches the list exactly, the tool catalog had not loaded when the first call went out; schemas load on demand, so one retry after a few seconds clears it. The same pattern shows up for reads: linkedin_get_profile and linkedin_get_me do not exist; the real tools are linkedin_get_my_info, linkedin_get_image, and linkedin_get_images.
Ask the agent to diagnose it:
List the LinkedIn tools you actually have access to, using the exact names. Use one of those names for what I asked.Post or comment not found. The target URN 'urn:li:share:...' may be invalid, deleted, or you may not have permission to comment on it.
Three distinct causes produce this exact message. A placeholder URN: the agent invented an id instead of listing first, and LinkedIn answers with this rather than a clear bad-argument error. A deleted post: the target is gone, which the message says explicitly. And a permission boundary: you cannot comment on a post the connected account cannot see, which includes company-page content your account has no access to. The fix is to start from a real id: linkedin_get_my_info for your profile, or a URN taken from a post URL you provide, then act on the URN that came back. The prefix is not interchangeable: production errors show both urn:li:share and urn:li:ugcPost forms rejected for the same content, so the URN should come from a prior tool response or the post's own URL rather than being built by hand.
Ask the agent to diagnose it:
Show me where the post URN came from. If it was not returned by a prior LinkedIn tool call or taken from the post URL I gave you, stop and run a list or search tool first."String should have at most 3000 characters on parameter `commentary`"
LinkedIn caps post text at 3,000 characters at the API level, and the validation error is literal about which argument broke. Agents writing long-form posts will hit this on their own, so the fix is to ask for the draft to be trimmed to 3,000 characters or to be published as an article instead, which has its own tool, linkedin_create_article_or_url_share. The error is not a connection problem and reconnecting will not help.
Ask the agent to diagnose it:
Retry the post with commentary trimmed to 3,000 characters or less, keeping the first paragraph intact. Tell me the final length.OAuth finished in the browser but the account is still missing
Try reconnecting LinkedIn and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.
FAQ
Is there a Hermes Agent LinkedIn integration?
Yes. ClawLink is the fastest way to connect Hermes to LinkedIn: link your LinkedIn account once in the browser and Hermes Agent can call the LinkedIn API through 10 ready-made tools — no custom code or token handling.
How do I connect LinkedIn 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 LinkedIn 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 LinkedIn to Hermes Agent?
About two minutes. Sign in, click Connect next to LinkedIn in the dashboard, authenticate, and Hermes Agent can use it from the next chat message.
Why use ClawLink instead of wiring LinkedIn 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 LinkedIn working from chat.
Do I need a LinkedIn developer app to connect LinkedIn to Hermes Agent?
Not for this connection. Building the integration yourself means registering an app in the LinkedIn Developer Portal, requesting the Share on LinkedIn product, waiting for approval, and handling token exchange. ClawLink connects through an app that is already registered, so what you do is sign in with your LinkedIn account and approve the grant. Nothing about that changes LinkedIn's own permission model: the connection still gets the scopes listed on the consent screen, and you can still revoke them later from LinkedIn's settings.
Can the agent post to my LinkedIn company page?
Not through this connection. The tool linkedin_create_linked_in_post accepts an organization author URN, but posting as an organization needs the w_organization_social scope, which this hosted connection does not request; the connection's scope list is openid, profile, w_member_social, and email. Company-page posting also sits behind LinkedIn's Community Management API and a page-admin role on your account. If org posting is the whole goal, this page is the wrong surface, and reconnecting from the dashboard will not fix it, because the scope list is fixed on the app side.
Is it safe to connect LinkedIn to an AI agent?
The risk warnings about AI on LinkedIn mostly describe a specific failure mode: a tool that logs in for you with your password or simulates a browser to act like a person. That is the automation pattern LinkedIn bans. This connection is the other model. Nothing stores your password, the agent acts under a grant you approved on LinkedIn's consent screen, the grant covers the 10 tools on this page rather than an open API session, and you can revoke it from your LinkedIn settings without involving us. The write tools are individually named: linkedin_create_linked_in_post, linkedin_create_comment_on_post, and linkedin_delete_linked_in_post, and posting carries a confirmation step in the flow.
Why does this page say "no API keys" when OAuth still issues tokens?
Because the token never touches you. LinkedIn issues an access token to the connection, and ClawLink's side stores and refreshes it, so there is nothing for you to paste, rotate, or debug. The claim is about what you manage, not about what exists. An AI Overview described this setup as token-free, which overstates it: the token exists, it just lives server-side rather than in a config file next to your agent.
How do I test the LinkedIn integration in Hermes Agent?
Run hermes clawlink test to confirm the pairing, then ask Hermes for a live read, for example "Use LinkedIn to show me my profile". linkedin_get_my_info returns the authenticated member's profile with no arguments, so a profile back in chat means the connection works. From there the natural next step is a real write under your control: draft a post and have the agent call linkedin_create_linked_in_post with visibility set to CONNECTIONS rather than PUBLIC.
Hermes paired but still can't use LinkedIn
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.