List your LinkedIn ad accounts
“List my LinkedIn ad accounts.”
Hermes Agent is the open-source agent from Nous Research that runs on your own machine or a small server and answers from the terminal, Telegram, or Slack. Connecting AdPlug gives it a controlled way to read your LinkedIn Ads data, send reports on a schedule, and prepare changes you approve. This guide covers what you need, the five setup steps, and how to sign in when Hermes runs on a server.
Updated 2026-09-30 · 8 minute read
LinkedIn Ads MCP server URL
Pass this address to hermes mcp add. Hermes signs in with OAuth, so there is no key to paste.
https://api.adplug.app/mcp/linkedin-ads01
Hermes has browser tools, so it could click through Campaign Manager for you. The cleaner route is an MCP server. Hermes' MCP docs describe MCP as the way to use tools that live outside Hermes itself, and it connects to servers running on your machine and to hosted ones in the same way.
AdPlug's LinkedIn Ads MCP is a hosted one. It works through LinkedIn's official Marketing API, so Hermes gets campaign data as numbers and never has to open Campaign Manager. Nothing runs next to Hermes: there is no package to install and no API key to store. Hermes signs in to AdPlug through your browser and keeps the token on its own disk.
02
03
Steps 1 and 2 happen in AdPlug. Steps 3 to 5 happen in a terminal on the machine where Hermes runs. Allow about ten minutes the first time. The commands follow the documentation for Hermes Agent v0.21.5, released on 24 September 2026.
Go to adplug.app/signup, sign in with Google or email, and follow the short onboarding. It ends on your AdPlug dashboard.

On the dashboard, click Connect LinkedIn Ads and sign in with the LinkedIn profile that has Campaign Manager access to the ad accounts you want Hermes to work on. Every account that profile can manage becomes available through the one connection.

Already past onboarding? The Connections page has the same button.

Hermes keeps its MCP servers in ~/.hermes/config.yaml (on native Windows the folder is %LOCALAPPDATA%\hermes) and has a command that writes the entry for you. Stay signed in to AdPlug in your browser, then run this on the machine where Hermes is installed:
hermes mcp add adplug-linkedin-ads --url https://api.adplug.app/mcp/linkedin-ads --auth oauthadplug-linkedin-ads is the name Hermes will use for the server, and you can pick another. --auth oauth tells Hermes that the server signs you in through the browser, so there is no key to paste.

Check the connection from the shell first:
hermes mcp test adplug-linkedin-adsIt should report Connected and the number of tools it discovered. Then start Hermes with hermes (in a session that was already open, type /reload-mcp) and ask:
“List my LinkedIn ad accounts.”
Hermes calls the linkedin_ads_list_accounts tool and returns the ad accounts you can access, with currencies and statuses. If your accounts are listed, the connection works end to end.

