mcp-filter 0.1.0 → 0.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
@@ -36,12 +36,14 @@ npx mcp-filter --exclude "debug*" -- node my-mcp-server.js
36
36
 
37
37
  ## Options
38
38
 
39
- - `--exclude <pattern>` - Exclude tools/resources/prompts matching this pattern (like rsync --exclude)
40
- - `--include <pattern>` - Include ONLY tools/resources/prompts matching this pattern (like rsync --include)
39
+ - `--exclude <pattern>` - Exclude tools/resources/prompts matching this pattern
40
+ - `--include <pattern>` - Include ONLY tools/resources/prompts matching this pattern (whitelist mode)
41
41
  - `--` - Separates filter options from upstream server command
42
42
 
43
43
  Both options can be specified multiple times and combined together.
44
44
 
45
+ **Filtering style:** rsync-style evaluation where patterns are evaluated in the order specified, and first match wins.
46
+
45
47
  ## Filtering Modes
46
48
 
47
49
  ### Exclude Mode (--exclude only)
@@ -64,30 +66,72 @@ npx mcp-filter --include "browser_navigate" --include "browser_screenshot" -- np
64
66
 
65
67
  ### Combination Mode (--include + --exclude)
66
68
 
67
- Include patterns with exceptions. **Exclude patterns always take precedence** (same as rsync):
69
+ **Rsync-style filtering**: patterns evaluated in order, first match wins.
68
70
 
69
71
  ```bash
70
- # Allow all browser tools EXCEPT close and evaluate
71
- npx mcp-filter --include "browser_*" --exclude "browser_close" --exclude "browser_evaluate" -- npx @playwright/mcp
72
+ # Example 1: Include first, then exclude
73
+ npx mcp-filter --include "browser_*" --exclude "browser_close" -- npx @playwright/mcp
74
+ # Result: All browser_* tools are INCLUDED (browser_* matched first)
75
+ # browser_close is also included because it matches browser_* first
76
+
77
+ # Example 2: Exclude first, then include (different result!)
78
+ npx mcp-filter --exclude "browser_close" --include "browser_*" -- npx @playwright/mcp
79
+ # Result: browser_close is EXCLUDED (matched exclude first)
80
+ # Other browser_* tools are included
81
+
82
+ # Example 3: More specific patterns first
83
+ npx mcp-filter --exclude "browser_close" --exclude "browser_evaluate" --include "browser_*" -- npx @playwright/mcp
84
+ # Result: browser_close and browser_evaluate excluded (matched first)
85
+ # All other browser_* tools included
72
86
  ```
73
87
 
74
- **Precedence Rule:** `--exclude` > `--include` > default allow
75
-
76
- When a tool matches both `--include` and `--exclude`, it will be **excluded** (rsync-style behavior).
88
+ **Key principle**: Order matters! The first pattern that matches determines if the item is included or excluded.
77
89
 
78
90
  ## Pattern Examples
79
91
 
92
+ Patterns use glob syntax (via minimatch):
93
+
80
94
  - `playwright*` - Match all items starting with "playwright"
81
95
  - `*_admin` - Match all items ending with "\_admin"
82
96
  - `test_*_debug` - Match items with pattern in middle
83
97
  - `exact_name` - Match exact name
84
98
  - `browser_*` - Match all browser-related tools
99
+ - `*` - Match everything
100
+
101
+ ## Rsync-Style Filtering
102
+
103
+ mcp-filter uses rsync-style pattern evaluation:
104
+
105
+ 1. **Order matters**: Patterns are evaluated in the order you specify them
106
+ 2. **First match wins**: Once a pattern matches, that determines the outcome
107
+ 3. **Default behavior**:
108
+ - If no patterns specified: allow everything (passthrough)
109
+ - If only `--include`: items not matching any include are excluded (whitelist mode)
110
+ - If only `--exclude`: items not matching any exclude are included
111
+ - If mixed: items not matching any pattern use whitelist mode if includes exist
112
+
113
+ **Example workflow**:
114
+
115
+ ```bash
116
+ # Put more specific patterns first
117
+ npx mcp-filter \
118
+ --exclude "browser_close" \
119
+ --exclude "browser_evaluate" \
120
+ --include "browser_*" \
121
+ -- npx @playwright/mcp
122
+
123
+ # This works because:
124
+ # 1. browser_close matches --exclude "browser_close" first → excluded
125
+ # 2. browser_evaluate matches --exclude "browser_evaluate" first → excluded
126
+ # 3. browser_navigate matches --include "browser_*" → included
127
+ # 4. other_tool doesn't match any pattern, but --include exists → excluded (whitelist mode)
128
+ ```
85
129
 
86
130
  ## Using with Cursor IDE
87
131
 
88
132
  Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
89
133
 
90
- ### Example 1: Exclude dangerous tools
134
+ ### Example 1: Exclude specific dangerous tools
91
135
 
