# How to connect Postmark to Hermes Agent (paste one key, 46 tools)

> Connect Postmark to Hermes with ClawLink: paste your Postmark key once and 46 tools work from chat. No MCP server to run, nothing stored on your machine.

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

Most guides for giving Hermes Agent Postmark 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 Postmark setup: pair once in the browser and your always-on Hermes agent can act on Postmark 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 Postmark.

1. **Install ClawLink** — add the plugin to Hermes Agent once.
2. **Connect Postmark** — 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 postmark  # connect Postmark (browser OAuth)
npx -y @useclawlink/cli actions postmark  # list available actions
npx -y @useclawlink/cli run postmark <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 Postmark in the [ClawLink dashboard](https://claw-link.dev/dashboard) — paste your Postmark API key once.

Verify the connection by asking Hermes:

> Run postmark_get_delivery_stats, postmark_get_bounce_counts, and postmark_get_spam_complaints and tell me the last week's delivery rate, the bounce breakdown, and whether any spam complaints came in. Do not dig into individual bounces yet.

### 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 Postmark is connected in the dashboard, that agent calls the same 46 Postmark 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).

## Postmark MCP for Hermes

Looking for a Postmark MCP server for Hermes Agent? ClawLink connects Postmark to Hermes Agent and exposes 46 Postmark 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 Postmark integration](https://claw-link.dev/openclaw/postmark) works the same way.

Postmark is the transactional email service, and this page is about it, not about Postman the API client. The two get conflated in search results, but the credential that matters here is the Postmark Server Token, and Postmark requires one: what changes is who holds it. The route the search results teach has you generate the token, drop it into an environment file as the SMTP password, and restart the agent. Here you paste it once into the hosted setup page, it is stored server-side, and Hermes calls the 46 Postmark tools below from chat. Nothing runs on your machine, no `.env` file is edited, and rotating the token in Postmark means updating one place.

## What the Hermes Agent Postmark integration can do

46 Postmark 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 46.

### 30 of 46 Postmark tools for Hermes

| Tool | What it does |
|---|---|
| **Check spam score** `postmark_check_spam_score` | Check email spam score in Postmark |
| **Create inbound rule** `postmark_create_inbound_rule` | Create a Postmark inbound rule |
| **Create message stream** `postmark_create_message_stream` | Create a Postmark message stream |
| **Create suppressions** `postmark_create_suppressions` | Create Postmark suppressions |
| **Create template** `postmark_create_template` | Create a Postmark template |
| **Create webhook** `postmark_create_webhook` | Create a Postmark webhook |
| **Edit template** `postmark_edit_template` | Edit a Postmark template |
| **Get bounce counts** `postmark_get_bounce_counts` | Get Postmark bounce counts |
| **Get bounces** `postmark_get_bounces` | List Postmark bounces |
| **Get browser platform usage** `postmark_get_browser_platform_usage` | Get Postmark browser and platform usage |
| **Get click counts** `postmark_get_click_counts` | Get Postmark click counts |
| **Get delivery stats** `postmark_get_delivery_stats` | Get Postmark delivery statistics |
| **Get email open counts** `postmark_get_email_open_counts` | Get Postmark email open counts |
| **Get message stream** `postmark_get_message_stream` | Get a Postmark message stream |
| **Get browser usage** `postmark_get_browser_usage` | Retrieve browser usage statistics for clicked links |
| **Get clicks by browser family** `postmark_get_clicks_by_browser_family` | Retrieve click statistics grouped by browser family |
| **Get clicks by location** `postmark_get_clicks_by_location` | Get an overview of which part of the email links were clicked from (HTML or Text) |
| **Get email client usage** `postmark_get_email_client_usage` | Retrieve statistics on email clients used to open emails |
| **Get opens by platform** `postmark_get_opens_by_platform` | Retrieve email open statistics by platform type |
| **Get outbound overview** `postmark_get_outbound_overview` | Retrieve outbound email statistics overview |
| **Get sent counts** `postmark_get_sent_counts` | Retrieve total count of emails sent out |
| **Get server** `postmark_get_server` | Retrieve details of the current Postmark server |
| **Get spam complaints** `postmark_get_spam_complaints` | Retrieve counts of spam complaints |
| **Get template** `postmark_get_template` | Retrieve details of a specific template by its ID |
| **Get tracked email counts** `postmark_get_tracked_email_counts` | Retrieve counts of emails with tracking enabled |
| **Get webhook** `postmark_get_webhook` | Retrieve details of a specific webhook by its ID |
| **List inbound rules** `postmark_list_inbound_rules` | List all inbound rules (triggers) configured for blocking senders |
| **List message streams** `postmark_list_message_streams` | List all message streams for a Postmark server with optional type and archive filtering |
| **List outbound message clicks** `postmark_list_outbound_message_clicks` | List clicks for outbound messages with filtering options |
| **List outbound message opens** `postmark_list_outbound_message_opens` | Retrieve opens for outbound messages with filtering options |

## Example prompts

**Audit deliverability**

> Run postmark_get_delivery_stats, postmark_get_bounce_counts, and postmark_get_spam_complaints and tell me the last week's delivery rate, the bounce breakdown, and whether any spam complaints came in. Do not dig into individual bounces yet.

**What was sent and opened**

> Run postmark_get_sent_counts and postmark_get_tracked_email_counts for last week, then postmark_list_outbound_message_opens and postmark_list_outbound_message_clicks for the top stream, and summarise what got the most attention.

**Stand up a template**

> Create a template with postmark_create_template for our password reset email using the content I paste next, then read it back with postmark_get_template and tell me the template id.

**Check what is blocked**

> Run postmark_list_inbound_rules and tell me which senders are blocked, then run postmark_check_spam_score on the draft below and tell me which rules it trips.

## How the Postmark tools behave

Details that decide whether a Postmark prompt returns fast or lands in the wrong server's data.

- **Tokens are bound to servers.** A Postmark Server Token authenticates one server, and message streams, suppressions, and inbound rules live under it. A tool that fails only for some streams usually means the object belongs to another server in the same account.
- **Streams are first-class objects.** `postmark_create_message_stream` and `postmark_get_message_stream` manage them, and the analytics tools take stream filters. Name the stream in the prompt rather than saying "the account".
- **Templates are readable and editable.** `postmark_create_template`, `postmark_edit_template`, and `postmark_get_template` cover the lifecycle, which is how an agent prepares content without opening the Postmark UI.
- **The analytics set is broad.** Bounces, spam complaints, delivery stats, opens, clicks, tracked-email counts, and browser, platform, and email-client usage each have their own tool. Asking for "deliverability" without naming a stream or window gets a partial answer.
- **Suppressions block mail.** `postmark_create_suppressions` writes to your real sending account, so it is the write to confirm before running.
- **`postmark_get_server` is the diagnostic.** It reports which server the connection acts as, which is the first thing to check when a 403 appears.

## ClawLink vs. building it yourself

The alternative to ClawLink is usually manual API key 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 Postmark working from chat.

| | Manual | ClawLink |
|---|---|---|
| **Credential handling** | Collect, validate, store, and rotate the Postmark API key yourself, then make sure every tool call uses the right account. | Users complete the hosted ClawLink setup once and the connected Postmark account becomes available to the agent without you building credential management. |
| **Ongoing maintenance** | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for Postmark. | 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 Postmark actions to the runtime in a format your agent can reliably use. | 46 tools for Postmark are already exposed through ClawLink, so the agent can read and act from chat immediately. |

## ClawLink vs. Composio

Composio also exposes Postmark 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 Postmark in the browser, and the 46 tools above work from chat. There is no SDK and no config file, and the Postmark key you paste at setup is stored server-side rather than kept in your environment. Choosing between them? Read the full [Composio alternatives](https://claw-link.dev/hub/composio-alternatives) comparison.

### Hermes paired but still can't use Postmark
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 Postmark 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 Postmark tools
Postmark 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 Postmark 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.

### Postmark 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.

### Postmark returns 403 "insufficient permissions" while the account shows as connected
The taught causes, in order: a token-type mismatch, and the wrong server. Postmark issues two token kinds: Server Tokens authenticate server-level endpoints with an X-Postmark-Server-Token header, and Account Tokens authenticate account-level endpoints with X-Postmark-Account-Token. Putting a Server Token on an account endpoint, or an Account Token on a server endpoint, returns exactly this 403. Second, in a multi-server account a token is bound to one server: a tool that works for one message stream fails for another because the stream belongs to a different server. Third, the token itself may have been revoked or regenerated in Postmark, which makes every call fail from that moment. The hosted connection uses the token pasted at setup, so the fixes are: confirm which token kind that was, reconnect with the token belonging to the server you mean, and re-paste after a rotation.

Ask the agent to diagnose it:

```text
Call postmark_get_server and postmark_list_message_streams and tell me which Postmark server this connection acts as. Quote the exact error from the failed call, including which endpoint it hit. Do not retry it yet.
```

### Postmark calls fail after the token was regenerated or revoked in Postmark
The hosted connection keeps using the token it was given at setup, so a rotation in Postmark cuts it off without warning: every Postmark tool starts failing at once, usually with 401 or an authentication message, while the dashboard still shows the account as connected, because "connected" describes the pairing, not the current validity of the token. The fix is to re-paste the current Server Token from Postmark's API Tokens screen and retry. This is also why the page's security claim is "held server-side", not "no token": the token exists, Postmark requires it, and ClawLink holds it until you revoke the connection.

Ask the agent to diagnose it:

```text
Run postmark_get_server once and quote the exact error. Then tell me whether the token was regenerated or revoked in Postmark around the time the failures started.
```

### Postmark tools are missing, or one tool name is not found
Two different failures, same as other hosted integrations. If no Postmark tools appear at all, the connection or the pairing is incomplete: confirm the plugin was installed with --enable, that both `hermes clawlink begin` and `hermes clawlink finish` ran, and that Postmark shows as connected in the dashboard. If most tools work and a single name fails, that name is wrong rather than missing, and the error lists the closest real ones. Tool schemas load on demand, so the opening Postmark call in a fresh session can arrive before the catalog and needs one retry. The advice search results give for this symptom, editing an mcp.json and restarting a local MCP server, does not apply here, because there is no local server or config file.

Ask the agent to diagnose it:

```text
List the Postmark tools you actually have access to. If there are none, say so plainly. If there are, tell me which one reads delivery statistics and use that exact name.
```

### API key setup works but results look incomplete
Double-check that the API key for Postmark has the right scopes or account access. A valid key can still be too limited for some reads or writes.

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

### How do I connect Postmark 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 Postmark in the dashboard and Hermes can use it from the next message — no config files, and the Postmark key you paste is stored server-side instead of in your environment.

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

### Why use ClawLink instead of wiring Postmark up myself?
The alternative to ClawLink is usually manual API key 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 Postmark working from chat.

### Is this Postmark the email service or Postman the API client?
Postmark delivers transactional email, and its API authenticates with a Server Token. Postman is the API-testing client, a different company, authenticated with an API key. The engines confuse them: ChatGPT retrieves our Postman integration page for Postmark questions because the names collide, so a search result that points you at a Postman page for a Postmark error is answering about the wrong tool. If you want the email service, this is the page.

### Who holds the Postmark Server Token, and do I still need one?
Postmark requires a Server Token to authenticate its API, and the search results are right that you cannot entirely bypass that. The difference is custody. The manual route puts the token in an environment file or an SMTP config on your machine, where it sits until you remember to rotate it. Here the token is pasted once on the hosted setup page and kept server-side; the agent never sees it, and disconnecting from the dashboard revokes its use immediately. The claim this page makes is not "no token exists". It is that you never see or manage the token. Sandbox tokens exist for testing, but they are a testing compromise, not the mechanism of the hosted route.

### What can the agent do in Postmark?
The 46 tools cover the account and delivery surface. Templates can be created, edited, and read, which is how an agent prepares the messages a team sends. Message streams, suppressions, inbound rules, and webhooks are all manageable, and the analytics side is deep: bounces, spam complaints, delivery stats, opens, clicks, browser and platform usage, tracked-email counts, and a spam-score check. The writes that land in your real account are creating a template, a message stream, a suppression, an inbound rule, or a webhook. Suppressions block mail, so those are the ones to be deliberate about.

### Can the agent send email through Postmark?
Sending itself is what Postmark's SMTP and API endpoints do with your Server Token, and it is not the point of this connection. The tools here are the account surface around sending: the templates the agent prepares, the streams it routes through, the suppressions and inbound rules it manages, and the delivery statistics that tell you what happened after send. If you want the agent to trigger sends, having it prepare a template here and then send through the mail API is usually more transparent than routing execution through a third connector, because you can see exactly what it sent.

### How is this different from connecting Postmark through Composio?
The underlying Postmark API is the same, so the capability difference is small; the setup difference is not. The Composio route that the AI Overview teaches involves their Connect CLI or an MCP endpoint plus the token, and editing Hermes's config to point at it, infrastructure you then own. Here the plugin install and one pairing handshake are the entire client-side story, and Postmark sits alongside your other connected accounts with one place to revoke. Choose on how much you want to run, not on features.

### Hermes paired but still can't use Postmark
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

- [Connect SendGrid](https://claw-link.dev/hermes/sendgrid) — Deliver transactional and marketing emails
- [Hermes Dialpad integration](https://claw-link.dev/hermes/dialpad) — Business phone, messaging, and video conferencing
- [Discord Bot tools](https://claw-link.dev/hermes/discord-bot) — Automate Discord server actions with bot-specific permissions
