Skip to main content
Glama

FoundryVTT MCP Server

by laurigates
Makefile8.15 kB
# FoundryVTT MCP Server - Development Makefile # # This Makefile provides convenient commands for common development tasks # including building, testing, linting, and deployment operations. # Configuration NODE_BIN := npx TSX := $(NODE_BIN) tsx PLAYWRIGHT := $(NODE_BIN) playwright FOUNDRY_CMD := fvtt FOUNDRY_PID_FILE := .foundry.pid # Default target .PHONY: help help: ## Show this help message @echo "FoundryVTT MCP Server - Development Commands" @echo "=============================================" @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) # Build targets .PHONY: build clean rebuild build: ## Compile TypeScript to JavaScript npm run build clean: ## Remove build artifacts and temporary files npm run clean rm -rf node_modules/.cache rm -rf test-results rm -rf playwright-report rm -f .foundry.pid rebuild: clean build ## Clean and rebuild the project # Development targets .PHONY: dev install setup dev: ## Start development server with hot reload npm run dev install: ## Install dependencies npm install setup: install build test-connection ## Full project setup # Testing targets .PHONY: test test-unit test-watch test-coverage test-connection test: ## Run all unit tests npm test test-unit: test ## Alias for test test-watch: ## Run tests in watch mode npm run test:watch test-coverage: ## Generate test coverage report npm run test:coverage test-connection: ## Test connection to FoundryVTT server npm run test-connection # End-to-End testing targets .PHONY: test-e2e test-e2e-ui test-e2e-headed test-e2e-debug test-e2e-report test-e2e: ## Run E2E tests (auto-starts FoundryVTT) npm run test:e2e test-e2e-ui: ## Run E2E tests with interactive UI npm run test:e2e:ui test-e2e-headed: ## Run E2E tests with visible browser npm run test:e2e:headed test-e2e-debug: ## Run E2E tests in debug mode npm run test:e2e:debug test-e2e-report: ## View last E2E test report npm run test:e2e:report # Issue-specific testing .PHONY: test-issue-7 test-issue-7-headed test-issue-7: ## Test for JSON parsing errors from issue #7 npm run test:issue-7 test-issue-7-headed: ## Test issue #7 with visible browser npm run test:issue-7:headed # Advanced E2E testing .PHONY: test-e2e-full test-e2e-with-server foundry-start foundry-stop foundry-status test-e2e-full: foundry-start test-e2e foundry-stop ## Full E2E test cycle with server management test-e2e-with-server: ## Run E2E tests with manual server checks $(TSX) scripts/run-e2e-tests.ts foundry-start: ## Start FoundryVTT server in background @if [ -f $(FOUNDRY_PID_FILE) ] && kill -0 `cat $(FOUNDRY_PID_FILE)` 2>/dev/null; then \ echo "FoundryVTT server already running (PID: `cat $(FOUNDRY_PID_FILE)`)"; \ else \ echo "Starting FoundryVTT server..."; \ $(FOUNDRY_CMD) launch --headless --world=test-world & echo $$! > $(FOUNDRY_PID_FILE); \ echo "FoundryVTT server started (PID: `cat $(FOUNDRY_PID_FILE)`)"; \ echo "Waiting for server to be ready..."; \ sleep 30; \ fi foundry-stop: ## Stop FoundryVTT server @if [ -f $(FOUNDRY_PID_FILE) ]; then \ if kill -0 `cat $(FOUNDRY_PID_FILE)` 2>/dev/null; then \ echo "Stopping FoundryVTT server (PID: `cat $(FOUNDRY_PID_FILE)`)"; \ kill `cat $(FOUNDRY_PID_FILE)`; \ rm -f $(FOUNDRY_PID_FILE); \ else \ echo "FoundryVTT server not running"; \ rm -f $(FOUNDRY_PID_FILE); \ fi; \ else \ echo "FoundryVTT server PID file not found"; \ fi foundry-status: ## Check FoundryVTT server status @if [ -f $(FOUNDRY_PID_FILE) ]; then \ if kill -0 `cat $(FOUNDRY_PID_FILE)` 2>/dev/null; then \ echo "FoundryVTT server running (PID: `cat $(FOUNDRY_PID_FILE)`)"; \ else \ echo "FoundryVTT server not running (stale PID file)"; \ rm -f $(FOUNDRY_PID_FILE); \ fi; \ else \ echo "FoundryVTT server not running"; \ fi # Quality assurance targets .PHONY: lint lint-fix format check-types lint: ## Run ESLint on source code npm run lint lint-fix: ## Run ESLint with auto-fix $(NODE_BIN) eslint src --ext .ts --fix format: ## Format code with Prettier (if configured) @if npm list prettier >/dev/null 2>&1; then \ $(NODE_BIN) prettier --write "src/**/*.ts" "tests/**/*.ts"; \ else \ echo "Prettier not installed, skipping formatting"; \ fi check-types: ## Run TypeScript type checking $(NODE_BIN) tsc --noEmit # All quality checks .PHONY: qa qa: lint check-types test ## Run all quality assurance checks # Documentation targets .PHONY: docs docs-serve docs-clean docs: ## Generate TypeDoc documentation npm run docs docs-serve: ## Generate and serve documentation locally npm run docs:serve docs-clean: ## Remove generated documentation rm -rf docs # Release targets .PHONY: prerelease verify-ready verify-ready: qa test-e2e ## Verify project is ready for release @echo "Project verification complete - ready for release" prerelease: verify-ready ## Prepare for release (run all checks) @echo "Pre-release checks passed" # Environment setup targets .PHONY: setup-env setup-dev setup-ci setup-env: ## Set up environment file template @if [ ! -f .env ]; then \ echo "# FoundryVTT MCP Server Configuration" > .env; \ echo "FOUNDRY_URL=http://localhost:30000" >> .env; \ echo "FOUNDRY_API_KEY=your-api-key-here" >> .env; \ echo "# OR use username/password:" >> .env; \ echo "# FOUNDRY_USERNAME=admin" >> .env; \ echo "# FOUNDRY_PASSWORD=admin" >> .env; \ echo "USE_REST_MODULE=true" >> .env; \ echo "LOG_LEVEL=info" >> .env; \ echo ".env file created - please update with your settings"; \ else \ echo ".env file already exists"; \ fi setup-dev: install setup-env ## Set up development environment @echo "Installing Playwright browsers..." $(PLAYWRIGHT) install @echo "Development environment setup complete" setup-ci: install ## Set up CI/CD environment $(PLAYWRIGHT) install --with-deps @echo "CI environment setup complete" # Container targets (if Docker is used) .PHONY: docker-build docker-test docker-clean docker-build: ## Build Docker container @if [ -f Dockerfile ]; then \ docker build -t foundry-mcp-server .; \ else \ echo "Dockerfile not found"; \ fi docker-test: docker-build ## Run tests in Docker container @if [ -f Dockerfile ]; then \ docker run --rm foundry-mcp-server npm test; \ else \ echo "Dockerfile not found"; \ fi docker-clean: ## Clean Docker images and containers @if command -v docker >/dev/null 2>&1; then \ docker system prune -f; \ else \ echo "Docker not installed"; \ fi # Maintenance targets .PHONY: update-deps check-deps security-audit update-deps: ## Update all dependencies npm update npm audit fix check-deps: ## Check for outdated dependencies npm outdated security-audit: ## Run security audit npm audit # Utility targets .PHONY: logs reset-test-data logs: ## Show recent logs (if log files exist) @if [ -d logs ]; then \ tail -f logs/*.log; \ else \ echo "No log files found"; \ fi reset-test-data: ## Reset test data and caches rm -rf test-results rm -rf playwright-report rm -rf coverage rm -rf .nyc_output # Composite targets for common workflows .PHONY: quick-test full-test dev-cycle quick-test: lint test ## Quick development test cycle @echo "Quick test cycle complete" full-test: qa test-e2e ## Full test suite including E2E @echo "Full test suite complete" dev-cycle: clean install build quick-test ## Complete development cycle @echo "Development cycle complete" # Install Playwright if needed .PHONY: install-playwright install-playwright: ## Install Playwright browsers $(PLAYWRIGHT) install # Show project status .PHONY: status status: ## Show project status and environment @echo "FoundryVTT MCP Server Status" @echo "============================" @echo "Node.js version: $$(node --version)" @echo "npm version: $$(npm --version)" @echo "TypeScript version: $$($(NODE_BIN) tsc --version)" @echo "Project version: $$(node -p "require('./package.json').version")" @echo "" @if [ -f .env ]; then \ echo "Environment file: ✓ .env exists"; \ else \ echo "Environment file: ✗ .env missing"; \ fi @echo "" @make foundry-status

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/laurigates/foundryvtt-mcp'

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