DSH Plugins Marketplace

DSH Plugins

Plugins

/

opencode-eyes

b

opencode-eyes

Manifest valid

DeepSeek Harness plugin and OpenCode MCP server: describe an image with StepFun step-3.7-flash, so a text-only model can see. Exposes mcp__opencode_eyes__describe_image.

hasBundlePatch

opencode-eyes

Eyes for models that cannot see. The image goes to StepFun's step-3.7-flash vision model; the description comes back as tool output.

给不具备多模态能力的模型一双眼睛:把图片交给 StepFun 多模态模型,拿回文字描述。

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

Then switch the new dsh-opencode-eyes 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

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/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.

Requirements

  • Python ≥ 3.8 on PATH, or pointed at with python.
  • Pillow in that interpreter — the server's only third-party import (pip install Pillow).
  • A StepFun API key in STEP_API_KEY (or config.apiKey). Without one the server still starts and describe_image returns a clear error.

Tools

The server registers 1 tool(s). DSH namespaces them automatically, so the model calls them as mcp__opencode_eyes__<tool>:

ToolWhat it does
describe_imageReads an image file, base64-encodes it as JPEG (optionally downscaled) and asks the vision model to describe it. Parameters: image_path (required), prompt (optional).

Configuration

KeyEnvironment variableDefaultMeaning
python—discoveredinterpreter that runs the server
apiKeySTEP_API_KEY(empty)StepFun credential; required by describe_image
modelSTEP_MODELstep-3.7-flashmodel id sent in the request
timeoutSecondsSTEP_TIMEOUT120the server's own HTTP timeout
maxDimensionSTEP_MAX_DIMENSION2048images are downscaled to this edge length
jpegQualitySTEP_JPEG_QUALITY85JPEG quality of the re-encoded image
toolCallTimeoutMs—300000DSH's per-call budget; keep it above timeoutSeconds
env—{}raw environment passthrough for anything else

Every field is optional and lives in the loader row. For example, in cordis.patch.yml:

- id: dsh-opencode-eyes
  name: 'dsh-opencode-eyes'
  config:
    apiKey: 'sk-...'
    toolCallTimeoutMs: 300000

Notes

  • The API base URL is compiled into the server (https://api.stepfun.com/step_plan/v1/chat/completions); there is no baseUrl option to point it elsewhere. This plugin exposes only what the server actually reads.
  • src/ layout. The package is a src/-layout Python module, so the server must run with the repository's src directory as its working directory. The plugin does that for you.
  • Timeouts. The server waits up to STEP_TIMEOUT (120 s) for StepFun, which is longer than the harness's 60 s default, so the plugin mounts with a 300 s per-call budget.

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 STEP_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

PathPurpose
index.jsthe DSH plugin: resolves the interpreter and mounts the server
cordis.patch.ymlthe loader row that activates the plugin
locale/{en,zh}.jsoncard title and description for the plugin lists
assets/icon.svgcard artwork
test/npm test: manifest composition and the mount contract
src/opencode_eyes/the MCP server, unchanged
pyproject.toml, requirements.txtthe 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": {
      "type": "local",
      "command": ["python", "-m", "opencode_eyes"],
      "enabled": true,
      "timeout": 120000,
      "environment": { "STEP_API_KEY": "你的StepFun API Key" }
    }
  }
}

On another host, run the server from the repository's src directory (or put src on PYTHONPATH) — that is the one thing the plugin adds.

License

MIT — the repository declared MIT in pyproject.toml but shipped no licence file; this plugin's release adds one.

Comments

Loading…

Similar plugins

modlens

by liustack

The first vision plugin for DeepSeek Harness, and the vision bridge for every text-only coding agent. Paste an image, get structured JSON evidence (OCR, layout, semantics). | 全网最强 DeepSeek Harness 外挂视

Vision & MultimodalManifest valid

★ 4.1k

↓ 24.2k/wk

MIT

TypeScript

Oct 4, 2026

dsh plugin --profile web add @liustack/modlens

by Zh-U-hB

DeepSeek Harness plugin: route image-bearing messages to a user-configured OpenAI-compatible vision endpoint when the active text model cannot see images

Manifest valid

★ 0

MIT

TypeScript

Aug 16, 2026

dsh plugin --profile web add @deepseek-ai/dsh-vision-bridge

by Sorwcyra

Paste images into DeepSeek Harness with a four-model vision race, OCR, and an automatic text bridge.

Manifest valid

★ 4

MIT

JavaScript

Aug 14, 2026

dsh plugin --profile web add ds-vision-plugin

by Harvey-Will

DeepSeek Harness vision plugin: 8 analysis modes (describe, OCR, chart data, UI review, object detection, compare, code-gen, debug), any OpenAI- or Anthropic-compatible vision API, with a built-in fre

Tools & CapabilitiesVision & MultimodalManifest valid

★ 1

MIT

TypeScript

Sep 30, 2026

dsh plugin --profile web add dsh-vision-analysis

by poiuyjie

DSH plugin: Auto-convert images to text for pure-text LLMs (DeepSeek etc.) via any vision model. No need to switch your main model.

Vision & MultimodalManifest valid

★ 13

MIT

JavaScript

Sep 9, 2026

dsh plugin --profile web add dsh-vision-opencode

Vision bridge for text-only DeepSeek: send images (alone or mixed with text) and a fast tiny vision model describes them behind the scenes — the chat keeps the picture, DeepSeek sees only text. Pure p

Tools & CapabilitiesVision & MultimodalManifest valid

★ 0

dsh plugin --profile web add dseyesopen