Sign inSign up

mekayelanik/context7-mcp

By mekayelanik

β€’Updated 4 days ago

Remote Deployment of Conntext7 MCP server to be used in AI IDEs, AI clients, and Coding CLIs

Buildkit cache
Image
API management
Machine learning & AI
Web servers
0

10K+

mekayelanik/context7-mcp repository overview

Context7 Logo

⁠Context7 MCP Server

Docker Pulls Docker Stars GHCR License: GPL-3.0 Platforms GitHub Stars GitHub Forks GitHub Issues Last Commit

⁠Multi-Architecture Docker Image for Distributed Deployment

β πŸ“‹ Table of Contents


⁠😎 Buy Me a Coffee β˜•οΈŽ

Your support encourages me to keep creating/supporting my open-source projects. If you found value in this project, you can buy me a coffee to keep me inspired.

Buy Me A Coffee ⁠

⁠Overview

Context7 MCP Server is a lightweight, high-performance Model Context Protocol server designed for distributed deployment across multiple architectures. Built on Alpine Linux for minimal footprint and maximum security.

⁠Key Features

✨ Multi-Architecture Support - Native support for x86-64 and ARM64
πŸš€ Multiple Transport Protocols - StreamableHTTP and SSE via mcp-proxy
πŸ”’ Secure by Design - Alpine-based with minimal attack surface
⚑ High Performance - ZSTD compression for faster deployments
🎯 Production Ready - Stable releases with comprehensive testing
πŸ”§ Easy Configuration - Simple environment variable setup


⁠Supported Architectures

ArchitectureTag PrefixStatus
x86-64amd64-<version>βœ… Stable
ARM64arm64v8-<version>βœ… Stable

πŸ’‘ Multi-arch images automatically select the correct architecture for your system.


⁠Available Tags

TagStabilityDescriptionUse Case
stable⭐⭐⭐Most stable releaseRecommended for production
latest⭐⭐⭐Latest stable releaseStay current with stable features
4.1.1⭐⭐⭐Specific versionVersion pinning for consistency
beta⚠️Beta releasesTesting only
⁠System Requirements
  • Docker Engine: 23.0+
  • RAM: Minimum 512MB
  • CPU: Single core sufficient

πŸ”’ CRITICAL: Do NOT expose this container directly to the internet without proper security measures (reverse proxy, SSL/TLS, authentication, firewall rules).


⁠Quick Start

services:
  context7-mcp:
    image: mekayelanik/context7-mcp:stable
    container_name: context7-mcp
    restart: unless-stopped
    ports:
      - "8010:8010"
    environment:
      - PORT=8010
      - INTERNAL_PORT=38011
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Dhaka
      - NODE_ENV=production
      - PROTOCOL=HTTP
      - ENABLE_HTTPS=false
      - HTTP_VERSION_MODE=auto
      # Optional: require Bearer token auth at HAProxy layer
      # - API_KEY=replace-with-strong-secret
    hostname: context7-mcp
    domainname: local

Deploy:

docker compose up -d
docker compose logs -f context7-mcp
⁠Docker CLI
docker run -d \
  --name=context7-mcp \
  --restart=unless-stopped \
  -p 8010:8010 \
  -e PORT=8010 \
  -e INTERNAL_PORT=38011 \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Dhaka \
  -e NODE_ENV=production \
  -e PROTOCOL=HTTP \
  -e ENABLE_HTTPS=false \
  -e HTTP_VERSION_MODE=auto \
  mekayelanik/context7-mcp:stable
⁠Access Endpoints
ProtocolEndpointUse Case
HTTPhttp://host-ip:8010/mcpBest compatibility (recommended)
SSEhttp://host-ip:8010/sseReal-time streaming

When HTTPS is enabled (ENABLE_HTTPS=true), use TLS endpoints:

ProtocolEndpoint
SHTTPhttps://host-ip:8010/mcp
SSEhttps://host-ip:8010/sse

⚠️ Security Warning: The container now defaults to HTTP (ENABLE_HTTPS=false) for easier local setup. Use ENABLE_HTTPS=true for production, public networks, or any untrusted environment.

⏱️ ARM Devices: Allow 30-60 seconds for initialization before accessing endpoints.


⁠Configuration

