@node9/proxy 1.8.4 → 1.9.1

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  ### The "Sudo" Command for AI Agents.
4
4
 
5
5
  [![NPM Version](https://img.shields.io/npm/v/@node9/proxy.svg)](https://www.npmjs.com/package/@node9/proxy)
6
- [![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
7
  [![Open in HF Spaces](https://huggingface.co/datasets/huggingface/badges/resolve/main/open-in-hf-spaces-sm.svg)](https://huggingface.co/spaces/Node9ai/node9-security-demo)
8
8
  [![Documentation](https://img.shields.io/badge/docs-node9.ai%2Fdocs-blue)](https://node9.ai/docs)
9
9
 
@@ -84,6 +84,24 @@ Wrap any MCP server transparently. The AI sees the same server — Node9 interce
84
84
 
85
85
  Or use `node9 setup` — it wraps existing MCP servers automatically.
86
86
 
87
+ ### MCP Tool Pinning — rug pull defense
88
+
89
+ MCP servers can change their tool definitions between sessions. A compromised or malicious server could silently add, remove, or modify tools after initial trust — a **rug pull** attack.
90
+
91
+ Node9 defends against this by **pinning** tool definitions on first use:
92
+
93
+ 1. **First connection** — the gateway records a SHA-256 hash of all tool definitions
94
+ 2. **Subsequent connections** — the hash is compared; if tools changed, the session is **quarantined** and all tool calls are blocked until a human reviews and approves the change
95
+ 3. **Corrupt pin state** — fails closed (blocks), never silently re-trusts
96
+
97
+ ```bash
98
+ node9 mcp pin list # show all pinned servers and hashes
99
+ node9 mcp pin update <serverKey> # remove pin, re-pin on next connection
100
+ node9 mcp pin reset # clear all pins (re-pin on next connection)
101
+ ```
102
+
103
+ This is automatic — no configuration needed. The gateway pins on first `tools/list` and enforces on every subsequent session.
104
+
87
105
  ---
88
106
 
89
107
  ## Python SDK — govern any Python agent