The in-memory security proxy preventing LLM context leaks, credential exfiltration, and prompt injections during tool execution.
π¦ Official Open-Source MCP Server Monorepo
The core Model Context Protocol (MCP) server implementation is located directly in this repository at packages/mcp/ and distributed on npm as @rohan-protocol/mcp.
Run from Source β’ MCP Tools β’ Client Setup β’ Architecture β’ Security
β οΈ Public Beta (v0.6.0): Rohan currently enforces client-side RAM witness isolation, V-01 semantic policy firewalls, and V-02 deterministic memory zeroization (zeroize) to shield MCP tool calls while native client-side WASM ZK-SNARK proving circuits are under active research (Milestone 1).
The Model Context Protocol (MCP) connects autonomous agents to tools. However, transport encryption (TLS) only protects data in flight β at the host boundary, standard MCP tools execute in cleartext:
π΄ WITHOUT ROHAN (Standard MCP)
Agent calls tool β { "api_key": "sk_live_...", "db_password": "secret" } in plaintext
β Leaked directly into LLM conversation context & inference logs
β Permanent risk of context exfiltration & prompt injection
π’ WITH ROHAN SHIELD
Agent calls tool β Arguments evaluated strictly in isolated client RAM
β V-02 Zeroize wipes witness memory immediately from volatile memory
β Zero plaintext parameters ever enter the model context window
This repository contains the complete open-source MCP server implementation. You can clone and run the server locally over standard stdio:
git clone https://github.com/rohan-protocol/sdk.git
cd sdk
npm install
npm run build
node packages/mcp/dist/server.js
Or run directly via npx without cloning:
npx -y @rohan-protocol/mcp@latest
The @rohan-protocol/mcp server registers standard Model Context Protocol tool endpoints over JSON-RPC:
| MCP Tool | Description | Input Parameters |
|---|---|---|
rohan_zk_handshake |
Evaluates tool execution parameters in ephemeral RAM, strips prompt injections, generates a cryptographic 32-byte intent commitment, and anchors state transitions gaslessly to Midnight. | targetAgentId (string),intent (string),privatePayload (object) |
Add rohan-shield to your claude_desktop_config.json:
{
"mcpServers": {
"rohan-shield": {
"command": "npx",
"args": ["-y", "@rohan-protocol/mcp@latest"],
"env": {
"ROHAN_RELAYER_URL": "https://api.rohanprotocol.network/api/v1/handshake"
}
}
}
}
- Navigate to Settings β Features β MCP Servers β Add New MCP Server .
- Set the name to
rohan-shield. - Set the type to
command. - Use the command:
npx -y @rohan-protocol/mcp@latest
rohan-protocol/sdk
βββ packages/
β βββ mcp/ # π€ The Official Model Context Protocol (MCP) Server (Stdio)
β βββ sdk/ # βοΈ Core in-memory commitment engine & relayer client
β βββ webmcp/ # π React / Next.js browser hooks with V-07 DOM isolation
βββ contracts/ # π Midnight Compact smart contracts (rohan_handshake.compact)
βββ README.md
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AUTONOMOUS AGENT RUNTIME β
β Claude Desktop / Cursor IDE / Custom Agent Workflows β
ββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
β Tool Execution (JSON-RPC)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [@rohan-protocol/mcp] SERVER (packages/mcp) β
β β’ Stdio MCP Protocol Server: Compliant with Anthropic MCP Specification β
β β’ V-01 Semantic Firewall: Filters hidden Unicode & prompt injections β
βββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ
β In-Memory Witness
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [@rohan-protocol/sdk] ENGINE (packages/sdk) β
β β’ Ephemeral RAM Commitment (32-Byte Intent Hash) β
β β’ V-02 Deterministic Zeroize: Overwrites buffers immediately in memory β
β β’ ZERO disk writes. ZERO swap-file exposure. β
βββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ
β Streamable HTTP (NDJSON)
β received β approved β proving β anchored
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ROHAN RELAYER PAYMASTER β
β β’ Gasless Transaction Sponsoring ($tDUST covered automatically) β
β β’ Scale-to-Zero Native (No persistent SSE connection bottlenecks) β
βββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ
β Immutable Replay Protection
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MIDNIGHT BLOCKCHAIN LEDGER β
β Contract: rohan_handshake.compact (Preprod: 585ac0c4448257507d8ffa2a...) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Threat ID | Threat Vector | Mitigation Mechanism |
|---|---|---|
| V-01 | Adversarial Prompt Injection | Pre-Prover Semantic Firewall: intercepts out-of-bounds payloads and strips zero-width Unicode injection characters ([\u200B-\u200D\uFEFF]). |
| V-02 | Residual Heap Exfiltration | Deterministic Memory Zeroize: multi-pass volatile memory wiping overwriting witness buffers with deterministic 0x00 byte patterns. |
| V-05 | Persistent Socket Exhaustion | Scale-to-Zero NDJSON: uses chunked Streamable HTTP instead of long-lived SSE connections, allowing proxies to spin down on idle. |
| V-07 | DOM / WebWorker Scraping | WebMCP Thread Isolation: isolates execution buffers inside WebWorkers, shielded from malicious third-party browser extensions. |
The cryptographic foundations, threat registers, and formal mathematical proofs are documented in our research paper:
Rohan: A Stateless Zero-Knowledge Trust Gateway for Privacy-Preserving Agentic Workflows via Streamable HTTP
Model Context Protocol Working Group & Rohan Protocol Lab
Published via Zenodo / IEEE Spec v2.0 β’ DOI: 10.5281/zenodo.22730240
We build in the open.
- π Found a bug or bypass vector? Open a GitHub Issue.
- βοΈ Support: consider starring the repository to help other developers discover privacy-first MCP tools.
<sub>Licensed under the</sub>