ottoport 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ottoport",
3
3
  "description": "One API for every model. Call chat, image, video, speech and music models through the OttoPort gateway — as MCP tools, slash commands, or the bundled CLI.",
4
- "version": "1.3.0",
4
+ "version": "1.3.2",
5
5
  "author": {
6
6
  "name": "LITBOX LLC",
7
7
  "email": "support@ottoport.ai"
package/README.md CHANGED
@@ -1,28 +1,52 @@
1
- # OttoPort for Claude Code
1
+ # OttoPort
2
2
 
3
- One API for every model. This plugin bundles three things into a single
4
- install: the OttoPort **MCP server**, the **`ottoport` skill**, and a set of
5
- **slash commands** for chat, image, video, speech, and music generation.
3
+ One API for every model. This package is three things over the same gateway:
4
+ a **CLI**, an **MCP server**, and a **Claude Code plugin** chat, image,
5
+ video, speech, and music, on one key and one prepaid balance.
6
6
 
7
- ## Install
7
+ Get a key at <https://ottoport.ai/api-keys> (they look like `op-…`), then pick
8
+ whichever surface fits.
8
9
 
9
- ```
10
- /plugin marketplace add https://ottoport.ai/plugin/marketplace.json
11
- /plugin install ottoport@ottoport
12
- ```
10
+ ## CLI
13
11
 
14
- Then set your key in the shell that launches Claude Code — the MCP server reads
15
- the environment it inherits, so a key exported inside a session is too late:
12
+ ```bash
13
+ npm install -g ottoport # or run any command below through `npx ottoport …`
14
+ export OTTOPORT_API_KEY=op-...
15
+ ```
16
16
 
17
17
  ```bash
18
- export OTTOPORT_API_KEY=op-... # create one at https://ottoport.ai/api-keys
19
- export OTTOPORT_BASE_URL=https://ottoport.ai # optional; this is the default
18
+ ottoport models [--modality chat|image|video|tts|music] [--json]
19
+
20
+ ottoport chat "<prompt>" [--model claude-sonnet-5] [--system "..."] [--no-stream]
21
+ [--temperature 0.7] [--max-tokens 512]
22
+ ottoport image "<prompt>" [--model gpt-image-2] [--size 1024x1024] [--n 1]
23
+ [--image <url>] [--out file.png]
24
+ ottoport video "<prompt>" [--model kling-3.0] [--duration 5]
25
+ [--aspect-ratio 16:9] [--image <url>] [--out clip.mp4]
26
+ ottoport speech "<text>" [--model gpt-4o-mini-tts] [--voice alloy] [--out speech.mp3]
27
+ ottoport music "<prompt>" [--model suno-v5] [--duration 15] [--out song.mp3]
28
+
29
+ ottoport install <host> # wire the MCP server into an agent
30
+ ottoport mcp # run the MCP server on stdio
20
31
  ```
21
32
 
22
- Run `/ottoport:setup` to confirm the key, the gateway, and the MCP tools are all
23
- live.
33
+ Chat streams by default. Image, video and audio commands print the result URL;
34
+ `--out` downloads it. `--url` and `--key` override the environment for a single
35
+ call.
36
+
37
+ Every command is a thin client over the public REST API, so anything the CLI
38
+ does is available to your own code — the gateway is OpenAI-compatible, and any
39
+ OpenAI SDK works by pointing `baseURL` at `https://ottoport.ai/api/v1`.
40
+
41
+ ## Claude Code plugin
24
42
 
25
- ## Slash commands
43
+ Brings the MCP server, the `ottoport` skill, and six slash commands in one
44
+ install:
45
+
46
+ ```
47
+ /plugin marketplace add https://ottoport.ai/plugin/marketplace.json
48
+ /plugin install ottoport@ottoport
49
+ ```
26
50
 
27
51
  | Command | What it does |
28
52
  | --- | --- |
@@ -33,23 +57,33 @@ live.
33
57
  | `/ottoport:speech` | Read text aloud, or generate music. |
34
58
  | `/ottoport:setup` | Diagnose key / gateway / MCP wiring. |
35
59
 
36
- ## MCP tools
37
-
38
- The bundled server exposes `ottoport_list_models`, `ottoport_chat`,
39
- `ottoport_generate_image`, `ottoport_generate_video`, `ottoport_generate_speech`,
40
- and `ottoport_generate_music`. Any agent in the session can call them directly —
41
- the slash commands are just convenient entry points over the same tools.
42
-
43
- ## CLI
60
+ ## Other agents
44
61
 
45
- The same package ships the `ottoport` CLI for terminal and CI use:
62
+ Claude Code is the only host with a plugin format. Everywhere else, one command
63
+ registers the MCP server by writing that agent's own config:
46
64
 
47
65
  ```bash
48
- npm install -g ottoport
49
- ottoport models --modality video
50
- ottoport image "isometric city at dusk" --out city.png
66
+ npx ottoport install codex # or hermes, cursor, windsurf, claude-desktop, claude
51
67
  ```
52
68
 
69
+ Codex also gets the OttoPort skill copied into `~/.codex/skills/`. Your key is
70
+ forwarded from the environment rather than written into any config file.
71
+
72
+ ## MCP tools
73
+
74
+ `ottoport_list_models`, `ottoport_chat`, `ottoport_generate_image`,
75
+ `ottoport_generate_video`, `ottoport_generate_speech`, `ottoport_generate_music`.
76
+ The server speaks stdio JSON-RPC and is launched by the host as a subprocess, so
77
+ it needs Node 20+ on the PATH of whatever starts that host.
78
+
79
+ ## Configuration
80
+
81
+ - `OTTOPORT_API_KEY` — your `op-…` key. Export it from your shell profile: the
82
+ MCP server reads the environment its host was launched in, so a key exported
83
+ inside a running session arrives too late.
84
+ - `OTTOPORT_BASE_URL` — defaults to `https://ottoport.ai`; set it only to point
85
+ at another deployment.
86
+
53
87
  ## Notes
54
88
 
55
89
  - Image, video, and audio calls return **URLs**, and provider URLs expire.
package/commands/setup.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Check that the OttoPort plugin is wired up — key, gateway reachability, MCP tools
3
- allowed-tools: Bash(node:*), Bash(printenv:*), mcp__ottoport__ottoport_list_models
3
+ allowed-tools: Bash(node:*), Bash(which:*), Bash(printenv:*), mcp__ottoport__ottoport_list_models
4
4
  ---
5
5
 
6
6
  Verify this machine can reach OttoPort, then report what is and is not working.
@@ -10,8 +10,13 @@ Verify this machine can reach OttoPort, then report what is and is not working.
10
10
  2. Call `ottoport_list_models`. Success means the MCP server, the base URL and
11
11
  the key are all good; stop and report.
12
12
  3. If that fails, the fix depends on the error:
13
- - no `ottoport` MCP tools at all → the plugin's MCP server did not start;
14
- check `node --version` is 20+.
13
+ - no `ottoport` MCP tools at all → the plugin's MCP server did not start.
14
+ Check `which node` before `node --version`: the usual cause is not a wrong
15
+ version but no `node` at all in the environment that launched the host.
16
+ A Node managed by nvm, volta, asdf or mise lives in a directory those tools
17
+ add to an interactive shell's PATH, and a client started from the Dock or a
18
+ desktop launcher never runs that shell. Launching the host from a terminal,
19
+ or installing a system-wide Node, fixes it.
15
20
  - `401`/`invalid key` → the key is missing or wrong. Keys are created at
16
21
  https://ottoport.ai/api-keys and look like `op-…`.
17
22
  - connection refused → `OTTOPORT_BASE_URL` points at a gateway that is not
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ottoport",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Claude Code plugin, CLI and MCP server for OttoPort — one OpenAI-compatible API for every LLM, image, video, and speech model.",
5
5
  "homepage": "https://ottoport.ai",
6
6
  "license": "MIT",
@@ -1,99 +1,84 @@
1
1
  ---
2
2
  name: ottoport
3
- description: Generate text, images, and video through OttoPort — one unified, OpenAI-compatible API for every model (GPT, Claude, FLUX, Nano Banana, Kling, Veo 3). Use when the user wants to call an LLM, generate an image, or generate a video and has OttoPort configured, or asks to "use OttoPort".
3
+ description: Generate text, images, video, speech, and music through OttoPort — one gateway for every model (GPT, Claude, Gemini, GPT Image, Nano Banana, Veo, Kling, Seedance, Suno). Use when the user wants to call an LLM or generate an image, video, or audio and has OttoPort configured, or asks to "use OttoPort".
4
4
  ---
5
5
 
6
6
  # OttoPort
7
7
 
8
- OttoPort is a single OpenAI-compatible gateway that routes to first-party model
9
- providers. One key, one base URL, three modalities: **chat**, **image**, **video**.
8
+ One gateway, five modalities: **chat**, **image**, **video**, **speech**, **music**.
10
9
 
11
- ## Setup
10
+ ## Use the tools
12
11
 
13
- Two environment variables drive every access path (CLI, MCP, raw HTTP):
12
+ This skill ships with an MCP server. Call its tools directly — do not shell out,
13
+ and do not call the HTTP API, when a tool covers the job:
14
14
 
15
- - `OTTOPORT_API_KEY` an `op-…` key (or the dev `OTTOPORT_KEY_SECRET`).
16
- - `OTTOPORT_BASE_URL` e.g. `https://ottoport.dev` or `http://localhost:3014`.
15
+ | Tool | For |
16
+ | --- | --- |
17
+ | `ottoport_list_models` | The catalog, with modality, provider, and price. Filter with `modality`. |
18
+ | `ottoport_chat` | `prompt`, plus optional `model`, `system`, `temperature`, `max_tokens`. |
19
+ | `ottoport_generate_image` | `prompt`, plus optional `model`, `size`, `n`, `image_url` (edits / image-to-image). |
20
+ | `ottoport_generate_video` | `prompt`, plus optional `model`, `duration`, `aspect_ratio`, `image_url`. |
21
+ | `ottoport_generate_speech` | `prompt` (the text), plus optional `model`, `voice`, `format`. |
22
+ | `ottoport_generate_music` | `prompt`, plus optional `model`, `duration`, `format`. |
17
23
 
18
- Check what's available before generating:
19
-
20
- ```bash
21
- node cli/ottoport.mjs models # full catalog with pricing
22
- node cli/ottoport.mjs models --modality image
23
- ```
24
+ If those tools are not present, the server is not registered in this client —
25
+ say so rather than reaching for a shell. `ottoport install <host>` registers it
26
+ (codex, claude, hermes, cursor, windsurf, claude-desktop).
24
27
 
25
28
  ## Choosing a model
26
29
 
27
- | Modality | Good default | Also available |
30
+ Pass `model` only when the request calls for a specific one; every tool has a
31
+ sensible default.
32
+
33
+ | Modality | Default | Also available |
28
34
  | --- | --- | --- |
29
35
  | chat | `claude-sonnet-5` | `claude-haiku-4.5` (cheap), `gpt-5.5`, `gemini-3.5-flash` |
30
36
  | image | `gpt-image-2` | `nano-banana-pro` (high fidelity), `nano-banana-2` (edits) |
31
37
  | video | `kling-3.0` | `seedance-2.0-fast` (cheap), `veo-3.1` (with audio) |
32
- | tts | `gpt-4o-mini-tts` | `eleven-v3` |
38
+ | speech | `gpt-4o-mini-tts` | `eleven-v3` |
33
39
  | music | `suno-v5` | `lyria-2` |
34
40
 
35
- Never invent model ids run `ottoport models` if unsure.
36
-
37
- ## CLI (preferred for one-off calls)
38
-
39
- ```bash
40
- # Chat (streams by default)
41
- node cli/ottoport.mjs chat "explain MCP in one sentence" --model claude-haiku-4.5
42
- node cli/ottoport.mjs chat "summarize this" --system "You are terse." --no-stream
43
-
44
- # Image → prints URL(s); --out downloads the first
45
- node cli/ottoport.mjs image "isometric city at dusk" --model nano-banana-pro --out city.png
46
-
47
- # Video → blocks on the queue, prints the URL
48
- node cli/ottoport.mjs video "drone shot over a canyon" --duration 5 --out clip.mp4
41
+ Never invent a model id. Call `ottoport_list_models` when unsure — the catalog
42
+ changes, and a wrong id is a failed billable call.
49
43
 
50
- # Speech and music → print an audio URL; --out downloads it
51
- node cli/ottoport.mjs speech "Welcome to OttoPort" --voice alloy --out welcome.mp3
52
- node cli/ottoport.mjs music "lo-fi focus beat" --duration 20 --out focus.mp3
53
- ```
54
-
55
- ## HTTP (for scripts / other languages)
56
-
57
- The gateway is OpenAI-compatible, so existing SDKs work by pointing `baseURL`
58
- at `${OTTOPORT_BASE_URL}/api/v1` with the OttoPort key.
44
+ ## What comes back
59
45
 
60
- ```bash
61
- curl $OTTOPORT_BASE_URL/api/v1/chat/completions \
62
- -H "Authorization: Bearer $OTTOPORT_API_KEY" -H "Content-Type: application/json" \
63
- -d '{"model":"gpt-4o","messages":[{"role":"user","content":"hi"}]}'
64
- ```
46
+ - Image, video and audio tools return **URLs**, not files. Provider URLs expire;
47
+ download anything worth keeping.
48
+ - Video blocks until the job is terminal, often a minute or more. Say so before
49
+ starting, and never retry a slow call — a retry is a second generation, billed
50
+ again.
51
+ - Errors arrive as `{error: {message, code}}`. Surface the message; it usually
52
+ names the fix (`401` = key, `402` = balance or spend limit).
65
53
 
66
- Image: `POST /api/v1/images/generations` `{model, prompt, size?, n?, image_url?}` → `{data:[{url}]}`.
67
- Video: `POST /api/v1/videos/generations` `{model, prompt, duration?, aspect_ratio?, image_url?}` → a job with `data:[{url}]`.
54
+ ## Terminal and CI
68
55
 
69
- ## MCP (for agent tool use inside another client)
70
-
71
- If OttoPort's MCP server is registered, prefer its tools over shelling out:
72
- `ottoport_list_models`, `ottoport_chat`, `ottoport_generate_image`,
73
- `ottoport_generate_video`, `ottoport_generate_speech`, `ottoport_generate_music`.
74
- Register it with:
56
+ Outside a tool-calling client, the same account works from the CLI:
75
57
 
76
58
  ```bash
77
- claude mcp add ottoport -- node /abs/path/to/mcp/server.mjs
59
+ npm install -g ottoport # or: npx ottoport <command>
60
+ export OTTOPORT_API_KEY=op-... # keys: https://ottoport.ai/api-keys
61
+
62
+ ottoport models --modality image
63
+ ottoport chat "explain MCP in one sentence" --model claude-haiku-4.5
64
+ ottoport image "isometric city at dusk" --out city.png
65
+ ottoport video "drone shot over a canyon" --duration 5 --out clip.mp4
66
+ ottoport speech "Welcome to OttoPort" --voice alloy --out welcome.mp3
78
67
  ```
79
68
 
80
- ## Plugin (Claude Code)
81
-
82
- Installing the OttoPort plugin brings the MCP server, this skill, and the
83
- `/ottoport:*` slash commands in one step — no manual `claude mcp add`:
69
+ `--out` downloads the result; chat streams unless `--no-stream`.
84
70
 
85
- ```bash
86
- /plugin marketplace add https://ottoport.ai/plugin/marketplace.json
87
- /plugin install ottoport@ottoport
88
- ```
71
+ ## Calling from code
89
72
 
90
- Commands: `/ottoport:models`, `/ottoport:chat`, `/ottoport:image`,
91
- `/ottoport:video`, `/ottoport:speech`, `/ottoport:setup`.
73
+ Only when writing a program that will run without this agent: the gateway is
74
+ OpenAI-compatible, so any OpenAI SDK works by pointing `baseURL` at
75
+ `https://ottoport.ai/api/v1` with an OttoPort key. Image, video, speech and
76
+ music live under `/api/v1/images/generations`, `/videos/generations`,
77
+ `/audio/speech` and `/audio/music`. Full reference: <https://ottoport.ai/docs>.
92
78
 
93
- ## Tips
79
+ ## Configuration
94
80
 
95
- - Image and video calls return **URLs**, not files download with `--out` (CLI)
96
- or fetch the URL yourself. Provider URLs may be short-lived; persist anything
97
- you need to keep.
98
- - Video generation can take a minute; it blocks server-side and returns when done.
99
- - Errors come back as `{error:{message, code}}`; surface the message to the user.
81
+ - `OTTOPORT_API_KEY` an `op-…` key, read from the environment the client was
82
+ launched in. A key exported inside a running session arrives too late.
83
+ - `OTTOPORT_BASE_URL` — defaults to `https://ottoport.ai`; set it only to point
84
+ at another deployment.