92
136
  ```json
93
137
  {
@@ -133,7 +177,7 @@ Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
133
177
  }
134
178
  ```
135
179
 
136
- ### Example 3: Include category with exceptions
180
+ ### Example 3: Include category with exceptions (rsync-style)
137
181
 
138
182
  ```json
139
183
  {
@@ -142,10 +186,12 @@ Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
142
186
  "command": "npx",
143
187
  "args": [
144
188
  "mcp-filter",
145
- "--include",
146
- "browser_*",
147
189
  "--exclude",
148
190
  "browser_close",
191
+ "--exclude",
192
+ "browser_evaluate",
193
+ "--include",
194
+ "browser_*",
149
195
  "--",
150
196
  "npx",
151
197
  "@playwright/mcp@latest"
@@ -155,6 +201,8 @@ Add to your `.cursor/mcp.json` or `~/.cursor/mcp.json`:
155
201
  }
156
202
  ```
157
203
 
204
+ Note: Exclude patterns come first to match before the broader include pattern.
205
+
158
206
  After adding the configuration, restart Cursor completely to apply the changes.
159
207
 
160
208
  ## How It Works
@@ -180,7 +228,7 @@ pnpm run build
180
228
  pnpm test
181
229
 
182
230
  # Test locally
183
- ./dist/index.js --disable "playwright*" -- npx tsx test-server.ts
231
+ ./dist/index.js --exclude "playwright*" -- npx tsx test-server.ts
184
232
  ```
185
233
 
186
234
  ## Links
package/dist/cli.d.ts CHANGED
@@ -1,6 +1,9 @@
1
+ export interface FilterPattern {
2
+ type: "include" | "exclude";
3
+ pattern: string;
4
+ }
1
5
  export interface FilterConfig {
2
- excludePatterns: string[];
3
- includePatterns: string[];
6
+ patterns: FilterPattern[];
4
7
  upstreamCommand: string[];
5
8
  }
6
9
  export declare function parseArgs(args: string[]): FilterConfig;
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAoDtD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAkDtD"}
package/dist/cli.js CHANGED
@@ -1,6 +1,5 @@
1
1
  export function parseArgs(args) {
2
- const excludePatterns = [];
3
- const includePatterns = [];
2
+ const patterns = [];
4
3
  const upstreamCommand = [];
5
4
  let inUpstreamCommand = false;
6
5
  for (let i = 0; i < args.length; i++) {
@@ -18,7 +17,7 @@ export function parseArgs(args) {
18
17
  if (!pattern) {
19
18
  throw new Error("--exclude requires a pattern argument");
20
19
  }
21
- excludePatterns.push(pattern);
20
+ patterns.push({ type: "exclude", pattern });
22
21
  continue;
23
22
  }
24
23
  if (arg === "--include") {
@@ -26,7 +25,7 @@ export function parseArgs(args) {
26
25
  if (!pattern) {
27
26
  throw new Error("--include requires a pattern argument");
28
27
  }
29
- includePatterns.push(pattern);
28
+ patterns.push({ type: "include", pattern });
30
29
  continue;
31
30
  }
32
31
  throw new Error(`Unknown argument: ${arg}`);
@@ -35,8 +34,7 @@ export function parseArgs(args) {
35
34
  throw new Error("No upstream command specified. Use -- to separate filter args from upstream command");
36
35
  }
37
36
  return {
38
- excludePatterns,
39
- includePatterns,
37
+ patterns,
40
38
  upstreamCommand,
41
39
  };
42
40
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,iBAAiB,EAAE,CAAC;YACtB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,iBAAiB,GAAG,IAAI,CAAC;YACzB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,eAAe;QACf,eAAe;QACf,eAAe;KAChB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,iBAAiB,EAAE,CAAC;YACtB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,iBAAiB,GAAG,IAAI,CAAC;YACzB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ;QACR,eAAe;KAChB,CAAC;AACJ,CAAC"}
package/dist/filter.d.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import { FilterPattern } from "./cli.js";
1
2
  export declare class Filter {
2
- private excludePatterns;
3
- private includePatterns;
4
- constructor(excludePatterns: string[], includePatterns?: string[]);
3
+ private patterns;
4
+ private hasIncludePatterns;
5
+ constructor(patterns: FilterPattern[]);
5
6
  shouldExclude(name: string): boolean;
6
7
  filterList<T extends {
7
8
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IAEf,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,eAAe;gBADf,eAAe,EAAE,MAAM,EAAE,EACzB,eAAe,GAAE,MAAM,EAAO;IAGxC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAmBpC,UAAU,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;CAGxD"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,MAAM;IAGL,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,kBAAkB,CAAU;gBAEhB,QAAQ,EAAE,aAAa,EAAE;IAI7C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAepC,UAAU,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;CAGxD"}
package/dist/filter.js CHANGED
@@ -1,24 +1,23 @@
1
1
  import { minimatch } from "minimatch";
2
2
  export class Filter {
3
- excludePatterns;
4
- includePatterns;
5
- constructor(excludePatterns, includePatterns = []) {
6
- this.excludePatterns = excludePatterns;
7
- this.includePatterns = includePatterns;
3
+ patterns;
4
+ hasIncludePatterns;
5
+ constructor(patterns) {
6
+ this.patterns = patterns;
7
+ this.hasIncludePatterns = patterns.some((p) => p.type === "include");
8
8
  }
9
9
  shouldExclude(name) {
10
- // Step 1: Check include patterns (if specified)
11
- if (this.includePatterns.length > 0) {
12
- const isIncluded = this.includePatterns.some((pattern) => minimatch(name, pattern));
13
- if (!isIncluded)
14
- return true; // Not included = excluded
10
+ // Evaluate patterns in order - first match wins (rsync-style)
11
+ for (const pattern of this.patterns) {
12
+ if (minimatch(name, pattern.pattern)) {
13
+ // First pattern that matches determines the outcome
14
+ return pattern.type === "exclude";
15
+ }
15
16
  }
16
- // Step 2: Check exclude patterns (explicit exclude always wins)
17
- const isExcluded = this.excludePatterns.some((pattern) => minimatch(name, pattern));
18
- if (isExcluded)
19
- return true;
20
- // Step 3: Default allow
21
- return false;
17
+ // No pattern matched - determine default behavior
18
+ // If there are include patterns, default is exclude (whitelist mode)
19
+ // Otherwise, default is include (allow all)
20
+ return this.hasIncludePatterns;
22
21
  }
23
22
  filterList(items) {
24
23
  return items.filter((item) => !this.shouldExclude(item.name));
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,OAAO,MAAM;IAEP;IACA;IAFV,YACU,eAAyB,EACzB,kBAA4B,EAAE;QAD9B,oBAAe,GAAf,eAAe,CAAU;QACzB,oBAAe,GAAf,eAAe,CAAe;IACrC,CAAC;IAEJ,aAAa,CAAC,IAAY;QACxB,gDAAgD;QAChD,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACvD,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CACzB,CAAC;YACF,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC,CAAC,0BAA0B;QAC1D,CAAC;QAED,gEAAgE;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACvD,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CACzB,CAAC;QACF,IAAI,UAAU;YAAE,OAAO,IAAI,CAAC;QAE5B,wBAAwB;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAA6B,KAAU;QAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;CACF"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,OAAO,MAAM;IAGG;IAFZ,kBAAkB,CAAU;IAEpC,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACvE,CAAC;IAED,aAAa,CAAC,IAAY;QACxB,8DAA8D;QAC9D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,oDAAoD;gBACpD,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;YACpC,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,qEAAqE;QACrE,4CAA4C;QAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,UAAU,CAA6B,KAAU;QAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -21,20 +21,21 @@ async function main() {
21
21
  console.error(' mcp-filter --include "browser_*" --exclude "browser_close" -- npx @playwright/mcp');
22
22
  process.exit(1);
23
23
  }
24
- console.error(`Starting MCP filter with ${config.excludePatterns.length + config.includePatterns.length} pattern(s)`);
25
- config.excludePatterns.forEach((p) => console.error(` Exclude: ${p}`));
26
- config.includePatterns.forEach((p) => console.error(` Include: ${p}`));
27
- if (config.includePatterns.length > 0 && config.excludePatterns.length > 0) {
28
- console.error("Warning: Using both --include and --exclude. Exclude patterns take precedence.");
24
+ console.error(`Starting MCP filter with ${config.patterns.length} pattern(s)`);
25
+ config.patterns.forEach((p) => console.error(` ${p.type === "include" ? "Include" : "Exclude"}: ${p.pattern}`));
26
+ const hasInclude = config.patterns.some((p) => p.type === "include");
27
+ const hasExclude = config.patterns.some((p) => p.type === "exclude");
28
+ if (hasInclude && hasExclude) {
29
+ console.error("Note: Using rsync-style filtering - patterns evaluated in order, first match wins.");
29
30
  }
30
31
  // Spawn upstream server
31
32
  const upstreamProcess = spawnUpstream(config.upstreamCommand);
32
33
  // Create filter
33
- const filter = new Filter(config.excludePatterns, config.includePatterns);
34
+ const filter = new Filter(config.patterns);
34
35
  // Create proxy server
35
36
  const proxy = new ProxyServer({
36
37
  name: "mcp-filter",
37
- version: "0.1.0",
38
+ version: "0.2.0",
38
39
  }, filter);
39
40
  // Connect client to upstream server via subprocess stdio
40
41
  const clientTransport = new StdioClientTransport({
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-filter",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server proxy to filter tools, resources, and prompts from upstream MCP servers",
5
5
  "type": "module",
6
6
  "bin": {