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.
- 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
npm install
npm run build
npm start
# or
MCP_MODE=stdio node dist/index.js
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/
Echoes back the provided message.
Arguments:
message
(string, required): The message to echo back
Example:
{
"message": "Hello, World!"
}
Adds two numbers together.
Arguments:
a
(number, required): The first numberb
(number, required): The second number
Example:
{
"a": 5,
"b": 3
}
Returns the current timestamp in ISO 8601 format.
Arguments: None
Deploy to AWS EC2 with automated setup using AWS CloudShell. See AWS_DEPLOYMENT.md for detailed instructions.
Quick Start:
# 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 checkhttp://<PUBLIC_IP>:3000/
- Server infows://<PUBLIC_IP>:3000/
- WebSocket endpoint
This project is configured for deployment on Smithery.ai with:
Dockerfile
- Multi-stage Docker build for optimized container imagesmithery.yaml
- Smithery configuration for stdio-based MCP server.dockerignore
- Excludes unnecessary files from Docker build
- Create a GitHub repository for this project
- Push your code to GitHub (including Dockerfile and smithery.yaml)
- Create an account on smithery.ai
- (Optional) Test Docker build locally:
docker build -t mcp-simple-server .
-
Push to GitHub (if not already done):
git add . git commit -m "Add Smithery deployment configuration" git push
-
Deploy on smithery.ai:
- Go to 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
andsmithery.yaml
- Click "Deploy"
-
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
After deployment, add this to your Claude Desktop configuration:
{
"mcpServers": {
"simple-server": {
"command": "npx",
"args": ["-y", "@smithery/mcp-simple-server"]
}
}
}
Or if testing locally:
{
"mcpServers": {
"simple-server": {
"command": "node",
"args": ["C:/Users/User/mcp-simple-server/dist/index.js"]
}
}
}
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
To add new tools, modify src/index.ts
:
- Add the tool definition to the
TOOLS
array - Add a new case in the
CallToolRequestSchema
handler switch statement - Rebuild the project:
npm run build
MIT