-
Notifications
You must be signed in to change notification settings - Fork 1
MCP_PROTOCOL_SUPPORT
The Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources. ThemisDB implements MCP to provide AI-powered database interactions, natural language queries, and context-aware responses.
MCP is a standardized protocol developed by Anthropic that allows:
- Context Sharing: Applications can expose data and context to LLMs
- Tool Integration: LLMs can invoke database operations as tools
- Bidirectional Communication: Real-time interaction between AI and database
- Standardization: Universal protocol for LLM-database integration
| Feature | MCP | SSE |
|---|---|---|
| Purpose | LLM-database integration protocol | Server-to-client real-time updates |
| Direction | Bidirectional (request/response) | Unidirectional (server → client) |
| Use Case | AI queries, tool calling, context | CDC, notifications, live updates |
| Protocol | JSON-RPC over stdio/HTTP/WebSocket | HTTP with text/event-stream |
| Complexity | Higher (tool definitions, schemas) | Lower (simple event streaming) |
| Target | LLM applications (Claude, GPT, etc.) | Web browsers, dashboards |
Both protocols are complementary:
- MCP: For AI-powered interactions (natural language → database operations)
- SSE: For real-time data updates (database changes → UI)
┌─────────────────┐
│ LLM Client │
│ (Claude/GPT/etc)│
└────────┬────────┘
│ MCP Protocol
│ (JSON-RPC)
▼
┌─────────────────┐
│ MCP Server │
│ (ThemisDB) │
├─────────────────┤
│ • Tools │ ← Query, PutEntity, GetEntity, etc.
│ • Resources │ ← Schema, Stats, Metadata
│ • Prompts │ ← Query templates
└────────┬────────┘
│
▼
┌─────────────────┐
│ ThemisDB │
│ Core Engine │
└─────────────────┘
MCP exposes ThemisDB operations as callable tools:
Available Tools:
-
query: Execute Cypher/SQL queries with natural language -
put_entity: Create or update entities -
get_entity: Retrieve entities by ID -
delete_entity: Delete entities -
create_index: Create database indexes -
get_schema: Retrieve database schema -
get_stats: Get database statistics
Example Tool Call:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "query",
"arguments": {
"query": "MATCH (u:User) WHERE u.age > 25 RETURN u.name",
"language": "cypher"
}
}
}Resources provide read-only context to LLMs:
Available Resources:
-
schema://database: Database schema (nodes, edges, properties) -
stats://database: Performance statistics -
metadata://database: Database metadata -
examples://queries: Example query patterns
Example Resource Request:
{
"jsonrpc": "2.0",
"method": "resources/read",
"params": {
"uri": "schema://database"
}
}Pre-defined prompts for common operations:
-
analyze_data: Analyze dataset and provide insights -
optimize_query: Suggest query optimizations -
schema_design: Help design database schema -
migration_plan: Create migration strategies
MCP supports multiple transport mechanisms:
-
stdio (Standard Input/Output)
- Best for local CLI tools
- Direct process communication
-
HTTP/SSE (Server-Sent Events)
- Best for web applications
- Reuses existing HTTP infrastructure
-
WebSocket
- Best for real-time bidirectional communication
- Low latency
// MCP Server Handler (Pseudocode)
class McpServer {
public:
// Initialize MCP server
void initialize(const Config& config);
// Handle MCP requests
json handleRequest(const json& request);
// Tool handlers
json executeTool(const string& toolName, const json& args);
// Resource handlers
json readResource(const string& uri);
// Prompt handlers
json getPrompt(const string& promptName, const json& args);
};Add MCP configuration to themis.json:
{
"enable_mcp": true,
"mcp_transport": "websocket",
"mcp_port": 8085,
"mcp_max_context_size": 1000000,
"mcp_enable_schema_context": true,
"mcp_enable_stats_context": true,
"mcp_tools": [
"query",
"put_entity",
"get_entity",
"delete_entity",
"get_schema"
]
}MCP support is disabled by default (opt-in for security):
# Build with MCP support
cmake -B build -S . -DTHEMIS_ENABLE_MCP=ON
cmake --build build -j8from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
server_params = StdioServerParameters(
command="themisdb-mcp-server",
args=["--config", "themis.json"]
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# Execute natural language query
result = await session.call_tool(
"query",
{
"query": "Find all users who signed up last week",
"language": "natural"
}
)
print(result){
"mcpServers": {
"themisdb": {
"command": "themisdb-mcp-server",
"args": ["--config", "/path/to/themis.json"],
"env": {
"THEMIS_API_KEY": "your-api-key"
}
}
}
}const ws = new WebSocket('ws://localhost:8085/mcp');
ws.onopen = () => {
// Initialize MCP session
ws.send(JSON.stringify({
jsonrpc: '2.0',
method: 'initialize',
params: {
protocolVersion: '2024-11-05',
capabilities: {
tools: {},
resources: {}
},
clientInfo: {
name: 'ThemisDB Web Client',
version: '1.0.0'
}
},
id: 1
}));
};
ws.onmessage = (event) => {
const response = JSON.parse(event.data);
console.log('MCP Response:', response);
};
// Call a tool
function queryDatabase(naturalLanguageQuery) {
ws.send(JSON.stringify({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'query',
arguments: {
query: naturalLanguageQuery,
language: 'natural'
}
},
id: 2
}));
}
queryDatabase('Show me all active users');- API key required for MCP connections
- JWT token support for session management
- OAuth2 integration for enterprise deployments
- Role-based access control (RBAC)
- Tool-level permissions
- Resource-level permissions
- Query complexity limits
- Per-client rate limits
- Tool invocation limits
- Context size limits
- Query execution timeouts
- Memory limits
- Restricted operations
| Operation | Latency (p50) | Latency (p99) | Throughput |
|---|---|---|---|
| Tool Call (query) | 15ms | 50ms | 2000 req/s |
| Resource Read | 5ms | 20ms | 5000 req/s |
| Prompt Generation | 10ms | 30ms | 3000 req/s |
- Connection Pooling: Reuse MCP sessions
- Context Caching: Cache schema and stats
- Batch Operations: Combine multiple tool calls
- Streaming: Use streaming for large results
// Subscribe to CDC via SSE
const sse = new EventSource('/cdc/stream');
sse.onmessage = (event) => {
const change = JSON.parse(event.data);
// Use MCP to analyze the change
mcpClient.callTool('analyze_change', { change });
};// Real-time MCP over WebSocket
const ws = new WebSocket('ws://localhost:8085/mcp');
// Bidirectional communication
ws.send(JSON.stringify({
method: 'tools/call',
params: { name: 'query', arguments: { query: 'MATCH (n) RETURN count(n)' }}
}));# HTTP/2 Server Push for proactive MCP updates
curl --http2 https://localhost:8443/mcp/tools/call \
-H "Content-Type: application/json" \
-d '{"name": "query", "arguments": {"query": "MATCH (n) RETURN n LIMIT 10"}}'| Aspect | MCP | Direct REST API |
|---|---|---|
| Learning Curve | Low (natural language) | High (learn syntax) |
| Flexibility | High (AI interprets) | Medium (fixed endpoints) |
| Context Awareness | High (schema, stats) | Low (manual context) |
| Error Handling | AI-assisted recovery | Manual error handling |
| Use Case | AI-powered apps | Traditional apps |
See MCP_OFFICE_PLUGINS.md for detailed information about using MCP with Microsoft Office plugins (Word, Excel, Outlook).
1. Connection Refused
# Check if MCP server is running
curl http://localhost:8085/mcp/health
# Verify configuration
cat themis.json | grep mcp2. Tool Not Found
// Ensure tool is enabled in config
{
"mcp_tools": ["query", "put_entity", "get_entity"]
}3. Context Too Large
// Reduce context size
{
"mcp_max_context_size": 500000
}- Natural Language to Cypher translation
- AI-powered query optimization
- Automated schema migrations
- Intelligent caching strategies
- Anomaly detection
- Predictive analytics
- Multi-modal support (images, documents)
- Architecture-ACCESS-MODEL-IMPLEMENTATION-SUMMARY
- Architecture-ADR-003-pg-dump-sql-parser
- Architecture-BASEENTITY-PRINCIPLE
- Architecture-CACHE-STORAGE-INTEGRATION
- Architecture-CMAKE-ARCHITECTURE
- Architecture-CMAKE-FLAGS-REFERENCE
- Architecture-CMAKE-MODULAR-ARCHITECTURE
- Architecture-CONCERNS-ARCHITECTURE-DIAGRAM
- Architecture-CONCERNS-IMPLEMENTATION-SUMMARY
- Architecture-CONTENT-MODEL
- Architecture-COPILOT-THEMISDB-GRAPH-RAG-BACKEND-ARCHITECTURE
- Architecture-CRYPTO-AND-KEYS
- Architecture-FEATURE-FLAGS-REFERENCE
- Architecture-GPU-ARCHITECTURE-REVIEW-TEMPLATE
- Architecture-HTTP-SHUTDOWN-HARDENING
- Architecture-MIGRATION-GUIDE-CONCERNS
- Architecture-MIGRATION-GUIDE-v13-v14
- Architecture-MODULARIZATION-GUIDE
- Architecture-MODULAR-ARCHITECTURE-ROADMAP
- Architecture-MODULE-ARCHITECTURE-INDEX
- Architecture-P1D01-ISSMPLUGIN-DESIGN-REVIEW
- Architecture-P1-D01-ISSMPLUGIN-DESIGN-REVIEW
- Architecture-P1-D08-MAMBA-GOVERNANCE-CONTRACT
- Architecture-P1-P2-IMPLEMENTATION-COMPLETION-INDEX
- Architecture-PHASE0-COMPLETION-ASSESSMENT
- Architecture-PHASE3-QUERYENGINE-DI-ARCHITECTURE
- Architecture-PHASE4-INDEX-MANAGER-DI
- Architecture-POSTGRESQL-WIRE-PROTOCOL
- Architecture-QUERYENGINE-IMPLEMENTATION-GUIDE
- Architecture-QUERY-SCHEDULING
- Architecture-RAFT-CONSENSUS-DESIGN
- Architecture-README
- Architecture-README-SSM-HYBRID-IMPLEMENTATION
- Architecture-REFACTORING-SUMMARY
- Architecture-RESOURCE-POOLING
- Architecture-SOURCE-DIRECTORY-GUIDE
- Architecture-THEMIS-CORE-GUIDE
- Architecture-UNIFIED-ACCESS-MODEL
- Architecture-WAL-GRPC-MTLS-CONFIGURATION
- Architecture-WIRE-PROTOCOL-RETRY
- Architecture-boltzmann-observability-draft
- Architecture-experimental-logarithmic-vector-storage
- Architecture-llm-wiki-mvp-adr
- Architecture-rewrite-engine-architecture
- Architecture-rope-api-architecture
- Architecture-ssm-gguf-mamba-status
- Architecture-ssm-hybrid-analysis
- Architecture-ssm-hybrid-rollout-plan
- Architecture-ssm-plugin-interface-design-review
- Architecture-transaction-coordinators
- Architecture-wiki-secondary-index
- Architecture-wire-protocol
- Governance-DISABLED-STUB-POLICY
- Governance-DOCS-PR-POLICY
- Governance-GA-PROMOTION-SIGN-OFF
- Governance-GITHUB-MILESTONES-SETUP
- Governance-MATURITY-CLAIM-VERIFICATION-CHECKLIST
- Governance-MATURITY-EVIDENCE-REGISTRY
- Governance-MERGE-GATE-BOT-CONFIG
- Governance-MERGE-GATE-STATUS-LIVE
- Governance-PHASE3-ENFORCEMENT-RUNBOOK
- Governance-PHASE-1-CLOSURE-REPORT
- Governance-PHASE-CLOSURE-POLICY
- Governance-PHASE-DEPENDENCY-GRAPH
- Governance-PLUGIN-SUBMODULE-ROLLBACK
- Governance-PRODUCTION-READY-2026-DELIVERY-PLAN
- Governance-PR-VERSION-TARGETING
- Governance-PR-VERSION-TARGETING-BACKFILL
- Governance-QUERY-MODULE-STATUS
- Governance-README
- Governance-RELEASE-PROMOTION-GATE-POLICY
- Governance-RELEASE-VALIDATION-CHECKLIST
- Governance-SECURITY-MODULE-5671-EVIDENCE-SUMMARY
- Governance-SHARDING-P6-RESIDUAL-RISK-ACCEPTANCE
- Governance-SOURCECODE-COMPLIANCE-GOVERNANCE
- Governance-UPDATES-DEVELOPMENT-STATUS-SIGN-OFF
- Governance-WAVE-C-IMPLEMENTATION-COMPLETE
- Module-acceleration-Roadmap
- Module-access-model-Roadmap
- Module-ai-Roadmap
- Module-analytics-Roadmap
- Module-api-Roadmap
- Module-aql-Roadmap
- Module-auth-Roadmap
- Module-base-Roadmap
- Module-cache-Roadmap
- Module-cdc-Roadmap
- Module-chaos-Roadmap
- Module-chimera-Roadmap
- Module-config-Roadmap
- Module-content-Roadmap
- Module-core-Roadmap
- Module-distributed-knowledge-Roadmap
- Module-distributed-tensor-Roadmap
- Module-document-Roadmap
- Module-ethics-ai-Roadmap
- Module-evaluation-Roadmap
- Module-execution-Roadmap
- Module-exporters-Roadmap
- Module-failover-Roadmap
- Module-geo-Roadmap
- Module-governance-Roadmap
- Module-gpu-Roadmap
- Module-graph-Roadmap
- Module-image-analysis-Roadmap
- Module-importers-Roadmap
- Module-index-Roadmap
- Module-ingestion-Roadmap
- Module-llama-cpp-Roadmap
- Module-llm-Roadmap
- Module-llm-streaming-Roadmap
- Module-llm-wiki-Roadmap
- Module-maintenance-Roadmap
- Module-metadata-Roadmap
- Module-network-Roadmap
- Module-observability-Roadmap
- Module-onnx-clip-Roadmap
- Module-performance-Roadmap
- Module-plugins-Roadmap
- Module-process-Roadmap
- Module-projects-Roadmap
- Module-prompt-engineering-Roadmap
- Module-query-Roadmap
- Module-rag-Roadmap
- Module-replication-Roadmap
- Module-retrieval-Roadmap
- Module-rpc-grpc-Roadmap
- Module-scheduler-Roadmap
- Module-scraper-Roadmap
- Module-search-Roadmap
- Module-security-Roadmap
- Module-server-Roadmap
- Module-sharding-Roadmap
- Module-stable-diffusion-Roadmap
- Module-storage-Roadmap
- Module-temporal-Roadmap
- Module-tensor-Roadmap
- Module-themis-Roadmap
- Module-timeseries-Roadmap
- Module-toolbox-Roadmap
- Module-training-Roadmap
- Module-transaction-Roadmap
- Module-updates-Roadmap
- Module-user-storage-encrypted-Roadmap
- Module-utils-Roadmap
- Module-vector-search-Roadmap
- Module-voice-Roadmap
- Module-whisper-Roadmap