mcp-filter 1.0.2 → 1.1.1
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 +186 -337
- 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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center">mcp-filter</h1>
|
|
3
3
|
<p align="center">
|
|
4
|
-
MCP proxy that filters tools, resources, and prompts
|
|
4
|
+
MCP proxy that filters tools, resources, and prompts using glob patterns.
|
|
5
5
|
<br />
|
|
6
|
-
|
|
6
|
+
Any MCP server. Any MCP client. Local or remote.
|
|
7
7
|
</p>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
@@ -17,164 +17,129 @@
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## The Problem
|
|
21
21
|
|
|
22
|
-
MCP
|
|
22
|
+
[GitHub MCP Server](https://github.com/github/github-mcp-server) exposes 79 tools — **~52,000 tokens** of context window on every request. A PR review agent needs about 10 of them. The other 69 (gists, stars, security advisories, dependabot, discussions...) consume tokens and make tool selection harder for the model.
|
|
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
|
+
Most MCP clients offer blacklists like `disabledTools` — you list what to block. This works until the upstream server adds a new tool. It silently appears in context because it's not in your blocklist. You find out when the agent calls a tool you didn't know existed.
|
|
28
25
|
|
|
29
|
-
|
|
26
|
+
Blacklists describe what you *don't* want. Whitelists describe what you *do* want — and they're immune to upstream changes.
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
npm install -g mcp-filter
|
|
33
|
-
# or use directly with npx (no install needed)
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# Filter a local MCP server (stdio)
|
|
38
|
-
npx mcp-filter --exclude "browser_close" --exclude "browser_evaluate" -- npx @playwright/mcp
|
|
28
|
+
## The Solution
|
|
39
29
|
|
|
40
|
-
|
|
41
|
-
npx mcp-filter --exclude "create_refund" --upstream-url https://mcp.stripe.com
|
|
30
|
+
`mcp-filter` is an MCP proxy that sits between your client and server. It intercepts tool/resource/prompt lists, applies glob patterns, and only passes through what matches. Add it to your MCP client's JSON config:
|
|
42
31
|
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"mcpServers": {
|
|
35
|
+
"playwright-safe": {
|
|
36
|
+
"command": "npx",
|
|
37
|
+
"args": [
|
|
38
|
+
"mcp-filter",
|
|
39
|
+
"--exclude", "browser_close",
|
|
40
|
+
"--exclude", "browser_evaluate",
|
|
41
|
+
"--include", "browser_*",
|
|
42
|
+
"--",
|
|
43
|
+
"npx", "@playwright/mcp@latest"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
45
48
|
```
|
|
46
49
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
mcp-filter connects to upstream MCP servers via three transport types:
|
|
50
|
-
|
|
51
|
-
| Transport | Flag | Use Case | Status |
|
|
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 |
|
|
56
|
-
|
|
57
|
-
Transport is auto-detected: `--upstream-url` selects HTTP by default, `-- <command>` selects stdio. Override with `--transport`.
|
|
50
|
+
No install needed — `npx` downloads it automatically. This config format works with Cursor, VS Code, Claude Desktop, and any MCP client that supports stdio servers.
|
|
58
51
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
### Local Servers (Stdio)
|
|
52
|
+
<details>
|
|
53
|
+
<summary>Remote server (HTTP)</summary>
|
|
62
54
|
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"mcpServers": {
|
|
58
|
+
"stripe-safe": {
|
|
59
|
+
"command": "npx",
|
|
60
|
+
"args": [
|
|
61
|
+
"mcp-filter",
|
|
62
|
+
"--exclude", "create_refund",
|
|
63
|
+
"--exclude", "delete_*",
|
|
64
|
+
"--upstream-url", "https://mcp.stripe.com"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
66
70
|
|
|
67
|
-
|
|
68
|
-
npx mcp-filter --include "browser_navigate" --include "browser_screenshot" -- npx @playwright/mcp
|
|
71
|
+
</details>
|
|
69
72
|
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
<details>
|
|
74
|
+
<summary>Remote server with authentication</summary>
|
|
72
75
|
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"mcpServers": {
|
|
79
|
+
"api-readonly": {
|
|
80
|
+
"command": "npx",
|
|
81
|
+
"args": [
|
|
82
|
+
"mcp-filter",
|
|
83
|
+
"--exclude", "write_*",
|
|
84
|
+
"--exclude", "delete_*",
|
|
85
|
+
"--upstream-url", "https://api.example.com/mcp",
|
|
86
|
+
"--authorization", "Bearer your-oauth-token"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
75
91
|
```
|
|
76
92
|
|
|
77
|
-
|
|
93
|
+
For additional headers, use `--header "Key: Value"` (repeatable).
|
|
78
94
|
|
|
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
|
+
</details>
|
|
95
96
|
|
|
96
|
-
|
|
97
|
+
<details>
|
|
98
|
+
<summary>Claude Code</summary>
|
|
97
99
|
|
|
98
|
-
|
|
99
|
-
# SSE transport (deprecated — prefer HTTP for new deployments)
|
|
100
|
-
npx mcp-filter --transport sse \
|
|
101
|
-
--upstream-url https://mcp.example.com/sse \
|
|
102
|
-
--exclude "dangerous_*"
|
|
103
|
-
```
|
|
100
|
+
Claude Code uses `claude mcp add` instead of JSON config:
|
|
104
101
|
|
|
105
|
-
|
|
102
|
+
```bash
|
|
103
|
+
# Local server (two -- separators: first for Claude, second for mcp-filter)
|
|
104
|
+
claude mcp add playwright-safe -- \
|
|
105
|
+
npx mcp-filter \
|
|
106
|
+
--exclude "browser_close" \
|
|
107
|
+
--exclude "browser_evaluate" \
|
|
108
|
+
--include "browser_*" \
|
|
109
|
+
-- npx @playwright/mcp@latest
|
|
106
110
|
|
|
111
|
+
# Remote HTTP server (no second --)
|
|
112
|
+
claude mcp add stripe-safe -- \
|
|
113
|
+
npx mcp-filter \
|
|
114
|
+
--exclude "create_refund" \
|
|
115
|
+
--exclude "delete_*" \
|
|
116
|
+
--upstream-url https://mcp.stripe.com
|
|
107
117
|
```
|
|
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
118
|
|
|
119
|
-
|
|
119
|
+
First `--` separates Claude's options from mcp-filter. Second `--` separates mcp-filter's options from the upstream command.
|
|
120
120
|
|
|
121
|
-
|
|
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
|
|
121
|
+
</details>
|
|
129
122
|
|
|
130
|
-
|
|
131
|
-
|------|-------------|
|
|
132
|
-
| `--help` | Show help message |
|
|
133
|
-
| `--version` | Show version number |
|
|
123
|
+
## How Filtering Works
|
|
134
124
|
|
|
135
|
-
|
|
125
|
+
mcp-filter supports three filtering modes:
|
|
136
126
|
|
|
137
|
-
|
|
127
|
+
**Exclude mode** blocks specific tools and allows everything else. Use `--exclude` when you trust most tools but want to remove a few dangerous ones: `--exclude "delete_*"` blocks all delete operations.
|
|
138
128
|
|
|
139
|
-
|
|
129
|
+
**Include mode** (whitelist) allows only what you specify and blocks everything else. Use `--include` when you want a tight perimeter: `--include "pull_request_*"` passes through only PR tools. New tools added upstream are automatically blocked.
|
|
140
130
|
|
|
141
|
-
|
|
131
|
+
**Combined mode** uses rsync-style ordering — patterns are evaluated in the order you write them, and the first match wins. This lets you create exceptions within a category:
|
|
142
132
|
|
|
143
|
-
```bash
|
|
144
|
-
npx mcp-filter --exclude "browser_close" --exclude "browser_evaluate" -- npx @playwright/mcp
|
|
145
133
|
```
|
|
146
|
-
|
|
147
|
-
### Include Mode (Whitelist)
|
|
148
|
-
|
|
149
|
-
Allow only specified items, block everything else:
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
npx mcp-filter --include "browser_navigate" --include "browser_screenshot" -- npx @playwright/mcp
|
|
134
|
+
--exclude "merge_pull_request" --include "pull_request_*"
|
|
153
135
|
```
|
|
154
136
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
Patterns are evaluated **in order** — first match wins. This lets you combine `--include` and `--exclude` for fine-grained control:
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
# Exclude specific tools, then include the rest of the category
|
|
161
|
-
npx mcp-filter \
|
|
162
|
-
--exclude "browser_close" \
|
|
163
|
-
--exclude "browser_evaluate" \
|
|
164
|
-
--include "browser_*" \
|
|
165
|
-
-- npx @playwright/mcp
|
|
166
|
-
|
|
167
|
-
# Evaluation:
|
|
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
|
-
```
|
|
137
|
+
Here, `merge_pull_request` hits the exclude rule first, so it's blocked. Other `pull_request_*` tools match the include rule and pass through. Anything that doesn't match any pattern is excluded (because `--include` exists).
|
|
174
138
|
|
|
175
|
-
|
|
139
|
+
Reversing the order would break this: `--include "pull_request_*" --exclude "merge_pull_request"` — now `merge_pull_request` matches `pull_request_*` first and gets included.
|
|
176
140
|
|
|
177
|
-
|
|
141
|
+
<details>
|
|
142
|
+
<summary>Pattern syntax and default behavior</summary>
|
|
178
143
|
|
|
179
144
|
Patterns use glob syntax via [minimatch](https://github.com/isaacs/minimatch):
|
|
180
145
|
|
|
@@ -186,7 +151,7 @@ Patterns use glob syntax via [minimatch](https://github.com/isaacs/minimatch):
|
|
|
186
151
|
| `exact_name` | Exact match only |
|
|
187
152
|
| `*` | Everything |
|
|
188
153
|
|
|
189
|
-
|
|
154
|
+
Default behavior for unmatched items:
|
|
190
155
|
|
|
191
156
|
| Configuration | Unmatched items are... |
|
|
192
157
|
|---------------|------------------------|
|
|
@@ -195,255 +160,146 @@ Patterns use glob syntax via [minimatch](https://github.com/isaacs/minimatch):
|
|
|
195
160
|
| `--include` only | Excluded (whitelist mode) |
|
|
196
161
|
| Mixed | Excluded if any `--include` exists |
|
|
197
162
|
|
|
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
|
|
203
|
-
|
|
204
|
-
| Operation | Behavior |
|
|
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
|
|
163
|
+
</details>
|
|
280
164
|
|
|
281
|
-
|
|
282
|
-
claude mcp add --scope user playwright-safe -- \
|
|
283
|
-
npx mcp-filter --include "browser_*" -- npx @playwright/mcp@latest
|
|
284
|
-
```
|
|
165
|
+
## Real-World Examples
|
|
285
166
|
|
|
286
|
-
|
|
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.
|
|
167
|
+
The [GitHub MCP Server](https://github.com/github/github-mcp-server) exposes 79 tools across 19 toolsets. Here's how different agents can get exactly the slice they need.
|
|
297
168
|
|
|
298
169
|
<details>
|
|
299
|
-
<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
|
-
```
|
|
170
|
+
<summary>PR review agent — whitelist (79 → ~10 tools)</summary>
|
|
325
171
|
|
|
326
|
-
|
|
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`:
|
|
172
|
+
A code review agent only needs PRs, issues, file contents, and search. Everything else — gists, stars, notifications, security advisories — is noise.
|
|
339
173
|
|
|
340
174
|
```json
|
|
341
175
|
{
|
|
342
176
|
"mcpServers": {
|
|
343
|
-
"
|
|
177
|
+
"github-pr-review": {
|
|
344
178
|
"command": "npx",
|
|
345
179
|
"args": [
|
|
346
180
|
"mcp-filter",
|
|
347
|
-
"--
|
|
348
|
-
"--
|
|
349
|
-
"--include", "
|
|
181
|
+
"--include", "pull_request_*",
|
|
182
|
+
"--include", "issue_*",
|
|
183
|
+
"--include", "get_file_contents",
|
|
184
|
+
"--include", "list_commits",
|
|
185
|
+
"--include", "search_code",
|
|
350
186
|
"--",
|
|
351
|
-
"
|
|
352
|
-
]
|
|
187
|
+
"github-mcp-server", "stdio"
|
|
188
|
+
],
|
|
189
|
+
"env": {
|
|
190
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>"
|
|
191
|
+
}
|
|
353
192
|
}
|
|
354
193
|
}
|
|
355
194
|
}
|
|
356
195
|
```
|
|
357
196
|
|
|
197
|
+
When GitHub adds new tools tomorrow, they won't leak through — only the patterns above are visible to the agent.
|
|
198
|
+
|
|
199
|
+
</details>
|
|
200
|
+
|
|
358
201
|
<details>
|
|
359
|
-
<summary>
|
|
202
|
+
<summary>Read-only agent — exclude mutations</summary>
|
|
360
203
|
|
|
361
|
-
|
|
204
|
+
An analytics agent that collects data for reports shouldn't be able to change anything. Exclude all write operations:
|
|
362
205
|
|
|
363
206
|
```json
|
|
364
207
|
{
|
|
365
208
|
"mcpServers": {
|
|
366
|
-
"
|
|
209
|
+
"github-readonly": {
|
|
367
210
|
"command": "npx",
|
|
368
211
|
"args": [
|
|
369
212
|
"mcp-filter",
|
|
370
|
-
"--
|
|
371
|
-
"--
|
|
372
|
-
"--
|
|
213
|
+
"--exclude", "create_*",
|
|
214
|
+
"--exclude", "update_*",
|
|
215
|
+
"--exclude", "delete_*",
|
|
216
|
+
"--exclude", "push_*",
|
|
217
|
+
"--exclude", "merge_*",
|
|
218
|
+
"--exclude", "fork_*",
|
|
219
|
+
"--exclude", "*_write",
|
|
373
220
|
"--",
|
|
374
|
-
"
|
|
375
|
-
]
|
|
221
|
+
"github-mcp-server", "stdio"
|
|
222
|
+
],
|
|
223
|
+
"env": {
|
|
224
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>"
|
|
225
|
+
}
|
|
376
226
|
}
|
|
377
227
|
}
|
|
378
228
|
}
|
|
379
229
|
```
|
|
380
230
|
|
|
381
|
-
|
|
231
|
+
The agent can read anything but can't modify anything.
|
|
232
|
+
|
|
233
|
+
</details>
|
|
234
|
+
|
|
235
|
+
<details>
|
|
236
|
+
<summary>PR tools without merge — rsync-style exceptions</summary>
|
|
237
|
+
|
|
238
|
+
Allow all PR tools except the ability to merge. First match wins:
|
|
382
239
|
|
|
383
240
|
```json
|
|
384
241
|
{
|
|
385
242
|
"mcpServers": {
|
|
386
|
-
"
|
|
243
|
+
"github-pr-safe": {
|
|
387
244
|
"command": "npx",
|
|
388
245
|
"args": [
|
|
389
246
|
"mcp-filter",
|
|
390
|
-
"--exclude", "
|
|
391
|
-
"--
|
|
392
|
-
"--
|
|
393
|
-
|
|
247
|
+
"--exclude", "merge_pull_request",
|
|
248
|
+
"--include", "pull_request_*",
|
|
249
|
+
"--include", "list_pull_requests",
|
|
250
|
+
"--include", "search_pull_requests",
|
|
251
|
+
"--",
|
|
252
|
+
"github-mcp-server", "stdio"
|
|
253
|
+
],
|
|
254
|
+
"env": {
|
|
255
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>"
|
|
256
|
+
}
|
|
394
257
|
}
|
|
395
258
|
}
|
|
396
259
|
}
|
|
397
260
|
```
|
|
398
261
|
|
|
399
|
-
|
|
262
|
+
`merge_pull_request` hits the `--exclude` first and gets blocked. The remaining PR tools match `--include` and pass through.
|
|
400
263
|
|
|
401
|
-
|
|
264
|
+
</details>
|
|
402
265
|
|
|
403
|
-
|
|
266
|
+
## Options
|
|
404
267
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
268
|
+
| Option | Description |
|
|
269
|
+
|--------|-------------|
|
|
270
|
+
| `--exclude <pattern>` | Exclude items matching glob pattern (repeatable) |
|
|
271
|
+
| `--include <pattern>` | Include only items matching glob pattern (repeatable) |
|
|
272
|
+
| `--upstream-url <url>` | Connect to remote HTTP/SSE server (mutually exclusive with `--`) |
|
|
273
|
+
| `--transport <type>` | Transport type: `stdio`, `http`, `sse` (auto-detected) |
|
|
274
|
+
| `--authorization <value>` | Set Authorization header (e.g. `"Bearer token"`, HTTP/SSE only) |
|
|
275
|
+
| `--header <header>` | HTTP header as `"Key: Value"` (repeatable, HTTP/SSE only) |
|
|
276
|
+
| `--` | Separates mcp-filter options from upstream command (stdio only) |
|
|
411
277
|
|
|
412
|
-
|
|
278
|
+
Transport is auto-detected: `--upstream-url` selects HTTP, `-- <command>` selects stdio.
|
|
413
279
|
|
|
414
|
-
|
|
280
|
+
<details>
|
|
281
|
+
<summary>Common mistakes</summary>
|
|
415
282
|
|
|
416
|
-
|
|
283
|
+
**JSON args must be separate strings.** In JSON configs, each argument must be its own array element:
|
|
417
284
|
|
|
418
|
-
|
|
419
|
-
|
|
285
|
+
```jsonc
|
|
286
|
+
// WRONG
|
|
420
287
|
"args": ["mcp-filter", "--include browser_*", "--", "npx", "server"]
|
|
421
|
-
```
|
|
422
288
|
|
|
423
|
-
|
|
424
|
-
```json
|
|
289
|
+
// CORRECT
|
|
425
290
|
"args": ["mcp-filter", "--include", "browser_*", "--", "npx", "server"]
|
|
426
291
|
```
|
|
427
292
|
|
|
428
293
|
mcp-filter detects this mistake and shows a corrective error message.
|
|
429
294
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
Put `--exclude` patterns **before** `--include` to create exceptions. First match wins.
|
|
433
|
-
|
|
434
|
-
```bash
|
|
435
|
-
# CORRECT: exclude first, then include the rest
|
|
436
|
-
--exclude "browser_close" --include "browser_*"
|
|
437
|
-
# Result: browser_close blocked, other browser_* allowed
|
|
295
|
+
**Pattern order matters.** Put `--exclude` before `--include` to create exceptions. First match wins:
|
|
438
296
|
|
|
439
|
-
|
|
440
|
-
--
|
|
441
|
-
|
|
297
|
+
```
|
|
298
|
+
--exclude "browser_close" --include "browser_*" (browser_close blocked)
|
|
299
|
+
--include "browser_*" --exclude "browser_close" (browser_close allowed!)
|
|
442
300
|
```
|
|
443
301
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
When using `claude mcp add`, the first `--` separates Claude's options from the mcp-filter command. The second `--` separates mcp-filter's options from the upstream server command:
|
|
302
|
+
**Two `--` in Claude Code.** First `--` separates Claude's options. Second `--` separates mcp-filter's options from the upstream command:
|
|
447
303
|
|
|
448
304
|
```bash
|
|
449
305
|
claude mcp add my-server -- npx mcp-filter --exclude "dangerous_*" -- npx upstream-server
|
|
@@ -451,32 +307,21 @@ claude mcp add my-server -- npx mcp-filter --exclude "dangerous_*" -- npx upstre
|
|
|
451
307
|
# Claude's -- mcp-filter's --
|
|
452
308
|
```
|
|
453
309
|
|
|
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.
|
|
310
|
+
</details>
|
|
468
311
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
pnpm test:coverage # With coverage report
|
|
472
|
-
pnpm test tests/unit/ # Unit tests only (fast)
|
|
473
|
-
```
|
|
312
|
+
<details>
|
|
313
|
+
<summary>Transports</summary>
|
|
474
314
|
|
|
475
|
-
|
|
315
|
+
| Transport | Flag | Use Case | Status |
|
|
316
|
+
|-----------|------|----------|--------|
|
|
317
|
+
| **Stdio** | `-- <command>` | Local servers spawned as subprocesses | Stable |
|
|
318
|
+
| **HTTP** | `--upstream-url <url>` | Remote servers via Streamable HTTP | Stable |
|
|
319
|
+
| **SSE** | `--transport sse --upstream-url <url>` | Legacy remote servers via Server-Sent Events | Deprecated |
|
|
476
320
|
|
|
477
|
-
|
|
321
|
+
</details>
|
|
478
322
|
|
|
479
|
-
|
|
323
|
+
<details>
|
|
324
|
+
<summary>Development</summary>
|
|
480
325
|
|
|
481
326
|
```bash
|
|
482
327
|
git clone https://github.com/baranovxyz/mcp-filter.git
|
|
@@ -486,13 +331,17 @@ pnpm run build
|
|
|
486
331
|
pnpm test
|
|
487
332
|
```
|
|
488
333
|
|
|
489
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.
|
|
334
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines and [TESTING.md](TESTING.md) for the testing guide.
|
|
335
|
+
|
|
336
|
+
</details>
|
|
490
337
|
|
|
491
338
|
## Links
|
|
492
339
|
|
|
493
340
|
- [npm package](https://www.npmjs.com/package/mcp-filter)
|
|
494
341
|
- [GitHub repository](https://github.com/baranovxyz/mcp-filter)
|
|
495
342
|
- [Changelog](CHANGELOG.md)
|
|
343
|
+
- [Spec conformance](docs/spec-conformance.md)
|
|
344
|
+
- [Architecture decisions](docs/architecture-decisions.md)
|
|
496
345
|
- [MCP specification](https://modelcontextprotocol.io)
|
|
497
346
|
|
|
498
347
|
## 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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"}
|