Math MCP Server
Provides secure mathematical computation capabilities including expression evaluation, symbolic math (derivatives, simplification), matrix operations, statistics, and unit conversion, with multi-tier acceleration through WebAssembly and WebWorkers for high-performance calculations.
README
Math MCP Server
A high-performance, production-ready MCP (Model Context Protocol) server providing secure mathematical computation capabilities powered by mathjs, with Multi-Tier Acceleration through WebWorkers, WebAssembly (WASM), and comprehensive security features.
๐ Performance
This server features intelligent multi-tier acceleration providing up to 1920x speedup compared to pure JavaScript:
- ๐ฏ Intelligent Routing: Automatically selects optimal acceleration tier (mathjs โ WASM โ Workers โ GPU)
- โก WebWorkers: 3-4x faster than WASM for large operations (multi-threaded)
- ๐ฅ WASM: 14x faster than mathjs for medium operations (single-threaded)
- ๐ WebGPU: 50-100x faster than Workers for massive operations (GPU, future)
- ๐ Graceful Fallback: GPU โ Workers โ WASM โ mathjs (never fails)
- โ Zero Breaking Changes: 100% backward compatible API
Performance Results
| Operation | Size | mathjs | WASM | Workers | GPU (future) | Best Speedup |
|---|---|---|---|---|---|---|
| Matrix Multiply | 10ร10 | 0.5ms | 0.06ms | - | - | 8x |
| Matrix Multiply | 100ร100 | 95ms | 12ms | 3ms | - | 32x |
| Matrix Multiply | 1000ร1000 | 96s | 12s | 3s | 0.05s | 1920x |
| Statistics (Mean) | 1K elements | 0.1ms | 0.003ms | - | - | 33x |
| Statistics (Mean) | 100K elements | 10ms | 0.3ms | 0.08ms | - | 125x |
| Statistics (Mean) | 10M elements | 1000ms | 25ms | 7ms | 0.1ms | 10000x |
Current (Node.js): Up to 143x speedup with WebWorkers Future (Browser): Up to 10000x speedup with WebGPU
For detailed benchmarks and architecture, see docs/ACCELERATION_ARCHITECTURE.md.
โจ Features
โก Multi-Tier Acceleration
- Intelligent Routing: Automatically routes operations through optimal acceleration tier
- WebWorker Pool: Dynamic 2-8 worker threads for parallel processing
- WASM Acceleration: AssemblyScript-compiled modules for medium operations
- WebGPU Ready: GPU compute shaders (browser/Deno support planned)
- Performance Tracking: Monitor acceleration tier usage and statistics
- Zero Configuration: Works out-of-the-box with automatic optimization
๐ Security Features
- Rate Limiting: Token bucket algorithm prevents DoS attacks
- Configurable request limits per time window
- Concurrent request limits (max in-flight operations)
- Queue size limits for pending requests
- WASM Integrity Verification: Cryptographic SHA-256 verification of WASM binaries
- Prevents execution of tampered modules
- Automatic verification at runtime
- Expression Sandboxing: AST validation prevents code injection
- Whitelist-based approach for safe operations
- Blocks dangerous functions and assignments
- Input Validation: Comprehensive validation for all inputs
- Length limits and format validation
- Size limits prevent resource exhaustion
- Timeout Protection: Configurable timeout for all operations
- Type Safety: Strict TypeScript with enforced type checking
โก Performance Optimizations
- Expression Caching: LRU cache for parsed/compiled expressions
- Reduces repeated parsing overhead
- Configurable cache size (default: 1000 entries)
- Early Size Checks: Prevents event loop blocking from oversized inputs
- Efficient Logging: Proper stream separation (stdout/stderr)
๐ Observability & Production Readiness โก NEW in v3.2.0
- Prometheus Metrics Export: Production-grade monitoring
- Operation duration histograms with configurable buckets
- Operation counters by type, tier, and status
- Real-time queue size and worker count gauges
- Rate limit hits and backpressure event tracking
- Cache hit/miss rates and effectiveness metrics
- HTTP endpoint on port 9090 for Prometheus scraping
- Health Check System: Kubernetes-compatible probes
GET /health- Overall system health (healthy/degraded/unhealthy)GET /health/live- Liveness probe (always returns true)GET /health/ready- Readiness probe (based on health status)- Component-level checks: WASM, rate limiter, memory usage
- Detailed diagnostics with timestamps
- Telemetry HTTP Server: Standalone observability server
- Runs on port 9090 (configurable)
- Metrics in Prometheus text format
- JSON metrics export via
/metrics/json - Health status in JSON format
- No impact on main server performance
- Backpressure Management: Intelligent queue overflow handling
- REJECT Strategy: Fast fail when at capacity (low latency)
- WAIT Strategy: Queue with timeout (max throughput)
- SHED Strategy: Drop oldest tasks (favor fresh requests)
- Event-driven monitoring with
backpressureevents - Automatic queue size and wait time tracking
- Dependency Injection Architecture: Clean, testable design
- Constructor injection for worker pools and rate limiters
- Interface-based abstractions for easy mocking
- Improved test coverage (721 total tests, 92% security coverage)
- Reduced coupling between components
๐ก๏ธ Comprehensive Security Testing โก NEW in v3.2.0
- 119 Security Tests: Multi-layered security validation
- Injection Prevention: 36 tests for code/command injection
- DoS Protection: 28 tests for rate limiting and resource exhaustion
- Fuzzing: 24 tests with random/malformed inputs
- Bounds Testing: 31 tests for size limits and edge cases
- 92% Pass Rate: 110/119 tests passing, actively maintained
- WASM Security: Integrity verification and sandboxing
- SHA-256 cryptographic verification of all WASM binaries
- Memory isolation between workers and main thread
- Automatic fallback on integrity failures
โก Lazy Loading & Faster Startup โก NEW in v3.4.0
- Lazy WASM Initialization: WASM modules load on-demand at first use
- No startup overhead until acceleration is needed
- Thread-safe concurrent initialization (Promise-based)
- Reduces cold start time for simple operations
- Dynamic GPU Import: GPU module only loads when GPU is actually used
- No browser/GPU detection overhead at startup
- Cleaner module dependency graph
- Worker Pool On-Demand: Workers created lazily when needed
๐ง Codebase Refactoring โก NEW in v3.5.0
- 44% Code Reduction: Complete refactoring across 7 sprints
- Sprint 1-3: WASM wrapper, acceleration router, tool handlers optimization
- Sprint 4: Lazy loading implementation
- Sprint 5-7: Documentation, dead code removal, worker infrastructure
- Generic Parallel Executor Framework: Type-safe parallel operation pattern
- Unified chunking utilities for arrays and matrices
- Configurable merge strategies (sum, min, max, concat)
- Foundation for future parallel operation extensions
- Improved Type Safety: Better generic constraints and DI patterns
7 Mathematical Tools
- evaluate - Evaluate mathematical expressions with variables
- simplify - Simplify algebraic expressions
- derivative - Calculate derivatives
- solve - Solve equations
- matrix_operations โก - Matrix operations (WASM-accelerated)
- statistics โก - Statistical calculations (WASM-accelerated)
- unit_conversion - Convert between units
โก = WASM-accelerated for large inputs
Example Usage
// Matrix operations (WASM-accelerated for 10x10+)
matrix_operations("determinant", "[[1,2],[3,4]]") // -2
// Statistics (WASM-accelerated for 100+ elements)
// Note: mode returns an array
statistics("mean", "[1,2,3,4,5]") // 3
statistics("mode", "[1,2,2,3,4]") // [2]
// Symbolic math
derivative("x^2", "x") // "2 * x"
simplify("2 * x + x") // "3 * x"
// Unit conversion
unit_conversion("5 inches", "cm") // "12.7 cm"
๐ฆ Installation
Requirements
Before installing, ensure you have:
- Node.js: โฅ18.0.0 (required for worker_threads and ESM support)
- npm: โฅ8.0.0
- Platform: Windows, macOS, or Linux
- Memory: Minimum 2GB RAM (4GB+ recommended for large operations)
Quick Start
# Clone the repository
git clone https://github.com/danielsimonjr/math-mcp.git
cd math-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Build WASM modules (platform-specific)
# Linux/macOS:
cd wasm && npm install && npx gulp && cd ..
# Windows (PowerShell):
# cd wasm; npm install; npx gulp; cd ..
# Run tests
npm test
Verify Installation
After installation, verify everything is working correctly:
# 1. Check Node.js version
node --version # Should show v18.0.0 or higher
# 2. Verify TypeScript compilation
npm run type-check # Should complete without errors
# 3. Run integration tests
npm test # Should show "11/11 tests passing"
# 4. Check WASM modules are built
ls -l wasm/build/*.wasm # Should see release.wasm and debug.wasm
# Windows: dir wasm\build\*.wasm
Expected output from tests:
โ All integration tests passed!
โ WASM integration working correctly
โ Threshold-based routing working
Success rate: 100.0%
Integration with Claude Desktop
Add to your Claude Desktop config file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"math-mcp": {
"command": "node",
"args": ["C:/path/to/math-mcp/dist/index-wasm.js"]
}
}
}
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"math-mcp": {
"command": "node",
"args": ["/path/to/math-mcp/dist/index-wasm.js"]
}
}
}
Restart Claude Desktop and start using math tools!
Integration with Claude CLI
claude mcp add --transport stdio math-mcp node /path/to/math-mcp/dist/index-wasm.js
๐งฎ Tools Documentation
1. evaluate
Evaluate mathematical expressions with optional variables.
Parameters:
expression(string): Mathematical expression to evaluatescope(object, optional): Variables to use in the expression
Examples:
evaluate("2 + 2") // 4
evaluate("sqrt(16)") // 4
evaluate("x^2 + 2*x", {x: 5}) // 35
evaluate("derivative(x^2, x)") // "2 * x"
2. simplify
Simplify mathematical expressions.
Parameters:
expression(string): Expression to simplify
Examples:
simplify("2 * x + x") // "3 * x"
simplify("(x + 2)^2") // "x^2 + 4*x + 4"
3. derivative
Calculate derivatives of expressions.
Parameters:
expression(string): Expression to differentiatevariable(string): Variable to differentiate with respect to
Examples:
derivative("x^2", "x") // "2 * x"
derivative("sin(x)", "x") // "cos(x)"
4. solve
Solve equations.
Parameters:
equation(string): Equation to solvevariable(string): Variable to solve for
Examples:
solve("x^2 - 4 = 0", "x") // Solutions for x
solve("2*x + 3 = 7", "x") // x = 2
5. matrix_operations (Multi-Tier Accelerated โกโกโก)
Perform matrix operations with intelligent multi-tier acceleration.
Parameters:
operation(string): Operation to performmultiply,inverse,determinant,transpose,eigenvalues,add,subtract
matrix_a(string): First matrix in JSON formatmatrix_b(string, optional): Second matrix (for binary operations)
Acceleration Tiers:
- mathjs (< 10ร10): Pure JavaScript, no overhead
- WASM (10-100): Single-threaded, 8-17x faster
- WebWorkers (100-500): Multi-threaded, 32x faster โก NEW
- WebGPU (500+): GPU-accelerated, 1920x faster (future) โกโกโก
Examples:
matrix_operations("determinant", "[[1,2],[3,4]]") // -2
matrix_operations("multiply", "[[1,2],[3,4]]", "[[5,6],[7,8]]") // [[19,22],[43,50]]
matrix_operations("transpose", "[[1,2,3],[4,5,6]]") // [[1,4],[2,5],[3,6]]
matrix_operations("add", "[[1,2],[3,4]]", "[[5,6],[7,8]]") // [[6,8],[10,12]]
matrix_operations("subtract", "[[5,6],[7,8]]", "[[1,2],[3,4]]") // [[4,4],[4,4]]
6. statistics (Multi-Tier Accelerated โกโกโก)
Calculate statistical values with intelligent multi-tier acceleration.
Parameters:
operation(string): Statistical operationmean,median,mode,std,variance,min,max,sum,product
data(string): Data array in JSON format
Acceleration Tiers:
- mathjs (< 100): Pure JavaScript, no overhead
- WASM (100-100K): Single-threaded, 15-42x faster
- WebWorkers (100K-1M): Multi-threaded, 125x faster โก NEW
- WebGPU (1M+): GPU-accelerated, 10000x faster (future) โกโกโก
Examples:
statistics("mean", "[1,2,3,4,5]") // 3
statistics("std", "[2,4,4,4,5,5,7,9]") // 2
statistics("median", "[1,2,3,4,5]") // 3
statistics("mode", "[1,2,2,3,4,4,4,5]") // 4
statistics("product", "[2,3,4]") // 24
7. unit_conversion
Convert between units.
Parameters:
value(string): Value with unit (e.g., "5 inches")target_unit(string): Target unit (e.g., "cm")
Examples:
unit_conversion("5 inches", "cm") // "12.7 cm"
unit_conversion("100 fahrenheit", "celsius") // "37.78 celsius"
unit_conversion("50 mph", "km/h") // "80.47 km/h"
๐ง How Multi-Tier Acceleration Works
The server intelligently routes operations through optimal acceleration tiers:
Small Data (< 10ร10)
โ
mathjs โโโโโโโโโโโโโโโโโ Result
Fast for small ops, no overhead
Medium Data (10-100)
โ
WASM โโโโโโโโโโโโโโโโโโโ Result
14x faster, single-threaded
Large Data (100-500)
โ
WebWorkers โโโโโโโโโโโโโ Result
56x faster, multi-threaded (3-4x ร WASM)
Massive Data (500+)
โ
WebGPU โโโโโโโโโโโโโโโโโ Result
5600x faster, GPU-accelerated (future)
Graceful Fallback Chain:
GPU โ Workers โ WASM โ mathjs
If any tier fails, automatically falls back to the next tier. Never fails!
๐ Architecture
MCP Server (index-wasm.ts)
โ
Acceleration Router (acceleration-router.ts)
โ
Size Analysis & Tier Selection
โ
โโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโโ
โ โ โ โ โ
โผ โผ โผ โผ โ
mathjs WASM WebWorkers WebGPU โ
(small) (medium) (large) (massive) โ
โ โ โ โ โ
โ โ โโโโโโดโโโโโโ โ โ
โ โ โ Worker 1 โ โ โ
โ โ โ Worker 2 โ โ โ
โ โ โ Worker N โ โ โ
โ โ โ (WASM) โ โ โ
โ โ โโโโโโโโโโโโ โ โ
โโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโ
โ
Result
Architecture Benefits:
- Intelligent routing based on operation size
- Parallel processing for large operations
- GPU acceleration for massive operations (future)
- Graceful fallback at every tier
- Zero configuration required
- Automatic performance optimization
๐ Project Structure
math-mcp/
โโโ src/
โ โโโ index.ts # Original mathjs-only server
โ โโโ index-wasm.ts # Multi-tier accelerated server (production)
โ โโโ acceleration-router.ts # โก Intelligent routing logic (v3.0.0)
โ โโโ acceleration-adapter.ts # โก Clean adapter interface (v3.0.0)
โ โโโ wasm-wrapper.ts # WASM integration layer
โ โโโ tool-handlers.ts # Business logic for all tools
โ โโโ validation.ts # Input validation & security
โ โโโ errors.ts # Custom error types
โ โโโ utils.ts # Utilities and logging
โ โโโ rate-limiter.ts # Token bucket rate limiting
โ โโโ health.ts # โก Health check system (v3.2.0)
โ โโโ telemetry/ # โก Observability system (v3.2.0)
โ โ โโโ metrics.ts # Prometheus metrics collection
โ โ โโโ server.ts # HTTP telemetry server (port 9090)
โ โโโ workers/ # โก WebWorker infrastructure (v3.0.0)
โ โ โโโ worker-pool.ts # Dynamic worker pool with DI (v3.2.0)
โ โ โโโ parallel-executor.ts # โก Generic parallel framework (v3.5.0)
โ โ โโโ backpressure-queue.ts # โก Backpressure strategies (v3.2.0)
โ โ โโโ task-queue.ts # Priority-based task scheduling
โ โ โโโ math-worker.ts # Worker thread implementation
โ โ โโโ parallel-matrix.ts # Parallel matrix operations
โ โ โโโ parallel-stats.ts # Parallel statistics
โ โ โโโ chunk-utils.ts # Data chunking utilities
โ โ โโโ worker-types.ts # Type definitions
โ โโโ gpu/ # โก WebGPU acceleration (future)
โ โโโ webgpu-wrapper.ts # GPU compute shaders
โโโ wasm/
โ โโโ assembly/ # AssemblyScript source
โ โ โโโ matrix/
โ โ โโโ statistics/
โ โโโ bindings/ # JavaScript bindings
โ โโโ build/ # Compiled WASM
โ โโโ tests/ # WASM tests
โ โโโ benchmarks/ # Performance benchmarks
โโโ test/
โ โโโ integration-test.js # Integration tests (11/11 passing)
โ โโโ unit/ # โก Unit tests (v3.2.0)
โ โ โโโ telemetry/
โ โ โ โโโ metrics.test.ts # Prometheus metrics tests (36 tests)
โ โ โโโ health.test.ts # Health check tests (30 tests)
โ โ โโโ backpressure.test.ts # Backpressure tests (33 tests)
โ โโโ security/ # โก Security test suite (v3.2.0)
โ โโโ injection.test.ts # Injection prevention (36 tests)
โ โโโ dos.test.ts # DoS protection (28 tests)
โ โโโ fuzzing.test.ts # Fuzzing tests (24 tests)
โ โโโ bounds.test.ts # Bounds testing (31 tests)
โโโ dist/ # Compiled JavaScript
โโโ docs/ # Documentation
โ โโโ README.md # โก Documentation index (v3.2.0)
โ โโโ ACCELERATION_ARCHITECTURE.md # Multi-tier architecture guide
โ โโโ BUILD_GUIDE.md
โ โโโ DEPLOYMENT_PLAN.md
โ โโโ IMPLEMENTATION_PLAN.md
โ โโโ PRODUCT_SPECIFICATION.md
โ โโโ SPRINT_9_PLAN.md # โก Sprint 9 planning (v3.2.0)
โ โโโ STYLE_GUIDE.md
โ โโโ TEST_GUIDE.md
โ โโโ TEST_VERIFICATION_PLAN.md
โ โโโ BENCHMARKS.md
โ โโโ code-review/ # โก Code review reports (v3.2.0)
โ โ โโโ CODE_REVIEW.md
โ โ โโโ CODE_REVIEW_ANALYSIS.md
โ โ โโโ CODE_QUALITY_IMPROVEMENTS.md
โ โโโ planning/ # โก Planning documents (v3.2.0)
โ โ โโโ IMPLEMENTATION_PLAN_VERIFICATION.md
โ โ โโโ REFACTORING_PLAN.md
โ โ โโโ PROJECT_HISTORY.md
โ โโโ pull-requests/ # โก PR documentation (v3.2.0)
โ โโโ PR_DESCRIPTION.md
โ โโโ PR_TASK_19.md
โโโ .github/
โ โโโ workflows/ci.yml
โ โโโ ISSUE_TEMPLATE/
โโโ CHANGELOG.md
โโโ CONTRIBUTING.md
โโโ SECURITY.md
โโโ LICENSE
โโโ package.json
๐งช Development
# Build TypeScript
npm run build
# Build WASM modules
npm run build:wasm
# Build everything
npm run build:all
# Run tests
npm test
# Run server
npm start
# Development mode
npm run dev
๐ Documentation
Core Documentation
- docs/README.md - โก NEW v3.2.0: Complete documentation index
- ACCELERATION_ARCHITECTURE.md - Multi-tier acceleration architecture guide
- BUILD_GUIDE.md - Build and compilation guide
- DEPLOYMENT_PLAN.md - Production deployment instructions
- IMPLEMENTATION_PLAN.md - Implementation strategy and architecture
- SPRINT_9_PLAN.md - โก NEW v3.2.0: Sprint 9 observability & security features
- PRODUCT_SPECIFICATION.md - Complete product specification
Code Quality & Review
- docs/code-review/CODE_REVIEW.md - โก NEW v3.2.0: Initial code review
- docs/code-review/CODE_REVIEW_ANALYSIS.md - โก NEW v3.2.0: Detailed analysis
- docs/code-review/CODE_QUALITY_IMPROVEMENTS.md - โก NEW v3.2.0: Quality tracking
Development Guides
- STYLE_GUIDE.md - Coding standards and conventions
- TEST_GUIDE.md - Testing procedures and guidelines
- TEST_VERIFICATION_PLAN.md - Test verification strategy
- BENCHMARKS.md - Performance benchmarks and results
Project Management
- docs/planning/IMPLEMENTATION_PLAN_VERIFICATION.md - โก NEW v3.2.0: Verification report
- docs/planning/REFACTORING_PLAN.md - โก COMPLETE v3.5.0: All 7 sprints done (44% code reduction)
- docs/planning/PROJECT_HISTORY.md - โก NEW v3.2.0: Project evolution timeline
- CHANGELOG.md - Version history and changes
- CONTRIBUTING.md - Contribution guidelines
- SECURITY.md - Security policy
๐ค Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Quick Contribution Guide
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
npm test) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ Security
See SECURITY.md for security policy and vulnerability reporting.
๐ Troubleshooting
Worker Pool Issues
Workers Fail to Initialize
Symptoms:
[ERROR] Failed to create worker: Error: worker_threads not available
[ERROR] WorkerPool not initialized
Solutions:
-
Verify Node.js version:
node --version # Must be v18.0.0 or higher -
Check worker_threads support:
// test-workers.js try { const { Worker } = require('worker_threads'); console.log('โ worker_threads available'); } catch (err) { console.error('โ worker_threads not available:', err.message); } -
Rebuild native modules (if needed):
npm rebuild npm install -
Platform-specific issues:
- Docker: Ensure Node.js base image is v18+
- WSL/Windows: May need
--experimental-workerflag (Node <16) - Alpine Linux: Use
nodepackage, notnodejs-current
Worker Crashes Repeatedly
Symptoms:
[WARN] Worker exited unexpectedly { workerId: 'worker-0', exitCode: 1 }
[ERROR] Worker terminated due to reaching memory limit
Solutions:
-
Enable debug logging:
LOG_LEVEL=debug npm start -
Increase Node.js memory limit:
node --max-old-space-size=4096 dist/index-wasm.js -
Reduce worker count:
MAX_WORKERS=2 npm start -
Check for WASM corruption:
# Rebuild WASM modules cd wasm npm install npx gulp cd .. npm run generate:hashes -
Monitor worker health:
ENABLE_PERF_LOGGING=true npm start # Watch for patterns in worker exits
Operations Timeout
Symptoms:
[ERROR] Operation timed out after 30000ms
[ERROR] Task queue full, operation rejected
Solutions:
-
Increase operation timeout:
OPERATION_TIMEOUT=60000 npm start -
Increase task timeout:
TASK_TIMEOUT=60000 npm start -
Check input size (may be too large):
- Maximum matrix size: 1000ร1000 (configurable via MAX_MATRIX_SIZE)
- Maximum array length: 100,000 (configurable via MAX_ARRAY_LENGTH)
-
Monitor worker pool status:
ENABLE_PERF_LOGGING=true npm start # Check for: "Worker pool at capacity" -
Scale up workers:
MIN_WORKERS=4 MAX_WORKERS=8 npm start
Worker Pool Not Scaling
Symptoms:
[DEBUG] Pool empty, creating worker on-demand
[INFO] WorkerPool initialized successfully { activeWorkers: 0 }
Solutions:
-
Verify MIN_WORKERS configuration:
# Set MIN_WORKERS=0 for auto-scaling MIN_WORKERS=0 npm start # Or keep workers warm MIN_WORKERS=2 npm start -
Adjust idle timeout:
# Workers terminate after 60s idle by default WORKER_IDLE_TIMEOUT=120000 npm start # 2 minutes -
Monitor scaling behavior:
LOG_LEVEL=debug npm start # Look for: "Pool empty, creating worker on-demand" # Look for: "Terminating idle worker"
WASM Issues
WASM Integrity Verification Fails
Symptoms:
[ERROR] WASM integrity verification failed
[ERROR] Hash mismatch for wasm/build/release.wasm
Solutions:
-
Rebuild WASM modules:
cd wasm npm install npx gulp cd .. -
Regenerate hash manifest:
npm run generate:hashes -
Disable integrity checks (development only):
DISABLE_WASM_INTEGRITY=true npm start -
Verify file permissions:
ls -l wasm/build/*.wasm # Should be readable by current user
WASM Module Not Loading
Symptoms:
[ERROR] Failed to load WASM module
[WARN] WASM not initialized, falling back to mathjs
Solutions:
-
Check WASM files exist:
ls wasm/build/ # Should contain: release.wasm, debug.wasm -
Rebuild from scratch:
cd wasm rm -rf node_modules build npm install npx gulp cd .. -
Verify AssemblyScript toolchain:
cd wasm npx asc --version # Should show AssemblyScript compiler version -
Check Node.js WASM support:
// test-wasm.js try { new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0])); console.log('โ WASM supported'); } catch (err) { console.error('โ WASM not supported:', err.message); }
Acceleration Not Working
Check server startup logs:
MathJS MCP Server (Multi-tier Accelerated) running on stdio
Acceleration Status: 0% ops use acceleration โ Should increase with usage
Common Issues:
-
Input sizes too small - Acceleration only activates above thresholds:
- WASM: 10ร10+ matrices, 100+ elements
- Workers: 100ร100+ matrices, 100k+ elements
-
WASM not initialized - Check startup logs:
[INFO] WASM modules initialized successfully [INFO] WorkerPool initialized successfully { activeWorkers: 2 } -
Using wrong entry point:
# โ Correct (with acceleration) node dist/index-wasm.js # โ Wrong (mathjs only) node dist/index.js
Performance Not Improving
- Verify using
index-wasm.jsnotindex.js - Check input sizes exceed acceleration thresholds (see docs/BENCHMARKS.md)
- Monitor routing statistics in logs:
ENABLE_PERF_LOGGING=true npm start # Look for: "WASM calls: 70%, mathjs calls: 30%" - Ensure worker threads are available (
node --version >= 18) - Check system resources:
# Monitor CPU/memory during operations top -p $(pgrep -f "node.*index-wasm")
Integration Tests Failing
npm install
npm run build:all
npm test
Expected output:
โ All integration tests passed!
โ WASM integration working correctly
Success rate: 100.0%
Common failures:
-
WASM modules not built:
npm run build:wasm npm run generate:hashes -
TypeScript compilation errors:
npm run type-check # Fix any errors before running tests -
Node.js version too old:
node --version # Must be >=18.0.0 nvm install 18 # If using nvm
Memory Issues
High Memory Usage
Symptoms:
[WARN] Memory usage high: 1.2GB
[ERROR] JavaScript heap out of memory
Solutions:
-
Scale down workers:
MIN_WORKERS=0 MAX_WORKERS=2 npm start -
Enable auto-scaling to zero:
MIN_WORKERS=0 WORKER_IDLE_TIMEOUT=30000 npm start -
Increase Node.js heap:
node --max-old-space-size=2048 dist/index-wasm.js -
Disable performance tracking:
DISABLE_PERF_TRACKING=true npm start
Memory Leaks
Symptoms:
Memory usage increases over time
Workers not being garbage collected
Solutions:
-
Monitor worker lifecycle:
LOG_LEVEL=debug npm start # Look for: "Terminating idle worker" # Check: workers.size in logs -
Force garbage collection (debugging):
node --expose-gc dist/index-wasm.js -
Reduce worker idle timeout:
WORKER_IDLE_TIMEOUT=30000 npm start # 30 seconds
Getting Help
If you're still experiencing issues:
-
Enable debug logging:
LOG_LEVEL=debug npm start 2>&1 | tee debug.log -
Collect system information:
node --version npm --version uname -a # Linux/macOS systeminfo # Windows -
Run diagnostic:
npm run type-check npm test npm run lint -
Create an issue:
- URL: https://github.com/danielsimonjr/math-mcp/issues
- Include: Debug logs, system info, steps to reproduce
- Attach: Relevant error messages
Performance Tuning
For optimal performance, see:
- Benchmark documentation:
docs/BENCHMARKS.md - Threshold configuration:
src/wasm-wrapper.ts:39-74 - Worker pool tuning: Environment variables section above
Expected: 11/11 tests passing
๐ง Configuration
The server supports several environment variables for customization:
# Logging configuration
LOG_LEVEL=debug|info|warn|error # Control log verbosity (default: info)
# Acceleration tier configuration
ENABLE_GPU=false # Enable WebGPU acceleration tier (default: false, not yet implemented)
ENABLE_WORKERS=true # Enable WebWorkers acceleration tier (default: true)
ENABLE_WASM=true # Enable WASM acceleration tier (default: true)
NOTIFY_DEGRADATION=true # Log when acceleration tier degradation occurs (default: true)
# Performance tuning
DISABLE_PERF_TRACKING=true # Disable performance tracking for minimal overhead
ENABLE_PERF_LOGGING=true # Enable periodic performance statistics logging
# Worker pool configuration
MIN_WORKERS=0 # Minimum workers to keep alive (default: 2, set to 0 for auto-scaling)
MAX_WORKERS=8 # Maximum concurrent workers (default: CPU cores - 1)
WORKER_IDLE_TIMEOUT=60000 # Idle timeout in ms before worker termination (default: 60000)
TASK_TIMEOUT=30000 # Task timeout in milliseconds (default: 30000)
# Security limits
MAX_MATRIX_SIZE=1000 # Maximum matrix dimension (1000ร1000)
MAX_ARRAY_LENGTH=100000 # Maximum array length for statistics
MAX_EXPRESSION_LENGTH=10000 # Maximum expression length (characters)
MAX_NESTING_DEPTH=50 # Maximum parentheses/bracket nesting
OPERATION_TIMEOUT=30000 # Operation timeout in milliseconds
๐ ๏ธ Development
Code Quality Tools
# Linting and formatting
npm run lint # Run ESLint on TypeScript files
npm run lint:fix # Auto-fix linting issues
npm run format # Format code with Prettier
npm run format:check # Check code formatting
npm run type-check # Run TypeScript type checking
# Testing
npm run test # Run integration tests
npm run test:unit # Run unit tests (Vitest)
npm run test:coverage # Generate test coverage report
Quality Features
- ESLint: TypeScript + JSDoc validation
- Prettier: Consistent code formatting
- Husky: Git hooks for pre-commit quality checks
- Vitest: Modern, fast testing framework
- 100% JSDoc Coverage: All public APIs documented
๐ License
ISC License - see LICENSE file for details.
๐ Acknowledgments
- mathjs - Excellent JavaScript math library
- AssemblyScript - TypeScript-to-WASM compiler
- MCP SDK - Model Context Protocol implementation
Made with โค๏ธ by the math-mcp contributors
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.