Skip to main content
Glama
joeleesuh

mcp-simple-server

by joeleesuh
README.md
# MCP Simple Server

A simple Model Context Protocol (MCP) server with three basic tools: echo, add numbers, and get timestamp.

Supports both **stdio** and **HTTP/WebSocket** transport modes for flexible deployment options.

## Features

- **echo**: Echoes back any message you provide
- **add**: Adds two numbers together
- **get_timestamp**: Returns the current timestamp in ISO 8601 format
- **Dual Mode Support**: Run in stdio mode (local) or HTTP/WebSocket mode (remote)
- **HTTP REST API**: Health checks and server info endpoints
- **WebSocket Support**: Real-time MCP protocol communication

## Installation

```bash
npm install
```

## Building

```bash
npm run build
```

## Running the Server

### stdio Mode (Default - Local Development)

```bash
npm start
# or
MCP_MODE=stdio node dist/index.js
```

### HTTP/WebSocket Mode (Remote Access)

```bash
MCP_MODE=http PORT=3000 node dist/index.js
```

Once running in HTTP mode, access:
- Health check: `http://localhost:3000/health`
- Server info: `http://localhost:3000/`
- WebSocket: `ws://localhost:3000/`

## Tools

### echo
Echoes back the provided message.

**Arguments:**
- `message` (string, required): The message to echo back

**Example:**
```json
{
  "message": "Hello, World!"
}
```

### add
Adds two numbers together.

**Arguments:**
- `a` (number, required): The first number
- `b` (number, required): The second number

**Example:**
```json
{
  "a": 5,
  "b": 3
}
```

### get_timestamp
Returns the current timestamp in ISO 8601 format.

**Arguments:** None

## Deployment

### AWS EC2 Deployment

Deploy to AWS EC2 with automated setup using AWS CloudShell. See [AWS_DEPLOYMENT.md](AWS_DEPLOYMENT.md) for detailed instructions.

**Quick Start:**
```bash
# From AWS CloudShell
curl -O https://raw.githubusercontent.com/joeleesuh/mcp-simple-server/main/scripts/deploy-to-ec2.sh
chmod +x deploy-to-ec2.sh
./deploy-to-ec2.sh
```

Includes:
- Automated EC2 instance provisioning (t3.micro - Free Tier eligible)
- Auto-install Node.js and dependencies
- **Runs in HTTP mode** on port 3000 with WebSocket support
- Security group configured for port 3000 access
- Systemd service setup with environment variables
- AWS Session Manager access (no SSH keys required)

After deployment, access the server at:
- `http://<PUBLIC_IP>:3000/health` - Health check
- `http://<PUBLIC_IP>:3000/` - Server info
- `ws://<PUBLIC_IP>:3000/` - WebSocket endpoint

### Deployment to smithery.ai

This project is configured for deployment on Smithery.ai with:
- `Dockerfile` - Multi-stage Docker build for optimized container image
- `smithery.yaml` - Smithery configuration for stdio-based MCP server
- `.dockerignore` - Excludes unnecessary files from Docker build

### Prerequisites

1. Create a GitHub repository for this project
2. Push your code to GitHub (including Dockerfile and smithery.yaml)
3. Create an account on [smithery.ai](https://smithery.ai)
4. (Optional) Test Docker build locally: `docker build -t mcp-simple-server .`

### Steps to Deploy

1. **Push to GitHub** (if not already done):
   ```bash
   git add .
   git commit -m "Add Smithery deployment configuration"
   git push
   ```

2. **Deploy on smithery.ai**:
   - Go to [smithery.ai](https://smithery.ai)
   - Sign in with your GitHub account
   - Click "New Server" or "Deploy Server"
   - Connect your GitHub repository
   - Select the `mcp-simple-server` repository
   - Smithery will automatically detect `Dockerfile` and `smithery.yaml`
   - Click "Deploy"

3. **Use Your Server**:
   - Once deployed, Smithery will provide installation instructions
   - You can install it with: `npx @smithery/cli install <your-server-name>`
   - Or use it directly in Claude Desktop or other MCP clients

### Example Claude Desktop Configuration

After deployment, add this to your Claude Desktop configuration:

```json
{
  "mcpServers": {
    "simple-server": {
      "command": "npx",
      "args": ["-y", "@smithery/mcp-simple-server"]
    }
  }
}
```

Or if testing locally:

```json
{
  "mcpServers": {
    "simple-server": {
      "command": "node",
      "args": ["C:/Users/User/mcp-simple-server/dist/index.js"]
    }
  }
}
```

## Development

### Project Structure

```
mcp-simple-server/
├── src/
│   └── index.ts              # Main server implementation
├── scripts/
│   ├── deploy-to-ec2.sh      # AWS CloudShell deployment script
│   └── user-data.sh          # EC2 instance initialization script
├── dist/                     # Compiled JavaScript (generated)
├── Dockerfile                # Docker container configuration
├── smithery.yaml             # Smithery deployment configuration
├── .dockerignore             # Docker build exclusions
├── package.json              # Dependencies and scripts
├── tsconfig.json             # TypeScript configuration
├── README.md                # This file
└── AWS_DEPLOYMENT.md        # AWS EC2 deployment guide
```

### Adding New Tools

To add new tools, modify `src/index.ts`:

1. Add the tool definition to the `TOOLS` array
2. Add a new case in the `CallToolRequestSchema` handler switch statement
3. Rebuild the project: `npm run build`

## License

MIT

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool performs a completely distinct function: echo returns input, add computes a sum, and get_timestamp returns time. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names are lowercase imperative verbs, with 'get_timestamp' following a verb_noun pattern while 'echo' and 'add' are single verbs. The style is coherent and predictable.

Tool Count5/5

Three tools is an appropriate size for a simple utility server. Each tool serves a clear purpose without unnecessary bloat or redundancy.

Completeness5/5

As a general-purpose simple server, there is no single domain requiring full CRUD coverage. The provided tools cover a reasonable set of basic operations for a lightweight utility.

Maintenance

ActivityInactive
ResponsivenessNo issues