⁠Environment Variables
VariableDefaultDescription
PORT8010Internal server port
INTERNAL_PORT38011Internal MCP server port used by mcp-proxy
PUID1000User ID for file permissions
PGID1000Group ID for file permissions
TZAsia/DhakaContainer timezone (TZ database⁠)
NODE_ENVproductionNode.js environment
PROTOCOLSHTTPDefault transport protocol
API_KEY(empty)Enables Bearer token auth (Authorization: Bearer <API_KEY>)
CORS(empty)Comma-separated CORS origins, supports *
ENABLE_HTTPSfalseEnables TLS termination in HAProxy
TLS_CERT_PATH/etc/haproxy/certs/server.crtTLS cert path
TLS_KEY_PATH/etc/haproxy/certs/server.keyTLS private key path
TLS_PEM_PATH/etc/haproxy/certs/server.pemCombined PEM file used by HAProxy
TLS_CNlocalhostCN for auto-generated certificate
TLS_SANDNS:<TLS_CN>SAN for auto-generated certificate
TLS_DAYS365Auto-generated cert validity period
TLS_MIN_VERSIONTLSv1.3Minimum TLS protocol (TLSv1.2 or TLSv1.3)
HTTP_VERSION_MODEautoauto, all, h1, h2, h3, h1+h2
RATE_LIMIT0Max requests per RATE_LIMIT_PERIOD per IP (0 = disabled)
RATE_LIMIT_PERIOD10sSliding window for rate limiting (e.g., 10s, 1m, 1h)
MAX_CONNECTIONS_PER_IP0Max concurrent connections per IP (0 = disabled)
IP_ALLOWLIST(empty)Comma-separated IPs/CIDRs to allow (all others blocked)
IP_BLOCKLIST(empty)Comma-separated IPs/CIDRs to block
DEBUG_MODE(empty)Enables debug hold mode when set truthy
⁠HTTPS and HTTP Version Notes
  • If ENABLE_HTTPS=true and cert files are missing, the container auto-generates a self-signed certificate.
  • If TLS_CERT_PATH and TLS_KEY_PATH exist, they are merged into TLS_PEM_PATH and used directly.
  • HTTP_VERSION_MODE=h3 (or auto) enables HTTP/3 only when HAProxy build includes QUIC; otherwise it safely falls back.
⁠API Key Authentication Notes
  • Set API_KEY to enforce authentication at reverse proxy level.
  • Expected header format: Authorization: Bearer <API_KEY>.
  • Localhost health checks remain accessible for liveness/readiness.
⁠Rate Limiting and IP Access Control
  • Rate limiting: Set RATE_LIMIT=100 to allow 100 requests per RATE_LIMIT_PERIOD (default 10s) per IP. Exceeding the limit returns HTTP 429 with a Retry-After header.
  • Connection limiting: Set MAX_CONNECTIONS_PER_IP=50 to cap concurrent connections per IP. Exceeding returns HTTP 429.
  • IP blocklist: Set IP_BLOCKLIST=192.0.2.0/24,198.51.100.5 to block specific IPs/CIDRs. Blocked IPs receive HTTP 403.
  • IP allowlist: Set IP_ALLOWLIST=10.0.0.0/8,192.168.1.0/24 to allow only listed IPs/CIDRs. All others receive HTTP 403. Localhost is always allowed.
  • All features default to disabled. Combine as needed β€” blocklist is checked before allowlist.
⁠User & Group IDs

Find your IDs and set them to avoid permission issues:

id username
# uid=1000(user) gid=1000(group)
⁠Timezone Examples
- TZ=Asia/Dhaka        # Bangladesh
- TZ=America/New_York  # US Eastern
- TZ=Europe/London     # UK
- TZ=UTC               # Universal Time


⁠Memory & Concurrency Tuning

This image embeds mcp-proxy (sparfenyuk/mcp-proxy) as the stdio↔HTTP bridge. Key knobs:

  • MCP_PROXY_STATELESS=false (default): one stdio backend child is shared across all MCP sessions, JSON-RPC-id-multiplexed. Minimal memory, no per-request fork cost.
  • MCP_PROXY_STATELESS=true: per-request transport instance. Use only when full session isolation is required β€” memory grows with concurrency.
  • HAPROXY_FRONTEND_MAXCONN / HAPROXY_SERVER_MAXCONN: HAProxy-level caps. Bound bursts so the backend cannot be flooded. Defaults of 64/16 are sensible for a single replica.

