> For a complete page index of the Captain API documentation, fetch https://docs.captain.dev/llms.txt?excludeSpec=true

# OpenClaw & Hermes

> Run Captain inside OpenClaw or Hermes. Multimodal search across text, images, video, and audio from an agent runtime.

## Agent Quick Reference: OpenClaw and Hermes

* **OpenClaw plugin** (`@captain-sdk/openclaw-captain` on npm): 28 tools. Install with `openclaw plugins install @captain-sdk/openclaw-captain`, configure `apiKey` and `organizationId` under `plugins.entries.captain`. `captain_search` and `captain_list_collections` are always on; everything else is opt-in via `tools.allow`. `captain_search` and the 12 document/chunk tools (`captain_list_documents_v3`, `captain_get_document_v3`, `captain_mint_asset_urls`, `captain_update_document_metadata`, `captain_list_chunks`, `captain_get_chunk`, `captain_get_chunk_metadata`, `captain_set_chunk_metadata`, `captain_delete_chunk_metadata`, `captain_list_chunk_relations`, `captain_create_chunk_relation`, `captain_delete_chunk_relation`) call the v3 API; the remaining tools (collections, sync, `index/*`, jobs) call v2, which has no v3 equivalent for those endpoints.
* **Hermes** (NousResearch `hermes-agent`) speaks MCP. Register Captain with `hermes mcp add`, or write an `mcp_servers` block into `$HERMES_HOME/config.yaml` (default `~/.hermes/config.yaml`).
* For Claude Code, Cursor, VS Code, Windsurf, and other MCP clients, see [MCP Server](/guides/mcp). That page covers the hosted server and all 48 tools.
* All three read the same underlying Captain data, so results are equivalent whichever you use.

Captain runs inside agent runtimes as well as MCP clients. This page covers
OpenClaw and Hermes. If your agent lives in Claude Code, Cursor, VS Code, or
Windsurf, use the [MCP server](/guides/mcp) instead.

#### OpenClaw

![OpenClaw logo](/_fern-files/runcaptain.docs.buildwithfern.com/ff1d09f58c3ea5883a8dea01d272c63ecafa041732d5ba088e973a53dcca6542/docs/assets/openclaw-logo.svg)

