Documentation Index
Fetch the complete documentation index at: https://docs.praison.ai/llms.txt
Use this file to discover all available pages before exploring further.
MCP Security
Add authentication, authorization, and rate limiting to your MCP (Model Context Protocol) connections.
API Key Authentication
import { MCPSecurity, createMCPSecurity, createApiKeyPolicy } from 'praisonai';
// Create security with API key validation
const security = createMCPSecurity();
// Add API key policy
const apiKeyPolicy = createApiKeyPolicy({
keys: ['sk-prod-key-1', 'sk-prod-key-2'],
header: 'X-API-Key' // Header to check
});
security.addPolicy(apiKeyPolicy);
// Validate request
const context = {
headers: { 'X-API-Key': 'sk-prod-key-1' },
ip: '192.168.1.1'
};
const result = await security.validate(context);
console.log('Allowed:', result.allowed);
console.log('Reason:', result.reason);
Rate Limiting
import { MCPSecurity, createRateLimitPolicy } from 'praisonai';
const security = new MCPSecurity();
// Add rate limit policy
const rateLimit = createRateLimitPolicy({
requests: 100, // Max requests
window: 60000, // Per minute (ms)
keyExtractor: (ctx) => ctx.ip // Rate limit by IP
});
security.addPolicy(rateLimit);
// Check rate limit
for (let i = 0; i < 5; i++) {
const result = await security.validate({ ip: '192.168.1.1' });
console.log(`Request ${i + 1}: ${result.allowed ? 'OK' : 'RATE LIMITED'}`);
}
Combined Policies
import {
MCPSecurity,
createApiKeyPolicy,
createRateLimitPolicy
} from 'praisonai';
const security = new MCPSecurity();
// Must have valid API key
security.addPolicy(createApiKeyPolicy({
keys: process.env.API_KEYS?.split(',') || []
}));
// And respect rate limits
security.addPolicy(createRateLimitPolicy({
requests: 1000,
window: 3600000 // Per hour
}));
// Middleware for Express/similar
async function securityMiddleware(req, res, next) {
const result = await security.validate({
headers: req.headers,
ip: req.ip,
path: req.path
});
if (!result.allowed) {
return res.status(result.code || 403).json({ error: result.reason });
}
next();
}
Use with MCP Server
import { MCPServer, MCPSecurity, createApiKeyPolicy } from 'praisonai';
const security = new MCPSecurity();
security.addPolicy(createApiKeyPolicy({ keys: ['secret-key'] }));
const server = new MCPServer({
name: 'Secure MCP Server',
security // Attach security
});
// Server tools are now protected
server.addTool({
name: 'protected_action',
description: 'A protected action',
execute: async () => 'Protected result'
});
Custom Security Policies
import { MCPSecurity, SecurityPolicy } from 'praisonai';
// Create custom IP whitelist policy
const ipWhitelist: SecurityPolicy = {
name: 'ip-whitelist',
type: 'authorization',
validate: async (context) => {
const allowed = ['127.0.0.1', '192.168.1.0/24'];
const isAllowed = allowed.some(ip => context.ip?.startsWith(ip.split('/')[0]));
return {
allowed: isAllowed,
reason: isAllowed ? undefined : 'IP not whitelisted',
code: isAllowed ? undefined : 403
};
}
};
const security = new MCPSecurity();
security.addPolicy(ipWhitelist);
Security Events
import { MCPSecurity } from 'praisonai';
const security = new MCPSecurity({
onViolation: (policy, context, result) => {
console.log(`Security violation: ${policy.name}`);
console.log(`IP: ${context.ip}`);
console.log(`Reason: ${result.reason}`);
// Log to monitoring system
// alerting.notify('security_violation', { policy, context });
}
});
Policy Types
| Type | Description |
|---|
authentication | Verify identity (API keys, tokens) |
authorization | Check permissions |
rate-limit | Limit request frequency |
ip-filter | Allow/deny by IP |