Demo MCP Server

Demo MCP Server

A comprehensive TypeScript boilerplate MCP server featuring domain-driven design and dynamic component loading. Provides example tools for calculations and text processing, system resources, and writing assistance prompts.

Category
Visit Server

README

Demo MCP Server

A comprehensive boilerplate Model Context Protocol (MCP) server built with TypeScript using Domain-Driven Design patterns and dynamic component loading.

🚀 Features

  • Domain-Driven Design: Clean architecture with separated concerns
  • Dynamic Component Loading: File-based automatic loading of MCP components
  • TypeScript: Full type safety and modern JavaScript features
  • Dependency Injection: Modular and testable architecture
  • Example Components: Ready-to-use tools, resources, and prompts
  • Comprehensive Logging: Detailed startup and operation logging
  • Graceful Shutdown: Proper cleanup and resource management

📁 Project Structure

src/
├── index.ts                 # Main entry point
├── types/                   # Type definitions
│   └── index.ts            # MCP interfaces and types
├── services/                # Business logic services
│   ├── index.ts            # Services barrel export
│   └── module-loader-service.ts  # Dynamic module loading
├── server/                  # MCP server wrapper
│   ├── index.ts            # Server barrel export
│   └── my-mcp-server.ts    # Main server implementation
├── tools/                   # MCP tools directory
│   ├── index.ts            # Auto-loading tools
│   ├── calculator-tools.ts # Example arithmetic tools
│   └── text-processing-tools.ts # Example text tools
├── resources/               # MCP resources directory
│   ├── index.ts            # Auto-loading resources
│   ├── system-info-resources.ts # System information
│   └── config-resources.ts # Configuration data
└── prompts/                 # MCP prompts directory
    ├── index.ts            # Auto-loading prompts
    ├── code-review-prompts.ts # Code analysis prompts
    └── writing-assistance-prompts.ts # Writing help prompts

🛠️ Installation

  1. Clone the repository:

    git clone <repository-url>
    cd demo-mcp-dev-1
    
  2. Install dependencies:

    npm install
    
  3. Build the project:

    npm run build
    

🎯 Usage

Development Mode

Run the server in development mode with hot reloading:

npm run dev

Production Mode

Build and run the server in production:

npm run build
npm start

Direct Execution

Run the compiled server directly:

node dist/index.js

🔧 Available Tools

Calculator Tools

  • add - Add two numbers
  • subtract - Subtract two numbers
  • multiply - Multiply two numbers
  • divide - Divide two numbers (with zero-division protection)

Text Processing Tools

  • transform-text - Transform text (uppercase, lowercase, capitalize, reverse, word-count)
  • analyze-text - Analyze text and provide detailed statistics

📚 Available Resources

System Information

  • system://info - System and environment information
  • env://{varName} - Access environment variables
  • process://info - Node.js process information

Configuration

  • config://app - Application configuration
  • settings://{category}/{key} - Dynamic configuration settings
  • health://status - Health and status information

📝 Available Prompts

Code Review Prompts

  • review-code - Comprehensive code review with focus areas
  • refactor-code - Code refactoring suggestions
  • document-code - Generate code documentation

Writing Assistance

  • write-email - Professional email generation
  • write-technical-doc - Technical documentation creation
  • summarize-meeting - Meeting summary generation

🏗️ Architecture

Domain-Driven Design

The project follows DDD principles with clear separation of concerns:

  • Types: Domain interfaces and contracts
  • Services: Business logic and operations
  • Server: Infrastructure and MCP integration
  • Components: MCP-specific implementations (tools, resources, prompts)

Dynamic Component Loading

The ModuleLoaderService automatically discovers and loads MCP components:

  1. Scans component directories for TypeScript/JavaScript files
  2. Dynamically imports modules using file URLs
  3. Validates module contracts
  4. Registers components with the MCP server

Dependency Injection

The MyMCPServer class uses dependency injection patterns:

  • Abstract base classes for extensibility
  • Interface-based dependencies
  • Configurable service injection
  • Clean separation between SDK and business logic

🔌 Adding New Components

Adding a New Tool

  1. Create a new file in src/tools/ (e.g., my-new-tool.ts)
  2. Export an MCP module with the required structure:
import { z } from "zod";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import type { MCPModule } from "../types/index.js";

async function register(server: McpServer): Promise<void> {
  server.registerTool(
    "my-tool",
    {
      title: "My Tool",
      description: "Description of what my tool does",
      inputSchema: {
        param1: z.string().describe("First parameter"),
        param2: z.number().describe("Second parameter")
      }
    },
    async ({ param1, param2 }) => ({
      content: [
        {
          type: "text",
          text: `Tool result: ${param1} - ${param2}`
        }
      ]
    })
  );
}

export const myNewTool: MCPModule = {
  register,
  metadata: {
    name: "my-new-tool",
    description: "My new tool implementation",
    version: "1.0.0",
    author: "Your Name"
  }
};

export default myNewTool;
  1. The tool will be automatically loaded on server startup!

Adding a New Resource

  1. Create a new file in src/resources/ (e.g., my-resource.ts)
  2. Export an MCP module following the same pattern as tools
  3. Use server.registerResource() in the register function

Adding a New Prompt

  1. Create a new file in src/prompts/ (e.g., my-prompt.ts)
  2. Export an MCP module following the same pattern
  3. Use server.registerPrompt() in the register function

🧪 Testing

Run the test suite:

npm test

Run linting:

npm run lint

Type checking:

npm run type-check

🔍 Debugging

The server provides comprehensive logging during startup and operation:

  • Component discovery and loading
  • Registration success/failure
  • Server status and configuration
  • Error details and stack traces

📊 Configuration

The server is configured in src/index.ts:

const serverConfig: MCPServerConfig = {
  name: "demo-mcp-server",
  version: "1.0.0",
  capabilities: {
    tools: true,
    resources: true,
    prompts: true,
    logging: true
  }
};

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

📄 License

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

🙏 Acknowledgments

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured