ottotheagent/otto-dsh0

@ottotheagent/otto-dsh

通过 DSH 接入 Otto 预订真实机票、酒店和租车。挂载 otto-travel MCP 连接器以进行行程规划与预订。

AI 分析

核心用途是让 DSH 代理具备真实的差旅预订和行程规划能力。适合需要 AI 协助搜索、对比并直接下单预订机票、酒店的个人或企业用户。

套件
@ottotheagent/otto-dsh
版本
0.1.0
授權
MIT
最近更新
2026年8月14日

安裝

此插件尚未提供可驗證的 bundle,或相容性檢查未通過。請先閱讀倉庫說明。 閱讀完整 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). This plugin mounts Otto's remote MCP connector into a dsh composition; the agent then calls Otto's tools like any other, and bookings execute inside Otto (real Spotnana PNR, the authenticated user's stored payment method).

It is the dsh counterpart of Otto's Claude Code / Cowork plugin — both wrap the same production MCP endpoint, https://api.ottotheagent.com/mcp. There is no Otto-side code to change: Otto is already the MCP server, dsh is just another client.

What you get

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

mcp__otto__search_flights · query_flights · book_flight · search_hotels · get_hotel_rooms · book_hotel · search_cars · book_car · get_bookings · cancel_booking · read_skill · list_managed_travelers · read_preferences / write_preference · read_loyalty_programs / write_loyalty_program · task_status

Skill-gating, rate-limiting, input validation, delegate access, and client identity are all enforced server-side — the plugin adds nothing that could weaken them.

Auth — use an Otto API key (not interactive OAuth)

Otto's /mcp endpoint accepts either an OAuth JWT or a static Bearer API key (server/mcp/auth.py). dsh-mcp-client sends a fixed Authorization header, so the API-key path is the right one for dsh (it also works headless, where interactive OAuth does not):

  1. Mint a key: https://ottotheagent.com → Settings → Agent API keys (or POST /api/v1/agent/api_keys). Keys are prefixed otto_sk_.
  2. Export it before booting dsh:
    export OTTO_API_KEY="otto_sk_..."
    # Optional: point at a non-prod endpoint (defaults to production)
    # export OTTO_MCP_URL="https:///mcp"
    

The key resolves to a specific Otto user; all searches/bookings run as that user with their profile, preferences, and payment method.

Who can actually book (gates)

  • The API key must belong to a provisioned, enabled Otto user (a real otto.users row backed by a Spotnana traveler profile + payment method). The connector does not auto-provision accounts.
  • Single traveler per PNRbook_flight books one traveler. To book for someone who granted you delegate access, pass their id from mcp__otto__list_managed_travelers (books as them, not N pax on one ticket).
  • Payment and preferences always come from Otto, never from dsh.

Install

Option A — from source (recommended while dsh is developer-preview)

dsh plugin add https://github.com/ottotheagent/otto-dsh
# or, to inspect first:
git clone https://github.com/ottotheagent/otto-dsh
dsh plugin add ./otto-dsh

dsh plugin add reads package.jsondsh.bundle → the cordis patch, and stacks it onto your active profile. Inspecting the source before mounting is encouraged — this connector books real flights.

Option B — paste the mount into your own composition

Add the entry from cordis.otto.patch.yml to your cordis.yml (or a profile patch). That's the entire integration.

Verify what actually mounted:

dsh --dump-config          # confirm the mcp-otto entry is present

Smoke test

smoke/ drives a real booking turn through dsh against a chosen Otto endpoint using the deepseek-harness-sdk. See smoke/README.md.

Notes / caveats

  • dsh is developer-preview (rc) — the package.json dsh.bundle manifest key and dsh-mcp-client config schema can shift between releases. The mount config here matches the current @deepseek-ai/dsh-mcp-client docs (transport: streamable-http + url + headers); re-verify with dsh --dump-config after upgrading dsh.
  • No resident skills yet. This plugin does not ship client-side copies of Otto's skill guides — the agent fetches them over the wire via mcp__otto__read_skill. Shipping resident skills for dsh is a possible future enhancement.
  • Discoverability. Intent tokens (flight, hotel, car, book travel, itinerary) are front-loaded in package.json keywords/description and in Otto's server-side tool descriptions so dsh plugin search surfaces Otto on "book a flight," not just "travel."