dsh-opencode-eyes-nvidia
Manifest validDeepSeek Harness plugin: eyes for text-only models through NVIDIA NIM. It mounts the bundled opencode-eyes-nvidia MCP server, which sends an image to a hosted vision model (MiniMax-M3 by default) and returns a description, exposing mcp__opencode_eyes_nvidia__describe_image and mcp__opencode_eyes_nvidia__list_vision_models.
opencode-eyes-nvidia
Eyes for models that cannot see — on NVIDIA NIM. Any of seven hosted vision models (MiniMax-M3 by default), with multi-key rotation when one key is rate-limited.
给不具备多模态能力的模型一双眼睛:走 NVIDIA NIM,默认 MiniMax-M3,支持多 Key 轮换。
As a DeepSeek Harness plugin: the MCP server ships inside the bundle, so
installing one plugin is the whole setup — no mcpServers file to hand-edit.
Install
DeepSeek Harness Desktop — open Plugins in the sidebar, choose Add plugin, and enter:
https://github.com/bauerelizabeth07139/opencode-eyes-nvidia
Then switch the new dsh-opencode-eyes-nvidia bundle on. The Desktop app boots the
reserved desktop profile, so that is where it has to be enabled.
dsh CLI — install it into the profile you actually boot:
dsh plugin --profile web add bauerelizabeth07139/opencode-eyes-nvidia
No git on the machine? pnpm resolves a git shorthand with git ls-remote,
which fails with 'git' is not recognized when git is missing. Use the tarball
instead — that path is plain HTTPS:
dsh plugin --profile web add https://codeload.github.com/bauerelizabeth07139/opencode-eyes-nvidia/tar.gz/main
The same address works in the Desktop Add plugin dialog. Replace main
with a commit SHA to pin an exact revision (/tar.gz/<sha>).
Uninstall with dsh plugin --profile web remove dsh-opencode-eyes-nvidia.
Requirements
- Python ≥ 3.8 on
PATH, or pointed at withpython. - Pillow in that interpreter — the server's only third-party import
(
pip install Pillow). - At least one NVIDIA API key. The server accepts
NVIDIA_API_KEY,NVIDIA_API_KEYS(several, separated by spaces/commas/semicolons) orNVIDIA_API_KEY_1..N, and rotates through them on failure.describe_imageneeds one;list_vision_modelsworks without.
Tools
The server registers 2 tool(s). DSH namespaces them automatically,
so the model calls them as mcp__opencode_eyes_nvidia__<tool>:
| Tool | What it does |
|---|---|
describe_image | Sends an image to the chosen NVIDIA-hosted vision model. Parameters: image_path (required), prompt (optional), model (optional; one of minimaxai/minimax-m3, meta/llama-3.2-11b-vision-instruct, meta/llama-3.2-90b-vision-instruct, nvidia/llama-3.1-nemotron-nano-vl-8b-v1, google/gemma-3-27b-it, nvidia/nemotron-nano-12b-v2-vl, qwen/qwen3.5-397b-a17b). |
list_vision_models | Returns the model list, consulting the live /models endpoint when a key is present. |
Configuration
| Key | Environment variable | Default | Meaning |
|---|---|---|---|
python | — | discovered | interpreter that runs the server |
apiKey | NVIDIA_API_KEY | (empty) | the first key of the rotation ring |
model | NVIDIA_MODEL | minimaxai/minimax-m3 | default model id |
baseUrl | NVIDIA_BASE_URL | https://integrate.api.nvidia.com/v1 | NIM endpoint |
timeoutSeconds | NVIDIA_TIMEOUT | 120 | the server's own HTTP timeout |
maxDimension | NVIDIA_MAX_DIMENSION | 2048 | images are downscaled to this edge length |
jpegQuality | NVIDIA_JPEG_QUALITY | 85 | JPEG quality of the re-encoded image |
thinkingMode | NVIDIA_THINKING_MODE | (unset) | enabled / disabled / adaptive; only sent to minimax models |
toolCallTimeoutMs | — | 300000 | DSH's per-call budget; key rotation sleeps between attempts |
env | — | {} | raw passthrough — use this for NVIDIA_API_KEYS and NVIDIA_API_KEY_1..N |
Every field is optional and lives in the loader row. For example, in
cordis.patch.yml:
- id: dsh-opencode-eyes-nvidia
name: 'dsh-opencode-eyes-nvidia'
config:
apiKey: 'nvapi-...'
model: 'minimaxai/minimax-m3'
env:
NVIDIA_API_KEYS: 'nvapi-first,nvapi-second'
Notes
-
Rotating several keys.
config.apiKeysetsNVIDIA_API_KEY; to use the rotation ring, pass the extra variables throughconfig.env:config: env: NVIDIA_API_KEYS: 'nvapi-first,nvapi-second' NVIDIA_ROTATION_BACKOFF: '2' -
Timeouts. A call may try several keys with a 2 s backoff between attempts, on top of the server's own 120 s HTTP timeout — the plugin mounts with a 300 s budget.
-
thinkingModeis silently ignored unless the model id containsminimax, which is the server's own rule.
How it is mounted
index.js resolves a Python interpreter (the configured python, then
python3/python on PATH), hands the server its argv and working directory,
and mounts it as a stdio MCP server through @deepseek-ai/dsh-mcp-client with
failOnStartupError: true, so a server that cannot start is a visible error
rather than a silently missing tool.
Credentials are forwarded explicitly. The harness scrubs credential-shaped
variables (KEY, TOKEN, SECRET, PASSWORD) out of the environment a child
process inherits, so config.apiKey — falling back to the variable the server
documents — is written into the child's environment by the plugin itself. That
means both of these work:
config:
apiKey: '<your key>'
export NVIDIA_API_KEY='<your key>' # picked up at load time
Development
No build step and no runtime dependencies — @deepseek-ai/cordis and
@deepseek-ai/dsh-mcp-client are peers supplied by the Harness.
npm test # node >= 22: manifest checks + the stdio mount, both Harness-free
The mount test loads index.js with @deepseek-ai/dsh-mcp-client stubbed and
asserts the exact stdio configuration the plugin produces, including the
credential forwarding above.
Repository layout
| Path | Purpose |
|---|---|
index.js | the DSH plugin: resolves the interpreter and mounts the server |
cordis.patch.yml | the loader row that activates the plugin |
locale/{en,zh}.json | card title and description for the plugin lists |
assets/icon.svg | card artwork |
test/ | npm test: manifest composition and the mount contract |
src/opencode_eyes_nvidia/ | the MCP server, unchanged |
pyproject.toml, requirements.txt | the Python package metadata, unchanged |
Other hosts (unchanged)
The server is a plain stdio MCP server and still works anywhere else. The
repository's original README is kept verbatim as
README.opencode.md, and the launch stanza from it keeps
working:
{
"mcp": {
"opencode-eyes-nvidia": {
"type": "local",
"command": ["python", "-m", "opencode_eyes_nvidia"],
"enabled": true,
"timeout": 120000,
"environment": {
"NVIDIA_API_KEYS": "{env:NVIDIA_API_KEYS}",
"NVIDIA_API_KEY": "{env:NVIDIA_API_KEY}"
}
}
}
}
On another host, run the server from the repository's src directory (or put
src on PYTHONPATH).
License
MIT — the repository declared MIT in pyproject.toml but shipped no licence file; this plugin's release adds one.
Comments
Loading…
From the same category
DeepSeek Harness plugin for Reactive Resume: bridges your resumes and job applications into a Harness session over MCP.
★ 41.7k
↓ 143/wk
MIT
Aug 24, 2026
dsh plugin --profile web add dsh-plugin-reactive-resumeby Tencent
Let AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.
★ 8.5k
↓ 5.9k/wk
MIT
TypeScript
Oct 9, 2026
dsh plugin --profile terminal add @wxg-prc-cpg/browser-skill-dsh-pluginby yjh051108
dsh-routing-suite — injector + router-standard kit: install the runtime injector first, then the task-aware reasoning-mode router preset (measured P1-P23).
★ 7k
MIT
JavaScript
Sep 18, 2026
dsh plugin --profile web add @dsh-external/dsh-super-injectorby Q00
Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode,
★ 6.2k
MIT
Python
Oct 7, 2026
by dsh-market
The plugin market inside DeepSeek Harness — browse, search, one-click install · DSH 可视化插件市场
★ 6k
↓ 95.5k/wk
MIT
TypeScript
Oct 9, 2026
dsh plugin --profile web add dshmarketby superdesigndev
OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn
★ 4.9k
NOASSERTION
Python
Oct 9, 2026
dsh plugin --profile web add treg-dsh