편집자 노트

Otto 出行预订

Otto Travel — DeepSeek Harness (dsh) plugin

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

업스트림에서 중국어 README를 제공하지 않아 저장소 원본 내용을 표시합니다.

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

  • DeepSeek Harness (dsh) 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.

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:

- 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 — 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/ drives one real booking turn through dsh using the deepseek-harness-sdk. See 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 and NOTICE.

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

GitHub 메타데이터에서 라이선스가 감지되지 않았습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.

주의 사항missing-license