Klever MCP Server
A Model Context Protocol (MCP) server tailored for Klever blockchain smart contract development. This server maintains and serves contextual knowledge including code patterns, best practices, and runtime behavior for developers working with the Klever VM SDK.
Features
- š Triple Mode Operation: Run as HTTP API server, MCP stdio server, or public hosted MCP server
- š¾ Flexible Storage: In-memory or Redis backend support
- š Smart Context Retrieval: Query by type, tags, or contract type
- š Automatic Pattern Extraction: Parse Klever contracts to extract examples and patterns
- šÆ Relevance Ranking: Intelligent scoring and ranking of context
- š Live Updates: Add and update context in real-time
- š”ļø Type Safety: Full TypeScript with Zod validation
- š Comprehensive Knowledge Base: Pre-loaded with Klever VM patterns, best practices, and examples
- š§ Contract Validation: Automatic detection of common issues and anti-patterns
- š Deployment Scripts: Ready-to-use scripts for contract deployment, upgrade, and querying
Quick Start
Install and run instantly via npx ā no cloning required:
npx -y @klever/mcp-serverOr connect to the hosted public server:
claude mcp add -t http klever-vm https://mcp.klever.org/mcpSee MCP Client Integration for client-specific configuration.
Architecture
mcp-klever-vm/
āāā src/
ā āāā api/ # HTTP API routes with validation
ā āāā context/ # Context management service layer
ā āāā mcp/ # MCP protocol server implementation
ā āāā parsers/ # Klever contract parser and validator
ā āāā storage/ # Storage backends (memory/Redis)
ā ā āāā memory.ts # In-memory storage with size limits
ā ā āāā redis.ts # Redis storage with optimized queries
ā āāā types/ # TypeScript type definitions
ā āāā utils/ # Utilities and ingestion tools
ā āāā knowledge/ # Modular knowledge base (95+ entries)
ā āāā core/ # Core concepts and imports
ā āāā storage/ # Storage patterns and mappers
ā āāā events/ # Event handling and rules
ā āāā tokens/ # Token operations and decimals
ā āāā modules/ # Built-in modules (admin, pause)
ā āāā tools/ # CLI tools (koperator, ksc)
ā āāā scripts/ # Helper scripts
ā āāā examples/ # Complete contract examples
ā āāā errors/ # Error patterns
ā āāā best-practices/ # Optimization and validation
ā āāā documentation/ # API reference
āāā tests/ # Test files
āāā docs/ # DocumentationKey Improvements Made
-
Storage Layer
- Added memory limits to prevent OOM in InMemoryStorage
- Optimized Redis queries to avoid O(N) KEYS command
- Added atomic transactions for Redis operations
- Improved error handling and validation
-
API Security
- Added input validation for all endpoints
- Batch operation size limits
- Proper error responses without leaking internals
- Environment-aware error messages
-
Type Safety
- Centralized schema validation
- Proper TypeScript interfaces for options
- Runtime validation of stored data
-
Performance
- Batch operations using Redis MGET
- Index-based queries instead of full scans
- Optimized count operations
Installation
- Clone the repository:
git clone https://github.com/klever-io/mcp-klever-vm.git
cd mcp-klever-vm- Install dependencies:
pnpm install- Copy environment configuration:
cp .env.example .env- Install Klever SDK tools (required for transactions):
chmod +x scripts/install-sdk.sh && ./scripts/install-sdk.sh- Build the project:
pnpm run buildConfiguration
Edit .env file to configure the server:
# Server Mode (http, mcp, or public)
MODE=http
# HTTP Server Port (only for http mode)
PORT=3000
# Storage Backend (memory or redis)
STORAGE_TYPE=memory
# Maximum contexts for in-memory storage (default: 10000)
MEMORY_MAX_SIZE=10000
# Redis URL (only if STORAGE_TYPE=redis)
REDIS_URL=redis://localhost:6379
# Node environment (development or production)
NODE_ENV=developmentMCP Client Integration
Claude Code
# Add via npx (recommended)
claude mcp add klever-vm -- npx -y @klever/mcp-server
# Or connect to the public hosted server
claude mcp add -t http klever-vm https://mcp.klever.org/mcpClaude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"klever-vm": {
"command": "npx",
"args": ["-y", "@klever/mcp-server"]
}
}
}For detailed setup, see the Claude Desktop Installation Guide.
Cursor
Add to your Cursor MCP settings (.cursor/mcp.json):
{
"mcpServers": {
"klever-vm": {
"command": "npx",
"args": ["-y", "@klever/mcp-server"]
}
}
}VS Code (GitHub Copilot)
Add to .vscode/mcp.json in your project:
{
"servers": {
"klever-vm": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@klever/mcp-server"]
}
}
}For detailed setup, see the VS Code Installation Guide.
Public MCP Server
The Klever MCP Server can be hosted as a public shared service, allowing any developer to connect without running it locally.
Connecting to the Public Server
# Add permanently (user-level)
claude mcp add -t http klever-vm https://mcp.klever.org/mcp
# Add for current project only
claude mcp add -t http -s project klever-vm https://mcp.klever.org/mcpAvailable Tools (Public Mode)
The public server exposes a read-only subset of tools for security:
| Tool | Description |
|---|---|
query_context | Search the Klever VM knowledge base |
get_context | Retrieve a specific context by ID |
find_similar | Find contexts similar to a given context |
get_knowledge_stats | Get knowledge base statistics |
enhance_with_context | Enhance queries with relevant Klever VM context |
Write operations (add_context) and shell-based tools (init_klever_project, add_helper_scripts) are disabled in public mode.
Self-Hosting with Docker
# Build and run
docker build -t mcp-klever-vm .
docker run -p 3000:3000 mcp-klever-vm
# Or using docker compose
docker compose up -dThen connect:
claude mcp add -t http klever-vm-local http://localhost:3000/mcpSelf-Hosting without Docker
pnpm install
pnpm run build
pnpm run start:publicEnvironment Variables (Public Mode)
| Variable | Default | Description |
|---|---|---|
MODE | http | Set to public for hosted mode |
PORT | 3000 | Server port |
CORS_ORIGINS | (unset) | Comma-separated allowed origins. Unset or * allows all origins |
RATE_LIMIT_MCP | 60 | MCP endpoint requests/min per IP |
RATE_LIMIT_API | 30 | API endpoint requests/min per IP |
BODY_SIZE_LIMIT | 1mb | Max request body size |
Deployment Notes
For production at mcp.klever.org:
- Deploy Docker container behind a reverse proxy (nginx/Caddy/cloud LB) for TLS termination
- Ensure proxy passes
mcp-session-idheader and supports SSE (disable response buffering) - Single instance is sufficient as the server is read-only with an in-memory knowledge base
- Consider Cloudflare for DDoS protection (SSE is supported)
Usage
Knowledge Base Loading
The server automatically loads the Klever knowledge base based on your storage type:
Memory Storage (Default)
- Knowledge is automatically loaded when the server starts
- No need to run
pnpm run ingestseparately - Data exists only while server is running
- Best for development and testing
Redis Storage
# First, ingest the knowledge base (one time)
pnpm run ingest
# Then start the server
pnpm run dev- Knowledge persists in Redis database
- Survives server restarts
- Best for production use
This will load:
- Smart contract templates and examples
- Annotation rules and best practices
- Storage mapper patterns and comparisons
- Deployment and query scripts
- Common errors and solutions
- Testing patterns
- API reference documentation
Running as HTTP Server
# Development mode
pnpm run dev
# Production mode
pnpm run build && pnpm startThe HTTP API will be available at http://localhost:3000/api
Running as MCP Server
MODE=mcp pnpm startUse with any MCP-compatible client.
API Endpoints
POST /api/context
Ingest new context into the system.
{
"type": "code_example",
"content": "contract code here",
"metadata": {
"title": "Token Contract Example",
"description": "ERC20-like token implementation",
"tags": ["token", "fungible"],
"contractType": "token"
}
}GET /api/context/:id
Retrieve specific context by ID.
POST /api/context/query
Query contexts with filters.
{
"query": "transfer",
"types": ["code_example", "best_practice"],
"tags": ["token"],
"contractType": "token",
"limit": 10,
"offset": 0
}PUT /api/context/:id
Update existing context.
DELETE /api/context/:id
Delete context.
GET /api/context/:id/similar
Find similar contexts.
POST /api/context/batch
Batch ingest multiple contexts.
MCP Tools
When running as MCP server, the following tools are available:
query_context: Search for relevant Klever development contextadd_context: Add new context to the knowledge baseget_context: Retrieve specific context by IDfind_similar: Find contexts similar to a given contextget_knowledge_stats: Get statistics about the knowledge baseinit_klever_project: Initialize a new Klever smart contract project with helper scriptsenhance_with_context: Automatically enhance queries with relevant Klever VM context
Context Types
code_example: Working code snippets and examples (Rust smart contract code)best_practice: Recommended patterns and practicessecurity_tip: Security considerations and warningsoptimization: Performance optimization techniquesdocumentation: General documentation and guideserror_pattern: Common errors and solutionsdeployment_tool: Deployment scripts and utilities (bash scripts, tools)runtime_behavior: Runtime behavior explanations
Pre-loaded Knowledge Base
The MCP server includes a comprehensive knowledge base with 95+ entries organized into 11 categories:
Critical Patterns
- Payment handling and token operations
- Decimal conversions and calculations
- Event emission and parameter rules
- CLI tool usage and best practices
Contract Patterns & Examples
- Basic contract structure templates
- Complete lottery game implementation
- Staking contract with rewards
- Cross-contract communication patterns
- Remote storage access patterns
- Token mapper helper modules
Development Tools
- Koperator: Complete CLI reference with argument encoding
- KSC: Build commands and project setup
- Deployment, upgrade, and query scripts
- Interactive contract management tools
- Common utilities library (bech32, network management)
Storage & Optimization
- Storage mapper selection guide with performance comparisons
- Namespace organization patterns
- View endpoints for efficient queries
- Gas optimization techniques
- OptionalValue vs Option patterns
Best Practices & Security
- Input validation patterns
- Error handling strategies
- Admin and pause module usage
- Access control patterns
- Common mistakes and solutions
Ingesting Contracts
Use the built-in ingestion utilities to parse and import Klever contracts:
import { StorageFactory } from './storage/index.js';
import { ContextService } from './context/service.js';
import { ContractIngester } from './ut
ā¦