Skip to main content
Glama

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

Related MCP Servers

  • A
    security
    A
    license
    A
    quality
    TypeScript-based MCP server designed to enhance code editing experiences by providing features such as hover information, code completion, and diagnostics.
    Last updated -
    3
    25
    MIT License
    • Apple
  • A
    security
    F
    license
    A
    quality
    A template for creating Model Context Protocol (MCP) servers in TypeScript, offering features like container-based dependency injection, a service-based architecture, and integration with the LLM CLI for architectural design feedback through natural language.
    Last updated -
    1
    1
    7
  • -
    security
    F
    license
    -
    quality
    A TypeScript framework for building Model Context Protocol (MCP) servers with automatic discovery and loading of tools, resources, and prompts.
    Last updated -
    0
    • Apple
  • -
    security
    A
    license
    -
    quality
    A TypeScript framework for building MCP servers with client session management capabilities, supporting tools definition, authentication, image content, logging, and error handling.
    Last updated -
    66,349
    MIT License

View all related MCP servers

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