NeuroVerse is a multilingual AI agent intelligence layer providing memory, safety, multi-model routing, voice, and reasoning capabilities for MCP-compatible AI agents.
Multilingual Processing (
neuroverse_process): Handle mixed Indian languages (Tamil, Hindi, Telugu, Kannada, Malayalam, Bengali) with English code-switching — running the full pipeline: language detection → normalization → intent extraction → safety check → optional execution.Memory Storage & Recall (
neuroverse_store/neuroverse_recall): Persist and retrieve context across three tiers (short-term, episodic, semantic) with importance scoring, filtered by user, intent, tier, or semantic query.Safe Execution (
neuroverse_execute): Parse and execute user requests through a 3-layer safety engine (keyword blocklist → intent risk classifier → optional LLM judge) that blocks dangerous operations likeDROP DATABASEorrm -rf, with zero token cost and sub-millisecond latency.Multi-Model Routing (
neuroverse_model): Automatically select the best AI provider (OpenAI, Anthropic, Sarvam AI, Ollama, OpenRouter) based on task type (multilingual, reasoning, local, general).Agent-to-Agent Routing (
neuroverse_route): Route tasks to registered downstream agents via HTTP with automatic fallback on failure.Voice (
neuroverse_transcribe/neuroverse_synthesize): Transcribe audio to text using Whisper STT and synthesize speech from text using Coqui TTS.High-Performance Reasoning (
neuroverse_reason): Execute complex analytical tasks using specialized reasoning models via OpenRouter.Codebase Context Assembly (
neuroverse_assemble_context): Scan a codebase and extract the most relevant file chunks for a given query (Arachne Protocol).RLHF Feedback Logging (
neuroverse_feedback): Submit human feedback with ratings and comments to continuously tune agent performance.
Supports local model execution through Ollama via the Marga multi-model router for privacy-focused or local task processing.
Utilized by the multi-model router to provide agents with intelligence for intent extraction, reasoning, and multilingual processing.
Powers the Smriti memory layer to provide persistent tiered storage for short-term, episodic, and long-term semantic context.
🚀 What's New in v4.1
OpenRouter Reasoning: Integrated the
stepfun/step-3.5-flash:freemodel for high-performance analytical tasks. Use the newneuroverse_reasontool for deep thinking.Reasoning Tokens: Real-time tracking of reasoning tokens for every request.
Voice Layer (v2.0): Built-in support for Whisper STT and Coqui TTS.
🚀 What is NeuroVerse?
Every time you start a new chat with Cursor, VS Code Copilot, or any MCP-compatible AI agent, it starts from zero — no memory, no safety, no understanding of your language. NeuroVerse is an MCP server that gives your agents:
Feature | Description | |
🌐 | Multilingual Intelligence | Understands mixed Indian languages — Tamil, Hindi, Telugu, Kannada, Malayalam, Bengali + English. Code-switching? No problem. |
🎙️ | Voice Layer | STT via Whisper and TTS via Coqui. Transcribe user audio and synthesize agent responses. |
🧠 | Intent Extraction | LLM-first structured intent extraction with deterministic rule-based fallback. Never misses a command. |
💾 | Tiered Memory | Short-term (session), Episodic (recent), Semantic (long-term facts) — all with importance scoring. |
🛡️ | 3-Layer Safety (Kavach) | Keyword blocklist → Intent risk classifier → LLM judge. Blocks |
🤖 | Multi-Model Router (Marga) | OpenAI · Anthropic · Sarvam AI · Ollama · OpenRouter — routes each task to the best model automatically. |
🔗 | Agent-to-Agent (Setu) | REST+JSON agent registry with automatic fallback. Agents calling agents calling agents. |
⚡ | Async Everything | FastAPI + asyncpg + httpx. Sub-millisecond safety checks. Zero blocking. |
⚡ NeuroVerse is a modular intelligence layer — not a monolith. Plug in what you need. Ignore what you don't.
Table of Contents
🚀 Quick Start
1. Install
Option A: npm (recommended) — use anywhere
npm install neuroverseOption B: From source (Python)
git clone https://github.com/joshua400/neuroverse.git
cd neuroverse
python -m pip install -e ".[dev]"💡 Tip: If you installed via npm, the path is node_modules/neuroverse/dist/index.js. If from source, use the absolute path to your cloned directory.
2. Add NeuroVerse to your MCP config
NeuroVerse is a standard MCP server (stdio). Add it to your host's config:
Cursor / VS Code Copilot / Claude Desktop (npm)
{
"mcpServers": {
"neuroverse": {
"command": "npx",
"args": ["neuroverse"]
}
}
}From source (Python)
{
"mcpServers": {
"neuroverse": {
"command": "python",
"args": ["mcp/server.py"],
"cwd": "/path/to/neuroverse"
}
}
}3. Tell your agent to use NeuroVerse
Add this to your agent's rules file (.md, .cursorrules, system prompt, etc.):
## NeuroVerse Integration
- Use `neuroverse_process` to handle any user request — it auto-detects language, extracts intent, checks safety, and executes.
- Use `neuroverse_reason` for complex tasks requiring analytical reasoning (powered by OpenRouter).
- Use `neuroverse_store` / `neuroverse_recall` for persistent context across sessions.
- Use `neuroverse_execute` for any potentially dangerous action — it will block destructive operations.That's it. Two commands your agent needs to know:
Command | When | What happens |
| Any user request | Detects language, extracts intent, safety-checks, executes |
| End of work | Saves context for next session |
Next session, your agent picks up exactly where it left off — like it never forgot.
Requirements
npm edition: Node.js 18+ (zero database deps — uses JSON files)
Python edition: Python 3.10+ + PostgreSQL (for persistent memory)
🤔 Why NeuroVerse?
Without NeuroVerse | With NeuroVerse |
Agent only understands English | Agent understands Tamil, Hindi, Telugu, Kannada + English code-switching |
|
|
Every session starts from zero | Agent remembers what it did — across sessions, across agents |
|
|
Locked to one LLM provider | Routes to the best model for each task automatically |
Two agents = chaos | Agent A hands off to Agent B seamlessly |
Token Efficiency
NeuroVerse's safety layer runs at zero token cost — pure regex and rule matching, no LLM calls wasted:
Safety Approach | Cost per Check | Latency |
LLM-based safety | 500–2,000 tokens | 1–5 seconds |
Embedding-based | 100–500 tokens | 200–500ms |
NeuroVerse Kavach | 0 tokens | < 1ms |
Over 100 tool calls per session, that's 50,000–200,000 tokens saved compared to LLM-based safety.
⚙️ How It Works
User Input (any language)
│
┌────┴────┐
│ Vani │ ← Language detection + keyword normalisation
│ (भाषा) │ Tamil/Hindi/Telugu → normalised internal format
└────┬────┘
│
┌────┴────┐
│ Bodhi │ ← LLM intent extraction + rule-based fallback
│ (बोधि) │ Returns structured JSON with confidence
└────┬────┘
│
┌────┴────┐
│ Kavach │ ← 3-layer safety: blocklist → risk → LLM judge
│ (कवच) │ Blocks dangerous actions at zero token cost
└────┬────┘
│
┌────┴────┐
│ Marga │ ← Routes to best model (OpenAI/Anthropic/Sarvam/Ollama)
│ (मार्ग) │ Based on task type: multilingual/reasoning/local
└────┬────┘
│
┌────┴────┐
│ Smriti │ ← Stores/recalls from tiered memory
│ (स्मृति) │ Short-term + Episodic + Semantic (PostgreSQL)
└────┬────┘
│
Tool Execution + Response🌐 Multilingual Intelligence — Vani
The Problem: Every MCP server speaks only English. 70% of India code-switches daily.
"anna indha file ah csv convert pannu"
↓
"anna this file ah csv convert do" ← keyword normalisation (not full translation)
↓
Intent: convert_format { output_format: "csv" }Hybrid Pipeline (Rule + LLM)
Input → Language Detect (langdetect) → Code-Switch Split → Keyword Normalise → OutputKey insight: Don't fully translate. Only normalise domain-critical keywords. The rest stays untouched — preserving context, tone, and nuance.
Supported Languages
Language | Keywords Mapped | Example |
🇮🇳 Tamil |
|
|
🇮🇳 Hindi |
|
|
🇮🇳 Telugu |
|
|
🇮🇳 Kannada | Support coming in v2 | — |
🇬🇧 English | Pass-through |
|
Code-Switch Detection
{
"languages": ["ta", "en"],
"confidence": 0.92,
"is_code_switched": true,
"original_text": "anna indha file ah csv convert pannu",
"normalized_text": "anna this file ah csv convert do"
}🧠 Intent Extraction — Bodhi
LLM-first. Rule-based fallback. Never fails.
LLM succeeds (confidence ≥ 0.5)?
├─ Yes → use LLM result
└─ No → rule-based parser (deterministic)LLM Strategy
# Prompt to LLM:
"Extract structured intent from the following input.
Return ONLY valid JSON: {intent, parameters, confidence}"Rule-Based Fallback (7 patterns)
Pattern | Intent | Trigger Keywords |
Format conversion |
| convert, csv, json, excel, pdf |
Summarisation |
| summarise, summary, brief, tldr |
Report generation |
| report, generate report |
Deletion |
| delete, remove, drop, clean |
Data query |
| query, search, find, fetch, get |
Communication |
| send, share, email, notify |
Explanation |
| explain, describe, what is, how to |
Output
{
"intent": "convert_format",
"parameters": { "input_format": "json", "output_format": "csv" },
"confidence": 0.87,
"source": "rule"
}The key difference: the code decides — not the LLM. If the LLM fails, hallucinates, or returns garbage, the rule engine takes over. Deterministic. Reliable.
💾 Tiered Memory — Smriti
The Problem: Raw logs are useless. Storing everything wastes resources. No relevance scoring.
NeuroVerse's approach: Score → Filter → Compress → Store.
Three Tiers
Tier | Storage | Lifetime | Use |
Short-term | In-process dict | Current session | Active context, capped at 50 per user |
Episodic | PostgreSQL | Recent actions | What the agent did recently |
Semantic | PostgreSQL | Long-term facts | Persistent knowledge about users, projects, entities |
Importance Scoring
if importance_score >= 0.4:
persist_to_database() # worth remembering
else:
skip() # noiseOnly important memories survive. No bloat. No irrelevant recall.
Context Compression
❌ Bad: "The user asked about sales data three times in the last hour and seemed frustrated..."
✅ Good: { "intent": "sales_query", "frequency": 3, "sentiment": "frustrated" }Structured JSON payloads, NOT raw text dumps. Compressed. Indexable. Queryable.
Memory Schema (PostgreSQL)
CREATE TABLE memory_records (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
tier TEXT NOT NULL, -- short_term | episodic | semantic
intent TEXT NOT NULL,
language TEXT DEFAULT 'en',
data JSONB DEFAULT '{}', -- compressed structured payload
importance REAL DEFAULT 0.5,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Indexed: user_id, intent, tier🛡️ Safety Layer — Kavach
Three Layers — Defense in Depth
Agent calls tool → MCP Server receives request
│
┌───────────┴───────────┐
│ Layer 1: Blocklist │ ← regex + keywords, < 0.1ms
└───────────┬───────────┘
│ pass
┌───────────┴───────────┐
│ Layer 2: Risk Score │ ← intent → risk classification
└───────────┬───────────┘
│ pass
┌───────────┴───────────┐
│ Layer 3: LLM Judge │ ← optional model-based check
└───────────┬───────────┘
│ pass
Execute handlerLayer 1 — Rule-Based Blocklist (Zero Cost)
Runs inside the MCP server. Pure regex. No network. No tokens.
Blocked keywords:
delete_all_data, drop_database, drop_table, system_shutdown,
format_disk, rm -rf, truncate, shutdown, reboot, erase_all, destroyBlocked patterns (regex):
DROP (DATABASE|TABLE|SCHEMA)
DELETE FROM *
TRUNCATE TABLE
FORMAT [drive]:
rm (-rf|--force)Layer 2 — Intent Risk Classification
Risk Level | Intents | Action |
🟢 LOW |
| ✅ Allow |
🟡 MEDIUM |
| ⚠️ Block if strict mode |
🔴 HIGH |
| ❌ Block always |
⛔ CRITICAL |
| ❌ Block always |
Layer 3 — LLM Safety Judge (Optional)
If Layers 1–2 pass, optionally ask an LLM: "Is this safe?"
// LLM returns:
{ "safe": false, "reason": "This action would delete all user data." }Safety Verdict
{
"allowed": false,
"risk_level": "critical",
"reason": "Blocked keyword detected: 'drop_database'",
"blocked_by": "rule"
}Token Cost: Zero
Most AI safety: Agent → "rm -rf /" → Safety LLM → 2,000 tokens burned
NeuroVerse: Agent → "rm -rf /" → regex match → BLOCKED (0 tokens, < 1ms)Strict Mode
# .env
SAFETY_STRICT_MODE=true # Also blocks MEDIUM risk (unknown/send)
SAFETY_STRICT_MODE=false # Only blocks HIGH and CRITICAL🤖 Multi-Model Router — Marga
The Problem: Vendor lock-in. One model for everything. Overpaying.
NeuroVerse's approach: Route each task to the best model. Automatically.
Routing Logic
def route_task(task):
if task.type == "multilingual":
return sarvam_model # Best for Indian languages
elif task.type == "reasoning":
return claude_or_openai # Best for complex analysis
elif task.type == "local":
return ollama # Free, on-device, private
else:
return best_available # Fallback chainSupported Providers
Provider | Default Model | Best For | Cost |
🇮🇳 Sarvam AI |
| Indian languages, multilingual | Low |
🧩 OpenRouter |
| High-performance reasoning | Free |
🧠 Anthropic |
| Reasoning, analysis | Medium |
🤖 OpenAI |
| General tasks, code | Medium |
🦙 Ollama |
| Local, private, offline | Free |
Benefits
Without Marga | With Marga | |
Cost | Pay GPT-4 for everything | Use Ollama for simple tasks |
Speed | Same latency for all tasks | Local models for fast tasks |
Privacy | Everything goes to cloud | Sensitive data stays local |
Vendor lock-in | Stuck with one provider | Switch anytime |
Fallback Chain
If your preferred provider is down or unconfigured:
OpenRouter → Anthropic → OpenAI → Sarvam → Ollama (local, always available)🔗 Agent-to-Agent — Setu
Agents calling agents calling agents.
Agent Registry
register_agent({
"agent_name": "report_agent",
"endpoint": "http://localhost:8001/generate",
"capabilities": ["generate_report", "sales_analysis"]
})Routing
{
"target_agent": "report_agent",
"task": "generate_sales_report",
"payload": { "quarter": "Q1", "year": 2026 }
}Fallback
If the target agent is unreachable:
{
"success": false,
"error": "Agent unreachable: ConnectError",
"fallback": true
}The caller can fall back to local execution. No hard failures.
🧩 MCP Tools
NeuroVerse exposes 6 tools via the Model Context Protocol:
# | Tool (npm) | Tool (Python) | Description |
1 |
|
| Full pipeline: detect → normalise → intent → safety → execute |
2 |
|
| Store a memory record in the tiered system |
3 |
|
| Retrieve memories by user, intent, or tier |
4 |
|
| End-to-end safe execution (convenience) |
5 |
|
| Route a task to a registered downstream agent |
6 |
|
| Query the multi-model router (optionally invoke) |
7 |
|
| Transcribe audio to text via Whisper STT |
8 |
|
| Synthesize speech from text via Coqui TTS |
9 |
| N/A | High-performance reasoning via OpenRouter |
Real-World Example
── Session 1 (Agent Alpha, 2pm) ───────────────────────────
india_mcp_process_multilingual_input({
text: "anna indha sales data ah csv convert pannu",
user_id: "alpha",
execute: true
})
→ Language: Tamil+English (code-switched)
→ Intent: convert_format { output_format: "csv" }
→ Safety: ✅ allowed (LOW risk)
→ Execution: ✅ success
india_mcp_store_memory({
user_id: "alpha",
intent: "convert_format",
tier: "episodic",
data: { "file": "sales_q1.json", "output": "csv" },
importance_score: 0.8
})
── Session 2 (Agent Beta, next day) ───────────────────────
india_mcp_recall_memory({
user_id: "alpha",
intent: "convert_format",
limit: 5
})
→ "Agent Alpha converted sales_q1.json to CSV yesterday"
→ Beta picks up exactly where Alpha left off🌐 REST API
NeuroVerse also ships with a FastAPI REST layer — for non-MCP clients:
python app/main.py
# → http://localhost:8000/docs (Swagger UI)Endpoint | Method | Description |
| GET | Health check |
| POST | Full multilingual pipeline |
| POST | Store memory |
| POST | Recall memories |
⚙️ Configuration
All settings via environment variables (.env):
# Database (PostgreSQL required for persistent memory)
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/neuroverse
# AI Model API Keys (configure the ones you have)
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
SARVAM_API_KEY=...
# Ollama (local, free)
OLLAMA_BASE_URL=http://localhost:11434
# Safety
SAFETY_STRICT_MODE=true # Block MEDIUM risk actions too
# MCP Transport
MCP_TRANSPORT=stdio # or streamable_http
MCP_PORT=8000🧪 Testing
python -m pytest tests/ -vtests/test_intent.py — 10 passed (rule-based + async + mock LLM + fallback)
tests/test_language.py — 10 passed (keyword normalisation + detection + code-switch)
tests/test_pipeline.py — 8 passed (full e2e: English, Tamil, Hindi, dangerous, edges)
tests/test_safety.py — 12 passed (blocklist, regex, risk classification, pipeline)
============================= 40 passed in 0.87s ==============================What's Tested
Category | Tests | Coverage |
Language Detection | 10 | Tamil, Hindi, English, empty input, code-switch flag |
Intent Extraction | 10 | All 7 rule patterns, LLM mock, LLM failure, empty |
Safety Engine | 12 | Keywords, regex, risk levels, full pipeline, strict mode |
Full Pipeline | 8 | E2E English, Tamil, Hindi, dangerous commands, edge cases |
🏗️ Architecture
npm Edition (Node.js / TypeScript)
npm/
├── src/
│ ├── core/
│ │ ├── language.ts # Vani — Language detection (zero deps)
│ │ ├── intent.ts # Bodhi — Intent extraction (LLM + fallback)
│ │ ├── memory.ts # Smriti — Tiered memory (JSON files)
│ │ ├── safety.ts # Kavach — 3-layer safety engine
│ │ └── router.ts # Marga — Multi-model AI router
│ ├── services/
│ │ ├── executor.ts # Tool registry + retry engine
│ │ └── agent-router.ts # Setu — Agent-to-Agent routing
│ ├── types.ts # TypeScript interfaces & enums
│ ├── constants.ts # Shared constants
│ └── index.ts # MCP Server — 6 tools (McpServer + Zod)
├── package.json # npm publish config
├── tsconfig.json
└── LICENSE # Apache-2.0Python Edition
app/
├── core/
│ ├── language.py # Vani — Language detection (langdetect)
│ ├── intent.py # Bodhi — Intent extraction (LLM + fallback)
│ ├── memory.py # Smriti — Tiered memory (PostgreSQL)
│ ├── safety.py # Kavach — 3-layer safety engine
│ └── router.py # Marga — Multi-model AI router
├── models/schemas.py # 12 Pydantic v2 models
├── services/
│ ├── executor.py # Tool registry + retry engine
│ └── agent_router.py # Setu — Agent-to-Agent routing
├── config.py # Settings from environment
└── main.py # FastAPI REST entry point
mcp/server.py # MCP Server (FastMCP) — 6 tools
tests/ # 40 tests (pytest)Dependencies — Minimal
npm (3 packages):
Package | Purpose |
| MCP protocol |
| Schema validation |
| HTTP requests |
Python (7 packages):
Package | Purpose |
| Model Context Protocol SDK |
| REST API layer |
| Input validation (v2) |
| Statistical language identification |
| PostgreSQL async driver |
| Async HTTP for model APIs |
🚀 Roadmap
Phase | Status | What |
v1.0 | ✅ Done | Multilingual parsing + intent extraction + 5 tools |
v1.0 | ✅ Done | Tiered memory system (PostgreSQL) |
v1.0 | ✅ Done | 3-layer safety engine (Kavach) |
v1.0 | ✅ Done | Multi-model router (Marga) + Agent routing (Setu) |
v2.0 | ✅ Done | Voice layer (Whisper/Coqui) + Extended Multilingual |
v3.0 | ✅ Done | Redis caching + Embedding-based semantic retrieval |
v4.0 | ✅ Done | Reinforcement learning (RLHF) + Arachne contextual indexing |
v4.1 | ✅ Done | OpenRouter Reasoning Layer Integration |
v5.0 | 🔮 Future | Agent marketplace & external system plugins |
🔐 Security
Measure | Implementation |
API key management | Environment variables only — never in code |
Input sanitisation | Pydantic v2 with field constraints on all inputs |
Rate limiting | Planned for v2.0 |
Path traversal | N/A — no file system access by tools |
SQL injection | Parameterised queries via SQLAlchemy |
Encrypted storage | Delegated to PostgreSQL TLS |
🤝 Contributing
Contributions are welcome! Here's how to get started:
Fork the repo
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'feat: add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Development Setup
# npm edition
git clone https://github.com/joshua400/neuroverse.git
cd neuroverse/npm
npm install
npm run build
# Python edition
cd neuroverse
python -m pip install -e ".[dev]"
python -m pytest tests/ -v # All 40 should pass📜 License
Apache-2.0