Skip to content
Back to skills

2581 Cloud Deployment B82de5d1

ASecurity

Complete guide for deploying FastMCP servers to FastMCP Cloud.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
devopspythongobashsqltestinggitapidatabasedocumentation

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2581-cloud-deployment_b82de5d1 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2581 Cloud Deployment B82de5d1?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2581 Cloud Deployment B82de5d1
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2581-cloud-deployment-b82de5d1/badge)](https://www.skillsdirectory.com/skills/tools-only-2581-cloud-deployment-b82de5d1)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# FastMCP Cloud Deployment Guide

Complete guide for deploying FastMCP servers to FastMCP Cloud.

## Critical Requirements

**❗️ MUST HAVE** for FastMCP Cloud:

1. **Module-level server object** named `mcp`, `server`, or `app`
2. **PyPI dependencies only** in `requirements.txt`
3. **Public GitHub repository** (or accessible to FastMCP Cloud)
4. **Environment variables** for configuration (no hardcoded secrets)

## Cloud-Ready Server Pattern

```python
# server.py
from fastmcp import FastMCP
import os

# ✅ CORRECT: Module-level export
mcp = FastMCP("production-server")

# ✅ Use environment variables
API_KEY = os.getenv("API_KEY")
DATABASE_URL = os.getenv("DATABASE_URL")

@mcp.tool()
async def production_tool(data: str) -> dict:
    if not API_KEY:
        return {"error": "API_KEY not configured"}
    return {"status": "success", "data": data}

if __name__ == "__main__":
    mcp.run()
```

## Common Anti-Patterns

### ❌ WRONG: Function-Wrapped Server

```python
def create_server():
    mcp = FastMCP("server")
    return mcp

if __name__ == "__main__":
    server = create_server()  # Too late for cloud!
    server.run()
```

### ✅ CORRECT: Factory with Module Export

```python
def create_server() -> FastMCP:
    mcp = FastMCP("server")
    # Complex setup logic here
    return mcp

# Export at module level
mcp = create_server()

if __name__ == "__main__":
    mcp.run()
```

## Deployment Steps

### 1. Prepare Repository

```bash
# Initialize git
git init

# Add files
git add .

# Commit
git commit -m "Initial MCP server"

# Create GitHub repo
gh repo create my-mcp-server --public

# Push
git push -u origin main
```

### 2. Deploy to FastMCP Cloud

1. Visit https://fastmcp.cloud
2. Sign in with GitHub
3. Click "Create Project"
4. Select your repository
5. Configure:
   - **Server Name**: Your project name
   - **Entrypoint**: `server.py`
   - **Environment Variables**: Add all needed variables

### 3. Configure Environment Variables

In FastMCP Cloud dashboard, add:
- `API_KEY`
- `DATABASE_URL`
- `CACHE_TTL`
- Any custom variables

### 4. Access Your Server

- **URL**: `https://your-project.fastmcp.app/mcp`
- **Auto-deploy**: Pushes to main branch auto-deploy
- **PR Previews**: Pull requests get preview deployments

## Project Structure Requirements

### Minimal Structure

```
my-mcp-server/
├── server.py          # Main entry point (required)
├── requirements.txt   # PyPI dependencies (required)
├── .env              # Local dev only (git-ignored)
├── .gitignore        # Must ignore .env
└── README.md         # Documentation (recommended)
```

### Production Structure

```
my-mcp-server/
├── src/
│   ├── server.py         # Main entry point
│   ├── utils.py          # Self-contained utilities
│   └── tools/           # Tool modules
│       ├── __init__.py
│       └── api_tools.py
├── requirements.txt
├── .env.example         # Template for .env
├── .gitignore
└── README.md
```

## Requirements.txt Rules

### ✅ ALLOWED: PyPI Packages

```txt
fastmcp>=2.12.0
httpx>=0.27.0
python-dotenv>=1.0.0
pydantic>=2.0.0
```

### ❌ NOT ALLOWED: Non-PyPI Dependencies

```txt
# Don't use these in cloud:
git+https://github.com/user/repo.git
-e ./local-package
./wheels/package.whl
```

## Environment Variables Best Practices

### ✅ GOOD: Environment-based Configuration

```python
import os

class Config:
    API_KEY = os.getenv("API_KEY", "")
    BASE_URL = os.getenv("BASE_URL", "https://api.example.com")
    DEBUG = os.getenv("DEBUG", "false").lower() == "true"

    @classmethod
    def validate(cls):
        if not cls.API_KEY:
            raise ValueError("API_KEY is required")
```

### ❌ BAD: Hardcoded Values

```python
# Never do this in cloud:
API_KEY = "sk-1234567890"  # Exposed in repository!
DATABASE_URL = "postgresql://user:pass@host/db"  # Insecure!
```

## Avoiding Circular Imports

**Critical for cloud deployment!**

### ❌ WRONG: Factory Function in `__init__.py`

```python
# shared/__init__.py
def get_api_client():
    from .api_client import APIClient  # Circular import risk
    return APIClient()

# shared/monitoring.py
from . import get_api_client  # Creates circle!
```

### ✅ CORRECT: Direct Imports

```python
# shared/__init__.py
from .api_client import APIClient
from .cache import CacheManager

# shared/monitoring.py
from .api_client import APIClient
client = APIClient()  # Create directly
```

## Testing Before Deployment

### Local Testing

```bash
# Test with stdio (default)
fastmcp dev server.py

# Test with HTTP
python server.py --transport http --port 8000
```

### Pre-Deployment Checklist

- [ ] Server object exported at module level
- [ ] Only PyPI dependencies in requirements.txt
- [ ] No hardcoded secrets (all in environment variables)
- [ ] `.env` file in `.gitignore`
- [ ] No circular imports
- [ ] No import-time async execution
- [ ] Works with `fastmcp dev server.py`
- [ ] Git repository committed and pushed
- [ ] All required environment variables documented

## Monitoring Deployment

### Check Deployment Logs

FastMCP Cloud provides:
- Build logs
- Runtime logs
- Error logs

### Health Check Endpoint

Add a health check resource:

```python
@mcp.resource("health://status")
async def health_check() -> dict:
    return {
        "status": "healthy",
        "timestamp": datetime.now().isoformat(),
        "version": "1.0.0"
    }
```

### Common Deployment Errors

1. **"No server object found"**
   - Fix: Export server at module level

2. **"Module not found"**
   - Fix: Use only PyPI packages

3. **"Import error: circular dependency"**
   - Fix: Avoid factory functions in `__init__.py`

4. **"Environment variable not set"**
   - Fix: Add variables in FastMCP Cloud dashboard

## Continuous Deployment

FastMCP Cloud automatically deploys when you push to main:

```bash
# Make changes
git add .
git commit -m "Add new feature"
git push

# Deployment happens automatically!
# Check status at fastmcp.cloud
```

## Rollback Strategy

If deployment fails:

```bash
# Revert to previous commit
git revert HEAD
git push

# Or reset to specific commit
git reset --hard <commit-hash>
git push --force  # Use with caution!
```

## Resources

- **FastMCP Cloud**: https://fastmcp.cloud
- **FastMCP GitHub**: https://github.com/jlowin/fastmcp
- **Deployment Docs**: Check FastMCP Cloud documentation

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…