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僅桌面檔案與儲存媒體與設計

概覽

AI 產生的概覽

本機 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 的網路。
安裝前請注意
加入浮水印、偵測、批次工作與連結副本都會消耗 Etchv 額度;GPU 處理需 Business 或 Enterprise 方案,且消耗 3 倍額度。刪除與撤銷類工具無法復原,儲存與 webhook 操作需要擁有者或管理員權限。未指定 output_path 時回傳的下載連結在 15 分鐘內無需 API 金鑰即可使用,任何取得連結的人都能下載檔案。請將 ETCHV_API_KEY 放在用戶端的密鑰設定中,不要貼在對話裡。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Etchv,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

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

VariableRequiredDescription
ETCHV_API_KEYYesEtchv API key. Keep it in your client's secret or env config, never in chat.
ETCHV_FILES_ROOTYesAbsolute path of an existing directory. All input and output files must be inside it.
ETCHV_API_BASE_URLNoAPI origin. Defaults to https://api.etchv.com.
ETCHV_LARGE_FILE_THRESHOLDNoFiles above this many bytes are uploaded once to a signed URL and sent by ID. Defaults to 40 MiB.

Claude Code

sh
claude mcp add etchv --scope user \  -e ETCHV_API_KEY="$ETCHV_API_KEY" \  -e ETCHV_FILES_ROOT="$HOME/etchv-media" \  -- npx -y @etchv-labs/mcp-server@1

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:

sh
gemini extensions install https://github.com/etchv-labs/mcp-server

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:

json
{  "mcpServers": {    "etchv": {      "command": "npx",      "args": ["-y", "@etchv-labs/mcp-server@1"],      "env": {        "ETCHV_API_KEY": "YOUR_ETCHV_API_KEY",        "ETCHV_FILES_ROOT": "/absolute/path/to/etchv-media"      }    }  }}

Then ask the assistant to run check_api_key to confirm the connection.

Tools

ToolWhat it doesKey scope
check_api_keyShow organization ID, key ID and scopes; no creditsAny valid key
watermark_mediaWatermark a file, sync or async; spends creditswatermarks:embed (assets:read for links)
detect_mediaDetect a watermark, sync or async; uses creditswatermarks:detect
create_uploadCreate an upload session and return its signed upload URLwatermarks:embed, or watermarks:detect for detect
get_job, get_job_resultRead job status; collect a finished resultMatching embed/detect scope
watermark_batchWatermark up to 100 local files in one batch, each with its own data; spends creditswatermarks:embed
get_batch, download_batchFollow a batch; save each result or the batch's zipwatermarks:embed
list_assets, get_asset, download_assetList, inspect, download or link to assetsassets:read
update_assetRename or replace metadata (version-checked)assets:write
delete_assetDelete an assetassets:delete, owner/admin
create_linkShare a source asset so each recipient opens their own watermarked copy; copies spend creditslinks:write
list_links, get_linkList links; read one with each recipient's opens and copylinks:read
revoke_linkStop new opens and downloads of a linklinks:write
delete_link, remove_link_recipientDelete a link, or one recipient, with their opens, downloads and copies; can't be undonelinks:write, assets:delete, owner/admin
list_storage_destinations, list_storage_deliveries, get_storage_deliveryInspect customer storagestorage:read
verify_storage_destination, store_asset, retry_storage_deliveryTest a bucket; deliver or retry a resultstorage:write, owner/admin
list_webhooks, list_webhook_deliveriesInspect webhook endpoints and deliverieswebhooks:read
redeliver_webhookResend an existing eventwebhooks:write, owner/admin

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 inside ETCHV_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 the Content-Disposition header, else the URL path; pass filename to set it. Its extension must match media.
  • upload_id: an upl_ ID from create_upload. A client that can send files itself calls create_upload with kind (image, document, video, or detect to check a delivered file), filename and the exact size in bytes, PUTs the bytes to the returned upload.url without an API key, then passes upload_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. filename can 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_url must 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

Questions or bug reports: open an issue here or email [email protected].

License

MIT

來源:README.md,提交 0f2f162

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:伺服器未能啟動。

版本歷史

1
  1. v1.6.0最新Oct 29, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分