mcp-tool-filter
A generic MCP proxy that filters which tools are exposed from a remote MCP server, reducing context window token usage by only loading the tools you actually need.
README
mcp-tool-filter
A generic MCP proxy that filters which tools are exposed from a remote MCP server. Reduces context window token usage by only loading the tools you actually need.
The Problem
Remote MCP servers (Linear, GitHub, Notion, etc.) expose all their tools to your AI coding assistant. A single server can blast 20,000+ tokens of tool definitions into your context window — even if you only use 5 of them. That's 10% of your context gone before you type a single message.
The Solution
mcp-tool-filter sits between your AI client and the remote MCP server as a lightweight stdio proxy. It fetches all tools from upstream but only exposes the ones you whitelist. Everything else is filtered out, saving thousands of tokens per conversation.
┌─────────────┐ stdio ┌──────────────────┐ HTTP ┌──────────────┐
│ Claude Code │ ◄────────────► │ mcp-tool-filter │ ◄──────────► │ Remote MCP │
│ (6 tools) │ │ (filters tools) │ │ (29 tools) │
└─────────────┘ └──────────────────┘ └──────────────┘
Quick Start
Interactive Setup (Recommended)
npx mcp-tool-filter add
This walks you through:
- Enter the upstream MCP server URL
- Confirm the server name
- Authenticate (if needed — opens browser automatically)
- Select which tools to expose from the full list
- Choose where to save the config
Manual Setup
Add to your .mcp.json:
{
"mcpServers": {
"linear": {
"command": "npx",
"args": [
"-y", "mcp-tool-filter",
"--url", "https://mcp.linear.app/mcp",
"--tools", "get_issue", "update_issue", "create_issue"
]
}
}
}
Or with the Claude Code CLI:
claude mcp add linear -- npx -y mcp-tool-filter \
--url https://mcp.linear.app/mcp \
--tools get_issue update_issue create_issue
Usage
mcp-tool-filter --url <upstream-mcp-url> [--name <server-name>] [--tools <tool1> <tool2> ...]
Options
| Flag | Required | Description |
|---|---|---|
--url |
Yes | The upstream MCP server URL |
--tools |
No | Space-separated list of tool names to expose. If omitted, all tools are passed through |
--name |
No | Server name for token storage. Auto-derived from URL if not provided |
Updating Tool Selection
Need to add or remove tools from an existing server? Run update with the server name from your .mcp.json:
npx mcp-tool-filter update linear
This will:
- Read the existing config from your
.mcp.json - Connect to the upstream server
- Show all available tools with your current selection pre-checked
- Update the config with your new selection
Pass-through Mode
Omit --tools to proxy all tools without filtering (useful if you only need the OAuth/auth handling):
{
"mcpServers": {
"linear": {
"command": "npx",
"args": ["-y", "mcp-tool-filter", "--url", "https://mcp.linear.app/mcp"]
}
}
}
Authentication
mcp-tool-filter handles OAuth automatically:
- First run: The upstream server returns 401, the proxy opens your browser for OAuth login, waits for the callback, and saves the tokens
- Subsequent runs: Stored tokens are reused automatically — no browser needed
Tokens are persisted in ~/.mcp-tool-filter/<server-name>.json.
To re-authenticate, delete the token file:
rm ~/.mcp-tool-filter/linear.json
Servers Without OAuth
If the upstream server doesn't require authentication, the proxy connects directly — no OAuth flow needed.
Examples
Linear (6 tools instead of 29)
{
"mcpServers": {
"linear": {
"command": "npx",
"args": [
"-y", "mcp-tool-filter",
"--url", "https://mcp.linear.app/mcp",
"--tools", "get_issue", "update_issue", "create_issue",
"list_issues", "list_issue_labels", "get_project"
]
}
}
}
Multiple Filtered Servers
{
"mcpServers": {
"linear": {
"command": "npx",
"args": [
"-y", "mcp-tool-filter",
"--url", "https://mcp.linear.app/mcp",
"--tools", "get_issue", "update_issue"
]
},
"another-server": {
"command": "npx",
"args": [
"-y", "mcp-tool-filter",
"--url", "https://another-mcp-server.com/mcp",
"--tools", "read_document", "search"
]
}
}
}
How It Works
- Starts as a stdio MCP server (what your AI client connects to)
- Connects to the upstream server via Streamable HTTP (with SSE fallback)
- On
tools/list— fetches all tools from upstream, returns only the allowed ones - On
tools/call— forwards the call to upstream, returns the response unchanged - Handles OAuth automatically with token persistence
Transport Support
| Transport | Status |
|---|---|
| Streamable HTTP | Supported (preferred) |
| Server-Sent Events (SSE) | Supported (fallback) |
| stdio upstream | Not supported (use for local servers directly) |
Compatibility
Works with any MCP client that supports stdio servers:
- Claude Code
- Claude Desktop
- Cursor
- Windsurf
- Any MCP-compatible client
Development
git clone https://github.com/kais-radwan/mcp-tool-filter.git
cd mcp-tool-filter
npm install
npm run build
Test locally:
{
"mcpServers": {
"linear": {
"command": "node",
"args": [
"/path/to/mcp-tool-filter/dist/index.js",
"--url", "https://mcp.linear.app/mcp",
"--tools", "get_issue"
]
}
}
}
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.