Deployment Guides8 min read

Deploying MCP Servers to Render — Zero-Config Deployment Guide (2026)

Step-by-step guide to deploying MCP servers on Render. Use Web Services or Background Workers for persistent, auto-scaling MCP infrastructure with zero DevOps overhead.

By MyMCPTools Team·

Render is one of the fastest paths to production for MCP servers — no Dockerfile required, automatic SSL, built-in secret management, and Git-based deploys that just work. If you've been running MCP servers locally and want persistent, team-accessible infrastructure, Render gets you there in under 30 minutes.

This guide covers deploying both stdio-based and HTTP-based MCP servers to Render, with environment variable management, health checks, and scaling considerations.

Choosing the Right Render Service Type

Render offers two service types relevant to MCP hosting:

  • Web Service — For HTTP-based MCP servers. Gets a public URL, handles HTTPS automatically, and supports horizontal scaling. Use this if you're building a custom MCP server with an HTTP transport.
  • Background Worker — For stdio-based or daemon-style MCP servers that process queued work without exposing an HTTP endpoint. Ideal for internal AI pipelines.

Most MCP servers from the official registry use stdio transport. For connecting them to Claude Desktop or Cursor remotely, you'll want to wrap them in an HTTP adapter or use a proxy like mcp-remote.

Prerequisites

  • Render account (free tier works for testing)
  • GitHub or GitLab repository with your MCP server code
  • Node.js 18+ (or Python 3.11+ for Python-based servers)

Option 1: Deploy a Custom HTTP MCP Server

If you've built a custom MCP server with HTTP transport, deploying to Render is straightforward.

Step 1: Prepare your server

Ensure your server reads the port from environment variables — Render injects PORT automatically:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import express from "express";

const app = express();
const server = new McpServer({ name: "my-mcp-server", version: "1.0.0" });

server.tool("hello", async () => ({
  content: [{ type: "text", text: "Hello from Render!" }]
}));

const port = parseInt(process.env.PORT || "3000");
app.listen(port, () => console.log(`MCP server running on port ${port}`));

Step 2: Add a render.yaml

For infrastructure-as-code, add a render.yaml to your repo root:

services:
  - type: web
    name: my-mcp-server
    env: node
    plan: starter
    buildCommand: npm install && npm run build
    startCommand: npm start
    healthCheckPath: /health
    envVars:
      - key: NODE_ENV
        value: production
      - key: DATABASE_URL
        sync: false

Step 3: Deploy via Render Dashboard

  1. Go to render.com → New → Web Service
  2. Connect your GitHub repository
  3. Render auto-detects Node.js and suggests build/start commands
  4. Add your environment variables in the dashboard
  5. Click Deploy

Render builds your service, assigns a *.onrender.com subdomain, and provisions SSL. First deploy typically takes 2-3 minutes.

Option 2: Deploy stdio MCP Servers via mcp-remote

Standard MCP servers (filesystem, postgres, github, etc.) use stdio transport and aren't directly HTTP-accessible. You can expose them remotely using a proxy pattern.

npm install -g mcp-remote

Create a wrapper server that bridges HTTP to stdio:

// server.js
import { spawn } from "child_process";
import express from "express";

const app = express();

app.post("/mcp", async (req, res) => {
  const mcpProcess = spawn("npx", [
    "-y", "@modelcontextprotocol/server-postgres",
    process.env.DATABASE_URL
  ]);

  req.pipe(mcpProcess.stdin);
  mcpProcess.stdout.pipe(res);
});

Environment Variable Management

Render's secret management is straightforward and superior to committed .env files:

  1. In your Render service settings, go to Environment
  2. Add key-value pairs — they're encrypted at rest
  3. For shared secrets across services, use Environment Groups

Common MCP server environment variables to configure:

DATABASE_URL=postgresql://user:pass@host:5432/db
GITHUB_TOKEN=ghp_your_token
BRAVE_API_KEY=your_key
MCP_AUTH_TOKEN=your_secret_token

Health Checks and Auto-Restart

Add a health check endpoint to your MCP server so Render knows when to restart it:

app.get("/health", (req, res) => {
  res.json({ status: "ok", uptime: process.uptime() });
});

