travala-mcp
by GoPlausible
README.md
# OpenClaw Travala Plugin
š§³ Travala hotel booking integration for [OpenClaw](https://openclaw.ai) ā by [GoPlausible](https://goplausible.com)
## Features
- **Remote Travala MCP server**: `travala-mcp` (HTTP, `https://travel-mcp.travala.com/mcp`) ā hotel search, package selection, booking, lookup, and cancellation
- **x402 payment via Algorand MCP**: on `travala_book` HTTP 402, the agent completes payment through the headless [Algorand MCP](https://github.com/GoPlausible/algorand-mcp) server's `make_http_request_with_x402` tool (USDC/ALGO)
- **Two MCP servers auto-registered**: first-load init writes declarative entries into `~/.mcporter/mcporter.json` ā `travala-mcp` (HTTP) and `algorand-mcp` (headless stdio, via npx) ā plus a memory file into the agent workspace. No `sudo`, no post-install hooks
- **1 Skill** ā `travala-booking-expert`: the end-to-end hotel workflow (search ā book ā pay ā look up ā cancel), critical booking rules, OTP handling, and x402 payment recovery
> **Hotels only** ā no flights, car rentals, restaurants, tours, or activities.
## Payment ā Algorand MCP (headless x402)
Booking and search work on their own, but **payment** uses the x402 flow via [`@goplausible/algorand-mcp`](https://github.com/GoPlausible/algorand-mcp) (`algorand-mcp`, stdio). On `travala_book` HTTP 402, the agent calls `algorand-mcp:make_http_request_with_x402` (x402 micropayment in USDC/ALGO via the GoPlausible facilitator).
It is a **real headless stdio MCP server** ā fetched and run by npx, no GUI, **no environment variables required**. The agent wallet is a mnemonic stored in a local SQLite database managed by the server's own tools. The plugin registers the entry in mcporter automatically on first load:
```jsonc
"algorand-mcp": { "command": "npx", "args": ["-y", "@goplausible/algorand-mcp@4.4.0"] }
```
`travala-plugin setup` also pre-fetches the package into the npm cache so the first booking doesn't wait on a cold download.
#### Coexistence with the GoPlausible Algorand plugin
`algorand-mcp` is a **shared singleton** keyed by id in `~/.mcporter/mcporter.json`. The GoPlausible [Algorand plugin](https://github.com/GoPlausible/openclaw-algorand-plugin) registers the **same** server, but from a binary it bundles in its own `node_modules` (absolute path) rather than via npx. If both plugins run on the same OpenClaw instance (e.g. a shared Docker/VPS), this plugin **defers to whatever is already registered** ā it never overwrites a foreign `algorand-mcp` entry. It only registers its own npx-based entry when none exists, so it works standalone too. Net effect: one `algorand-mcp` server, no conflict, regardless of install order. (`travala-plugin status` shows which launch command is actually registered.)
### Why not Coinbase's payments-mcp?
An earlier iteration targeted `@coinbase/payments-mcp`. It was dropped because it is **fundamentally unfit for headless deployment** (Docker / VPS ā OpenClaw's main target):
- `@coinbase/payments-mcp` is an npx **installer** that downloads an **Electron desktop app**, not a server.
- Every MCP tool (including `make_http_request_with_x402`) is a thin proxy that forwards to the app's **Chromium renderer window** (`sendToWindow(...)`), and the renderer loads a Coinbase-hosted URL. A live window must exist for *any* tool to work.
- On a headless host there is no display, so the server **cannot run at all** ā no sign-in, no payment. It is only viable on a desktop, or on Linux via `xvfb` + `--no-sandbox` + bundled Chromium libs (heavy, fragile, Linux-only).
- Sign-in is an interactive Electron wallet-UI flow (email + OTP through the renderer), which a headless gateway can't drive.
The Algorand MCP has none of these constraints: plain stdio, key-based signing, no browser. A full inventory of the Coinbase payments-mcp tools and their schemas (captured during evaluation, for peer-mapping) lives in [`.notes/coinbase-payments-mcp-tools.md`](.notes/coinbase-payments-mcp-tools.md).
## Installation
1- Install the plugin from npm:
```bash
openclaw plugins install @goplausible/travala-plugin-openclaw
```
2- Then restart the OpenClaw gateway:
```bash
openclaw gateway restart
```
3- Then set it up:
```bash
openclaw travala-plugin setup
```
4- Then restart the OpenClaw gateway:
```bash
openclaw gateway restart
```
To update it:
1- Update the plugin from npm:
```bash
openclaw plugins update @goplausible/travala-plugin-openclaw
openclaw travala-plugin setup
```
2- Then set it up:
```bash
openclaw travala-plugin setup
```
3- Then set it up:
```bash
openclaw travala-plugin setup
```
4- Then restart the OpenClaw gateway:
```bash
openclaw gateway restart
```
## Configuration
On first load, the plugin initializes idempotently:
- Writes the plugin memory file into your agent workspace (`memory/travala-plugin.md`)
- Adds a single pointer line under `## Plugin Routing` in your workspace `MEMORY.md`
- Registers `travala-mcp` (remote, HTTP) in `~/.mcporter/mcporter.json`
- Registers `algorand-mcp` (headless stdio, via npx) in `~/.mcporter/mcporter.json`
Then restart the OpenClaw gateway to apply changes. The Algorand MCP is fetched by npx on first use (no separate install step); `travala-plugin setup` pre-warms the npm cache.
## CLI
```bash
openclaw travala-plugin setup # reconfigure (memory, mcporter, allowlist)
openclaw travala-plugin status # show skill + MCP server status
openclaw travala-plugin mcp-config # print an MCP config snippet for external agents
```
## Development
```bash
npm install
npm run build # tsc ā dist/
```
## License
MIT Ā© GoPlausible
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues