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 +26 -24
- package/package.json +3 -3
- package/src/cli.js +2 -0
- package/src/server.js +8 -0
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
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
|
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.
|
|
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.
|
|
35
|
-
"@modelcontextprotocol/server": "2.
|
|
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,
|