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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +62 -28
- package/commands/setup.md +8 -3
- package/package.json +1 -1
- package/skills/ottoport/SKILL.md +53 -68
|
@@ -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.
|
|
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
|
|
1
|
+
# OttoPort
|
|
2
2
|
|
|
3
|
-
One API for every model. This
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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",
|
package/skills/ottoport/SKILL.md
CHANGED
|
@@ -1,99 +1,84 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ottoport
|
|
3
|
-
description: Generate text, images, and
|
|
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
|
-
|
|
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
|
-
##
|
|
10
|
+
## Use the tools
|
|
12
11
|
|
|
13
|
-
|
|
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
|
-
|
|
16
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
|
38
|
+
| speech | `gpt-4o-mini-tts` | `eleven-v3` |
|
|
33
39
|
| music | `suno-v5` | `lyria-2` |
|
|
34
40
|
|
|
35
|
-
Never invent model
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
86
|
-
/plugin marketplace add https://ottoport.ai/plugin/marketplace.json
|
|
87
|
-
/plugin install ottoport@ottoport
|
|
88
|
-
```
|
|
71
|
+
## Calling from code
|
|
89
72
|
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
##
|
|
79
|
+
## Configuration
|
|
94
80
|
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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.
|