Skip to main content
Glama
nguyenxtan

MCP SSE Server Python

by nguyenxtan

MCP SSE Server Python

Model Context Protocol (MCP) Server với SSE transport được viết bằng Python, tích hợp với n8n instance tại n8n-prod.iconiclogs.com.

Tính năng

  • MCP Protocol Implementation: Triển khai đầy đủ MCP protocol với JSON-RPC 2.0

  • SSE Transport: Server-Sent Events để real-time communication

  • n8n Integration: Webhook endpoints để tích hợp với n8n workflows

  • Natural Language Support: Hỗ trợ Tiếng Việt và English cho queries

  • Async API Calls: Gọi 5 APIs của hệ thống ABC song song với asyncio

  • Health Monitoring: Health check và Prometheus metrics

  • Production Ready: Docker support, graceful shutdown, comprehensive logging

Kiến trúc

mcp-sse-server-python/
├── src/
│   ├── main.py                 # FastAPI application
│   ├── models.py               # Pydantic models
│   ├── mcp_protocol.py         # MCP protocol handler
│   ├── sse_handler.py          # SSE connection manager
│   ├── api_client.py           # Async HTTP client cho ABC system
│   ├── n8n_integration.py      # n8n webhook handler
│   └── tools/
│       ├── nlp_parser.py       # Natural language parser
│       └── system_check.py     # System check tool
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .env.example
└── README.md

5 APIs của Hệ thống ABC

  1. GET /api/system/health - Kiểm tra system health

  2. GET /api/users/status - Lấy user status

  3. GET /api/services/list - Danh sách services

  4. POST /api/logs/query - Query logs với timeframe

  5. GET /api/metrics/current - Metrics hiện tại

Cài đặt

🚀 DEMO MODE: Không có API thật? Xem DEMO.md để chạy ngay với Mock API!

Yêu cầu

  • Python 3.11+

  • Docker & Docker Compose (optional)

  • n8n instance tại n8n-prod.iconiclogs.com (optional cho demo)

  • API key cho ABC System (hoặc dùng Mock API)

1. Clone và Setup

cd mcp-sse-server-python

# Copy .env.example thành .env
cp .env.example .env

# Chỉnh sửa .env với thông tin thực tế
nano .env

2. Cấu hình .env

# ABC System Configuration
ABC_SYSTEM_BASE_URL=https://api.abc.com
ABC_API_KEY=your_actual_api_key_here

# n8n Integration
N8N_INSTANCE_URL=n8n-prod.iconiclogs.com
N8N_API_KEY=your_n8n_api_key_here
N8N_WEBHOOK_PATH=mcp-system-check

3. Installation Options

Option A: Local Python

# Tạo virtual environment
python3.11 -m venv venv
source venv/bin/activate  # Linux/Mac
# hoặc: venv\Scripts\activate  # Windows

# Install dependencies
pip install -r requirements.txt

# Run server
python src/main.py

Option B: Docker

# Build và run với Docker Compose
docker-compose up -d

# Xem logs
docker-compose logs -f mcp-server

# Stop
docker-compose down

Option C: Docker only (không compose)

# Build image
docker build -t mcp-sse-server .

# Run container
docker run -d \
  -p 3001:3001 \
  --name mcp-server \
  --env-file .env \
  mcp-sse-server

API Endpoints

SSE Endpoint

# Kết nối SSE cho MCP protocol
curl -N http://localhost:3001/sse

# Với connection ID
curl -N "http://localhost:3001/sse?connection_id=my-client-123"

n8n Webhook

# Gọi từ n8n workflow
POST http://localhost:3001/n8n/webhook/mcp-system-check

# Request body
{
  "tool": "check_system_abc",
  "params": {
    "query": "Kiểm tra toàn bộ hệ thống"
  }
}

Health Check

# Health check
curl http://localhost:3001/health

# Liveness probe (K8s)
curl http://localhost:3001/health/live

# Readiness probe (K8s)
curl http://localhost:3001/health/ready

Metrics

# Prometheus metrics
curl http://localhost:3001/metrics

Information

# Server info
curl http://localhost:3001/info

# List tools
curl http://localhost:3001/tools

# List n8n tools
curl http://localhost:3001/n8n/tools

# List connections
curl http://localhost:3001/connections

Sử dụng với MCP Protocol

1. Kết nối SSE

const eventSource = new EventSource('http://localhost:3001/sse');

eventSource.addEventListener('connection', (e) => {
  const data = JSON.parse(e.data);
  console.log('Connected:', data);
});

eventSource.addEventListener('message', (e) => {
  const response = JSON.parse(e.data);
  console.log('MCP Response:', response);
});

eventSource.addEventListener('heartbeat', (e) => {
  console.log('Heartbeat:', e.data);
});

2. Initialize MCP

// Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "clientInfo": {
      "name": "my-client",
      "version": "1.0.0"
    }
  }
}

3. List Tools

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list",
  "params": {}
}

4. Call Tool

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "check_system_abc",
    "arguments": {
      "query": "Kiểm tra toàn bộ hệ thống"
    }
  }
}

Natural Language Examples

Tool check_system_abc hỗ trợ natural language queries:

Tiếng Việt

