DeepSeek Harness plugin

otto-dsh

Book flights, hotels, and cars from DeepSeek Harness through the Otto travel MCP connector.

Jump to install

Source facts

Repository
ottotheagent/otto-dsh
Latest update
Aug 15, 2026
Category
Tools & Capabilities
GitHub stars
2
Format
bundle
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/ottotheagent/otto-dsh
Plugin: otto-dsh
Author: ottotheagent

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

Otto Travel — DeepSeek Harness (dsh) plugin

Created: 2026-08-14 · Last Updated: 2026-08-14

Book real flights, hotels, and cars with Otto from inside DeepSeek Harness (dsh). Bookings execute inside Otto (real Spotnana PNR, the authenticated user's stored payment method).

This repo is self-contained: it ships a small stdio MCP proxy that runs Otto's device-grant OAuth and fronts Otto's OAuth-protected /mcp endpoint. dsh launches it via npx, so there's nothing else to install and no API key. (It shares the same OAuth approach as Otto's OpenClaw and Claude connectors; each integration keeps its own copy of the small auth core.)

What you get

Otto's tools land in the model namespace as mcp__otto__<tool>:

otto_setup · search_flights · query_flights · book_flight · search_hotels · get_hotel_rooms · book_hotel · get_bookings · cancel_booking · read_skill · read_preferences / write_preference · read_loyalty_programs / write_loyalty_program · task_status

Setup

Zero to a booked trip, in five steps.

1. Prerequisites

installed and working.

  • Node / npx on your PATH (already there — dsh is Node-based).
  • An Otto account you can sign into (or create one during step 4). Booking

requires an enabled Otto user with a traveler profile + payment method — see [Who can actually book](#who-can-actually-book-gates).

2. Add Otto to your dsh composition

Add this entry to your cordis.yml (or a profile patch) — the full file is [cordis.otto.patch.yml](./cordis.otto.patch.yml):

- id: mcp-otto
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: otto
    transport: stdio
    command: npx
    args: ['-y', 'github:ottotheagent/otto-dsh']

If your dsh build supports bundle install, this does the same:

dsh plugin add github:ottotheagent/otto-dsh

npx builds and runs the bundled proxy on first launch — nothing else to install, no API key.

> After this package is published to npm, replace github:ottotheagent/otto-dsh > with @ottotheagent/otto-dsh.

3. Start dsh

Boot your dsh profile as usual. Otto's tools now appear in the model namespace as mcp__otto__* — including mcp__otto__otto_setup.

4. Authorize Otto (one time)

Ask the agent to do anything travel-related, e.g.:

> Plan a trip: SFO to JFK next Tuesday, cheapest nonstop.

On the first call the agent runs otto_setup, which opens the approval page in your browser automatically (and prints the URL as a fallback). If you're already signed into Otto, it's one click — Approve. Tokens then cache at ~/.otto/mcp-tokens.json and refresh automatically, so you won't be asked again. (Auth is OAuth device grant; there is no key or token to paste. Set OTTO_NO_BROWSER=1 for headless environments.)

> Tip: to have the dsh agent drive the mechanical setup (add the cordis entry, > then prompt you to reload + approve), see [AGENTS.md](./AGENTS.md) — it tells > the agent to do the config and relay the approval, but never approve for you.

5. Search & book

Continue the conversation. The agent uses search_flights / query_flights / book_flight (and the hotel/car tools) to find options and book. Bookings are real — a live PNR on your Otto account, charged to your stored payment method.

> Non-prod endpoint: export OTTO_MCP_URL="https://<stg-host>/mcp" before > booting dsh to point at a non-production Otto.

Who can actually book (gates)

  • The authenticated user must be a provisioned, enabled Otto user (a real Otto

account with a Spotnana traveler profile + payment method). Sign-up / provisioning happen in Otto's hosted authorize flow — the same onboarding path as the Claude and OpenClaw connectors. The connector authenticates; it does not create accounts or capture payment on its own.

  • Single traveler per PNRbook_flight books one traveler. To book for

someone who granted you delegate access, use list_managed_travelers (books as them, not N pax on one ticket).

Build / run from source

npm install
npm run build
node dist/index.js            # speaks MCP over stdio; arg or $OTTO_MCP_URL sets the endpoint

Smoke test

[smoke/](./smoke) drives one real booking turn through dsh using the deepseek-harness-sdk. See [smoke/README.md](./smoke/README.md).

Notes

  • dsh is developer-preview (rc) — the dsh-mcp-client config schema can shift

between releases. This mount matches the current docs (transport: stdio + command/args); re-verify with dsh --dump-config after upgrading dsh.

  • The bundled proxy (src/) is a per-repo copy of Otto's small OAuth + MCP core;

the authoritative copy lives with Otto's other connectors.

License

Apache-2.0. See [LICENSE](./LICENSE) and [NOTICE](./NOTICE).