
Etchv
io.github.etchv-labs由 GitHub 账号 etchv-labs 发布v1.6.0更新于 Oct 29, 2026
Invisible watermarking and watermark detection for images, PDFs and videos with Etchv.
概览
本地 stdio MCP 服务器,让助手通过 Etchv API 为图片、PDF 和视频添加不可见水印并检测水印。
- 可以做什么
- 对单张图片、PDF、DOCX、PPTX 或视频添加水印或检测水印,可同步执行或作为任务运行
- 批量处理最多 100 个本地文件,支持按文件填充数据模板,并跟踪和下载结果
- 创建上传会话,并通过上传 ID、公开 HTTPS 链接或已有素材 ID 提交文件
- 列出、查看、下载、重命名、更新或删除素材,并创建或撤销分享链接
- 查看存储目标与投递记录,列出或重新投递 webhook 事件
- 检查 API 密钥所属组织、密钥 ID 和权限范围
- 适用场景
- 适合让助手为自己拥有的媒体嵌入不可见水印,或检查交付文件是否带有水印,包括对某个文件夹中的合同或图片进行批量处理,且无需离开聊天客户端。
- 运行要求
- 需要 Node.js 24 或更高版本,通过 npx 运行。需要 Etchv API 密钥(ETCHV_API_KEY),并具备所需权限范围;还需在 ETCHV_FILES_ROOT 中提供已存在目录的绝对路径,所有输入输出文件都必须位于其中。ETCHV_API_BASE_URL 可选,默认指向 Etchv API 地址。需要能访问 Etchv API 的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 Etchv,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Etchv MCP server
A local stdio Model Context Protocol server that lets AI assistants watermark and detect images, PDFs and videos with Etchv.
Requirements
- Node.js 24 or later
- An Etchv API key with only the scopes you need
- An existing directory for input and output files
Configuration
Claude Code
Editor plugins
This repository is also a Cursor plugin (.cursor-plugin/plugin.json with
mcp.json) and a Gemini CLI extension (gemini-extension.json). Both run the
same package and need ETCHV_API_KEY and ETCHV_FILES_ROOT. Gemini CLI asks
for them at install; in Cursor, set them under Plugins, then Configure:
Claude Desktop, Cursor and other mcpServers clients
Add this to the client's MCP config (for example claude_desktop_config.json
or ~/.cursor/mcp.json) and restart it:
Then ask the assistant to run check_api_key to confirm the connection.
Tools
Every tool has a title and readOnlyHint, destructiveHint, idempotentHint
and openWorldHint annotations.
Inputs and outputs
watermark_media and detect_media take the file as exactly one of:
input_path: a local file insideETCHV_FILES_ROOT.input_url: a public HTTPS URL. The server downloads it and submits it like a local file. See Security for the checks it applies. The file name comes from theContent-Dispositionheader, else the URL path; passfilenameto set it. Its extension must matchmedia.upload_id: anupl_ID fromcreate_upload. A client that can send files itself callscreate_uploadwithkind(image,document,video, ordetectto check a delivered file),filenameand the exactsizein bytes, PUTs the bytes to the returnedupload.urlwithout an API key, then passesupload_id. An upload is used once and expires after 24 hours.asset_id: an existing asset, such as a delivered file to check. The server downloads it and submits it again.filenamecan override its name here too.
A watermarked file is saved to output_path when one is given (sync
watermark_media, get_job_result and download_asset). Without
output_path, these tools return the result's asset_id and metadata with
download_url and download_expires_at: a link that works without an API key
for 15 minutes. Anyone with the link can download the file, so share it only
with the person who needs it. Creating a link needs the assets:read scope; if
it fails, the error names the asset so you can call download_asset once the
key allows it.
Submissions require a stable idempotency_key; reuse it when retrying so you
are not charged twice. Image and PDF uploads are limited to 50 MiB and DOCX,
PPTX and video uploads to 20 MiB. A PDF has 1 to 2,000 pages, and its
watermarked copy must fit in 95 MiB with 48 KiB per page, so a 2,000-page PDF
can be up to about 1 MiB. Detection takes the files Etchv delivered: up to 192 MiB
for images, 95 MiB for PDFs and 100 MiB for DOCX, PPTX and video. Files over
40 MiB go through an upload session automatically, and image or document
detection above 95 MiB returns a job receipt to collect with get_job_result. Storage destinations and webhook endpoints are created in the
dashboard, not through this server.
watermark_media and detect_media accept an optional accelerator (cpu,
the default, or gpu). GPU processing requires a Business or Enterprise plan
and costs 3× credits; if no GPU is ready, the job runs on CPU at normal credits.
Results report the hardware actually used as accelerator, and get_job also
returns accelerator_requested. watermark_media and watermark_batch also
accept active_content for PDFs: keep (the default) returns scripts and
actions as uploaded, and remove_auto_run removes what a PDF viewer runs by
itself, such as open actions, document-level JavaScript and XFA forms. In a
batch, remove_auto_run needs every file to be a PDF. When a rate or concurrency limit is reached,
errors include retry_after_seconds and point to the plan upgrade page. Trial and
Launch plans run one operation at a time.
Batches
watermark_batch takes up to 100 files, named one of three ways: input_paths,
input_dir with an optional glob (for example "contracts/*.pdf"; braces and .. are refused), or
items with their own data. A data_template fills in each file's data;
string values may use {filename}, {stem} and {index} (the file's 0-based
position). The server creates the batch, uploads each file once to its signed
URL without the API key, and starts it. With wait: true it polls at the pace
the API asks for, for up to wait_seconds (default 600), sending progress
notifications when the client asks for them, and with output_dir saves the
results. Otherwise call get_batch, then download_batch, which saves each
successful file under its name in the batch zip (NNN-<name>-watermarked.<ext>), or the single zip when the
batch was created with archive: true, and lists failed items with their error
codes. Each file costs the same credits as a single request, and files that
fail are refunded. Retrying with the same arguments resumes or returns the
same batch; if that batch expired unstarted or its results have expired, the
tool asks for a new idempotency_key.
Hosted mode
The etchv-mcp command always runs in local mode. createServer in
src/server.ts also takes mode: "hosted" for a server that runs remotely and
has no access to the user's files. In hosted mode no filesRoot is needed;
input_path, output_path and the other local file arguments are left out of
every tool schema; watermark_batch and download_batch are not offered;
results are returned as download links; and the server instructions and
etchv://capabilities describe that mode.
Security
- The API key is read only from
ETCHV_API_KEY, sent only to the configured origin, and never appears in tool arguments, results, errors or logs. - File access is confined to
ETCHV_FILES_ROOT: traversal and symlinks are rejected, and existing files are never overwritten. - Only HTTPS API origins are accepted (HTTP for localhost only), and API redirects are never followed.
input_urlmust be HTTPS without a user name or password. The host must resolve only to public addresses: loopback, private, link-local, carrier-grade NAT, multicast, reserved and documentation ranges are refused, including IPv6 forms that embed such an IPv4 address. The connection uses the checked address, at most 3 redirects are followed and each is checked again, the download is capped at the operation's upload limit and times out, and the API key is never sent to the URL.- API responses, asset names and metadata are treated as untrusted data, never instructions.
Links
- Guide: https://etchv.com/docs/mcp?utm_source=mcp-local&utm_medium=readme&utm_campaign=integrations
- API reference: https://etchv.com/docs?utm_source=mcp-local&utm_medium=readme&utm_campaign=integrations
- Issues: https://github.com/etchv-labs/mcp-server/issues
- Support: [email protected]
Questions or bug reports: open an issue here or email [email protected].
License
来源:README.md,提交 0f2f162
工具
0版本历史
1- v1.6.0最新Oct 29, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分