{"query": "Kiểm tra toàn bộ hệ thống"}
{"query": "Xem logs 24h gần đây"}
{"query": "Kiểm tra user status và services"}
{"query": "Lấy metrics hiện tại"}
{"query": "Tìm lỗi trong logs 1 giờ qua"}

English

{"query": "Check all systems"}
{"query": "Get recent logs from last 24 hours"}
{"query": "Check user status and services"}
{"query": "Get current metrics"}
{"query": "Search for errors in logs from last hour"}

n8n Workflow Setup

1. Tạo Webhook Node trong n8n

Workflow: MCP System Check
├── Webhook (Trigger)
│   Path: mcp-system-check
│   Method: POST
│
├── Function (Parse Input)
│   // Extract query and params
│
├── HTTP Request (Call MCP Server)
│   URL: http://mcp-server:3001/n8n/webhook/mcp-system-check
│   Method: POST
│   Body: {{$json}}
│
├── IF (Check Success)
│   Condition: {{$json.success}} === true
│
├── Send Email / Slack Notification
│   Success: ✅ System check passed
│   Error: ❌ System check failed
│
└── End

2. Trigger từ n8n Schedule

Workflow: Daily System Check
├── Schedule (Trigger)
│   Cron: 0 9 * * * (9 AM daily)
│
├── HTTP Request
│   URL: http://mcp-server:3001/n8n/webhook/mcp-system-check
│   Body:
│   {
│     "tool": "check_system_abc",
│     "params": {
│       "query": "Kiểm tra toàn bộ hệ thống"
│     }
│   }
│
└── Process results...

Monitoring

Prometheus Metrics

Server expose các metrics sau:

  • mcp_requests_total - Total requests

  • mcp_request_duration_seconds - Request duration

  • mcp_sse_connections_active - Active SSE connections

  • mcp_tool_executions_total - Tool executions

Grafana Dashboard

Nếu dùng docker-compose, Grafana có sẵn tại:

Import Prometheus datasource: http://prometheus:9090

Development

Run Tests

# Install dev dependencies
pip install pytest pytest-asyncio pytest-cov

# Run tests
pytest

# With coverage
pytest --cov=src --cov-report=html

Code Formatting

# Format code
black src/

# Lint code
ruff check src/

# Type checking
mypy src/

Production Deployment

# Production deployment
docker-compose -f docker-compose.yml up -d

# Scale workers
docker-compose up -d --scale mcp-server=3

Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mcp-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mcp-server
  template:
    metadata:
      labels:
        app: mcp-server
    spec:
      containers:
      - name: mcp-server
        image: mcp-sse-server:latest
        ports:
        - containerPort: 3001
        env:
        - name: ABC_API_KEY
          valueFrom:
            secretKeyRef:
              name: mcp-secrets
              key: abc-api-key
        livenessProbe:
          httpGet:
            path: /health/live
            port: 3001
          initialDelaySeconds: 5
          periodSeconds: 30
        readinessProbe:
          httpGet:
            path: /health/ready
            port: 3001
          initialDelaySeconds: 5
          periodSeconds: 10

Environment Variables

Variable

Description

Default

MCP_SERVER_HOST

Server host

0.0.0.0

MCP_SERVER_PORT

Server port

3001

MCP_SERVER_WORKERS

Number of workers

4

ABC_SYSTEM_BASE_URL

ABC System API URL

Required

ABC_API_KEY

ABC System API key

Required

ABC_TIMEOUT

API timeout (seconds)

30

N8N_INSTANCE_URL

n8n instance URL

Required

N8N_API_KEY

n8n API key

Optional

SSE_HEARTBEAT_INTERVAL

SSE heartbeat interval

30

SSE_MAX_CONNECTIONS

Max SSE connections

100

LOG_LEVEL

Logging level

INFO

Troubleshooting

1. Connection refused

# Kiểm tra server đang chạy
curl http://localhost:3001/health

# Kiểm tra logs
docker-compose logs mcp-server

2. API timeouts

# Tăng timeout trong .env
ABC_TIMEOUT=60

# Restart server
docker-compose restart mcp-server

3. SSE không kết nối được

# Kiểm tra CORS settings
# Kiểm tra firewall/proxy
# Kiểm tra browser console

4. n8n webhook không hoạt động

# Kiểm tra n8n có thể access được MCP server
curl -X POST http://localhost:3001/n8n/webhook/test \
  -H "Content-Type: application/json" \
  -d '{"tool": "check_system_abc", "params": {"query": "test"}}'

Security Best Practices

  1. API Keys: Luôn dùng environment variables, không commit vào git

  2. CORS: Configure CORS cho production (allow_origins trong main.py)

  3. Rate Limiting: Implement rate limiting cho webhooks

  4. HTTPS: Dùng HTTPS cho production (reverse proxy như nginx)

  5. Authentication: Thêm authentication cho sensitive endpoints

License

MIT License

Support

Changelog

v1.0.0 (2024-01-17)

  • Initial release

  • MCP protocol support với SSE

  • n8n integration

  • 5 ABC System APIs

  • Natural language support (VI/EN)

  • Prometheus metrics

  • Docker support

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

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/nguyenxtan/mcpwn8n'

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