Rohan Shield
Officialš”ļø Rohan Protocol
Official Model Context Protocol (MCP) Server & Security Gateway
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 atpackages/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 Problem: Plaintext Context Leaks in MCP
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 windowRelated MCP server: VaultBridge
š ļø Running the MCP Server from Source
This repository contains the complete open-source MCP server implementation. You can clone and run the server locally over standard stdio:
# 1. Clone the repository
git clone https://github.com/rohan-protocol/sdk.git
cd sdk
# 2. Install dependencies & build packages
npm install
npm run build
# 3. Start the MCP Server directly over stdio
node packages/mcp/dist/server.jsOr run directly via npx without cloning:
npx -y @rohan-protocol/mcp@latestš§ Exposed MCP Tools
The @rohan-protocol/mcp server registers standard Model Context Protocol tool endpoints over JSON-RPC:
MCP Tool | Description | Input Parameters |
| Evaluates tool execution parameters in ephemeral RAM, strips prompt injections, generates a cryptographic 32-byte intent commitment, and anchors state transitions gaslessly to Midnight. |
|
š Universal MCP Client Setup
1. Claude Desktop
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"
}
}
}
}2. Cursor IDE & Windsurf
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
š Monorepo Structure
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šļø Architecture
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā 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...) ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāš”ļø Security Register (Threat & Mitigation)
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 |
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. |
š Academic Research
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
š¤ Community & Contributing
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.
Available Tools
1 toolrohan_zk_handshakeC
Executes a cryptographic zero-knowledge state transition on Midnight Blockchain. Proves an intent, transaction, or inter-agent agreement without exposing confidential parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Semantic action plan, payload, or agreement terms to be cryptographically committed | |
| agentId | Yes | Decentralized Identifier (DID) or identifier of the initiating agent | |
| counterpartyId | No | Optional identifier of counterparty agent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It conveys one behavioral trait ā confidential parameters are not exposed ā but says nothing about whether this mutates on-chain state irreversibly, what permissions/DID auth are needed, or what the response contains. For a cryptographic state-transition write, that is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, and the core action is front-loaded before the privacy rationale. Efficient, though the second sentence is somewhat redundant with the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are fully covered by the schema and no output schema exists, so the description doesn't need to explain returns. However, for a mutation tool with no annotations, the missing side-effect, irreversibility, and auth context leaves it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (intent, agentId, counterpartyId) are already documented in the schema. The description adds no syntax, format, or constraint details beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Executes a cryptographic zero-knowledge state transition on Midnight Blockchain') and clarifies what is proven versus exposed. It is clear what the tool does, though it does not need sibling differentiation since none exist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It hints at the domain ('intent, transaction, or inter-agent agreement') but never states when to call this versus a plain transaction, nor any prerequisites. There are no alternatives listed and no conditions that select this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
rohan_zk_handshake
TDQS
Scored across 1 tool
With only one tool in the set, there is no possibility of overlap or misselection. The tool's purpose (a zero-knowledge state transition handshake) is unambiguous and clearly bounded.
The single name `rohan_zk_handshake` is clean snake_case with a server prefix, so there is no inconsistency. However, a lone name cannot demonstrate a predictable verb_noun pattern across the set, so it falls just short of a 5.
A single tool is too thin for a blockchain/cryptographic-protocol server, which normally implies proving, verifying, querying state, and inspecting transactions. The operation itself is non-trivial, which keeps this above the worst score.
The surface exposes only the handshake/prove operation, with no verification, state-read, or agreement-lifecycle counterparts. An agent has no way to check a proof result, retrieve state, or handle the other half of the interaction, creating dead ends.
Maintenance
Related MCP Connectors
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Security firewall for AI agents ā scans MCP calls for injection, secrets, and risks.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that lets AI agents call APIs without ever seeing the credentials, using a local encrypted vault and per-secret allowlist policies for HTTP requests and subprocess environment variables.1AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceSecret management MCP server for AI coding agents that prevents secrets from entering the LLM context window by returning metadata only and using side-channel injection. Integrates with Bitwarden and offers hooks for auto-capture and leak prevention.1MIT
- AlicenseAqualityDmaintenanceAn MCP server that provides a guarded interface to the mem9 persistent memory backend, protecting AI agents against prompt injection, secret leakage, and memory poisoning.6MIT
- FlicenseNot gradedqualityBmaintenanceMCP server for end-to-end encrypted secret storage and retrieval, enabling LLM agents to fetch secrets by name via one-time URLs while keeping plaintext out of model context and logs.1-