Skip to main content
Glama
kylekanouse

Demo MCP Server

by kylekanouse

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

Related MCP server: MCP Server Template

πŸ“ 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

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/kylekanouse/Test-MCP---DEMO-MCP-Dev-1'

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