MCP Multi-Tool Server
# 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
1. [Prerequisites](#prerequisites)
2. [Installation](#installation)
3. [Quick Start](#quick-start)
4. [Usage](#usage)
5. [Transport Modes](#transport-modes)
6. [Connecting to Claude Desktop](#connecting-to-claude-desktop)
7. [API Reference](#api-reference)
8. [Project Structure](#project-structure)
9. [Troubleshooting](#troubleshooting)
10. [Contributing](#contributing)
11. [License](#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
1. Download Python from [python.org/downloads](https://www.python.org/downloads/)
2. Run the installer and **check "Add Python to PATH"**
3. Verify installation:
```powershell
python --version
pip --version
```
#### macOS
```bash
# Using Homebrew (recommended)
brew install python@3.12
# Or download from python.org
```
#### Linux (Ubuntu/Debian)
```bash
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
```
### Step 2: Install uv
#### Windows
```powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
Close and reopen PowerShell, then verify:
```powershell
uv --version
```
#### macOS/Linux
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
Add to PATH if needed:
```bash
export PATH="$HOME/.cargo/bin:$PATH"
```
Verify:
```bash
uv --version
```
### Step 3: Clone and Setup
```bash
# 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)
```bash
# 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
```bash
# 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)
```bash
python server.py
```
#### SSE Mode (for HTTP clients)
```bash
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:**
```json
{
"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:**
```json
{
"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
```bash
# Windows PowerShell
Get-Location
# macOS/Linux
pwd
```
### Step 3: Add Server Configuration
Open `claude_desktop_config.json` and add:
```json
{
"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-server` with 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:**
```python
add(2, 3) # Returns: 5.0
```
#### `subtract(a: float, b: float) -> float`
Subtract the second number from the first.
**Example:**
```python
subtract(10, 4) # Returns: 6.0
```
#### `multiply(a: float, b: float) -> float`
Multiply two numbers.
**Example:**
```python
multiply(5, 6) # Returns: 30.0
```
#### `divide(a: float, b: float) -> float`
Divide the first number by the second.
**Example:**
```python
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:**
```python
power(2, 8) # Returns: 256.0
```
#### `square_root(number: float) -> float`
Calculate the square root of a number.
**Example:**
```python
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:**
```python
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:**
```python
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 meeting
- `transcript`: 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:**
```python
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`:
```python
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:
```bash
python test_server.py
```
### Test Resource
```python
from server import get_typescript_sdk_documentation
content = get_typescript_sdk_documentation()
print(content[:100]) # Print first 100 characters
```
### Test Prompt
```python
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 `python3` instead of `python`
### 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\bin` on Windows) to PATH
- Restart terminal
### Virtual Environment Issues
**Problem:** Can't activate virtual environment
**Solution:**
- Windows PowerShell: `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser`
- Verify `.venv` folder exists: `ls .venv` (or `dir .venv` on 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.py` exists 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 `uv` is 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) or `netstat -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.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
---
## License
This project is provided as-is for educational and personal use.
---
## Additional Resources
- [MCP Documentation](https://modelcontextprotocol.io/)
- [Python MCP SDK](https://github.com/modelcontextprotocol/python-sdk)
- [FastMCP Documentation](https://github.com/jlowin/fastmcp)
- [uv Documentation](https://github.com/astral-sh/uv)
- [Claude Desktop MCP Setup](https://docs.anthropic.com/claude/docs/desktop-mcp)
---
## Support
If you encounter any issues or have questions:
1. Check the [Troubleshooting](#troubleshooting) section
2. Search existing [GitHub Issues](https://github.com/yourusername/mcp-multi-tool-server/issues)
3. 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**
TDQS
Scored across 8 tools
Each tool has a clearly distinct mathematical operation with no overlap in purpose. The descriptions precisely define their specific functions (e.g., add vs. subtract vs. multiply), making misselection unlikely.
Most tools use clear verb-based names (add, subtract, multiply, divide, power, factorial) with one deviation (calculate_percentage uses a verb_noun pattern). All names are descriptive and follow a readable convention, though not perfectly uniform.
With 8 tools, this is well-scoped for a basic mathematical operations server. Each tool earns its place by covering fundamental arithmetic and common functions without being excessive or too sparse.
The set covers core arithmetic (add, subtract, multiply, divide) and key functions (power, square_root, factorial, percentage), but lacks operations like modulus, logarithms, or trigonometric functions that might be expected in a comprehensive math toolkit.