Skip to main content
Glama

MCP Weather Server

by broerjuang
64
Makefile5.95 kB
# ============================================================================= # MCP Weather Server - Docker Management # ============================================================================= # Variables DOCKER_IMAGE_NAME = mcp-weather-server DOCKER_IMAGE_TAG = latest DOCKER_CONTAINER_NAME = mcp-weather-container DOCKER_BUILD_TARGET = production # Help command - shows available targets .PHONY: help help: @echo "MCP Weather Server - Available Commands:" @echo "" @echo " Development Commands:" @echo " install - Install dependencies" @echo " build - Build TypeScript to JavaScript" @echo " dev - Run in development mode" @echo " clean - Clean build artifacts" @echo "" @echo " Docker Commands:" @echo " docker-build - Build Docker image" @echo " docker-run - Run Docker container" @echo " docker-stop - Stop running container" @echo " docker-restart - Restart container" @echo " docker-logs - Show container logs" @echo " docker-shell - Access container shell" @echo " docker-clean - Remove container and image" @echo "" @echo " Testing Commands:" @echo " test-docker - Test the containerized application" @echo " test-weather - Test weather functionality in container" @echo "" # ============================================================================= # Development Commands # ============================================================================= .PHONY: install install: @echo "Installing dependencies..." npm install .PHONY: build build: @echo "Building TypeScript..." npm run build .PHONY: dev dev: @echo "Starting development server..." npm run build && node build/index.js .PHONY: clean clean: @echo "Cleaning build artifacts..." rm -rf build/ rm -rf node_modules/ rm -f package-lock.json # ============================================================================= # Docker Commands # ============================================================================= .PHONY: docker-build docker-build: @echo "Building Docker image: $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" docker build -t $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG) . .PHONY: docker-run docker-run: @echo "Running Docker container: $(DOCKER_CONTAINER_NAME)" @docker stop $(DOCKER_CONTAINER_NAME) 2>/dev/null || true @docker rm $(DOCKER_CONTAINER_NAME) 2>/dev/null || true docker run -d \ --name $(DOCKER_CONTAINER_NAME) \ --restart unless-stopped \ $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG) .PHONY: docker-run-interactive docker-run-interactive: @echo "Running Docker container interactively..." @docker stop $(DOCKER_CONTAINER_NAME) 2>/dev/null || true @docker rm $(DOCKER_CONTAINER_NAME) 2>/dev/null || true docker run -it \ --name $(DOCKER_CONTAINER_NAME) \ $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG) .PHONY: docker-stop docker-stop: @echo "Stopping container: $(DOCKER_CONTAINER_NAME)" docker stop $(DOCKER_CONTAINER_NAME) .PHONY: docker-restart docker-restart: docker-stop docker-run @echo "Container restarted successfully" .PHONY: docker-logs docker-logs: @echo "Showing logs for: $(DOCKER_CONTAINER_NAME)" docker logs -f $(DOCKER_CONTAINER_NAME) .PHONY: docker-shell docker-shell: @echo "Accessing shell in: $(DOCKER_CONTAINER_NAME)" docker exec -it $(DOCKER_CONTAINER_NAME) /bin/sh .PHONY: docker-clean docker-clean: @echo "Cleaning up Docker resources..." @docker stop $(DOCKER_CONTAINER_NAME) 2>/dev/null || true @docker rm $(DOCKER_CONTAINER_NAME) 2>/dev/null || true @docker rmi $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG) 2>/dev/null || true @echo "Docker cleanup completed" # ============================================================================= # Testing Commands # ============================================================================= .PHONY: test-docker test-docker: @echo "Testing containerized MCP Weather Server..." @echo "Building image..." @make docker-build @echo "Testing container startup..." @if docker run --rm $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG) 2>&1 | grep -q "Weather MCP Server running on stdio"; then \ echo "✅ Container starts successfully and shows expected output"; \ else \ echo "❌ Container failed to start properly"; \ exit 1; \ fi @echo "Testing health check..." @if docker run --rm $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG) node -e "console.log('Health check passed')" > /dev/null 2>&1; then \ echo "✅ Health check passed"; \ else \ echo "❌ Health check failed"; \ exit 1; \ fi @echo "Testing security (non-root user)..." @if docker run --rm $(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG) whoami | grep -q "mcpuser"; then \ echo "✅ Container runs as non-root user (mcpuser)"; \ else \ echo "❌ Container security check failed"; \ exit 1; \ fi @echo "✅ All Docker tests passed!" .PHONY: test-weather test-weather: @echo "Testing weather functionality..." @echo "This would typically involve MCP client interactions" @echo "For now, checking container health..." @make docker-run @sleep 5 @docker exec $(DOCKER_CONTAINER_NAME) node -e "console.log('MCP Weather Server is operational')" @make docker-stop # ============================================================================= # Utility Commands # ============================================================================= .PHONY: docker-info docker-info: @echo "Docker Image Info:" @echo " Name: $(DOCKER_IMAGE_NAME)" @echo " Tag: $(DOCKER_IMAGE_TAG)" @echo " Container: $(DOCKER_CONTAINER_NAME)" @echo "" @if docker images | grep -q $(DOCKER_IMAGE_NAME); then \ echo "Docker Image Details:"; \ docker images $(DOCKER_IMAGE_NAME); \ else \ echo "Docker image not built yet. Run 'make docker-build' first."; \ fi .PHONY: all all: clean install build docker-build test-docker @echo "✅ All tasks completed successfully!" # Default target .DEFAULT_GOAL := help

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/broerjuang/mcp-weather'

If you have feedback or need assistance with the MCP directory API, please join our Discord server