04
Hermes is built to run on a small server and be reached from Telegram. The sign-in still needs a browser once, and the browser is on your laptop while Hermes is not. Hermes finishes the sign-in by catching a redirect to 127.0.0.1 on its own machine, which your laptop cannot reach, and working round that takes longer than the 30 seconds hermes mcp add allows.
So on a server, skip that command. Add the entry from step 4 to config.yaml by hand and run hermes mcp login adplug-linkedin-ads in an SSH session. It waits five minutes, and Hermes' OAuth over SSH guide gives three ways to finish.
ssh -N -L PORT:127.0.0.1:PORT user@host with that port, then open the link as normal.Hermes also has a device-code login for servers whose sign-in supports one. AdPlug does not offer it, so use one of the three above.
Two things catch people out. Sign in as the same system user and profile that runs the gateway, because the token is stored in that profile's Hermes folder. And a Hermes running in the background never opens a browser: if the sign-in ever stops refreshing, the server is parked with a warning in gateway.log until you run hermes mcp login adplug-linkedin-ads again.
05
LinkedIn's hierarchy is campaign group, then campaign, then creative (the ad). Name the level you mean and Hermes picks the right one. More copy-paste prompts live in the prompt playbooks.
List your LinkedIn ad accounts
“List my LinkedIn ad accounts.”
Spend by seniority
“Break my LinkedIn Ads spend down by job seniority for the last 90 days, with cost per conversion for each band. Flag anything with too little data to judge.”
Pacing check
“For each active campaign group, compare planned daily spend with actual spend over the last 7 days. Highlight anything more than 15% off.”
Lead form check
“For every Lead Gen Form campaign active in the last 30 days, list completion rate and cost per lead, and tell me which form is performing worst.”
Audience size before you commit
“Estimate the audience size for marketing directors at SaaS companies in the UK, and tell me if it is too small to run.”
Competitor research
“Search the LinkedIn Ad Library for our top competitor and list their active ads with links. Summarise what they seem to be testing.”
Hermes has a built-in scheduler, which it calls cron. The simplest way to set a job up is to ask:
“Every Monday at 8am, use the adplug-linkedin-ads tools to pull last week's spend, impressions, clicks, and leads for every active campaign group in the Acme Software account, compare them with the week before, and send me a short summary on Telegram. Read only. Do not change anything.”
The same job from the shell, delivered to Telegram (0 8 * * 1 is cron notation for 8:00 every Monday):
hermes cron create "0 8 * * 1" "Use the adplug-linkedin-ads tools to pull last week's spend, impressions, clicks, and leads for every active campaign group in the Acme Software account, and compare them with the week before. Read only. Do not change anything." --name "LinkedIn Ads weekly" --deliver telegramA scheduled job starts a fresh session with no memory of your chat, so the prompt has to say everything: which account, which dates, what to report. A job you ask for in Telegram or Slack reports back to that chat; one created in the terminal is saved to a file unless you name a channel, which is what --deliver telegram does.
Jobs are run by the Hermes gateway, so it has to be running: hermes gateway install and then hermes gateway start set it up as a background service. Times follow the server's clock unless you set timezone in config.yaml, so check which time zone the server is on.
Run a new job once before you rely on it (hermes cron run with the job's ID) and check the summary arrives. Every run also uses AdPlug requests, and the free plan drops to 50 a month after the first, so a job that runs most days needs a paid plan.
06
AdPlug gives Hermes two tools for campaign changes: a preview tool that returns the exact change without applying it, and an execute tool that applies it. That covers campaign groups, campaigns, budgets, targeting, and ads in nine formats, including Thought Leader Ads. The free plan is view only; creating and editing campaigns needs a paid AdPlug plan.
Hermes asks before it runs a risky shell command, but an MCP server you add is trusted by default and its tools run without a prompt. For an ad account, change that. Add one line to the AdPlug entry in config.yaml, then type /reload-mcp or restart the gateway so Hermes picks it up:
mcp_servers:
adplug-linkedin-ads:
url: "https://api.adplug.app/mcp/linkedin-ads"
auth: oauth
trust: untrustedWith that line, Hermes stops and asks you before every call to a tool that can change something. It goes by the labels on AdPlug's tools: the reporting, lookup, and preview tools are marked read-only and run freely, while the execute tool and the conversion event tool are not, so those two wait for your yes. The question appears wherever the conversation is, in the terminal or in a chat such as Telegram. Untrusted is Hermes' word, described in its MCP config reference. It means ask me first, not that the server is unsafe.
A scheduled job has nobody to ask, so a change it attempts under this setting is declined instead of run. Keep scheduled work to reporting and make changes in a conversation you are in. If Hermes should never be able to change the account, run hermes mcp configure adplug-linkedin-ads and untick linkedin_ads_execute_mutation and linkedin_ads_send_conversion_event.
Hermes can take messages from several people through one gateway, and they all act through the one AdPlug sign-in, so keep the list of people allowed to message it short. For a shared Hermes that should only report, sign it in with an AdPlug seat the account owner has set to View only. On the Max and Agency plans each teammate can be set to View only or Can edit per platform, and a View only seat is refused any change, whatever Hermes is asked.
Report calls and executed changes are recorded in your AdPlug Usage and Audit Log, so you can check what Hermes did while you were away.
07
Click any item to expand the answer.
hermes mcp add waits about 30 seconds for the sign-in, and so does the reload after you edit config.yaml inside a running session. Run hermes mcp login adplug-linkedin-ads from a fresh terminal instead. It waits five minutes./reload-mcp in the open session or start a new one. If they are still missing, hermes mcp test adplug-linkedin-ads shows what the server answered.hermes cron status to see whether the scheduler is alive, and hermes cron list to see the job and where it delivers. The gateway runs the scheduler, so hermes gateway restart brings it back if it has stopped. If the AdPlug sign-in has expired, run hermes mcp login adplug-linkedin-ads again.08
09
The same AdPlug account connects other platforms and assistants.
Email support@adplug.app with setup questions or bug reports. Most replies come back the same business day.