A demonstration MCP server providing basic tools for greetings and addition.
Fifth Elephant MCP Server: A DIY Guide
This guide provides a complete walkthrough to create and run a simple Model Context Protocol (MCP) server from scratch.
Prerequisites
Before we begin, ensure you have the following installed:
1. Install pyenv (if not already installed)
pyenv allows you to manage multiple Python versions easily.
macOS:
brew install pyenv
Linux:
curl https://pyenv.run | bash
Windows:
# Install pyenv-win using PowerShell
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
Add pyenv to your shell profile:
macOS/Linux (zsh):
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
Windows:
# Restart your PowerShell or Command Prompt after installation
# pyenv-win will be automatically added to your PATH
2. Install Python 3.11
Install and set Python 3.11 as your local version:
pyenv install 3.11.9
pyenv local 3.11.9
Verify the Python version:
python --version
# Should output: Python 3.11.9
3. Install uv
Install uv for fast Python package management:
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
Verify uv installation:
uv --version
Step 1: Project Setup
First, create a directory for your project and navigate into it.
mkdir fifth-elephant-mcp
cd fifth-elephant-mcp
Step 2: Initialize a Python Project with `uv`
Initialize a new Python project using uv. This will create a virtual environment and a pyproject.toml file.
uv init --quiet
Step 3: Create and Activate Virtual Environment
Create a virtual environment using Python 3.11:
uv venv --python 3.11.9
Activate the virtual environment:
macOS/Linux:
source .venv/bin/activate
Windows (Command Prompt):
.venv\Scripts\activate.bat
Verify you're in the virtual environment (you should see (.venv) in your terminal prompt).
Step 4: Sync Dependencies (not required)
Sync the project dependencies to ensure everything is up to date:
uv sync
Step 5: Add MCP Dependency
Add the mcp library with CLI extras to your project's dependencies.
uv add "mcp[cli]"
Note: When installing MCP CLI, it may ask you to install additional dependencies. Press y to confirm.
Step 6: Verify Installation
Verify that all components are properly installed:
# Verify Python version
python --version
# Should output: Python 3.11.9
# Verify uv version
uv --version
# Verify MCP library is installed (should be version 1.11 or later)
python -c "from mcp.server.fastmcp import __version__; print(__version__)"
Step 7: Edit the Server Code
When you ran uv init, a main.py file was already created. Edit this file and replace its contents with the following code. This code sets up a FastMCP server with two tools: hello_world and add.
from mcp.server.fastmcp import FastMCP
# Create an MCP server
mcp = FastMCP("Fifth Elephant")
# Add a hello world tool
@mcp.tool()
def hello_world() -> str:
"""Returns a friendly greeting."""
return "hello world"
# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
"""Adds two numbers together."""
return a + b
if __name__ == "__main__":
mcp.run()
Step 8: Debug Locally with MCP Inspector
For development and testing, you can use the MCP inspector.
Run the following command -
uv run mcp dev main.py
This will spin up the inspector. It will open in your browser. Press connect on the left sidebar.
Step 9: Configure Claude Desktop
If you haven't already, install Claud
Tools (2)
hello_worldReturns a friendly greeting.addAdds two numbers together.Configuration
{"mcpServers": {"fifth-elephant": {"command": "uv", "args": ["run", "main.py"], "cwd": "/path/to/fifth-elephant-mcp"}}}