
MCP for OpenFilters
io.github.BBrunoEsteves由 GitHub 账号 BBrunoEsteves 发布v0.2.2更新于 Nov 7, 2026
Design, simulate and optimize optical thin-film coatings with the OpenFilters engine.
概览
封装 OpenFilters 计算引擎的本地 MCP 服务器,让助手设计、模拟并优化光学薄膜镀层。
- 可以做什么
- 列出、查看并添加材料,包括按需导入 refractiveindex.info 条目
- 计算设计的光谱、角度扫描、颜色、电场与监控曲线
- 评估目标与评价函数、层灵敏度、热灵敏度与温度扫描
- 用 refinement、needle 和 step 方法优化设计
- 运行参数扫描、优化活动、蒙特卡洛公差与随机误差分析
- 管理作业状态,并加载或保存原生 .ofp 项目文件
- 适用场景
- 适合从事光学薄膜设计(减反射膜、反射镜、截止滤光片、二向色镜或窄带滤光片)时使用,让助手搭建仿真、运行优化并按制造良率对结果排序。
- 运行要求
- 以 stdio 本地进程运行;需要 Python 3.10 或更高版本,或 uv/uvx,或打包好的安装程序。无需安装 OpenFilters 本体。可选环境变量 MCP_FOR_OPENFILTERS_HOME 与 MCP_FOR_OPENFILTERS_WORKERS 用于设置数据目录和并行进程数。仅在请求下载公开的 refractiveindex.info 数据时需要网络。
安装
在 SourceWeft 中
- 打开 控制台中的 MCP for OpenFilters,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
MCP for OpenFilters
An unofficial connector built on OpenFilters: not affiliated with or endorsed by the OpenFilters authors or Polytechnique Montréal.
Design, simulate and optimize optical thin-film coatings by talking to Claude.
This project is an MCP server around the calculation core of
OpenFilters (Stéphane Larouche and Ludvik Martinu,
Polytechnique Montréal), ported to Python 3 and run without its GUI. Claude plans the work and reads
compact summaries; the server does the computing — in parallel on all CPU cores — and writes full
results to disk, including .ofp project files that open in the OpenFilters GUI.
Claude orchestrates; the server computes. One tool call can launch a whole campaign.
Quick start
Pick the one that matches how you use Claude (details under Installation):
Then, in a new chat: "Run the MCP for OpenFilters server_info tool", and try "Design an antireflection coating
for BK7 from 430 to 670 nm with TiO2 and SiO2." It is also listed in the
official MCP Registry as io.github.BBrunoEsteves/mcp-for-openfilters.
Built and tested with Claude. The server follows the open MCP standard, but it has so far been developed and tested only with Claude (Claude Desktop and Claude Code). Other MCP clients may work, but they are untested: tool descriptions, plots and long-running jobs may behave differently there.
What it can do
Example requests to Claude:
- "Design a dichroic on BK7 with R > 99 % at 532 and 1064 nm and T > 90 % at 633 nm for 0–20°, at most 40 layers of TiO2/SiO2. Run 100 needle optimizations from random starts and rank the best 10 by yield at ±1 % thickness error."
- "Add my ALD Al2O3 from this ellipsometry file and sweep the AR coating thickness ±10 %."
- "Find thin-film HfO2 data on refractiveindex.info, import it and redo the mirror with it."
- "Where is the electric-field peak of this mirror at 1064 nm, and what monitoring signal should I expect at 633 nm at the end of each layer?"
Ready-made workflows (prompts) appear as / commands in Claude Code and in the attachment menu of Claude
Desktop: design an antireflection coating, a mirror, an edge filter or dichroic, a narrow band-pass
filter, and review a design for manufacturing. The design-format guide, the material list and the
OpenFilters example projects are available as resources (openfilters://guide, openfilters://materials,
openfilters://examples/<name>). Long optimizations and yield analyses report progress to apps that show it.
Installation
Requires Python ≥ 3.10. OpenFilters itself does not need to be installed: its calculation engine is
built in (the OpenFilters GUI is only useful to open the .ofp files).
Claude Desktop extension (one click)
From the latest release, download
mcp-for-openfilters-<version>.mcpb and open it (or drag it onto Claude Desktop's Settings → Extensions). Claude
Desktop runs it with uv, which fetches the server from PyPI.
Claude Code plugin
In Claude Code:
The plugin runs the server with uvx (see claude-plugin/README.md for what it runs and
downloads).
With uv (one command)
With uv installed, the server runs straight from PyPI, with the right package for your computer chosen automatically:
For Claude Desktop, add to claude_desktop_config.json (Settings → Developer → Edit config), then fully quit and
reopen Claude Desktop:
uvx keeps its own cached environment; uvx mcp-for-openfilters@latest picks up a new version.
With the installer
From the release page, download
install_mcp_for_openfilters.py and the package for your computer (or all .whl files) into one folder, then:
It creates a private environment in ~/.mcp-for-openfilters, installs the package, registers the server in
Claude Desktop (backing up its settings) and Claude Code, and runs a self-test. Then fully quit and reopen
Claude Desktop. --uninstall removes it; --from-github downloads the packages with the GitHub CLI.
Packages are built for Windows (64-bit), Linux (x86-64) and macOS (Apple Silicon), Python 3.10–3.14, with the compiled fast core included: no compiler needed.
Manually
For Claude Desktop, add to claude_desktop_config.json (Settings → Developer → Edit config):
Upgrading from openfilters-mcp (before 0.2.0)
The project was called openfilters-mcp until version 0.2.0. Fully quit Claude Desktop and Claude Code,
then run the new installer: it removes the old openfilters registration and the old private environment
(~/.openfilters-mcp) and registers mcp-for-openfilters. Your data folder ~/OpenFilters-MCP is kept
and still used, and the old OPENFILTERS_MCP_* environment variables are still read. After a manual
install, pip uninstall openfilters-mcp and replace the openfilters entry in your Claude settings.
From source (development)
Configuration
The names used before 0.2.0 (OPENFILTERS_MCP_HOME, OPENFILTERS_MCP_WORKERS) still work, and an existing
~/OpenFilters-MCP folder is used when ~/MCP-for-OpenFilters does not exist.
Conventions
- wavelengths and thicknesses in nm, angles in degrees, R/T/A as fractions (0–1);
- complex index N = n − ik (k ≥ 0 absorbs), as in OpenFilters and Macleod;
- layers are listed from the substrate outward;
- the merit function is OpenFilters' χ² = Σ ((target − value)/tolerance)², with satisfied inequality targets contributing zero.
A design:
or with a stack formula: {"formula": {"formula": "(HL)^8 H", "materials": {"H": "TiO2", "L": "SiO2"}}}.
Materials given as n,k tables have no data outside their wavelength range. There the design field
"table_extrapolation" decides: "hold" (default: n,k stay at the value at the nearest end of the data),
"openfilters" (OpenFilters' own extrapolation, identical to its GUI) or "refuse". Every result computed
outside the data says so, with the n,k used and what the other choice would give; optimizations, campaigns
and yield analyses do not start until the choice is made (Claude asks you).
A target:
Validation
The test suite (pytest) checks the ported core against analytic results (quarter-wave stacks) and
an independent transfer-matrix implementation (dispersive dielectrics, absorbing metals, 0–60°,
s/p/unpolarized; agreement < 1e-9) and textbook closed forms (quarter-wave antireflection and absentee
layers, V-coat zero, Brewster angle, quarter-wave stack peak reflectance and stop-band width), round-trips every example project through .ofp files, and runs
the refinement and needle optimizations of the OpenFilters examples.
How the port was made
src/openfilters_core is generated from the original OpenFilters 1.1.1 sources by
tools/port_from_py2.py, an auditable script (mechanical Python 2 → 3 conversions, a short list of
targeted fixes, package-relative imports). The _abeles C++ extension uses the Python 3 C-API port by
Emil Kleijn; _moremath is ported by the same script. See src/openfilters_core/PROVENANCE.md.
Privacy
Everything runs on your computer: no data is sent anywhere and there is no telemetry. The only network access is downloading public refractiveindex.info data when you ask for it. See PRIVACY.md.
Citing
If you use this in published work, please cite OpenFilters:
S. Larouche and L. Martinu, "OpenFilters: open-source software for the design, optimization, and synthesis of optical filters," Applied Optics 47, C219–C230 (2008).
Contact
- Bug reports and feature requests: GitHub Issues
(please include the output of the
server_infotool). - Collaboration and other questions: Bruno Esteves, Center for MicroElectroMechanical Systems (CMEMS), University of Minho: [email protected].
License
GPL-2.0-or-later, like OpenFilters. OpenFilters is © Stéphane Larouche; this project is not affiliated with or endorsed by its authors or Polytechnique Montréal.
来源:README.md,提交 df760da
工具
0版本历史
1- v0.2.2最新Nov 7, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分