Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

OptiVibe

PYPI · OPTIVIBE-MCP

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

Available components

59 Trust /100

Last scanned (11 hours ago)

Scores higher than 60% of PyPI servers

Category Design and Media

Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 46 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to chuang44-tiff/optivibe-mcp). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 0 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability50
  • AI-judged instruction clarity (good).Pass
  • 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. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 5 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 6 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

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.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Oct 26 59

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Oct 2026 · Analysed pypi/optivibe-mcp@0.2.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo chuang44-tiff/optivibe-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/chuang44-tiff/optivibe-mcp/.github/workflows/publish.yml@refs/heads/main
Rekor log index 3424356514
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:d1251d622e346c312e1b2e2c540361cf26a49706e2b7be68fbda9a997130a334

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

Dependencies 46 packages
Packages resolved 46
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 5 exposed · ~1,692 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
find_glass_pair ~354

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.

NameTypeReqDescription
anchorstring––
anchor_catalogstring––
catalogstring––
excludestring––
limitinteger––
max_delta_pg_fnumber––
min_delta_vdnumber––

No output schema declared.

No examples provided.

find_glasses ~478

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.

NameTypeReqDescription
catalogstring––
delta_pg_f_maxnumber––
delta_pg_f_minnumber––
excludestring––
limitinteger––
nd_maxnumber––
nd_minnumber––
orderstring––
pg_f_anomaly_maxnumber––
pg_f_anomaly_minnumber––
pg_f_maxnumber––
pg_f_minnumber––
sortstring––
vd_maxnumber––
vd_minnumber––

No output schema declared.

No examples provided.

lookup_glass ~203

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.

NameTypeReqDescription
catalogstring––
namestringyes–
wavelengthnumber––

No output schema declared.

No examples provided.

lookup_operand ~468

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…

NameTypeReqDescription
domainstring––
limitinteger––
querystringyes–
top_ninteger––

No output schema declared.

No examples provided.

search_reference ~189

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.

NameTypeReqDescription
limitinteger––
querystringyes–
top_ninteger––

No output schema declared.

No examples provided.

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.

pypi · optivibe-mcp

# add to Claude Code
claude mcp add chuang44-tiff-optivibe-mcp -- uvx optivibe-mcp
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 59 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 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 23 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.