Back to search
D
40 /100

io.github.kaiser-data/kitsune-mcp

Author kaiser-data
Scanned 47d ago

Shape-shifting MCP hub — shapeshift() into 10,000+ servers at runtime. No restarts. 7 registries.

Versions

0.9.0scored
first seen May 19, 2026

Trust breakdown

PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 22

skill
annotations: none low

Load a Smithery skill into context. forget=True removes it.

forget bool qualified_name str
key
annotations: none low

Save an API key to .env for persistent use. e.g. key('EXA_API_KEY', 'sk-...')

value str env_var str
auto
annotations: none low

search → pick server → infer args → call. Use when you don't know which server to use. auto('what time in Tokyo') auto('list issues on acme/api', server_hint='github')

keys string task str arguments string tool_name str server_hint str
setup
annotations: none low

Gateway wizard and connection setup. setup() → detect competing servers, preview harvest setup(action="harvest") → extract API keys from other configs → ~/.kitsune/.env setup(action="absorb") → harvest + register servers for shapeshift() setup(action="exclusive") → absorb + rewrite config (backup saved first) setup(action="restore") → restore config from backup setup(project=True) → write .claude/mcp.json with only Kitsune (this project) setup(name="my-server") → connection wizard for a connected server (existing)

keep string name str action str confirm bool project bool
auth
annotations: none low

Check or set credentials. ALL_CAPS = env var; server-id = creds check or OAuth. auth('GITHUB_TOKEN', 'ghp_...') # save env var auth('GITHUB_TOKEN') # check if set auth('server-id') # show creds needed / run OAuth auth('server-id', 'logout') # revoke OAuth tokens

value str server_id_or_var str
onboard
annotations: none low

First-run wizard — show provider auth state + the fastest path to a working tool call. Run once at the start of a new session if `kitsune:status` shows you're in base form with nothing explored. Returns provider health + a curated list of zero-config servers you can shapeshift into immediately.

search
annotations: none low

Discover MCP servers across registries — the entry point to mounting. Returns a ranked list of server_ids with name, description, source, and credential-readiness status. Records discovered servers in session so status() can summarize them. Reports per-registry failures inline rather than failing the whole call. Use when: you need to find a server matching a capability before mounting. Avoid when: the server_id is already known — go straight to shapeshift() or inspect(). search('web search') # find candidates search('postgres', compare=True) # side-by-side token-cost table search('vector db', registry='smithery') registry: all|official|mcpregistry|glama|npm|smithery|pypi

limit int query string compare string registry str
inspect
annotations: none low

Show server tools, schemas, and required credentials. Auto-probes high/medium-trust sources for live tool schemas. Community sources (npm, github, glama-via-github) are gated — pass probe=True to install and probe them, or set KITSUNE_TRUST=community.

probe bool server_id str
compare
annotations: none low

Side-by-side token cost & creds for the top N candidates of a search. Probes ALL candidates in parallel. Use to pick a server before shapeshift(). probe=True overrides the community-trust gate for community sources.

limit int probe bool query str
status
annotations: none low

Show Kitsune runtime state: providers, current form, connections, token stats.

call
annotations: none low

Invoke a tool on an MCP server. Returns the tool's response as text. Routes through the warm pooled transport when a server is shapeshifted; otherwise spins up a transient transport for the given server_id. Records the call in session stats. Long responses (HTML, large outputs) are truncated with a continuation note. Use when: the tool name and target server are known. Avoid when: discovery is needed — auto() does search → pick → call in one step. call('get_current_time', arguments={'timezone': 'UTC'}) # after shapeshift call('list_directory', '@mcp/server-fs', {'path': '/tmp'}) # ad-hoc one-shot

config string arguments string server_id string tool_name str
run
annotations: none low

Run a tool from npm/pip. package: 'pkg-name' (npx) or 'uvx:pkg-name' (Python).

package str arguments string tool_name str
fetch
annotations: none low

Fetch a URL and return compressed content (~500 tokens vs ~25K raw HTML).

url str intent str
test
annotations: none low

Quality-score a server 0–100. level: 'basic' (schema checks) or 'full' (live calls).

level str server_id str
bench
annotations: none low

Benchmark tool latency — p50, p95, min, max ms. iterations: 1–20.

args string server_id str tool_name str iterations int
shapeshift
annotations: none low

Mount an MCP server's tools at runtime. Empty server_id unmounts. shapeshift('mcp-server-time') # mount (community sources cage by default) shapeshift('id', tools=['only_this']) # lean — mount only listed tools shapeshift('id', sandbox=False) # opt out of the default Docker cage shapeshift('id', sandbox=True) # force the cage (hard-fail if no Docker) shapeshift() # unmount + kill process sandbox: None (default) cages low-trust npm/PyPI/github sources in Docker when it's available (best-effort — runs uncaged with a nudge if not); True forces the cage; False opts out. source: auto|local|smithery|official. confirm=True for community sources.

ctx string keep bool tools string source str confirm bool sandbox string server_id str server_args string
shiftback
annotations: none low

Unmount current server. kill=False keeps process pooled. uninstall=True removes local package.

ctx Context kill bool uninstall bool
craft
annotations: none low

Register a custom tool backed by your HTTP endpoint — live immediately. POST=JSON body, GET=query params. shiftback() removes it.

