
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.
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
-
Clone the repository:
git clone <repository-url> cd demo-mcp-dev-1
-
Install dependencies:
npm install
-
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 numberssubtract
- Subtract two numbersmultiply
- Multiply two numbersdivide
- 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 informationenv://{varName}
- Access environment variablesprocess://info
- Node.js process information
Configuration
config://app
- Application configurationsettings://{category}/{key}
- Dynamic configuration settingshealth://status
- Health and status information
📝 Available Prompts
Code Review Prompts
review-code
- Comprehensive code review with focus areasrefactor-code
- Code refactoring suggestionsdocument-code
- Generate code documentation
Writing Assistance
write-email
- Professional email generationwrite-technical-doc
- Technical documentation creationsummarize-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:
- Scans component directories for TypeScript/JavaScript files
- Dynamically imports modules using file URLs
- Validates module contracts
- 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
- Create a new file in
src/tools/
(e.g.,my-new-tool.ts
) - 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;
- The tool will be automatically loaded on server startup!
Adding a New Resource
- Create a new file in
src/resources/
(e.g.,my-resource.ts
) - Export an MCP module following the same pattern as tools
- Use
server.registerResource()
in the register function
Adding a New Prompt
- Create a new file in
src/prompts/
(e.g.,my-prompt.ts
) - Export an MCP module following the same pattern
- 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
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Built with the Model Context Protocol TypeScript SDK
- Inspired by Domain-Driven Design principles
- Thanks to the MCP community for excellent documentation and examples
Recommended Servers
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.
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.
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.

VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.

E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.