Skip to content

Repository files navigation

Multi-Server MCP FastAPI Project

A comprehensive FastAPI application that hosts multiple Model Context Protocol (MCP) servers, each providing access to different public APIs and services.

Work Demo

fastmcp-multi-server-mcp.webm

πŸš€ Features

This project includes 5 different MCP servers:

  • Weather Server – OpenWeatherMap API integration for weather data
  • News Server – NewsAPI integration for latest news articles
  • Currency Server – Exchange rates and currency conversion
  • Quote Server – Inspirational quotes and random facts

πŸ“‹ Prerequisites

  • Python 3.13+
  • UV package manager
  • API keys for external services (see Configuration section)

πŸ“ Project Structure

fastapi-multi-server-mcp/
β”œβ”€β”€ main.py                 # FastAPI application entry point
β”œβ”€β”€ requirements.txt        # Python dependencies
β”œβ”€β”€ pyproject.toml         # UV project configuration
β”œβ”€β”€ .env.example           # Environment variables template
β”œβ”€β”€ README.md              # This file
β”œβ”€β”€ servers/               # MCP servers directory
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ weather_server.py  # Weather API MCP server
β”‚   β”œβ”€β”€ news_server.py     # News API MCP server
β”‚   β”œβ”€β”€ currency_server.py # Currency API MCP server
β”‚   └── quote_server.py    # Quotes API MCP server
β”œβ”€β”€ utils/                 # Utility modules
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ api_clients.py     # HTTP client utilities
β”‚   └── config.py          # Configuration management
β”œβ”€β”€ tests/                 # Test suite
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ test_weather.py
β”‚   β”œβ”€β”€ test_news.py
β”‚   β”œβ”€β”€ test_currency.py
β”‚   └── test_quote.py
└── docs/                  # Documentation
    β”œβ”€β”€ api_reference.md
    └── deployment.md

πŸ› οΈ Installation

Using UV (Recommended)

# Clone the repository
git clone <your-repo-url>
cd fastapi-multi-server-mcp

# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install -r requirements.txt

Using pip

pip install -r requirements.txt

πŸ”§ Configuration

Create a .env file in the root directory with your API keys:

# Weather API (OpenWeatherMap)
OPENWEATHER_API_KEY=your_openweather_api_key

# News API
NEWS_API_KEY=your_news_api_key


# Exchange Rates API
EXCHANGE_RATES_API_KEY=your_exchange_rates_api_key

# Server Configuration
PORT=10000
HOST=0.0.0.0

Getting API Keys

πŸƒβ€β™‚οΈ Running the Application

Development

# Using UV
uv run uvicorn main:app --reload --host 0.0.0.0 --port 10000 --reload

# Using `npx` to debug the running application,
npx @modelcontextprotocol/inspector uv run uvicorn main:app

To connect specific server to inspector,

Set,

  1. Transport Type: StreamableHTTP

  2. URLs:

  1. Click connect, it will open inspector window like this:

Quotes server:

Inspector

News server:

Inspector

Weather server:

Inspector

Currency server:

Inspector

As of June 2025, Windsurf and Cursor supports two transport types for MCP servers: stdio and /sse, but not StreamableHTTP. So using stdio or /sse as transport type is recommended. But with inspector, you can connect to the MCP server running on FastAPI with any transport type.

Production

# Using Gunicorn
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:10000

πŸ“š API Endpoints

Once running everything successfully,

Your FastAPI server will be available at: http://localhost:10000, docs at http://localhost:10000/docs and your MCP servers will be available at:

πŸ§ͺ Testing

# Run all tests
pytest

# Run with coverage
pytest --cov=.

# Run specific server tests
pytest tests/test_weather.py

πŸ› οΈ Available Tools by Server

πŸ–ΌοΈ Click to see the tool details

Weather Server (/weather)

get_current_weather - Get current weather for a city
get_weather_forecast - Get 5-day weather forecast
get_weather_by_coordinates - Get weather by latitude/longitude

News Server (/news)

get_top_headlines - Get top news headlines
search_news - Search news articles by keyword
get_news_by_category - Get news by category (business, tech, sports, etc.)

Currency Server (/currency)

get_exchange_rates - Get current exchange rates
convert_currency - Convert between currencies
get_supported_currencies - List all supported currencies

Quote Server (/quotes)

get_random_quote - Get a random inspirational quote
get_quote_by_category - Get quotes by category
get_random_fact - Get a random interesting fact

πŸš€ Deployment

Docker

You can deploy this project using Docker. Example Dockerfile is included:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 10000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "10000"]

Environment Variables for Production

PORT=10000
HOST=0.0.0.0
LOG_LEVEL=info
WORKERS=4

πŸ“ License

This project is licensed under the MIT License - see the LICENSE.md file for details.

πŸ“š Support & Documentation

  • Check the documentation in the docs/ directory
  • Review the test files for usage examples

πŸ”„ Updates and Roadmap

  • Add WebSocket support for real-time data
  • Implement caching for API responses
  • Add rate limiting and authentication
  • Create web dashboard for monitoring
  • Add more API integrations (Spotify, Twitter, etc.)

About

A comprehensive FastAPI application that hosts multiple MCP servers, each providing access to different public APIs and services.(Multi server MCP)

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages