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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。