# OptiVibe (pypi · optivibe-mcp)

Lens design automation for Zemax OpticStudio through the typed ZOS-API

- Trust score: 74/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-24

## Components

- pypi · `optivibe-mcp`: 74/100 (this document), [markdown](https://verifymcp.io/servers/chuang44-tiff-optivibe-mcp/optivibe-mcp.md), [page](https://verifymcp.io/servers/chuang44-tiff-optivibe-mcp/optivibe-mcp)

## Channel facts

- Registry: `pypi`
- Package: `optivibe-mcp`
- Version: `0.2.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-24.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it.
  - 1 of 46 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to chuang44-tiff/optivibe-mcp).
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 50/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2149 tokens (~429/item across 5 items; 5 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 5 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 6 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the OptiVibe MCP server?

OptiVibe runs locally as a PyPI package, launched with uvx optivibe-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add chuang44-tiff-optivibe-mcp -- uvx optivibe-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "chuang44-tiff-optivibe-mcp": {
      "command": "uvx",
      "args": [
        "optivibe-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "chuang44-tiff-optivibe-mcp": {
      "command": "uvx",
      "args": [
        "optivibe-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add chuang44-tiff-optivibe-mcp -- uvx optivibe-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "chuang44-tiff-optivibe-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "optivibe-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add chuang44-tiff-optivibe-mcp --command uvx --arg optivibe-mcp
```

### Hermes

```yaml
mcp_servers:
  chuang44-tiff-optivibe-mcp:
    command: "uvx"
    args: ["optivibe-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "chuang44-tiff-optivibe-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "optivibe-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add chuang44-tiff-optivibe-mcp -t stdio -c uvx -a optivibe-mcp
```

### Other

```json
{
  "mcpServers": {
    "chuang44-tiff-optivibe-mcp": {
      "command": "uvx",
      "args": [
        "optivibe-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-24 (score 74, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-23 (score 59)

First indexed and scored.

## MCP tools (5)

### `lookup_operand` (~468 tokens)

Resolve a typed operand from design intent - pass an exact 4-letter code (e.g. EFFL, OPGT) for its definition, or a natural phrase ("effective focal length", "hold one operand above another") to get ranked candidate operands. Each candidate carries its description, units, and sign_convention (the constraint direction). An empty param_cells with param_cells_known false means the catalog records no cell layout for that code (not that the operand has none); with param_cells_known true the catalog records that the operand has no parameter cells; the Surf/param cells of a range operand are verified by engine read-back, never assumed. Defaults to the merit-function catalog; pass domain="tolerance" to resolve tolerance codes instead (tilt/decenter resolve to a FAMILY that differs by mechanism - surface vs element vs coordinate-break - so read each candidate's category and precondition_class and pick the code; a cb_required code with no coordinate-break surface will not bite). Gotcha: do NOT trust the top candidate blindly - within the arithmetic/relational family (DIFF, DIVI, OPGT, OPLT, EQUA, ...) the rank-1 hit can be a plausible-but-wrong sibling, so read the candidate descriptions and sign_convention and pick the code yourself. RESOLVE CODES HERE, BETWEEN CALLS: read the descriptions AND the sign_convention before you pass a code anywhere; never trust the rank-1 hit blindly -- inside an operator family it can be confidently wrong. A merit-function operand comes from this door. TOLERANCE CODES (TDE) NEED domain="tolerance": that selects the structured tolerance catalog (ranked codes + category/precondition_class + units, the same code-not-phrase grounding as merit). WITHOUT domain="tolerance" this door mis-routes a tolerance ask -- it defaults to the merit catalog and returns confidently WRONG merit operands (TOLR/VOLU/EQUA). Always pass domain="tolerance" for a tolerance code. This lookup takes no engine seat. See search_reference for chapter context and open-ended ma…

Input parameters:

- `domain` (string)
- `limit` (integer)
- `query` (string, required)
- `top_n` (integer)

### `search_reference` (~189 tokens)

Search the OpticStudio manual for concepts, procedures and terminology and get back ranked text snippets, each with a page + section citation. Send a short keyword query: 1-4 distinctive terms or a heading-like phrase (e.g. 'ray aiming', 'thickness solves'), not a full question. Results report match_mode: 'and' when every term matched, 'or' for a looser any-term match worth discounting. If a whitespace-separated query term never occurs in the manual as that literal token or phrase, the search answers no match and lists the term in absent_terms - drop or rephrase it and retry. Gotcha: this is prose search, not the operand index. See lookup_operand for an exact 4-letter operand code or an intent->operand mapping.

Input parameters:

- `limit` (integer)
- `query` (string, required)
- `top_n` (integer)

### `lookup_glass` (~203 tokens)

Get a glass's optical data by name - refractive index Nd, Abbe number Vd, cardinal-line indices, and relative partial dispersion Pg,F (with manufacturer delta-Pg,F), plus per-field validity flags. Pass an optional wavelength in um for the index at that wavelength. Gotcha: a bare name that collides across catalogs returns an ambiguous_glass candidate list (qualify it), an out-of-band wavelength is refused rather than extrapolated, and an in-band wavelength with no computable index returns a typed index_unavailable envelope - never a silent value. WHICH DOOR: glass by NAME comes here, and asking here for an intent gets you nothing. Glass by property goes to find_glasses. A matched pair for an intent ('a crown for this achromat') goes to find_glass_pair. This lookup takes no engine seat.

Input parameters:

- `catalog` (string)
- `name` (string, required)
- `wavelength` (number)

### `find_glasses` (~478 tokens)

Narrow the glass catalog to candidates in a property window - by Abbe number (vd_min/max), relative partial dispersion (pg_f_min/max), refractive index (nd_min/max), or raw delta-Pg,F (delta_pg_f_min/max) - the glass-selection step for chromatic / apochromat (secondary-color) design. At least one window bound is required. catalog takes one catalog or a comma-separated whitelist such as SCHOTT,OHARA; a name that matches no catalog is refused. By default the known non-lens kinds are left out: exclude lists the kinds to leave out (liquid, adhesive, plastic, gas, birefringent, other), the result counts them in left_out, and exclude="" searches every row. Matches are ordered by sort (vd, nd, pg_f or delta_pg_f; default vd, order=descending reverses; sort=pg_f_anomaly ranks by pg_f minus the normal line 0.6438 - 0.001682*vd, null when either is null, window pg_f_anomaly_min/max; a truncated list carries truncated_note saying what is hidden and how to see it) and cut at limit; matched counts the glasses in the window that are not left out, so truncated means only the first limit of matched are listed. Gotcha: a glass whose computed field is out-of-band (null) never matches that window, and the delta-Pg,F bounds are raw manufacturer data (unvalidated); a stored delta-Pg,F beyond +-0.1 reads as null. See find_glass_pair for matched apochromat pairs. See lookup_glass for one glass's full data.

Input parameters:

- `catalog` (string)
- `delta_pg_f_max` (number)
- `delta_pg_f_min` (number)
- `exclude` (string)
- `limit` (integer)
- `nd_max` (number)
- `nd_min` (number)
- `order` (string)
- `pg_f_anomaly_max` (number)
- `pg_f_anomaly_min` (number)
- `pg_f_max` (number)
- `pg_f_min` (number)
- `sort` (string)
- `vd_max` (number)
- `vd_min` (number)

### `find_glass_pair` (~354 tokens)

Find apochromat / secondary-color glass PAIRS - two glasses with matched relative partial dispersion (small |delta-Pg,F|) and well-separated Abbe number (large |delta-Vd|), the doublet condition for cancelling secondary spectrum. Optionally anchor on one named glass to get its best partners; tune with max_delta_pg_f (the partial-dispersion mismatch limit) and min_delta_vd (the minimum Abbe separation). catalog takes one catalog or a comma-separated whitelist such as SCHOTT,OHARA; a name that matches no catalog is refused. By default the known non-lens kinds are left out: exclude lists the kinds to leave out (liquid, adhesive, plastic, gas, birefringent, other), the result counts them in left_out, and exclude="" searches every row. An anchor glass is never left out by catalog or exclude. Results are ordered by score, a heuristic prefilter, and cut at limit; a smaller max_delta_pg_f brings low secondary-colour pairs to the top. Each pair also carries secondary_per_focal, power_sum and petzval_per_power for a thin cemented doublet of the pair; read caveat in the result. Gotcha: an ambiguous bare anchor name returns an ambiguous_glass candidate list - qualify the catalog. See find_glasses to window-search single glasses. See lookup_glass for one glass's full data.

Input parameters:

- `anchor` (string)
- `anchor_catalog` (string)
- `catalog` (string)
- `exclude` (string)
- `limit` (integer)
- `max_delta_pg_f` (number)
- `min_delta_vd` (number)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/chuang44-tiff-optivibe-mcp/optivibe-mcp#diagnostics

## Score history

- 2026-10-24: 74
- 2026-10-23: 59

## Common questions

### What is the OptiVibe MCP server?

OptiVibe is an MCP server listed in the public MCP registry as io.github.chuang44-tiff/optivibe-mcp. Lens design automation for Zemax OpticStudio through the typed ZOS-API. This page covers its PyPI package (optivibe-mcp).

### Is the OptiVibe MCP server safe to use?

OptiVibe scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the OptiVibe MCP server expose?

OptiVibe exposes 5 tools: lookup_operand, search_reference, lookup_glass, find_glasses, find_glass_pair. Their descriptions and schemas cost roughly 1,692 tokens of context every time the server is loaded.

### Is the OptiVibe MCP server still maintained?

OptiVibe is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the OptiVibe MCP server under?

OptiVibe declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/optivibe-mcp/
- Socket report: https://socket.dev/pypi/package/optivibe-mcp
- Repository: https://github.com/chuang44-tiff/optivibe-mcp
- Changelog RSS feed: https://verifymcp.io/servers/chuang44-tiff-optivibe-mcp/optivibe-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/chuang44-tiff-optivibe-mcp/optivibe-mcp.json
- HTML version of this page: https://verifymcp.io/servers/chuang44-tiff-optivibe-mcp/optivibe-mcp
