# How to connect Baselinker to Hermes Agent (paste one key, 106 tools)

> Connect BaseLinker to Hermes Agent, the AI assistant (not the Hermes courier): paste one BaseLinker API token and 106 tools work from chat. Stored server-side.

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

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

1. **Install ClawLink** — add the plugin to Hermes Agent once.
2. **Connect Baselinker** — 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 baselinker  # connect Baselinker (browser OAuth)
npx -y @useclawlink/cli actions baselinker  # list available actions
npx -y @useclawlink/cli run baselinker <action> --input '<json>'  # execute (add --confirm for writes)
```

The whole pairing handshake. Run these once, then paste your BaseLinker token in the dashboard:

```bash
hermes plugins install ClawLink-HQ/hermes-plugin --enable
hermes clawlink begin     # approve the link in your browser
hermes clawlink finish
hermes clawlink test
```

The token itself comes from BaseLinker first: Account → My Account → API → copy or generate. You still generate it; the difference is that it then lives server-side instead of in an env file on your machine.

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

## Baselinker MCP for Hermes

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

BaseLinker's API needs a token, full stop. The search answers are right about that, and they are wrong about everything after it: they assume you will wire the token into an MCP server or tool scripts yourself, and they answer the word 'Hermes' with the courier. This page is about Hermes Agent, the AI assistant. You generate the token once in BaseLinker (Account → My Account → API), paste it into a hosted setup page, and the 106 BaseLinker tools work from chat while the token sits server-side. The custody changes; the token does not disappear.

## What the Hermes Agent Baselinker integration can do

106 Baselinker 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 106.

### 30 of 106 Baselinker tools for Hermes

| Tool | What it does |
|---|---|
| **Add inventory** `baselinker_add_inventory` | Add or update a BaseLinker catalog (inventory) |
| **Add inventory category** `baselinker_add_inventory_category` | Add or update a category in the BaseLinker catalog |
| **Add inventory document** `baselinker_add_inventory_document` | Create a new inventory document in BaseLinker storage |
| **Add inventory manufacturer** `baselinker_add_inventory_manufacturer` | Add or update a manufacturer in the BaseLinker catalog |
| **Get connect integration contractors** `baselinker_get_connect_integration_contractors` | Retrieve a list of contractors connected to a selected Base Connect integration |
| **Get connect integrations** `baselinker_get_connect_integrations` | Retrieve a list of all Base Connect integrations on this account |
| **Get courier accounts** `baselinker_get_courier_accounts` | Retrieve the list of accounts connected to a given courier |
| **Get courier fields** `baselinker_get_courier_fields` | Retrieve the form fields required for creating shipments with a specific courier |
| **Get courier packages status history** `baselinker_get_courier_packages_status_history` | Retrieve the history of status changes for courier packages |
| **Get couriers list** `baselinker_get_couriers_list` | Retrieve a list of available couriers from BaseLinker |
| **Get external storage products quantity** `baselinker_get_external_storage_products_quantity` | Retrieve stock quantities from an external storage (shop/wholesaler) connected to BaseLinker |
| **Get external storages list** `baselinker_get_external_storages_list` | Retrieve a list of external storages (shops, warehouses, wholesalers) connected to BaseLinker that can be referenced via API |
| **Get inventories** `baselinker_get_inventories` | Retrieve a list of catalogs (inventories) available in the BaseLinker storage |
| **Get inventory available text field keys** `baselinker_get_inventory_available_text_field_keys` | Retrieve a list of product text fields that can be overwritten for a specific integration |
| **Get inventory categories** `baselinker_get_inventory_categories` | Retrieve a list of categories for a BaseLinker catalog |
| **Get inventory document items** `baselinker_get_inventory_document_items` | Retrieve items from inventory documents in BaseLinker |
| **Get inventory document series** `baselinker_get_inventory_document_series` | Retrieve available inventory document series |
| **Get inventory documents** `baselinker_get_inventory_documents` | Retrieve a list of inventory documents |
| **Get inventory extra fields** `baselinker_get_inventory_extra_fields` | Retrieve extra fields defined for BaseLinker catalog inventory items |
| **Get inventory integrations** `baselinker_get_inventory_integrations` | Retrieve a list of integrations where text values in the catalog can be overwritten |
| **Get inventory manufacturers** `baselinker_get_inventory_manufacturers` | Retrieve a list of manufacturers from the BaseLinker catalog |
| **Get inventory payers** `baselinker_get_inventory_payers` | Retrieve a list of payers available in BaseLinker storage |
| **Get inventory price groups** `baselinker_get_inventory_price_groups` | Retrieve price groups existing in BaseLinker storage |
| **Get inventory printout templates** `baselinker_get_inventory_printout_templates` | Retrieve a list of all configured printout templates available for inventory (products) |
| **Get inventory product logs** `baselinker_get_inventory_product_logs` | Retrieve a list of events related to product changes in the BaseLinker catalog |
| **Get inventory products data** `baselinker_get_inventory_products_data` | Retrieve detailed data for selected products from the BaseLinker inventory |
| **Get inventory products list** `baselinker_get_inventory_products_list` | Retrieve basic data of chosen products from BaseLinker catalogs |
| **Get inventory products prices** `baselinker_get_inventory_products_prices` | Retrieve gross prices of products from BaseLinker inventories |
| **Get inventory products stock** `baselinker_get_inventory_products_stock` | Retrieve stock data of products from BaseLinker catalogs |
| **Get inventory purchase order items** `baselinker_get_inventory_purchase_order_items` | Retrieve items from a specific purchase order in BaseLinker |

## Example prompts

**Courier status**

> Use baselinker_get_courier_packages_status_history for order \<id> and summarise the latest status events in plain language.

**Stock view**

> List products with baselinker_get_inventory_products_list for \<catalog id> and show current stock with baselinker_get_inventory_products_stock, flagging anything below its reserve.

**Courier options**

> Pull baselinker_get_couriers_list and the fields for the main courier with baselinker_get_courier_fields so we can see what a shipment needs.

## How the BaseLinker tools behave

The 106 tools are organized around three families; these are the details that matter.

- **Courier data is first-class.** Courier lists, accounts, form fields, and package status history are all separate tools.
- **Inventory is a whole family.** Products, stock, prices, categories, documents, manufacturers, price groups, payers, and printout templates each have their own read tools.
- **Base Connect is readable.** `baselinker_get_connect_integrations` and `baselinker_get_connect_integration_contractors` list what the account has wired up.
- **Writes exist but stay explicit.** `baselinker_add_inventory` and its document, category, and manufacturer variants change catalog data; confirm before executing.

## 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 Baselinker working from chat.

| | Manual | ClawLink |
|---|---|---|
| **Credential handling** | Collect, validate, store, and rotate the Baselinker API key yourself, then make sure every tool call uses the right account. | Users complete the hosted ClawLink setup once and the connected Baselinker 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 Baselinker. | 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 Baselinker actions to the runtime in a format your agent can reliably use. | 106 tools for Baselinker are already exposed through ClawLink, so the agent can read and act from chat immediately. |

## ClawLink vs. Composio

Composio also exposes Baselinker 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 Baselinker in the browser, and the 106 tools above work from chat. There is no SDK and no config file, and the Baselinker 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 Baselinker
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 Baselinker 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 Baselinker tools
Baselinker 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 Baselinker 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.

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

### BaseLinker returns 403 or "insufficient permissions"
The engines teach four causes: the token's scope restricts the endpoint, a sub-account restriction on what the token may touch, the `X-BLToken` header being wrong or missing, and a token that needs regenerating from the main admin account. The full-access-token versus scoped-token model is the mental model to keep: a scoped token rejects what is outside its scope, so check the token's scope before assuming the connection is broken.

Ask the agent to diagnose it:

```text
Quote the exact error from the failed BaseLinker call. Then tell me which BaseLinker method you called and whether you know the token's scope. Do not retry the call yet.
```

### BaseLinker hits 429 or rate limits
The taught numbers: 100 requests per minute by default, paid Accelerations raising that up to 500, and capped endpoints, with `getOrders` returning at most 100 records per call. An agent enumerating orders walks straight into that wall. Narrow the work: date-bounded queries, fewer records per call, and the agent reporting what it got before continuing.

Ask the agent to diagnose it:

```text
Tell me how many BaseLinker calls you made in the last minute and which method you were calling. Quote the error verbatim. Do not call BaseLinker again until I reply.
```

### BaseLinker results look incomplete
When calls succeed but data comes back short, the taught causes are the token's scope and sub-account restrictions: a scoped token or a restricted sub-account sees a subset, and lists end at that boundary rather than erroring. Ask the agent which token scope it is acting under and whether the endpoint returned a count or a cap marker, which distinguishes a scope limit from a rate limit.

Ask the agent to diagnose it:

```text
Tell me which BaseLinker method returned the short list and what count it reported versus what you expected. Do not retry the call yet.
```

### API key setup works but results look incomplete
Double-check that the API key for Baselinker 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 Baselinker integration?
Yes. ClawLink is the fastest way to connect Hermes to Baselinker: link your Baselinker account once in the browser and Hermes Agent can call the Baselinker API through 106 ready-made tools — no custom code or token handling.

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

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

### Why use ClawLink instead of wiring Baselinker 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 Baselinker working from chat.

### Which Hermes is this?
Hermes Agent, the AI assistant. The courier named Hermes, Evri in the UK, is a different product, and the engines answer the connect query with the courier unless the page disambiguates. If you are connecting a parcel carrier inside BaseLinker's dashboard, that is BaseLinker's own carrier setup, not this integration.

### What token do I need?
The BaseLinker API token from Account → My Account → API. You still generate it: the engines and this page agree a token is unavoidable. What this setup changes is who holds it, so the token never sits in an environment file or a client config on your machine.

### What can the agent do in BaseLinker?
Courier accounts, courier lists and their form fields, package status history, inventories and their products, stock, categories, documents, manufacturers, price groups, payers, external storages and their quantities, and Base Connect integrations. It is an e-commerce operations surface: orders, stock, and carrier state across the shops you have wired up.

### Is it safe to hand BaseLinker a token?
The engines teach least privilege, human approval for writes, and scoped middleware over raw master keys. Here the token is server-side and revocable from the dashboard, so the practical rules are: generate the token with the narrowest access your work needs, keep write prompts explicit, and disconnect in the dashboard when done.

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

- [Hermes Cloudcart integration](https://claw-link.dev/hermes/cloudcart) — CloudCart is an e-commerce platform that enables businesses to create and manage online stores efficiently.
- [Hermes Shippo integration](https://claw-link.dev/hermes/shippo) — Generate shipping labels, track packages, and manage fulfillment
- [Hermes Zoho Inventory integration](https://claw-link.dev/hermes/zoho-inventory) — Manage stock levels, orders, warehouses, and fulfillment
