kitsune-mcp 0.8.3 → 0.9.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 +24 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
[](https://pypi.org/project/kitsune-mcp/)
|
|
9
9
|
[](https://pypi.org/project/kitsune-mcp/)
|
|
10
10
|
[](https://github.com/kaiser-data/kitsune-mcp/actions)
|
|
11
|
+
[](https://codecov.io/gh/kaiser-data/kitsune-mcp)
|
|
11
12
|
[](LICENSE)
|
|
12
13
|
[](https://smithery.ai/server/@kaiser-data/kitsune-mcp)
|
|
13
14
|
[](https://discord.gg/EYgcf7EX)
|
|
@@ -262,6 +263,8 @@ Every `shapeshift()`, `call()`, and `connect()` result shows where the server co
|
|
|
262
263
|
| Medium | `mcpregistry`, `glama`, `smithery` | `✓ Source: smithery` |
|
|
263
264
|
| Community | `npm`, `pypi`, `github` | `⚠️ Source: npm (community — not verified)` |
|
|
264
265
|
|
|
266
|
+
Community servers and `source="local"` installs require `confirm=True` — you're explicitly acknowledging you've reviewed the server before running arbitrary code. To bypass this for servers you already trust, set `KITSUNE_TRUST=community` (via `key("KITSUNE_TRUST", "community")` or your `.env`). This persists across sessions so power users and agents never see the gate again.
|
|
267
|
+
|
|
265
268
|
### Install command validation
|
|
266
269
|
|
|
267
270
|
Before spawning any subprocess, Kitsune MCP validates the executable name:
|
|
@@ -322,7 +325,7 @@ call("create_issue", arguments={"owner": "…", "repo": "…", "title": "…"})
|
|
|
322
325
|
Kitsune MCP re-reads `.env` on every call — which means adding a key instantly activates it. That convenience comes with a responsibility: **`.env` is the single place all your API keys live**. A few practices worth following:
|
|
323
326
|
|
|
324
327
|
- Add `.env` to `.gitignore` — never commit real keys
|
|
325
|
-
- Use project-level `.env` for project-specific keys; `~/.
|
|
328
|
+
- Use project-level `.env` for project-specific keys; `~/.kitsune/.env` for personal global keys
|
|
326
329
|
- Prefer minimal OAuth scopes and fine-grained tokens (e.g. GitHub fine-grained tokens with per-repo permissions)
|
|
327
330
|
- Rotate keys that get exposed; Kitsune MCP picks up the new value immediately without restart
|
|
328
331
|
|
|
@@ -334,7 +337,7 @@ Kitsune MCP re-reads `.env` on every call — which means adding a key instantly
|
|
|
334
337
|
|
|
335
338
|
**"What about MCP Inspector?"** — MCP Inspector is a standalone web UI that connects to one server and lets you inspect schemas and call tools manually. It's useful for basic debugging but isolated from real AI workflows. Kitsune MCP tests servers inside actual Claude or Cursor sessions — how an AI really uses them. It adds `test()` scoring, `bench()` latency numbers, side-by-side server comparison, and `craft()` for live endpoint prototyping. It also discovers and installs servers on demand; Inspector requires you to already have one running.
|
|
336
339
|
|
|
337
|
-
**"What about `mcp-dynamic-proxy`?"** — It hides tools behind `call_tool("brave", "web_search", {...})` — always a wrapper. After `
|
|
340
|
+
**"What about `mcp-dynamic-proxy`?"** — It hides tools behind `call_tool("brave", "web_search", {...})` — always a wrapper. After `shapeshift("mcp-server-brave-search")`, Kitsune MCP gives you a real native `brave_web_search` with the actual schema. It also can't discover or install packages at runtime.
|
|
338
341
|
|
|
339
342
|
**"Can FastMCP do this natively?"**
|
|
340
343
|
|
|
@@ -380,7 +383,7 @@ Get a free key at [smithery.ai/account/api-keys](https://smithery.ai/account/api
|
|
|
380
383
|
**Frictionless credentials** — Kitsune MCP re-reads `.env` on every `inspect()`, `shapeshift()`, and `call()`. Add a key mid-session and it takes effect immediately — no restart:
|
|
381
384
|
|
|
382
385
|
```
|
|
383
|
-
# .env (CWD, ~/.env, or ~/.
|
|
386
|
+
# .env (CWD, ~/.env, or ~/.kitsune/.env — all checked, CWD wins)
|
|
384
387
|
BRAVE_API_KEY=your-key
|
|
385
388
|
GITHUB_TOKEN=ghp_...
|
|
386
389
|
```
|
|
@@ -399,8 +402,8 @@ key("BRAVE_API_KEY", "your-key") # writes to .env, active immediately
|
|
|
399
402
|
|
|
400
403
|
| Tool | Description |
|
|
401
404
|
|---|---|
|
|
402
|
-
| `shapeshift(server_id, tools)` | Load a server's tools live. `tools=[...]` for lean
|
|
403
|
-
| `shiftback(kill)` | Remove shapeshifted tools. `kill=True` terminates the process
|
|
405
|
+
| `shapeshift(server_id, tools, source, confirm)` | Load a server's tools live. `tools=[...]` for lean load. `source="local"` forces npx/uvx install; `source="smithery"` forces HTTP. |
|
|
406
|
+
| `shiftback(kill, uninstall)` | Remove shapeshifted tools. `kill=True` terminates the process. `uninstall=True` also removes a locally installed package. |
|
|
404
407
|
| `search(query, registry)` | Search MCP servers across registries. |
|
|
405
408
|
| `inspect(server_id)` | Show tools, schemas, and live credential status (✓/✗ per key). |
|
|
406
409
|
| `call(tool_name, server_id, args)` | Call a tool. `server_id` optional when shapeshifted — current form used. |
|
|
@@ -491,6 +494,16 @@ call("brave_web_search", arguments={"query": "MCP protocol 2025"})
|
|
|
491
494
|
shiftback()
|
|
492
495
|
```
|
|
493
496
|
|
|
497
|
+
### Local install — no API key needed
|
|
498
|
+
|
|
499
|
+
```
|
|
500
|
+
# Force local install via npx/uvx — no Smithery key required
|
|
501
|
+
shapeshift("brave", source="local", confirm=True)
|
|
502
|
+
# → spawns npx locally, tools appear natively
|
|
503
|
+
call("brave_web_search", arguments={"query": "MCP 2026"})
|
|
504
|
+
shiftback(uninstall=True) # remove tools AND uninstall the package
|
|
505
|
+
```
|
|
506
|
+
|
|
494
507
|
### Persistent server with setup guidance
|
|
495
508
|
|
|
496
509
|
```
|
|
@@ -508,13 +521,17 @@ shiftback(kill=True) # terminates process, frees RAM
|
|
|
508
521
|
## Installation
|
|
509
522
|
|
|
510
523
|
```bash
|
|
511
|
-
|
|
524
|
+
uvx kitsune-mcp # recommended — uv manages the env automatically
|
|
525
|
+
# or
|
|
526
|
+
pip install kitsune-mcp # classic pip
|
|
512
527
|
# or
|
|
513
|
-
|
|
528
|
+
npx kitsune-mcp # if you prefer npm (delegates to uvx internally)
|
|
514
529
|
```
|
|
515
530
|
|
|
516
531
|
**Requirements:** Python 3.12+ · `node`/`npx` (for npm servers) · `uvx` from [uv](https://github.com/astral-sh/uv) (for pip servers)
|
|
517
532
|
|
|
533
|
+
> **Tip:** `uvx kitsune-mcp` is the easiest way — uv installs into an isolated env automatically. No venv setup needed.
|
|
534
|
+
|
|
518
535
|
---
|
|
519
536
|
|
|
520
537
|
## Contributing
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kitsune-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "The shape-shifting MCP hub — shapeshift() into 10,000+ MCP servers at runtime. One entry point, no restarts, 7 registries.",
|
|
5
5
|
"mcpName": "io.github.kaiser-data/kitsune-mcp",
|
|
6
6
|
"bin": {
|