Skip to main content

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