This release is a pre-release and may not be stable for production use.
shutup-mcp
Experimental MCP tool-list filtering proxy for large tool catalogs.
shutup-mcp sits between an MCP client and one or more MCP servers. It aggregates tool definitions and exposes only the top-k tools that match the current intent.
This repository is an alpha implementation seed. It is useful for experimenting with tool-list compression, but it is not yet a full production MCP gateway.
What It Does
- Reads a Claude Desktop-style MCP config.
- Discovers configured MCP servers.
- Fetches and prefixes upstream tools.
- Builds a hybrid retrieval index over tool names and descriptions.
- Filters
tools/listresults using:- explicit CLI intent;
- a runtime
shutup__set_intenttool; - fallback behavior when no intent is known.
- Routes
tools/callto the correct upstream server. - Supports local embedding backends:
sentence-transformers;ollama.
What It Does Not Yet Do
This alpha does not yet provide:
- full MCP request proxying for every capability;
- persistent upstream sessions for every server;
- guaranteed client-side dynamic intent detection across all MCP clients;
- production authentication or sandboxing;
- benchmark-backed token or latency claims.
Earlier README versions included strong reduction metrics. Those are removed until reproducible benchmarks are added.
Install
pip install shutup-mcp
For local development:
pip install -e ".[dev]"
CLI Usage
One-shot tool filtering
shutup \
--config ~/Library/Application\ Support/Claude/claude_desktop_config.json \
--intent "read and write local files" \
--top-k 5
This prints a JSON array of filtered tool definitions.
Run as MCP proxy
shutup \
--config ~/Library/Application\ Support/Claude/claude_desktop_config.json \
--intent "work with GitHub issues" \
--serve \
--top-k 5
If --intent is supplied, tools/list returns only top-k tools matching that intent.
If no intent is supplied, the proxy exposes a small control tool:
shutup__set_intent
Calling this tool updates the current intent, after which tools/list can be filtered.
Claude Desktop Configuration
Example:
{
"mcpServers": {
"shutup": {
"command": "shutup",
"args": [
"--config",
"/absolute/path/to/claude_desktop_config.json",
"--serve",
"--intent",
"work with GitHub issues",
"--top-k",
"5"
]
}
}
}
Example MCP Server Config
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}
Embedder Options
| Backend | Description | Privacy | Setup |
|---|---|---|---|
sentence-transformers |
Local model such as all-MiniLM-L6-v2 |
Local after download | Downloads model on first use |
ollama |
Ollama embedding model | Local | Requires Ollama running |
fake |
Deterministic lightweight test embedder | Local | For tests and CI only |
Command Options
shutup --config PATH [--intent TEXT] [--top-k K] [--embedder BACKEND] [--serve]
| Option | Description | Default |
|---|---|---|
--config |
Path to Claude Desktop MCP config | required |
--intent |
Current user task intent | none |
--top-k |
Number of tools to expose | 5 |
--embedder |
sentence-transformers, ollama, or fake |
sentence-transformers |
--serve |
Run as an MCP stdio proxy | false |
Runtime Intent Tool
The proxy exposes a control tool:
shutup__set_intent
Input:
{
"intent": "create and triage GitHub issues"
}
Output:
{
"ok": true,
"intent": "create and triage GitHub issues"
}
This provides an explicit client-controlled intent update path.
Testing
pip install -e ".[dev]"
pytest -q
Tests use the lightweight fake embedder and do not download embedding models.
Security Notes
shutup-mcp reads and launches MCP servers from a config file. Treat that config file as executable configuration.
Do not use untrusted server configs.
This project filters tool visibility; it does not enforce policy, authorization, sandboxing, or data-loss prevention.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shutup_mcp-0.3.0a1.tar.gz.
File metadata
- Download URL: shutup_mcp-0.3.0a1.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e836e4b58ec3f15f0cbe73ee927ab0ca92d7d0e19c8700430d6599e210b7ee4
|
|
| MD5 |
035b7d8d03409809e2f8839efc160e10
|
|
| BLAKE2b-256 |
13bee48b02bac578c49e2580b381e8e44218c5e3e1e7add9cdf26e5042577516
|
Provenance
The following attestation bundles were made for shutup_mcp-0.3.0a1.tar.gz:
Publisher:
release.yml on hjs-spec/shutup-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shutup_mcp-0.3.0a1.tar.gz -
Subject digest:
5e836e4b58ec3f15f0cbe73ee927ab0ca92d7d0e19c8700430d6599e210b7ee4 - Sigstore transparency entry: 2814063634
- Sigstore integration time:
-
Permalink:
hjs-spec/shutup-mcp@131f6df9af39b3a29ba69f4fba9fc3a8ba7a1bb3 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/hjs-spec
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@131f6df9af39b3a29ba69f4fba9fc3a8ba7a1bb3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file shutup_mcp-0.3.0a1-py3-none-any.whl.
File metadata
- Download URL: shutup_mcp-0.3.0a1-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25e13f55b699ede08a702cc88d0c9cef5a03a0b88edf0067a8ee3754835f968e
|
|
| MD5 |
b3e7e9d095889579c94a96df115733fc
|
|
| BLAKE2b-256 |
0660e50ad330d294e2c9999d181ee93b6e2c6b2c93f7b3363cfaaeee61fb10e3
|
Provenance
The following attestation bundles were made for shutup_mcp-0.3.0a1-py3-none-any.whl:
Publisher:
release.yml on hjs-spec/shutup-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shutup_mcp-0.3.0a1-py3-none-any.whl -
Subject digest:
25e13f55b699ede08a702cc88d0c9cef5a03a0b88edf0067a8ee3754835f968e - Sigstore transparency entry: 2814063644
- Sigstore integration time:
-
Permalink:
hjs-spec/shutup-mcp@131f6df9af39b3a29ba69f4fba9fc3a8ba7a1bb3 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/hjs-spec
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@131f6df9af39b3a29ba69f4fba9fc3a8ba7a1bb3 -
Trigger Event:
push
-
Statement type: