mcp-filter 1.0.2 → 1.1.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 +187 -358
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,160 +19,198 @@
|
|
|
19
19
|
|
|
20
20
|
## Why mcp-filter?
|
|
21
21
|
|
|
22
|
-
MCP
|
|
22
|
+
[GitHub MCP Server](https://github.com/github/github-mcp-server) exposes 79 tools — **~52,000 tokens** of context window per request. A PR review agent needs maybe 10 of them. The other 69 (gists, stars, security advisories, dependabot, discussions...) are noise that costs tokens and confuses tool selection.
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
- **Focus** — Whitelist only the tools an agent needs for its specific task
|
|
26
|
-
- **Cost** — Fewer tools in context means fewer tokens consumed per request
|
|
27
|
-
- **Flexibility** — Works with any MCP server, any MCP client, any transport
|
|
24
|
+
`mcp-filter` sits between your MCP client and upstream server, filtering what gets through:
|
|
28
25
|
|
|
29
|
-
|
|
26
|
+
- **Cost** — 79 tools → 10 tools = ~80% fewer tokens per request
|
|
27
|
+
- **Focus** — Fewer tools means better tool selection by the model
|
|
28
|
+
- **Security** — Block destructive operations (`delete_*`, `push_*`) before they reach the agent
|
|
29
|
+
- **Future-proof** — `--include` whitelists are immune to upstream adding new tools
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
npm install -g mcp-filter
|
|
33
|
-
# or use directly with npx (no install needed)
|
|
34
|
-
```
|
|
31
|
+
## Quick Start
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
# Filter a local MCP server (stdio)
|
|
38
|
-
npx mcp-filter --exclude "browser_close" --exclude "browser_evaluate" -- npx @playwright/mcp
|
|
33
|
+
Add mcp-filter to your MCP client config. No install needed — `npx` downloads it automatically.
|
|
39
34
|
|
|
40
|
-
|
|
41
|
-
npx mcp-filter --exclude "create_refund" --upstream-url https://mcp.stripe.com
|
|
35
|
+
**Local server** — filter tools from a stdio MCP server:
|
|
42
36
|
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"mcpServers": {
|
|
40
|
+
"playwright-safe": {
|
|
41
|
+
"command": "npx",
|
|
42
|
+
"args": [
|
|
43
|
+
"mcp-filter",
|
|
44
|
+
"--exclude", "browser_close",
|
|
45
|
+
"--exclude", "browser_evaluate",
|
|
46
|
+
"--include", "browser_*",
|
|
47
|
+
"--",
|
|
48
|
+
"npx", "@playwright/mcp@latest"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
45
53
|
```
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
**Remote server** — filter tools from an HTTP MCP server:
|
|
48
56
|
|
|
49
|
-
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"mcpServers": {
|
|
60
|
+
"stripe-safe": {
|
|
61
|
+
"command": "npx",
|
|
62
|
+
"args": [
|
|
63
|
+
"mcp-filter",
|
|
64
|
+
"--exclude", "create_refund",
|
|
65
|
+
"--exclude", "delete_*",
|
|
66
|
+
"--upstream-url", "https://mcp.stripe.com"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
50
72
|
|
|
51
|
-
|
|
52
|
-
|-----------|------|----------|--------|
|
|
53
|
-
| **Stdio** | `-- <command>` | Local servers spawned as subprocesses | Stable |
|
|
54
|
-
| **HTTP** | `--upstream-url <url>` | Remote servers via Streamable HTTP | Stable |
|
|
55
|
-
| **SSE** | `--transport sse --upstream-url <url>` | Legacy remote servers via Server-Sent Events | Deprecated |
|
|
73
|
+
**Remote server with authentication:**
|
|
56
74
|
|
|
57
|
-
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"mcpServers": {
|
|
78
|
+
"api-readonly": {
|
|
79
|
+
"command": "npx",
|
|
80
|
+
"args": [
|
|
81
|
+
"mcp-filter",
|
|
82
|
+
"--exclude", "write_*",
|
|
83
|
+
"--exclude", "delete_*",
|
|
84
|
+
"--upstream-url", "https://api.example.com/mcp",
|
|
85
|
+
"--authorization", "Bearer your-oauth-token"
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
58
91
|
|
|
59
|
-
|
|
92
|
+
For additional headers, use `--header "Key: Value"` (repeatable).
|
|
60
93
|
|
|
61
|
-
|
|
94
|
+
This JSON format works with Cursor (`.cursor/mcp.json`), VS Code (`.vscode/mcp.json`), Claude Desktop (`claude_desktop_config.json`), and any MCP client that supports stdio servers.
|
|
62
95
|
|
|
63
|
-
|
|
64
|
-
# Exclude specific tools
|
|
65
|
-
npx mcp-filter --exclude "playwright*" -- npx @playwright/mcp
|
|
96
|
+
## Examples: GitHub MCP Server
|
|
66
97
|
|
|
67
|
-
|
|
68
|
-
npx mcp-filter --include "browser_navigate" --include "browser_screenshot" -- npx @playwright/mcp
|
|
98
|
+
The [GitHub MCP Server](https://github.com/github/github-mcp-server) is a good example of a large server that benefits from filtering. All examples below work with any MCP client that supports the JSON config format.
|
|
69
99
|
|
|
70
|
-
|
|
71
|
-
npx mcp-filter --exclude "browser_close" --include "browser_*" -- npx @playwright/mcp
|
|
100
|
+
**PR review agent** — whitelist only what's needed (79 → ~10 tools):
|
|
72
101
|
|
|
73
|
-
|
|
74
|
-
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"mcpServers": {
|
|
105
|
+
"github-pr-review": {
|
|
106
|
+
"command": "npx",
|
|
107
|
+
"args": [
|
|
108
|
+
"mcp-filter",
|
|
109
|
+
"--include", "pull_request_*",
|
|
110
|
+
"--include", "issue_*",
|
|
111
|
+
"--include", "get_file_contents",
|
|
112
|
+
"--include", "list_commits",
|
|
113
|
+
"--include", "search_code",
|
|
114
|
+
"--",
|
|
115
|
+
"github-mcp-server", "stdio"
|
|
116
|
+
],
|
|
117
|
+
"env": {
|
|
118
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
75
123
|
```
|
|
76
124
|
|
|
77
|
-
|
|
125
|
+
When GitHub adds new tools tomorrow, they won't leak through — only `pull_request_*`, `issue_*`, and the explicitly listed tools are visible.
|
|
78
126
|
|
|
79
|
-
|
|
80
|
-
# Block refunds and customer deletion on Stripe
|
|
81
|
-
npx mcp-filter --exclude "create_refund" --exclude "delete_*" \
|
|
82
|
-
--upstream-url https://mcp.stripe.com
|
|
83
|
-
|
|
84
|
-
# Read-only Notion (block all mutations)
|
|
85
|
-
npx mcp-filter \
|
|
86
|
-
--exclude "create_*" --exclude "update_*" --exclude "delete_*" --exclude "archive_*" \
|
|
87
|
-
--upstream-url https://mcp.notion.com/mcp
|
|
88
|
-
|
|
89
|
-
# Multiple headers
|
|
90
|
-
npx mcp-filter --exclude "write_*" \
|
|
91
|
-
--upstream-url https://api.example.com/mcp \
|
|
92
|
-
--header "Authorization: Bearer token" \
|
|
93
|
-
--header "X-Team-Id: engineering"
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### Legacy SSE Servers
|
|
127
|
+
**Read-only agent** — exclude all mutations, keep all reads:
|
|
97
128
|
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"mcpServers": {
|
|
132
|
+
"github-readonly": {
|
|
133
|
+
"command": "npx",
|
|
134
|
+
"args": [
|
|
135
|
+
"mcp-filter",
|
|
136
|
+
"--exclude", "create_*",
|
|
137
|
+
"--exclude", "update_*",
|
|
138
|
+
"--exclude", "delete_*",
|
|
139
|
+
"--exclude", "push_*",
|
|
140
|
+
"--exclude", "merge_*",
|
|
141
|
+
"--exclude", "fork_*",
|
|
142
|
+
"--exclude", "*_write",
|
|
143
|
+
"--",
|
|
144
|
+
"github-mcp-server", "stdio"
|
|
145
|
+
],
|
|
146
|
+
"env": {
|
|
147
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>"
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
103
152
|
```
|
|
104
153
|
|
|
105
|
-
|
|
154
|
+
**PR tools without merge** — rsync-style, first match wins:
|
|
106
155
|
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"mcpServers": {
|
|
159
|
+
"github-pr-safe": {
|
|
160
|
+
"command": "npx",
|
|
161
|
+
"args": [
|
|
162
|
+
"mcp-filter",
|
|
163
|
+
"--exclude", "merge_pull_request",
|
|
164
|
+
"--include", "pull_request_*",
|
|
165
|
+
"--include", "list_pull_requests",
|
|
166
|
+
"--include", "search_pull_requests",
|
|
167
|
+
"--",
|
|
168
|
+
"github-mcp-server", "stdio"
|
|
169
|
+
],
|
|
170
|
+
"env": {
|
|
171
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>"
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
107
176
|
```
|
|
108
|
-
mcp-filter [options] -- <upstream-command>
|
|
109
|
-
mcp-filter [options] --upstream-url <url>
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### Filtering Options
|
|
113
|
-
|
|
114
|
-
| Flag | Description |
|
|
115
|
-
|------|-------------|
|
|
116
|
-
| `--exclude <pattern>` | Exclude items matching glob pattern (repeatable) |
|
|
117
|
-
| `--include <pattern>` | Include only items matching glob pattern (repeatable) |
|
|
118
|
-
|
|
119
|
-
### Transport Options
|
|
120
|
-
|
|
121
|
-
| Flag | Description |
|
|
122
|
-
|------|-------------|
|
|
123
|
-
| `--upstream-url <url>` | Connect to remote HTTP/SSE server |
|
|
124
|
-
| `--transport <type>` | Transport type: `stdio`, `http`, `sse` (auto-detected) |
|
|
125
|
-
| `--header <header>` | HTTP header as `"Key: Value"` (repeatable, HTTP/SSE only) |
|
|
126
|
-
| `--` | Separates mcp-filter options from upstream command (stdio only) |
|
|
127
|
-
|
|
128
|
-
### Other Options
|
|
129
|
-
|
|
130
|
-
| Flag | Description |
|
|
131
|
-
|------|-------------|
|
|
132
|
-
| `--help` | Show help message |
|
|
133
|
-
| `--version` | Show version number |
|
|
134
177
|
|
|
135
|
-
|
|
178
|
+
`merge_pull_request` matches `--exclude` first, so it's blocked. The remaining `pull_request_*` tools pass through.
|
|
136
179
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
### Exclude Mode
|
|
180
|
+
### Claude Code
|
|
140
181
|
|
|
141
|
-
|
|
182
|
+
Claude Code uses `claude mcp add` instead of JSON:
|
|
142
183
|
|
|
143
184
|
```bash
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
185
|
+
# Local server (two -- separators: first for Claude, second for mcp-filter)
|
|
186
|
+
claude mcp add playwright-safe -- \
|
|
187
|
+
npx mcp-filter \
|
|
188
|
+
--exclude "browser_close" \
|
|
189
|
+
--exclude "browser_evaluate" \
|
|
190
|
+
--include "browser_*" \
|
|
191
|
+
-- npx @playwright/mcp@latest
|
|
150
192
|
|
|
151
|
-
|
|
152
|
-
|
|
193
|
+
# Remote HTTP server (no second --)
|
|
194
|
+
claude mcp add stripe-safe -- \
|
|
195
|
+
npx mcp-filter \
|
|
196
|
+
--exclude "create_refund" \
|
|
197
|
+
--exclude "delete_*" \
|
|
198
|
+
--upstream-url https://mcp.stripe.com
|
|
153
199
|
```
|
|
154
200
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
Patterns are evaluated **in order** — first match wins. This lets you combine `--include` and `--exclude` for fine-grained control:
|
|
201
|
+
## Options
|
|
158
202
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
# browser_close → matches --exclude "browser_close" → EXCLUDED
|
|
169
|
-
# browser_evaluate → matches --exclude "browser_evaluate" → EXCLUDED
|
|
170
|
-
# browser_navigate → matches --include "browser_*" → included
|
|
171
|
-
# browser_screenshot → matches --include "browser_*" → included
|
|
172
|
-
# some_other_tool → no match, --include exists → excluded (whitelist mode)
|
|
173
|
-
```
|
|
203
|
+
| Option | Description |
|
|
204
|
+
|--------|-------------|
|
|
205
|
+
| `--exclude <pattern>` | Exclude items matching glob pattern (repeatable) |
|
|
206
|
+
| `--include <pattern>` | Include only items matching glob pattern (repeatable) |
|
|
207
|
+
| `--upstream-url <url>` | Connect to remote HTTP/SSE server (mutually exclusive with `--`) |
|
|
208
|
+
| `--transport <type>` | Transport type: `stdio`, `http`, `sse` (auto-detected) |
|
|
209
|
+
| `--authorization <value>` | Set Authorization header (e.g. `"Bearer token"`, HTTP/SSE only) |
|
|
210
|
+
| `--header <header>` | HTTP header as `"Key: Value"` (repeatable, HTTP/SSE only) |
|
|
211
|
+
| `--` | Separates mcp-filter options from upstream command (stdio only) |
|
|
174
212
|
|
|
175
|
-
|
|
213
|
+
## Filtering
|
|
176
214
|
|
|
177
215
|
### Pattern Syntax
|
|
178
216
|
|
|
@@ -186,7 +224,7 @@ Patterns use glob syntax via [minimatch](https://github.com/isaacs/minimatch):
|
|
|
186
224
|
| `exact_name` | Exact match only |
|
|
187
225
|
| `*` | Everything |
|
|
188
226
|
|
|
189
|
-
###
|
|
227
|
+
### Modes
|
|
190
228
|
|
|
191
229
|
| Configuration | Unmatched items are... |
|
|
192
230
|
|---------------|------------------------|
|
|
@@ -195,233 +233,41 @@ Patterns use glob syntax via [minimatch](https://github.com/isaacs/minimatch):
|
|
|
195
233
|
| `--include` only | Excluded (whitelist mode) |
|
|
196
234
|
| Mixed | Excluded if any `--include` exists |
|
|
197
235
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
mcp-filter is a fully conformant MCP proxy. It transparently forwards all MCP protocol features while applying filters only to list/call operations.
|
|
201
|
-
|
|
202
|
-
### Filtered Operations
|
|
236
|
+
### Rsync-Style Ordering
|
|
203
237
|
|
|
204
|
-
|
|
205
|
-
|-----------|----------|
|
|
206
|
-
| `tools/list` | Drains all pages, filters by name, returns filtered list |
|
|
207
|
-
| `tools/call` | Blocks excluded tools with `-32602 InvalidParams` |
|
|
208
|
-
| `resources/list` | Drains all pages, filters by name |
|
|
209
|
-
| `resources/templates/list` | Drains all pages, filters by name |
|
|
210
|
-
| `resources/read` | Forwarded (filtered resources won't appear in list) |
|
|
211
|
-
| `resources/subscribe` | Forwarded to upstream |
|
|
212
|
-
| `resources/unsubscribe` | Forwarded to upstream |
|
|
213
|
-
| `prompts/list` | Drains all pages, filters by name |
|
|
214
|
-
| `prompts/get` | Blocks excluded prompts with `-32602 InvalidParams` |
|
|
215
|
-
| `completion/complete` | Blocks if referenced prompt is filtered; forwards resource completions |
|
|
216
|
-
| `logging/setLevel` | Forwarded to upstream |
|
|
217
|
-
|
|
218
|
-
### Forwarded Notifications
|
|
219
|
-
|
|
220
|
-
| Direction | Notification | Description |
|
|
221
|
-
|-----------|-------------|-------------|
|
|
222
|
-
| Upstream → Downstream | `notifications/tools/list_changed` | Tool list changed |
|
|
223
|
-
| Upstream → Downstream | `notifications/resources/list_changed` | Resource list changed |
|
|
224
|
-
| Upstream → Downstream | `notifications/prompts/list_changed` | Prompt list changed |
|
|
225
|
-
| Upstream → Downstream | `notifications/resources/updated` | Resource content updated |
|
|
226
|
-
| Upstream → Downstream | `notifications/message` | Log messages |
|
|
227
|
-
| Downstream → Upstream | `notifications/roots/list_changed` | Client roots changed |
|
|
228
|
-
|
|
229
|
-
### Reverse-Direction Requests (Server → Client)
|
|
230
|
-
|
|
231
|
-
| Request | Description |
|
|
232
|
-
|---------|-------------|
|
|
233
|
-
| `sampling/createMessage` | Forwarded from upstream to downstream client |
|
|
234
|
-
| `roots/list` | Forwarded from upstream to downstream client |
|
|
235
|
-
| `elicitation/create` | Forwarded from upstream to downstream client |
|
|
236
|
-
|
|
237
|
-
### Protocol Features
|
|
238
|
-
|
|
239
|
-
| Feature | Support |
|
|
240
|
-
|---------|---------|
|
|
241
|
-
| **Capability gating** | Only advertises capabilities the upstream server supports |
|
|
242
|
-
| **Instructions forwarding** | Upstream server instructions passed through to downstream |
|
|
243
|
-
| **Pagination** | Drains all pages before filtering (max 100 pages) |
|
|
244
|
-
| **Progress notifications** | Forwarded on `tools/call`, `prompts/get`, `resources/read` |
|
|
245
|
-
| **Cancellation propagation** | Downstream abort triggers upstream `notifications/cancelled` |
|
|
246
|
-
| **Graceful shutdown** | SIGINT/SIGTERM cleanly close both transports |
|
|
247
|
-
| **Connection timeout** | 30-second timeout prevents hang on unreachable servers |
|
|
248
|
-
|
|
249
|
-
## Architecture
|
|
250
|
-
|
|
251
|
-
```
|
|
252
|
-
┌─────────────┐ ┌──────────────────────────────────────┐ ┌──────────────┐
|
|
253
|
-
│ MCP Client │ stdio │ mcp-filter │ stdio/ │ Upstream │
|
|
254
|
-
│ (Claude, │◄───────►│ │ HTTP/ │ MCP Server │
|
|
255
|
-
│ Cursor, │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ SSE │ (Playwright, │
|
|
256
|
-
│ etc.) │ │ │ Server │→ │ Filter │→ │ Client │◄┼────────►│ Notion, │
|
|
257
|
-
│ │ │ └────────┘ └────────┘ └────────┘ │ │ etc.) │
|
|
258
|
-
└─────────────┘ └──────────────────────────────────────┘ └──────────────┘
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
**Four-layer design:**
|
|
262
|
-
|
|
263
|
-
1. **CLI** (`src/cli.ts`) — Parses arguments into a typed `FilterConfig`
|
|
264
|
-
2. **Transport Factory** (`src/transport.ts`) — Creates the appropriate client transport (stdio/HTTP/SSE)
|
|
265
|
-
3. **Filter Engine** (`src/filter.ts`) — Glob pattern matching via minimatch
|
|
266
|
-
4. **Proxy Server** (`src/proxy.ts`) — Dual-role MCP client + server with two-phase initialization
|
|
267
|
-
|
|
268
|
-
## Integration Guides
|
|
269
|
-
|
|
270
|
-
### Claude Code
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
# Add a filtered MCP server
|
|
274
|
-
claude mcp add playwright-safe -- \
|
|
275
|
-
npx mcp-filter \
|
|
276
|
-
--exclude "browser_close" \
|
|
277
|
-
--exclude "browser_evaluate" \
|
|
278
|
-
--include "browser_*" \
|
|
279
|
-
-- npx @playwright/mcp@latest
|
|
280
|
-
|
|
281
|
-
# Scopes: local (default), user (all projects), project (team-shared .mcp.json)
|
|
282
|
-
claude mcp add --scope user playwright-safe -- \
|
|
283
|
-
npx mcp-filter --include "browser_*" -- npx @playwright/mcp@latest
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
**Remote HTTP server (no second `--`):**
|
|
287
|
-
|
|
288
|
-
```bash
|
|
289
|
-
claude mcp add stripe-safe -- \
|
|
290
|
-
npx mcp-filter \
|
|
291
|
-
--exclude "create_refund" \
|
|
292
|
-
--exclude "delete_*" \
|
|
293
|
-
--upstream-url https://mcp.stripe.com
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
**Command structure:** first `--` separates Claude options from mcp-filter; second `--` separates mcp-filter options from the upstream command.
|
|
297
|
-
|
|
298
|
-
<details>
|
|
299
|
-
<summary>More Claude Code examples</summary>
|
|
300
|
-
|
|
301
|
-
**Read-only monitoring agent:**
|
|
302
|
-
|
|
303
|
-
```bash
|
|
304
|
-
claude mcp add browser-monitor -- \
|
|
305
|
-
npx mcp-filter \
|
|
306
|
-
--include "browser_navigate" \
|
|
307
|
-
--include "browser_snapshot" \
|
|
308
|
-
--include "browser_console_messages" \
|
|
309
|
-
--include "browser_network_requests" \
|
|
310
|
-
--include "browser_take_screenshot" \
|
|
311
|
-
-- npx @playwright/mcp@latest
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
**Testing agent (no destructive actions):**
|
|
315
|
-
|
|
316
|
-
```bash
|
|
317
|
-
claude mcp add browser-test -- \
|
|
318
|
-
npx mcp-filter \
|
|
319
|
-
--exclude "browser_close" \
|
|
320
|
-
--exclude "browser_tabs" \
|
|
321
|
-
--exclude "browser_evaluate" \
|
|
322
|
-
--include "browser_*" \
|
|
323
|
-
-- npx @playwright/mcp@latest
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
**Managing servers:**
|
|
327
|
-
|
|
328
|
-
```bash
|
|
329
|
-
claude mcp list # List all servers
|
|
330
|
-
claude mcp get playwright-safe # Show server details
|
|
331
|
-
claude mcp remove playwright-safe # Remove a server
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
</details>
|
|
335
|
-
|
|
336
|
-
### Cursor IDE
|
|
337
|
-
|
|
338
|
-
Add to `.cursor/mcp.json` or `~/.cursor/mcp.json`:
|
|
238
|
+
Patterns are evaluated **in order** — first match wins. This lets you combine `--include` and `--exclude` for fine-grained control:
|
|
339
239
|
|
|
340
240
|
```json
|
|
341
|
-
|
|
342
|
-
"
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
"--include", "browser_*",
|
|
350
|
-
"--",
|
|
351
|
-
"npx", "@playwright/mcp@latest"
|
|
352
|
-
]
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
241
|
+
"args": [
|
|
242
|
+
"mcp-filter",
|
|
243
|
+
"--exclude", "merge_pull_request",
|
|
244
|
+
"--include", "pull_request_*",
|
|
245
|
+
"--include", "list_pull_requests",
|
|
246
|
+
"--",
|
|
247
|
+
"github-mcp-server", "stdio"
|
|
248
|
+
]
|
|
356
249
|
```
|
|
357
250
|
|
|
358
|
-
<details>
|
|
359
|
-
<summary>More Cursor examples</summary>
|
|
360
|
-
|
|
361
|
-
**Whitelist mode:**
|
|
362
|
-
|
|
363
|
-
```json
|
|
364
|
-
{
|
|
365
|
-
"mcpServers": {
|
|
366
|
-
"playwright-readonly": {
|
|
367
|
-
"command": "npx",
|
|
368
|
-
"args": [
|
|
369
|
-
"mcp-filter",
|
|
370
|
-
"--include", "browser_navigate",
|
|
371
|
-
"--include", "browser_screenshot",
|
|
372
|
-
"--include", "browser_snapshot",
|
|
373
|
-
"--",
|
|
374
|
-
"npx", "@playwright/mcp@latest"
|
|
375
|
-
]
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
251
|
```
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
{
|
|
385
|
-
"mcpServers": {
|
|
386
|
-
"stripe-safe": {
|
|
387
|
-
"command": "npx",
|
|
388
|
-
"args": [
|
|
389
|
-
"mcp-filter",
|
|
390
|
-
"--exclude", "create_refund",
|
|
391
|
-
"--exclude", "delete_*",
|
|
392
|
-
"--upstream-url", "https://mcp.stripe.com"
|
|
393
|
-
]
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
}
|
|
252
|
+
merge_pull_request → matches --exclude → EXCLUDED
|
|
253
|
+
pull_request_read → matches --include → included
|
|
254
|
+
list_pull_requests → matches --include → included
|
|
255
|
+
create_gist → no match, --include exists → excluded (whitelist mode)
|
|
397
256
|
```
|
|
398
257
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
### Any MCP Client
|
|
402
|
-
|
|
403
|
-
mcp-filter works with any MCP client that supports stdio servers. The upstream server can be local (stdio) or remote (HTTP/SSE):
|
|
404
|
-
|
|
405
|
-
```json
|
|
406
|
-
{
|
|
407
|
-
"command": "npx",
|
|
408
|
-
"args": ["mcp-filter", "--exclude", "pattern", "--", "npx", "your-mcp-server"]
|
|
409
|
-
}
|
|
410
|
-
```
|
|
258
|
+
> **Order matters!** `--exclude "merge_pull_request" --include "pull_request_*"` blocks merge then includes the rest. Reversing the order would include `merge_pull_request` (it matches `pull_request_*` first).
|
|
411
259
|
|
|
412
260
|
## Common Mistakes
|
|
413
261
|
|
|
414
262
|
### JSON args must be separate strings
|
|
415
263
|
|
|
416
|
-
In JSON configs
|
|
264
|
+
In JSON configs, each argument must be its own array element. The shell splits arguments for you — JSON doesn't.
|
|
417
265
|
|
|
418
|
-
|
|
419
|
-
|
|
266
|
+
```jsonc
|
|
267
|
+
// WRONG
|
|
420
268
|
"args": ["mcp-filter", "--include browser_*", "--", "npx", "server"]
|
|
421
|
-
```
|
|
422
269
|
|
|
423
|
-
|
|
424
|
-
```json
|
|
270
|
+
// CORRECT
|
|
425
271
|
"args": ["mcp-filter", "--include", "browser_*", "--", "npx", "server"]
|
|
426
272
|
```
|
|
427
273
|
|
|
@@ -434,11 +280,9 @@ Put `--exclude` patterns **before** `--include` to create exceptions. First matc
|
|
|
434
280
|
```bash
|
|
435
281
|
# CORRECT: exclude first, then include the rest
|
|
436
282
|
--exclude "browser_close" --include "browser_*"
|
|
437
|
-
# Result: browser_close blocked, other browser_* allowed
|
|
438
283
|
|
|
439
|
-
# WRONG
|
|
284
|
+
# WRONG: include matches first, exclude never fires
|
|
440
285
|
--include "browser_*" --exclude "browser_close"
|
|
441
|
-
# Result: ALL browser_* allowed including browser_close
|
|
442
286
|
```
|
|
443
287
|
|
|
444
288
|
### Two `--` separators in Claude Code
|
|
@@ -451,30 +295,13 @@ claude mcp add my-server -- npx mcp-filter --exclude "dangerous_*" -- npx upstre
|
|
|
451
295
|
# Claude's -- mcp-filter's --
|
|
452
296
|
```
|
|
453
297
|
|
|
454
|
-
##
|
|
455
|
-
|
|
456
|
-
mcp-filter exports its core modules for use in custom tooling:
|
|
457
|
-
|
|
458
|
-
```typescript
|
|
459
|
-
import { FilterEngine } from 'mcp-filter/filter';
|
|
460
|
-
import { ProxyServer } from 'mcp-filter/proxy';
|
|
461
|
-
import { createTransport } from 'mcp-filter/transport';
|
|
462
|
-
import type { FilterConfig, TransportConfig } from 'mcp-filter/types';
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
## Testing
|
|
466
|
-
|
|
467
|
-
187+ tests across 15 test suites covering unit tests, integration tests with real MCP servers, and full spec compliance validation.
|
|
468
|
-
|
|
469
|
-
```bash
|
|
470
|
-
pnpm test # Run all tests
|
|
471
|
-
pnpm test:coverage # With coverage report
|
|
472
|
-
pnpm test tests/unit/ # Unit tests only (fast)
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
Tests run on **Node 20, 22, and 24** via GitHub Actions CI.
|
|
298
|
+
## Transports
|
|
476
299
|
|
|
477
|
-
|
|
300
|
+
| Transport | Flag | Use Case | Status |
|
|
301
|
+
|-----------|------|----------|--------|
|
|
302
|
+
| **Stdio** | `-- <command>` | Local servers spawned as subprocesses | Stable |
|
|
303
|
+
| **HTTP** | `--upstream-url <url>` | Remote servers via Streamable HTTP | Stable |
|
|
304
|
+
| **SSE** | `--transport sse --upstream-url <url>` | Legacy remote servers via Server-Sent Events | Deprecated |
|
|
478
305
|
|
|
479
306
|
## Development
|
|
480
307
|
|
|
@@ -486,13 +313,15 @@ pnpm run build
|
|
|
486
313
|
pnpm test
|
|
487
314
|
```
|
|
488
315
|
|
|
489
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.
|
|
316
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines and [TESTING.md](TESTING.md) for the testing guide.
|
|
490
317
|
|
|
491
318
|
## Links
|
|
492
319
|
|
|
493
320
|
- [npm package](https://www.npmjs.com/package/mcp-filter)
|
|
494
321
|
- [GitHub repository](https://github.com/baranovxyz/mcp-filter)
|
|
495
322
|
- [Changelog](CHANGELOG.md)
|
|
323
|
+
- [Spec conformance](docs/spec-conformance.md)
|
|
324
|
+
- [Architecture decisions](docs/architecture-decisions.md)
|
|
496
325
|
- [MCP specification](https://modelcontextprotocol.io)
|
|
497
326
|
|
|
498
327
|
## License
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAGb,MAAM,YAAY,CAAC;AAwCpB,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAGb,MAAM,YAAY,CAAC;AAwCpB,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CA6KtD"}
|
package/dist/cli.js
CHANGED
|
@@ -98,6 +98,14 @@ export function parseArgs(args) {
|
|
|
98
98
|
headers[key] = value;
|
|
99
99
|
continue;
|
|
100
100
|
}
|
|
101
|
+
if (arg === "--authorization") {
|
|
102
|
+
const value = args[++i];
|
|
103
|
+
if (!value) {
|
|
104
|
+
throw new Error("--authorization requires a value (e.g. 'Bearer token')");
|
|
105
|
+
}
|
|
106
|
+
headers["Authorization"] = value;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
101
109
|
if (arg === "--help" || arg === "-h") {
|
|
102
110
|
throw new Error("help");
|
|
103
111
|
}
|
|
@@ -150,7 +158,7 @@ export function parseArgs(args) {
|
|
|
150
158
|
throw new Error(`--transport ${explicitTransport} requires --upstream-url. Use --transport stdio or omit --transport for command-based servers.`);
|
|
151
159
|
}
|
|
152
160
|
if (Object.keys(headers).length > 0) {
|
|
153
|
-
throw new Error("--header can only be used with --upstream-url");
|
|
161
|
+
throw new Error("--header/--authorization can only be used with --upstream-url");
|
|
154
162
|
}
|
|
155
163
|
transportConfig = {
|
|
156
164
|
type: "stdio",
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ function printUsage() {
|
|
|
19
19
|
console.error(" --upstream-url <url> Connect to HTTP/SSE server (mutually exclusive with --)");
|
|
20
20
|
console.error(" --transport <type> Transport type: stdio, http, sse (auto-detected if omitted)");
|
|
21
21
|
console.error(" --header <header> Add HTTP header (format: 'Key: Value', HTTP/SSE only)");
|
|
22
|
+
console.error(" --authorization <value> Set Authorization header (e.g. 'Bearer token', HTTP/SSE only)");
|
|
22
23
|
console.error(" --help Show this help message");
|
|
23
24
|
console.error(" --version Show version number");
|
|
24
25
|
console.error("");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|