The Captain plugin for [OpenClaw](https://openclaw.ai) exposes the Captain API
to OpenClaw runtimes: multimodal search across text, images, video, and audio,
with 28 tools covering search, chunk-level read and metadata, document
metadata, collection management, job tracking, and indexing from URLs,
YouTube, raw text, S3, GCS, Azure, and R2.

## Install

```bash
openclaw plugins install @captain-sdk/openclaw-captain
```

## Configure

Add this to your OpenClaw config:

```json
{
  "plugins": {
    "entries": {
      "captain": {
        "apiKey": "cap_...",
        "organizationId": "019a..."
      }
    }
  }
}
```

Get an API key at [captain.dev](https://captain.dev).

## What you get

Search and collection listing work as soon as the plugin is installed:

* `captain_search`: natural-language search across any collection, covering
  text, images, video, and audio
* `captain_list_collections`: list the collections you can reach

Everything else is opt-in. Add the tools you want to `tools.allow`:

| Category        | Tools                                                                                                                                                  |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Collections     | `captain_create_collection`, `captain_delete_collection`                                                                                               |
| Documents       | `captain_list_documents`, `captain_delete_document`, `captain_wipe_documents`                                                                          |
| Documents (v3)  | `captain_list_documents_v3`, `captain_get_document_v3`, `captain_mint_asset_urls`, `captain_update_document_metadata`                                  |
| Chunks          | `captain_list_chunks`, `captain_get_chunk`, `captain_get_chunk_metadata`, `captain_set_chunk_metadata`, `captain_delete_chunk_metadata`                |
| Chunk relations | `captain_list_chunk_relations`, `captain_create_chunk_relation`, `captain_delete_chunk_relation`                                                       |
| Jobs            | `captain_job_status`, `captain_cancel_job`                                                                                                             |
| Indexing        | `captain_index_url`, `captain_index_youtube`, `captain_index_text`, `captain_index_s3`, `captain_index_gcs`, `captain_index_azure`, `captain_index_r2` |

YouTube indexing reads the video's captions, so what lands in the collection is
the timestamped transcript rather than the frames or the audio track. A video
without an available caption track cannot be indexed this way. To index the
picture and sound, put the video file itself through file or cloud-storage
indexing.

```json
{
  "tools": {
    "allow": [
      "captain_create_collection",
      "captain_list_documents",
      "captain_job_status",
      "captain_index_url",
      "captain_index_youtube",
      "captain_index_text",
      "captain_index_s3",
      "captain_index_gcs",
      "captain_index_azure",
      "captain_index_r2"
    ]
  }
}
```

## Try it

```
> Search my-docs for "quarterly revenue trends"
> Index https://example.com/report.pdf into my-docs
> Index this YouTube video into training-videos: https://youtube.com/watch?v=abc123
> List my collections
```

## Links

* [npm package](https://www.npmjs.com/package/@captain-sdk/openclaw-captain)
* [Source on GitHub](https://github.com/runcaptain/openclaw-plugin-captain)
* [OpenClaw](https://openclaw.ai)

#### Hermes

![Hermes logo](/_fern-img/f56dc7e9cd3320d7fad604d081af6a98c9bcb245311276e08563b62b1925cb1d.webp)

[Hermes](https://github.com/NousResearch/hermes-agent) is NousResearch's
learning agent. It speaks MCP, so Captain connects as an MCP server and you get
the same tools documented on the [MCP server](/guides/mcp) page.

## Register

```bash
printf 'Y\n' | hermes mcp add captain \
  --env CAPTAIN_API_KEY=cap_... \
  --connect-timeout 60 \
  --command npx \
  --args -y @captain-sdk/captain-mcp@latest
```

`hermes mcp add` runs a real MCP handshake and discovers the tools while it
adds, then asks `Enable all N tools? [Y/n/select]:`. Three things to watch for:

* **`--args` has to come last.** Anything after it, including a stray `--env`,
  gets swallowed into the server's argv. Put `--env` and `--connect-timeout`
  before `--command`.
* **Pipe the `Y` when you are not at a prompt.** Reaching EOF on the
  enable-tools question prints `Cancelled.` and saves nothing.
* **The exit code is 0 even when the connection fails.** Verify separately
  rather than trusting the status.

## Or write the config yourself

`hermes mcp add` writes an `mcp_servers` block into `$HERMES_HOME/config.yaml`,
which defaults to `~/.hermes/config.yaml`. Write it directly instead:

```yaml
mcp_servers:
  captain:
    command: npx
    args:
      - -y
      - "@captain-sdk/captain-mcp@latest"
    env:
      CAPTAIN_API_KEY: cap_...
    connect_timeout: 60.0
    enabled: true
```

To remove Captain, delete the block. To keep the config but turn it off, set
`enabled: false`.

## Verify

```bash
hermes mcp list             # captain shows as enabled
hermes mcp test captain     # prints the discovered tool list
```

> **Note**
>
> Hermes registers MCP servers as local stdio subprocesses, so this path uses the
> `npx` build rather than the hosted server at `https://mcp.captain.dev/mcp`. The
> stdio build is in maintenance and new tools ship to the hosted server first. If
> your Hermes version supports a remote MCP transport, prefer the hosted server
> and the bearer-token config shown on the [MCP server](/guides/mcp) page.

---

## Which one to use

All three read the same underlying Captain data, so results are equivalent.
Pick the one that matches where your agent runs.

#### MCP server

**Runtime:** Claude Code, Cursor, VS Code, Windsurf, any MCP client\

**Package:** `@captain-sdk/captain-mcp`\

**Transport:** Hosted HTTP at `mcp.captain.dev`, or local stdio\

**Tools:** 48\

**Multimodal search** (text, images, video, audio): Yes\

**Chunk-level read and metadata:** Yes\

**Project notes across sessions:** Yes, `captain_save` and `captain_find`\

**Local-file upload:** Yes, `captain_index_file`\

**Cloud-storage indexing** (S3, GCS, Azure, R2, Dropbox, Supabase, Backblaze): Yes\

**Continuous storage syncs:** Yes\

**SharePoint, OneDrive, Google Drive:** Yes\

**URL, YouTube, raw-text indexing:** Yes\

**Collection and job management:** Yes

See [MCP Server](/guides/mcp).

#### OpenClaw plugin

**Runtime:** OpenClaw\

**Package:** `@captain-sdk/openclaw-captain`\

**Transport:** Local\

**Tools:** 28\

**Multimodal search** (text, images, video, audio): Yes\

**Chunk-level read and metadata:** Yes\

**Project notes across sessions:** Through `captain_index_text` and `captain_search`\

**Local-file upload:** Through `captain_index_url` or cloud storage\

**Cloud-storage indexing** (S3, GCS, Azure, R2, Dropbox, Supabase, Backblaze): Yes\

**Continuous storage syncs:** No\

**SharePoint, OneDrive, Google Drive:** No\

**URL, YouTube, raw-text indexing:** Yes\

**Collection and job management:** Yes

#### Hermes

**Runtime:** Hermes\

**Package:** `@captain-sdk/captain-mcp`\

**Transport:** Local stdio\

**Tools:** 48\

**Multimodal search** (text, images, video, audio): Yes\

**Chunk-level read and metadata:** Yes\

**Project notes across sessions:** Yes, `captain_save` and `captain_find`\

**Local-file upload:** Yes, `captain_index_file`\

**Cloud-storage indexing** (S3, GCS, Azure, R2, Dropbox, Supabase, Backblaze): Yes\

**Continuous storage syncs:** Yes\

**SharePoint, OneDrive, Google Drive:** Yes\

**URL, YouTube, raw-text indexing:** Yes\

**Collection and job management:** Yes