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

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

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