Skip to main content
Glama
samwang0723

MCP Perplexity Server

by samwang0723

MCP Perplexity Server

MCP server for Perplexity.ai that provides AI-powered search, research, and reasoning capabilities.

🚀 Features

  • Perplexity AI Integration: Three specialized tools for different use cases

    • perplexity_ask: General conversational AI using sonar-pro model

    • perplexity_research: Deep research with citations using sonar-deep-research model

    • perplexity_reason: Advanced reasoning using sonar-reasoning-pro model

  • TypeScript: Full type safety with modern TypeScript patterns

  • HTTP Transport: RESTful API with Express.js server

  • Session Management: Stateful connections with proper session handling

  • Configuration Management: Environment-based configuration with validation

  • Error Handling: Comprehensive error handling and logging

  • Health Checks: Built-in health monitoring endpoints

  • Docker Support: Production-ready containerization

  • Development Tools: ESLint, Prettier, and testing setup

  • Production Ready: Optimized for scalability and security

Related MCP server: Perplexity Agent MCP

📋 Prerequisites

  • Node.js 20+

  • npm or yarn

  • Docker (optional, for containerization)

🛠️ Quick Start

# Clone the template
git clone <your-repo-url>
cd mcp-perplexity


# Create a new project using the generator
./create-mcp-project your-project-name --description "Your project description" --author "Your Name"

# Or use the Node.js script directly
node setup-new-project.js your-project-name --description "Your project description" --author "Your Name"

Generator Options:

  • --description <desc>: Project description

  • --author <name>: Author name

  • --target-dir <dir>: Target directory (default: mcp-)

  • --install-deps: Install npm dependencies automatically

  • --no-git: Skip git repository initialization

Option 2: Manual Setup

# Clone the template
git clone <your-repo-url>
cd mcp-template

# Install dependencies
npm install

# Copy environment configuration
cp .env.example .env  # Create this file with your settings

2. Environment Configuration

Create a .env file in the root directory:

# Server Configuration
PORT=3000
LOG_LEVEL=info

# Perplexity API Configuration
PERPLEXITY_API_KEY=your_perplexity_api_key_here

3. Development

# Start development server with hot reload
npm run dev

# Build for production
npm run build

# Start production server
npm start

# Run tests
npm test

# Lint and format code
npm run lint
npm run lint:fix

🏗️ Project Structure

mcp-perplexity/
├── src/
│   ├── config/           # Configuration management
│   │   └── index.ts      # Main config file
│   ├── services/         # Service layer
│   │   └── perplexity.ts # Perplexity API service
│   ├── utils/            # Utility functions
│   └── index.ts          # Main server application
├── create-mcp-project    # Bash script for project generation
├── setup-new-project.js  # Node.js project generator
├── Dockerfile            # Docker configuration
├── package.json          # Dependencies and scripts
├── tsconfig.json         # TypeScript configuration
└── README.md            # This file

🔧 Project Generator

This template includes powerful project generation tools to quickly create new MCP servers:

Features:

  • Automatic Name Conversion: Converts kebab-case names to all required formats (camelCase, PascalCase, etc.)

  • File Templating: Updates all files with the new project name and details

  • Git Integration: Optionally initializes a new git repository

  • Dependency Management: Can automatically install npm dependencies

  • Smart Copy Logic: Excludes development files and prevents infinite recursion

Usage Examples:

# Basic usage
./create-mcp-project weather-service

# With full options
./create-mcp-project task-manager \
  --description "AI-powered task management MCP server" \
  --author "Your Name" \
  --install-deps

# Custom target directory
./create-mcp-project file-processor --target-dir ./my-custom-server

# Skip git initialization
./create-mcp-project data-analyzer --no-git

🔧 Architecture

Core Components

  1. McpServerApp: Main application class that orchestrates the MCP server

  2. Configuration: Environment-based configuration with type safety

  3. Session Management: HTTP-based stateful sessions with cleanup

  4. Transport Layer: StreamableHTTPServerTransport for MCP communication

  5. Error Handling: Comprehensive error handling with proper HTTP responses

HTTP Endpoints

  • GET /health - Health check endpoint

  • POST /mcp - Main MCP communication endpoint

  • GET /mcp - Server-to-client notifications via SSE

  • DELETE /mcp - Session termination

🛠️ Customization Guide

Using Perplexity Tools

The server provides three Perplexity AI tools:

1. perplexity_ask

General conversational AI using the sonar-pro model.

{
  "name": "perplexity_ask",
  "arguments": {
    "messages": [
      {
        "role": "user",
        "content": "What are the latest developments in AI?"
      }
    ]
  }
}

2. perplexity_research

Deep research with citations using the sonar-deep-research model.

{
  "name": "perplexity_research",
  "arguments": {
    "messages": [
      {
        "role": "user",
        "content": "Research the current state of quantum computing and its applications"
      }
    ]
  }
}

3. perplexity_reason

Advanced reasoning using the sonar-reasoning-pro model.

{
  "name": "perplexity_reason",
  "arguments": {
    "messages": [
      {
        "role": "user",
        "content": "Analyze the pros and cons of different renewable energy sources"
      }
    ]
  }
}

Adding New Tools

To add a new MCP tool, modify the createServer() method in src/index.ts:

// Register your custom tool
server.tool(
  'your-tool-name',
  'Description of your tool',
  {
    // Define input schema using Zod
    parameter1: z.string().describe('Parameter description'),
    parameter2: z.number().optional().describe('Optional parameter'),
  },
  async ({ parameter1, parameter2 }) => {
    try {
      // Your tool implementation here
      const result = await yourCustomLogic(parameter1, parameter2);

      return {
        content: [
          {
            type: 'text',
            text: JSON.stringify(result, null, 2),
          } as TextContent,
        ],
      };
    } catch (error) {
      const errorMessage =
        error instanceof Error ? error.message : String(error);
      throw new Error(`Error in your-tool-name: ${errorMessage}`);
    }
  }
);

Configuration Management

Add new configuration options in src/config/index.ts:

interface Config {
  logging: LoggingConfig;
  server: ServerConfig;
  // Add your custom config sections
  database: {
    url: string;
    timeout: number;
  };
  external: {
    apiKey: string;
    baseUrl: string;
  };
}

const config: Config = {
  // ... existing config
  database: {
    url: process.env.DATABASE_URL || 'sqlite://memory',
    timeout: parseInt(process.env.DB_TIMEOUT || '5000', 10),
  },
  external: {
    apiKey: process.env.EXTERNAL_API_KEY || '',
    baseUrl: process.env.EXTERNAL_BASE_URL || 'https://api.example.com',
  },
};

Adding Middleware

Add Express middleware in the run() method:

async run() {
  const app = express();
  app.use(express.json());

  // Add your custom middleware
  app.use(cors()); // CORS support
  app.use(helmet()); // Security headers
  app.use(morgan('combined')); // Request logging

  // ... rest of the setup
}

🐳 Docker Deployment

Build and Run

# Build Docker image
docker build -t mcp-perplexity-server .

# Run container
docker run -p 3000:3000 --env-file .env mcp-perplexity-server

Create a docker-compose.yml:

version: '3.8'
services:
  mcp-server:
    build: .
    ports:
      - '3000:3000'
    environment:
      - NODE_ENV=production
      - PORT=3000
      - LOG_LEVEL=info
    restart: unless-stopped
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
      interval: 30s
      timeout: 10s
      retries: 3

Run with:

docker-compose up -d

🔒 Security Best Practices

This template implements several security measures:

  • Input Validation: Zod schema validation for all tool parameters

  • Error Handling: Safe error responses without information leakage

  • Session Management: Proper session cleanup and validation

  • HTTP Security: Ready for security headers and CORS configuration

  • Environment Variables: Secure configuration management

// Add security middleware
import helmet from 'helmet';
import cors from 'cors';
import rateLimit from 'express-rate-limit';

app.use(helmet());
app.use(
  cors({
    origin: process.env.ALLOWED_ORIGINS?.split(',') || false,
  })
);

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // Limit each IP to 100 requests per windowMs
});
app.use('/mcp', limiter);

📊 Monitoring and Logging

The template includes basic logging setup. For production, consider adding:

  • Structured Logging: Winston with JSON format

  • Metrics Collection: Prometheus metrics

  • Health Checks: Comprehensive health endpoints

  • APM Integration: Application Performance Monitoring

🧪 Testing

# Run all tests
npm test

# Run tests in watch mode
npm run test:watch

# Run tests with coverage
npm run test:coverage

Writing Tests

Create test files in src/**/*.test.ts:

import { describe, test, expect } from '@jest/globals';
// Your test imports

describe('YourComponent', () => {
  test('should handle valid input', async () => {
    // Test implementation
  });
});

🚀 Production Deployment

Environment Variables

NODE_ENV=production
PORT=3000
LOG_LEVEL=warn

# Add your production-specific variables
DATABASE_URL=postgresql://...
REDIS_URL=redis://...
API_KEYS=...

Performance Optimization

  • Enable gzip compression

  • Implement proper caching headers

  • Use connection pooling for databases

  • Monitor memory usage and implement limits

  • Set up log rotation

Scaling Considerations

  • Load balancing across multiple instances

  • Database connection pooling

  • Session store externalization (Redis)

  • Horizontal pod autoscaling in Kubernetes

📚 References

🤝 Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests for new functionality

  5. Run the test suite

  6. Submit a pull request

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🆘 Support

For questions and support:

  • Check the MCP Documentation

  • Review existing issues

  • Create a new issue with detailed information


Happy coding! 🎉

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Integrates Perplexity AI's search-enhanced language models with Claude Desktop, providing three tools with different complexity levels for quick fact-checking, technical analysis, and deep research.
    Last updated
    3
    2
  • A
    license
    A
    quality
    A
    maintenance
    Enables coding assistants to access Perplexity AI for quick fact-checking and in-depth research. Provides two tools: lookup for fast documentation queries and answer for comprehensive research with recommendations.
    Last updated
    2
    24
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides AI assistants with real-time web search, reasoning, and research capabilities through Perplexity's Sonar models and Search API. Supports quick searches, deep research, advanced reasoning, and direct web search with ranked results.
    Last updated
    4
    35,103
    2,421
    MIT
  • F
    license
    -
    quality
    D
    maintenance
    Integrates with Perplexity's API to provide web search and AI-powered answers with citations. Offers a three-tier research workflow: search for sources, ask for grounded AI answers, and ask_more for deeper analysis using advanced models.
    Last updated

View all related MCP servers

Related MCP Connectors

  • Search your knowledge bases from any AI assistant using hybrid RAG.

  • SEO research, audits, backlinks, GSC, and content workflow tools for AI agents.

  • Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/samwang0723/mcp-perplexity'

If you have feedback or need assistance with the MCP directory API, please join our Discord server