In your Render service settings, set the Health Check Path to /health. Render polls this endpoint and automatically restarts the service if it becomes unhealthy.

Scaling Considerations

  • Free tier: Services spin down after 15 minutes of inactivity. Add a keep-alive ping or use a cron job to prevent cold starts.
  • Starter tier ($7/mo): Always-on, suitable for small teams with 2-5 AI users.
  • Standard tier: Horizontal scaling — Render auto-scales based on CPU/memory. Good for high-traffic MCP deployments serving dozens of concurrent AI sessions.

Connecting Clients to Your Render MCP Server

Once deployed, connect Claude Desktop or Cursor using your Render URL:

{
  "mcpServers": {
    "my-remote-server": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://my-mcp-server.onrender.com/mcp",
        "--header",
        "Authorization: Bearer YOUR_TOKEN"
      ]
    }
  }
}

Monitoring and Logs

Render provides real-time logs in the dashboard. For production MCP servers, add structured logging:

console.log(JSON.stringify({
  level: "info",
  event: "tool_called",
  tool: toolName,
  duration_ms: elapsed,
  timestamp: new Date().toISOString()
}));

Render forwards all stdout/stderr to its log viewer, searchable in the dashboard with 7-day retention on free tier and 30 days on paid plans.

Browse the MCP server directory for servers to deploy, and check our guides for other platforms: Cloudflare Workers, Railway, and AWS Lambda.

Recommended Tools

Better Stack

Free Plan

Get alerted when your APIs, browser tests, payment pipelines, or MCP server dependencies go down. Used by 100K+ developers.

Start monitoring free →

1Password

14-day Free Trial

Store and inject API keys, payment credentials, tokens, and file access secrets into your MCP server configs. Trusted by 150K+ developers.

Try 1Password free →

🔧 MCP Servers Mentioned in This Article

📁

Filesystem

Secure file operations with configurable access controls. Read, write, and manage files safely.

Local
💻

GitHub MCP Server

The GitHub MCP server is GitHub's official Model Context Protocol integration, giving AI assistants like Claude and Cursor direct, authenticated access to the GitHub platform and its full developer surface. With this MCP server, you can ask your AI to read and write repository files, create and merge branches, open and review pull requests, comment on and close issues, trigger GitHub Actions workflows, search across code repositories with GitHub's code search, and inspect commit history — all through natural-language prompts in your AI interface. Developers use it to supercharge code review workflows, automate issue triage, generate PR descriptions from diffs, bulk-update repository settings, and wire AI agents into CI/CD pipelines. The GitHub MCP server connects via a GITHUB_PERSONAL_ACCESS_TOKEN environment variable with scopes for the operations you need, keeping authentication clean and auditable. Install with Docker: `docker run -e GITHUB_PERSONAL_ACCESS_TOKEN=<token> ghcr.io/github/github-mcp-server` — or configure it as a remote MCP server in Claude Desktop, Cursor, VS Code, Windsurf, and Cline. With over 8,000 GitHub stars, it is the most widely deployed official code-platform MCP server and the reference implementation for AI-native GitHub automation.

Auth required
🔍

Brave Search MCP Server

The Brave Search MCP Server is the official server from Brave that gives AI assistants privacy-first web search through the independent Brave Search API — no tracking, no profiling, and results drawn from Brave's own web index rather than Google or Bing. It exposes five distinct tools that map directly to the Brave Search API endpoints: brave_web_search for general queries with pagination, freshness filters, and safe-search controls; brave_local_search for businesses, restaurants, and points of interest with automatic location filtering; brave_news_search for recent articles and current events; brave_image_search for image discovery; and brave_video_search for finding videos across the web. Authentication uses a single BRAVE_API_KEY (free tier available at brave.com/search/api) or a mounted BRAVE_API_KEY_FILE for Docker-secret setups. Install in Claude Desktop, Cursor, Windsurf, or VS Code with one npx command and choose stdio or streamable-HTTP transport. Because Brave operates its own crawler and index, the Brave Search MCP server is a strong choice for developers who want an alternative to Google-dependent search tools, need reproducible non-personalized results, or care about data privacy in agent workflows — Claude can pull fresh web context, verify facts, and research topics without leaking queries to ad-tech pipelines.

Local

📚 More from the Blog