Skip to main content

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

TypeDescription
authenticationVerify identity (API keys, tokens)
authorizationCheck permissions
rate-limitLimit request frequency
ip-filterAllow/deny by IP