MCP Multi-Tool Server
A comprehensive Model Context Protocol (MCP) server that provides calculator tools, documentation resources, and prompt templates. This server supports both stdio and SSE (Server-Sent Events) transports, making it compatible with various MCP clients including Claude Desktop.
Features
🧮 Calculator Tools (8 Tools)
- add - Add two numbers
- subtract - Subtract two numbers
- multiply - Multiply two numbers
- divide - Divide two numbers
- power - Raise a number to a power
- square_root - Calculate square root
- factorial - Calculate factorial
- calculate_percentage - Calculate percentage
📚 Resources
- TypeScript SDK Documentation - Access the full TypeScript SDK MCP documentation via resource URI
typescript-sdk-mcp://documentation
📝 Prompts
- Meeting Summary - Generate executive meeting summaries from transcripts using a customizable template
🔌 Transport Support
- stdio (default) - Standard input/output for local integrations
- SSE - Server-Sent Events for remote HTTP connections
Table of Contents
- Prerequisites
- Installation
- Quick Start
- Usage
- Transport Modes
- Connecting to Claude Desktop
- API Reference
- Project Structure
- Troubleshooting
- Contributing
- License
Prerequisites
- Python 3.10+ (Python 3.12 recommended)
- uv - Fast Python package installer
- Administrative privileges (for software installation)
Installation
Step 1: Install Python
Windows
- Download Python from python.org/downloads
- Run the installer and check "Add Python to PATH"
- Verify installation:
python --version pip --version
macOS
# Using Homebrew (recommended)
brew install python@3.12
# Or download from python.org
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
Step 2: Install uv
Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Close and reopen PowerShell, then verify:
uv --version
macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
Add to PATH if needed:
export PATH="$HOME/.cargo/bin:$PATH"
Verify:
uv --version
Step 3: Clone and Setup
# Clone the repository
git clone <your-repo-url>
cd mcp-multi-tool-server
# Initialize project
uv init --no-readme
# Create virtual environment
uv venv
# Activate virtual environment
# Windows PowerShell:
.\.venv\Scripts\Activate.ps1
# Windows CMD:
.venv\Scripts\activate.bat
# macOS/Linux:
source .venv/bin/activate
# Install dependencies
uv add "mcp[cli]"
Quick Start
Running with stdio (Default)
# Activate virtual environment first
source .venv/bin/activate # or .\.venv\Scripts\Activate.ps1 on Windows
# Run the server
python server.py
The server will start in stdio mode, ready to accept connections from MCP clients.
Running with SSE
# Set transport to SSE
TRANSPORT=sse python server.py
# Or with custom host/port
TRANSPORT=sse HOST=0.0.0.0 PORT=8000 python server.py
The server will start an HTTP server on the specified host and port, accessible via SSE.
Usage
Environment Variables
| Variable | Description | Default |
|---|---|---|
TRANSPORT | Transport mode: stdio or sse | stdio |
HOST | Host address for SSE transport | 0.0.0.0 |
PORT | Port number for SSE transport | 8000 |
Examples
stdio Mode (for Claude Desktop)
python server.py
SSE Mode (for HTTP clients)
TRANSPORT=sse PORT=8080 python server.py
Transport Modes
stdio Transport
Use case: Local integrations, Claude Desktop, command-line tools
How it works:
- Server communicates via standard input/output
- Spawned as a subprocess by the MCP client
- No network configuration needed
Configuration example:
{
"mcpServers": {
"multi-tool-server": {
"command": "uv",
"args": ["--directory", "/path/to/project", "run", "server.py"],
"env": {}
}
}
}
SSE Transport
Use case: Remote servers, web applications, HTTP-based clients
How it works:
- Server runs as an HTTP server
- Uses Server-Sent Events for real-time communication
- Accessible via HTTP endpoints
Access URL:
http://localhost:8000/sse
Configuration example:
{
"mcpServers": {
"multi-tool-server": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}
Connecting to Claude Desktop
Step 1: Locate Configuration File
Windows:
%APPDATA%\Claude\claude_desktop_config.json
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Linux:
~/.config/Claude/claude_desktop_config.json
Step 2: Get Your Project Path
# Windows PowerShell
Get-Location
# macOS/Linux
pwd
Step 3: Add Server Configuration
Open claude_desktop_config.json and add:
{
"mcpServers": {
"multi-tool-server": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/mcp-multi-tool-server",
"run",
"server.py"
],
"env": {
"TRANSPORT": "stdio"
}
}
}
}
Important:
- Use absolute paths (not relative)
- On Windows, use forward slashes
/or escaped backslashes\\ - Replace
/absolute/path/to/mcp-multi-tool-serverwith your actual project path
Step 4: Restart Claude Desktop
Close and reopen Claude Desktop completely. All tools, resources, and prompts should now be available!
API Reference
Calculator Tools
add(a: float, b: float) -> float
Add two numbers together.
Example:
add(2, 3) # Returns: 5.0
subtract(a: float, b: float) -> float
Subtract the second number from the first.
Example:
subtract(10, 4) # Returns: 6.0
multiply(a: float, b: float) -> float
Multiply two numbers.
Example:
multiply(5, 6) # Returns: 30.0
divide(a: float, b: float) -> float
Divide the first number by the second.
Example:
divide(20, 4) # Returns: 5.0
Error: Raises ValueError if divisor is zero.
power(base: float, exponent: float) -> float
Raise a number to a power.
Example:
power(2, 8) # Returns: 256.0
square_root(number: float) -> float
Calculate the square root of a number.
Example:
square_root(16) # Returns: 4.0
Error: Raises ValueError if number is negative.
factorial(n: int) -> int
Calculate the factorial of a non-negative integer.
Example:
factorial(5) # Returns: 120 (5! = 5 × 4 × 3 × 2 × 1)
Error: Raises ValueError if n is negative.
calculate_percentage(part: float, whole: float) -> float
Calculate what percentage one number is of another.
Example:
calculate_percentage(25, 100) # Returns: 25.0 (25%)
Error: Raises ValueError if whole is zero.
Resources
typescript-sdk-mcp://documentation
Returns the full content of the TypeScript SDK MCP documentation markdown file.
Usage: Access this resource through your MCP client to retrieve the documentation.
Prompts
meeting_summary(meeting_date: str, meeting_title: str, transcript: str) -> list[dict]
Generate an executive meeting summary from a transcript.
Parameters:
meeting_date: Date of the meeting (e.g., "2025-01-15")meeting_title: Title of the meetingtranscript: Full meeting transcript text
Returns: A formatted prompt message ready to send to an LLM.
Template:
The prompt uses a template located at templates/meeting_summary/template.md with placeholders:
{{ meeting_date }}{{ meeting_title }}{{ transcript }}
Example Usage:
meeting_summary(
meeting_date="2025-01-15",
meeting_title="Q1 Planning Meeting",
transcript="John: Let's discuss Q1 goals..."
)
Project Structure
mcp-multi-tool-server/
├── .venv/ # Virtual environment
├── templates/
│ └── meeting_summary/
│ └── template.md # Meeting summary prompt template
├── __pycache__/ # Python cache
├── server.py # Main server file
├── pyproject.toml # Project configuration
├── uv.lock # Dependency lock file
├── README.md # This file
├── Typerscript SDK MCP.md # Documentation resource
├── claude_desktop_config.json.example # Example Claude Desktop config
└── .gitignore # Git ignore rules
Testing
Test Calculator Tools
Create a test file test_server.py:
from server import (
add, subtract, multiply, divide,
power, square_root, factorial, calculate_percentage
)
# Test all tools
assert add(2, 3) == 5.0
assert subtract(10, 4) == 6.0
assert multiply(5, 6) == 30.0
assert divide(20, 4) == 5.0
assert power(2, 8) == 256.0
assert square_root(16) == 4.0
assert factorial(5) == 120
assert calculate_percentage(25, 100) == 25.0
print("All tests passed!")
Run:
python test_server.py
Test Resource
from server import get_typescript_sdk_documentation
content = get_typescript_sdk_documentation()
print(content[:100]) # Print first 100 characters
Test Prompt
from server import meeting_summary
result = meeting_summary(
meeting_date="2025-01-15",
meeting_title="Test Meeting",
transcript="This is a test transcript."
)
print(result)
Troubleshooting
Python Not Found
Problem: python --version returns "command not found"
Solution:
- Windows: Reinstall Python with "Add Python to PATH" checked
- macOS/Linux: Use
python3instead ofpython
uv Not Found
Problem: uv --version returns "command not found"
Solution:
- Make sure you opened a new terminal after installation
- Add
~/.cargo/bin(or%USERPROFILE%\.cargo\binon Windows) to PATH - Restart terminal
Virtual Environment Issues
Problem: Can't activate virtual environment
Solution:
- Windows PowerShell:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser - Verify
.venvfolder exists:ls .venv(ordir .venvon Windows)
MCP Installation Fails
Problem: uv add "mcp[cli]" fails
Solution:
- Ensure virtual environment is activated (you should see
(.venv)in prompt) - Update uv:
uv self update - Check Python version:
python --version(should be 3.10+)
Server Won't Start
Problem: Server fails to start
Solution:
- Verify virtual environment is activated
- Check MCP is installed:
uv pip list | grep mcp - Ensure
server.pyexists in current directory
Claude Desktop Connection Issues
Problem: Server doesn't appear in Claude Desktop
Solution:
- Verify configuration file path is correct
- Use absolute paths (not relative)
- Check JSON syntax is valid
- Ensure
uvis in PATH or use full path - Restart Claude Desktop completely
- Check Claude Desktop logs for errors
SSE Transport Issues
Problem: SSE server won't start
Solution:
- Check if port is already in use:
lsof -i :8000(macOS/Linux) ornetstat -ano | findstr :8000(Windows) - Try a different port:
PORT=8080 TRANSPORT=sse python server.py - Ensure firewall allows connections on the specified port
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
License
This project is provided as-is for educational and personal use.
Additional Resources
Support
If you encounter any issues or have questions:
- Check the Troubleshooting section
- Search existing GitHub Issues
- Create a new issue with:
- Description of the problem
- Steps to reproduce
- Expected vs actual behavior
- System information (OS, Python version, etc.)
Made with ❤️ using FastMCP and the Model Context Protocol
