A Model Context Protocol (MCP) server implementation for MEXC cryptocurrency exchange integration using Encore.ts.
- Real-time Market Data: Live ticker prices, order books, and 24h statistics from MEXC exchange
- Secure API Management: Encore.ts secrets management for API keys
- Rate Limiting & Caching: Built-in protection and performance optimization
- Type Safety: Full TypeScript implementation with Encore.ts interfaces
- Test-Driven Development: Comprehensive test suite with >90% coverage
- CI/CD Pipeline: Automated testing, linting, and deployment
- Pre-commit Hooks: Automated code quality checks
- Bun >= 1.0.0
- Node.js >= 18.0.0
- Encore CLI (for deployment)
- MEXC API credentials
git clone https://github.com/RyanLisse/mexc-mcp-server.git
cd mexc-mcp-server
bun installCreate a .env file in the project root:
# MEXC API Credentials
MEXC_API_KEY=your_mexc_api_key_here
MEXC_SECRET_KEY=your_mexc_secret_key_here# Start development server
bun run dev
# Run tests (with watch mode)
bun run test:watch
# Run all quality checks
bun run check
# Format and lint code
bun run format
bun run lint:fix# Run all tests
bun test
# Run tests with coverage
bun run test:coverage
# Run specific test file
bun test auth/auth.test.ts
# Test MEXC API connectivity
bun run test:mexc| Tool Name | Description | Input Parameters |
|---|---|---|
mexc_get_ticker |
Get current ticker price and 24h statistics | symbol: string, convert?: string |
mexc_get_order_book |
Get current order book (bids/asks) | symbol: string, limit?: number |
mexc_get_24h_stats |
Get 24-hour trading statistics | symbol?: string |
mexc_test_connectivity |
Test API connectivity and server time | None |
mexc_test_authentication |
Test API authentication | None |
mexc_get_active_symbols |
Get all active trading symbols | limit?: number |
mexc_place_order |
Place a buy/sell order | `symbol: string, side: 'buy' |
mexc_cancel_order |
Cancel an existing order | symbol: string, orderId: string |
mexc_get_order_status |
Get order status and details | symbol: string, orderId: string |
mexc_get_account_balance |
Get account balances | None |
mexc_get_open_orders |
Get all open orders | symbol?: string |
mexc_get_order_history |
Get order history | symbol?: string, limit?: number |
mexc_get_trade_history |
Get trade execution history | symbol?: string, limit?: number |
-
Install Encore CLI:
curl -L https://encore.dev/install.sh | bash -
Authenticate:
encore auth login
-
Set up secrets:
# For staging environment encore secret set --env=staging MEXC_API_KEY "your_api_key" encore secret set --env=staging MEXC_SECRET_KEY "your_secret_key" # For production environment encore secret set --env=production MEXC_API_KEY "your_api_key" encore secret set --env=production MEXC_SECRET_KEY "your_secret_key"
-
Deploy:
# Deploy to staging encore deploy --env=staging # Deploy to production encore deploy --env=production
The project includes GitHub Actions workflows for automated deployment:
-
CI Pipeline (
.github/workflows/ci.yml): Runs on all PRs and pushes- Type checking
- Linting and formatting
- Test execution
- Security scanning
- Build verification
-
Deployment Pipeline (
.github/workflows/deploy.yml): Deploys to Encore Cloud- Triggered on main branch pushes
- Manual deployment with environment selection
- Automated health checks
- Secret management
Configure these secrets in your GitHub repository settings:
ENCORE_AUTH_TOKEN=your_encore_auth_token
ENCORE_INSTALL_ID=your_encore_install_id
MEXC_API_KEY=your_mexc_api_key
MEXC_SECRET_KEY=your_mexc_secret_key
CODECOV_TOKEN=your_codecov_token # Optional, for coverage reportsThis project uses Encore.ts built-in secrets management for secure credential storage:
// In shared/config.ts
import { secret } from "encore.dev/config";
// Secrets are automatically injected by Encore.ts
const mexcApiKey = secret("MEXC_API_KEY");
const mexcSecretKey = secret("MEXC_SECRET_KEY");
// For local development, use environment variables
const localConfig = {
apiKey: process.env.MEXC_API_KEY || mexcApiKey(),
secretKey: process.env.MEXC_SECRET_KEY || mexcSecretKey(),
};# Set secrets for different environments
encore secret set --env=development MEXC_API_KEY "your_dev_api_key"
encore secret set --env=development MEXC_SECRET_KEY "your_dev_secret_key"
encore secret set --env=staging MEXC_API_KEY "your_staging_api_key"
encore secret set --env=staging MEXC_SECRET_KEY "your_staging_secret_key"
encore secret set --env=production MEXC_API_KEY "your_prod_api_key"
encore secret set --env=production MEXC_SECRET_KEY "your_prod_secret_key"- β Never commit API keys to version control
- β Use environment-specific secrets (staging/production)
- β Rotate API keys regularly
- β Monitor API usage and rate limits
- β Use least-privilege access principles
Husky pre-commit hooks ensure code quality:
# Automatically runs on git commit
- Lint-staged (format & lint staged files)
- Type checking
- Test execution- Triggers: Pull requests and pushes to main/develop
- Steps: Install β Type Check β Lint β Test β Security Scan β Build
- Triggers: Push to main or manual dispatch
- Steps: Quality Checks β Deploy β Health Check β Notify
GET /health- Service health checkGET /mcp/info- MCP protocol informationGET /- API overview
POST /auth/validate- Validate API keyGET /auth/status- Authentication statusPOST /auth/rate-limit- Rate limit statusGET /auth/test-mexc- Test MEXC credentials
POST /market-data/ticker- Get ticker dataPOST /market-data/order-book- Get order bookPOST /market-data/24h-stats- Get 24h statisticsGET /market-data/test-connectivity- Test connectivityGET /market-data/test-auth- Test authenticationPOST /market-data/active-symbols- Get active symbolsGET /market-data/health- Market data service healthGET /market-data/mcp/tools- Available MCP tools
POST /trading/place-order- Place a new orderPOST /trading/cancel-order- Cancel an existing orderPOST /trading/order-status- Get order statusGET /trading/open-orders- Get open ordersPOST /trading/order-history- Get order historyPOST /trading/trade-history- Get trade historyGET /trading/health- Trading service health
GET /portfolio/balance- Get account balanceGET /portfolio/positions- Get open positionsPOST /portfolio/pnl- Get profit/loss dataGET /portfolio/health- Portfolio service health
GET /tools/list- List all available MCP toolsPOST /tools/call- Execute an MCP toolGET /tools/resources- List MCP resourcesPOST /tools/resources/read- Read MCP resource content
The application is built using a microservices architecture with 5 main services:
mexc-mcp-server/
βββ encore.service.ts # Main service definition
βββ api.ts # Root API endpoints
βββ auth/ # Authentication service
β βββ encore.service.ts # Service definition
β βββ api.ts # Auth endpoints
β βββ auth.ts # Auth logic
βββ market-data/ # Market data service
β βββ encore.service.ts # Service definition
β βββ api.ts # Market data endpoints
β βββ tools.ts # MCP tools implementation
β βββ mexc-client.ts # MEXC API client
βββ trading/ # Trading operations service
β βββ encore.service.ts # Service definition
β βββ api.ts # Trading endpoints
β βββ tools.ts # Trading MCP tools
βββ portfolio/ # Portfolio management service
β βββ encore.service.ts # Service definition
β βββ api.ts # Portfolio endpoints
β βββ tools.ts # Portfolio MCP tools
βββ tools/ # MCP tools aggregation service
βββ encore.service.ts # Service definition
βββ api.ts # MCP protocol endpoints
- auth: Base authentication and rate limiting
- market-data: Real-time market data (depends on auth)
- trading: Order management (depends on auth, market-data)
- portfolio: Account and position tracking (depends on auth, trading)
- tools: MCP protocol implementation (aggregates all services)
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes following the coding standards
- Run tests:
bun test - Commit with conventional commits:
git commit -m "feat: add amazing feature" - Push to your branch:
git push origin feature/amazing-feature - Open a Pull Request
- β TypeScript with strict mode
- β Test-driven development (TDD)
- β Files under 500 lines
- β Encore.ts interfaces for type safety
- β Conventional commits
- β 90%+ test coverage for new features
- β Biome.js for linting and formatting
MIT License - see LICENSE file for details.
- π Documentation
- π Issues
- π¬ Discussions
- π§ Email: ryan@ryanlisse.com