Root cause for the migration: supergateway 3.4.3 stateless mode (its default) spawned a child stdio process per POST and never reaped it (supercorp-ai/supergateway#108). mcp-proxy stateful default shares one stdio backend across sessions and reduced RSS by ~4.6Γ— in our fleet testing.

⁠MCP Client Configuration

⁠Transport Support
ClientHTTPSSERecommended
VS Code (Cline/Roo-Cline)βœ…βœ…
Claude Desktopβœ…βœ…
Claude CLIβœ…βœ…
Codex CLIβœ…βœ…
Codeium (Windsurf)βœ…βœ…
Cursorβœ…βœ…

⁠VS Code (Cline/Roo-Cline)

Configure in .vscode/settings.json:

{
  "mcp.servers": {
    "context7": {
      "url": "http://host-ip:8010/mcp",
      "transport": "http"
    }
  }
}

⁠Claude Desktop App/Claude Code

Configuration:

⁠With API_KEY
claude mcp add-json github '{"type":"http","url":"http://localhost:8045/mcp","headers":{"Authorization":"Bearer <YOUR_API_KEY>"}}'
⁠Without API_KEY
claude mcp add-json github '{"type":"http","url":"http://localhost:8045/mcp"}'

⁠Codex CLI

Configure in ~/.codex/config.json:

{
  "mcpServers": {
    "context7": {
      "transport": "http",
      "url": "http://host-ip:8010/mcp"
    }
  }
}

⁠Codeium (Windsurf)

Configure in .codeium/mcp_settings.json:

{
  "mcpServers": {
    "context7": {
      "transport": "http",
      "url": "http://host-ip:8010/mcp"
    }
  }
}

⁠Cursor

Configure in ~/.cursor/mcp.json:

{
  "mcpServers": {
    "context7": {
      "transport": "http",
      "url": "http://host-ip:8010/mcp"
    }
  }
}

⁠Testing Configuration

Verify with MCP Inspector⁠:

npm install -g @modelcontextprotocol/inspector
mcp-inspector http://host-ip:8010/mcp

⁠Network Configuration

⁠Comparison
Network ModeComplexityPerformanceUse Case
Bridge⭐ Easy⭐⭐⭐ GoodDefault, isolated
Host⭐⭐ Moderate⭐⭐⭐⭐ ExcellentDirect host access
MACVLAN⭐⭐⭐ Advanced⭐⭐⭐⭐ ExcellentDedicated IP

⁠Bridge Network (Default)
services:
  context7-mcp:
    image: mekayelanik/context7-mcp:stable
    ports:
      - "8010:8010"

Benefits: Container isolation, easy setup, works everywhere Access: http://localhost:8010/mcp


⁠Host Network (Linux Only)
services:
  context7-mcp:
    image: mekayelanik/context7-mcp:stable
    network_mode: host

Benefits: Maximum performance, no NAT overhead, no port mapping needed Considerations: Linux only, shares host network namespace Access: http://localhost:8010/mcp


⁠MACVLAN Network (Advanced)
services:
  context7-mcp:
    image: mekayelanik/context7-mcp:stable
    mac_address: "AB:BC:CD:DE:EF:01"
    networks:
      macvlan-net:
        ipv4_address: 192.168.1.100

networks:
  macvlan-net:
    driver: macvlan
    driver_opts:
      parent: eth0
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1

Benefits: Dedicated IP, direct LAN access Considerations: Linux only, requires additional setup Access: http://192.168.1.100:8010/mcp


⁠Updating

⁠Docker Compose
docker compose pull
docker compose up -d
docker image prune -f
⁠Docker CLI
docker pull mekayelanik/context7-mcp:stable
docker stop context7-mcp && docker rm context7-mcp
# Run your original docker run command
docker image prune -f
⁠One-Time Update with Watchtower
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --run-once \
  context7-mcp

⁠Troubleshooting

⁠Pre-Flight Checklist
  • βœ… Docker Engine 23.0+
  • βœ… Port 8010 available
  • βœ… Sufficient startup time (ARM devices)
  • βœ… Latest stable image
  • βœ… Correct configuration
⁠Common Issues
⁠Container Won't Start
# Check Docker version
docker --version

# Verify port availability
sudo netstat -tulpn | grep 8010

# Check logs
docker logs context7-mcp
⁠Permission Errors
# Get your IDs
id $USER

# Update configuration with correct PUID/PGID
# Fix volume permissions if needed
sudo chown -R 1000:1000 /path/to/volume
⁠Client Cannot Connect
# Test connectivity
curl http://localhost:8010/mcp
curl http://host-ip:8010/mcp
curl -k https://localhost:8010/mcp
curl -k https://host-ip:8010/mcp

# Check firewall
sudo ufw status

# Verify container
docker inspect context7-mcp | grep IPAddress
⁠Slow ARM Performance
  • Wait 30-60 seconds after start
  • Monitor: docker logs -f context7-mcp
  • Check resources: docker stats context7-mcp
  • Use faster storage (SSD vs SD card)
⁠Debug Information

When reporting issues, include:

# System info
docker --version && uname -a

# Container logs
docker logs context7-mcp --tail 200 > logs.txt

# Container config
docker inspect context7-mcp > inspect.json

⁠Additional Resources

⁠Documentation
⁠Docker Resources
⁠Monitoring

⁠😎 Buy Me a Coffee β˜•οΈŽ

Your support encourages me to keep creating/supporting my open-source projects. If you found value in this project, you can buy me a coffee to keep me inspired.

Buy Me A Coffee ⁠

⁠Support & License

⁠Getting Help

Docker Image Issues:

Context7 MCP Issues:

⁠Contributing

We welcome contributions:

  1. Report bugs via GitHub Issues
  2. Suggest features
  3. Improve documentation
  4. Test beta releases
⁠License

GPL License. See LICENSE⁠ for details.

Context7 MCP server has its own license - see Main NPM repo⁠.


⁠Major Changes
  • 2.1.1: - ⚠️⚠️⚠️ Added working APY_KEY authentication ⚠️⚠️⚠️

Tag summary

Content type

Image

Digest

sha256:807d6fde1…

Size

99.4 MB

Last updated

4 days ago

docker pull mekayelanik/context7-mcp