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
    24
    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 -
    1
    • 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 -
    51,200
    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