ctx Context url str name str method str params dict headers string description str
connect
annotations: none low

Start a persistent server. command: server_id or shell cmd (e.g. 'uvx voice-mode'). name: alias for release().

name str command str timeout int inherit_stderr bool
release
annotations: none low

Kill a persistent connection by name.

name str
reload
annotations: none low

Reload a persistent connection after editing its code — the MCP REPL in one call. reload('dev') # release the stale process, start fresh code, remount live Replaces the manual release() + connect() + shapeshift() cycle and removes the "connect() handed back the old process" footgun (it always releases first). `name` is the alias you gave connect().

ctx string name str
prewarm
annotations: none low

Start a server's subprocess in the pool WITHOUT mounting its tools. prewarm('mcp-server-time') # spawn + pool, no tools in session shapeshift('mcp-server-time') # reuses the warm process — no npx/uvx delay For benchmarks and latency-sensitive sessions. confirm=True for community sources. Caging follows the same tri-state policy as shapeshift(): low-trust sources cage by default (sandbox=None) so a warm community process is never left uncaged then reused by a later call().

confirm bool sandbox string server_id str server_args string

Permissions 4

network Server uses network capabilities via: http, httpx, socket, urllib, websocket
medium
filesystem Server uses filesystem capabilities via: open(), os, pathlib, shutil, tempfile
low
shell Server uses shell capabilities via: child_process, spawn(), subprocess
high
env_vars Server uses env_vars capabilities via: os.environ, os.getenv(), process.env
low

Scan Findings 73

low
Tool 'skill' has no annotations annotation_checker · 100%
low
Tool 'key' has no annotations annotation_checker · 100%
low
Tool 'auto' has no annotations annotation_checker · 100%
low
Tool 'setup' has no annotations annotation_checker · 100%
low
Tool 'auth' has no annotations annotation_checker · 100%
low
Tool 'onboard' has no annotations annotation_checker · 100%
low
Tool 'search' has no annotations annotation_checker · 100%
low
Tool 'inspect' has no annotations annotation_checker · 100%
low
Tool 'compare' has no annotations annotation_checker · 100%
low
Tool 'status' has no annotations annotation_checker · 100%
low
Tool 'call' has no annotations annotation_checker · 100%
low
Tool 'run' has no annotations annotation_checker · 100%
low
Tool 'fetch' has no annotations annotation_checker · 100%
low
Tool 'test' has no annotations annotation_checker · 100%
low
Tool 'bench' has no annotations annotation_checker · 100%
low
Tool 'shapeshift' has no annotations annotation_checker · 100%
low
Tool 'shiftback' has no annotations annotation_checker · 100%
low
Tool 'craft' has no annotations annotation_checker · 100%
low
Tool 'connect' has no annotations annotation_checker · 100%
low
Tool 'release' has no annotations annotation_checker · 100%
low
Tool 'reload' has no annotations annotation_checker · 100%
low
Tool 'prewarm' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: python-dotenv@1.0.0 (GHSA-mf9w-mj56-hr94) dependency_analyzer · 95%
medium
Vulnerable dependency: python-dotenv@1.0.0 (PYSEC-2026-2270) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (GHSA-3qhf-m339-9g5v) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (GHSA-9h52-p55h-vw2f) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (GHSA-j975-95f5-7wqh) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (GHSA-jpw9-pfvf-9f58) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (GHSA-vj7q-gjh5-988w) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (PYSEC-2026-1616) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (PYSEC-2026-1617) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (PYSEC-2026-1618) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (PYSEC-2026-3482) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.0.0,<2 (PYSEC-2026-3483) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.10,<2.14 (GHSA-5jqp-qgf6-3pvh) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.10,<2.14 (GHSA-mr82-8j83-vxmv) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.10,<2.14 (PYSEC-2021-47) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.10,<2.14 (PYSEC-2026-1812) dependency_analyzer · 95%
info
package.json metadata manifest_parser · 100%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: skill manifest_parser · 90%
info
Tool: key manifest_parser · 90%
info
Tool: auto manifest_parser · 90%
info
Tool: setup manifest_parser · 90%
info
Tool: auth manifest_parser · 90%
info
Tool: onboard manifest_parser · 90%
info
Tool: search manifest_parser · 90%
info
Tool: inspect manifest_parser · 90%
info
Tool: compare manifest_parser · 90%
info
Tool: status manifest_parser · 90%
info
Tool: call manifest_parser · 90%
info
Tool: run manifest_parser · 90%
info
Tool: fetch manifest_parser · 90%
info
Tool: test manifest_parser · 90%
info
Tool: bench manifest_parser · 90%
info
Tool: shapeshift manifest_parser · 90%
info
Tool: shiftback manifest_parser · 90%
info
Tool: craft manifest_parser · 90%
info
Tool: connect manifest_parser · 90%
info
Tool: release manifest_parser · 90%
info
Tool: reload manifest_parser · 90%
info
Tool: prewarm manifest_parser · 90%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (17) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 90%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
No dependency files found for SBOM generation sbom_generator · 100%
critical
Database URL with Password found in kaiser-data-kitsune-mcp-f15dc50/kitsune_mcp/adapters/database.py secret_scanner · 85%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%