watermarkbuster-mcp 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,15 +6,16 @@ Connect an MCP client to hosted or local Watermark Buster tools. The default mod
6
6
 
7
7
  - Node.js 20 or newer
8
8
  - An internet connection to `https://watermarkbuster.com/mcp`
9
+ - An operator-issued Watermark Buster bearer token in `WATERMARKS_API_TOKEN`
9
10
 
10
- No account, API token, GPU, Python, or local model is required for the default hosted mode.
11
+ No GPU, Python, or local model is required for the default hosted mode.
11
12
 
12
13
  ## Run without installing
13
14
 
14
15
  Use `npx` to download and start the current package:
15
16
 
16
17
  ```bash
17
- npx -y watermarkbuster-mcp
18
+ WATERMARKS_API_TOKEN=YOUR_CLIENT_BEARER_TOKEN npx -y watermarkbuster-mcp
18
19
  ```
19
20
 
20
21
  The command waits for MCP messages on standard input. It does not open a user interface or show a prompt. Normally, your MCP client starts this command for you.
@@ -27,10 +28,10 @@ Install the command on your computer:
27
28
  npm install --global watermarkbuster-mcp
28
29
  ```
29
30
 
30
- Your MCP client can then start:
31
+ Your MCP client can then start it with `WATERMARKS_API_TOKEN` in its environment:
31
32
 
32
33
  ```text
33
- watermarkbuster-mcp
34
+ WATERMARKS_API_TOKEN=YOUR_CLIENT_BEARER_TOKEN watermarkbuster-mcp
34
35
  ```
35
36
 
36
37
  To add the package to one Node.js project instead, run:
@@ -77,7 +78,8 @@ Clients that use an `mcpServers` JSON object commonly use this form:
77
78
  "mcpServers": {
78
79
  "watermark-buster": {
79
80
  "command": "npx",
80
- "args": ["-y", "watermarkbuster-mcp"]
81
+ "args": ["-y", "watermarkbuster-mcp"],
82
+ "env": {"WATERMARKS_API_TOKEN": "YOUR_CLIENT_BEARER_TOKEN"}
81
83
  }
82
84
  }
83
85
  }
@@ -85,7 +87,7 @@ Clients that use an `mcpServers` JSON object commonly use this form:
85
87
 
86
88
  ## Connect directly to the remote server
87
89
 
88
- Clients that support remote Streamable HTTP MCP do not need this npm bridge. Connect them directly to:
90
+ Clients that support remote Streamable HTTP MCP do not need this npm bridge. Connect them directly to the URL below and send `Authorization: Bearer YOUR_CLIENT_BEARER_TOKEN` on every protocol request:
89
91
 
90
92
  ```text
91
93
  https://watermarkbuster.com/mcp
@@ -93,30 +95,22 @@ https://watermarkbuster.com/mcp
93
95
 
94
96
  ### Codex
95
97
 
96
- Add this to `~/.codex/config.toml`:
97
-
98
- ```toml
99
- [mcp_servers.watermark_buster]
100
- url = "https://watermarkbuster.com/mcp"
98
+ ```bash
99
+ export WATERMARKS_API_TOKEN='YOUR_CLIENT_BEARER_TOKEN'
100
+ codex mcp add watermark-buster \
101
+ --url https://watermarkbuster.com/mcp \
102
+ --bearer-token-env-var WATERMARKS_API_TOKEN
101
103
  ```
102
104
 
103
105
  Restart Codex, then run `codex mcp list` or use `/mcp` inside Codex.
104
106
 
105
107
  ### Claude Code
106
108
 
107
- ```bash
108
- claude mcp add --transport http watermark-buster https://watermarkbuster.com/mcp
109
- ```
110
-
111
- Run `claude mcp list` or use `/mcp` inside Claude Code.
109
+ Use the authenticated npm bridge configuration above, then run `claude mcp list` or use `/mcp` inside Claude Code.
112
110
 
113
111
  ### Gemini CLI
114
112
 
115
- ```bash
116
- gemini mcp add --transport http watermark-buster https://watermarkbuster.com/mcp
117
- ```
118
-
119
- Run `gemini mcp list` to confirm the connection.
113
+ Use the authenticated npm bridge configuration above, then run `gemini mcp list` to confirm the connection.
120
114
 
121
115
  ### Cursor
122
116
 
@@ -126,7 +120,9 @@ Add this to `.cursor/mcp.json` for one project or `~/.cursor/mcp.json` for all p
126
120
  {
127
121
  "mcpServers": {
128
122
  "watermark-buster": {
129
- "url": "https://watermarkbuster.com/mcp"
123
+ "command": "npx",
124
+ "args": ["-y", "watermarkbuster-mcp"],
125
+ "env": {"WATERMARKS_API_TOKEN": "YOUR_CLIENT_BEARER_TOKEN"}
130
126
  }
131
127
  }
132
128
  }
@@ -142,7 +138,9 @@ Add this to `~/.gemini/config/mcp_config.json` for all workspaces or `.agents/mc
142
138
  {
143
139
  "mcpServers": {
144
140
  "watermark-buster": {
145
- "serverUrl": "https://watermarkbuster.com/mcp"
141
+ "command": "npx",
142
+ "args": ["-y", "watermarkbuster-mcp"],
143
+ "env": {"WATERMARKS_API_TOKEN": "YOUR_CLIENT_BEARER_TOKEN"}
146
144
  }
147
145
  }
148
146
  }
@@ -156,13 +154,17 @@ The bridge reads the current tool list from the hosted MCP server when it starts
156
154
 
157
155
  - `inspect_text` — report supported hidden Unicode without changing the text
158
156
  - `clean_text` — remove supported hidden Unicode and exotic spaces
157
+ - `scan_and_rewrite_text` — run the model-free English light rewrite and return estimate-only scores, quality metrics, highlights, and a diff; input is limited to 128 KB
159
158
  - `clean_file` — clean a supported file and return the cleaned copy
159
+ - `clean_synthid_image` — run the supported best-effort CPU SynthID scan on one PNG or JPEG and return the PNG plus residual report
160
160
  - `get_capabilities` — read the current formats, limits, and behavior
161
161
 
162
162
  Example agent requests:
163
163
 
164
164
  - “Inspect this text for hidden Unicode.”
165
+ - “Scan and lightly rewrite this English text, then show the diff and limits.”
165
166
  - “Clean this file and return the cleaned copy.”
167
+ - “Run the SynthID image scan and tell me if a residual remains.”
166
168
  - “Show the current Watermark Buster capabilities.”
167
169
 
168
170
  Local mode exposes the larger local tool set: direct file paths, folder audit, opt-in website audit, local Ollama rewriting, and an adapter for the optional `noai-watermark` pixel tool. See the [local package guide](https://pypi.org/project/watermarkbuster-local/).
@@ -173,7 +175,7 @@ In the default mode, tool input is sent to `https://watermarkbuster.com` for pro
173
175
 
174
176
  ## Connection errors
175
177
 
176
- If the hosted service cannot be reached, the command writes `Watermark Buster MCP: <reason>` to standard error and exits with a failure status. Check that `https://watermarkbuster.com/mcp` is reachable, then let the MCP client start the command again.
178
+ If the token is missing or the hosted service cannot be reached, the command writes `Watermark Buster MCP: <reason>` to standard error and exits with a failure status. Check `WATERMARKS_API_TOKEN` and connectivity, then let the MCP client start the command again.
177
179
 
178
180
  If local mode says that the local package is missing, run `pipx install watermarkbuster-local`, then start the command again.
179
181
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "watermarkbuster-mcp",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Connect MCP clients to hosted or local Watermark Buster tools.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -31,7 +31,7 @@
31
31
  "access": "public"
32
32
  },
33
33
  "dependencies": {
34
- "@modelcontextprotocol/client": "2.0.0",
35
- "@modelcontextprotocol/server": "2.0.0"
34
+ "@modelcontextprotocol/client": "2.4.0",
35
+ "@modelcontextprotocol/server": "2.4.0"
36
36
  }
37
37
  }
package/src/cli.js CHANGED
@@ -9,6 +9,7 @@ import { serveStdio } from "@modelcontextprotocol/server/stdio";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  REMOTE_MCP_ENDPOINT,
12
+ authenticatedRequestInit,
12
13
  createBridgeServer,
13
14
  } from "./server.js";
14
15
  import { startLocalServer } from "./local.js";
@@ -80,6 +81,7 @@ async function startBridge() {
80
81
  });
81
82
  const remoteTransport = new StreamableHTTPClientTransport(
82
83
  new URL(REMOTE_MCP_ENDPOINT),
84
+ { requestInit: authenticatedRequestInit() },
83
85
  );
84
86
  await remoteClient.connect(remoteTransport);
85
87
  const { tools } = await remoteClient.listTools();
package/src/server.js CHANGED
@@ -14,6 +14,14 @@ const SERVER_INSTRUCTIONS = [
14
14
  "The hosted service does not archive submitted content.",
15
15
  ].join(" ");
16
16
 
17
+ export function authenticatedRequestInit(environment = process.env) {
18
+ const apiToken = environment.WATERMARKS_API_TOKEN?.trim();
19
+ if (!apiToken) {
20
+ throw new Error("WATERMARKS_API_TOKEN is required for the hosted MCP server");
21
+ }
22
+ return { headers: { Authorization: `Bearer ${apiToken}` } };
23
+ }
24
+
17
25
  function remoteToolConfiguration(remoteTool) {
18
26
  const configuration = {
19
27
  title: remoteTool.title,