Skip to main content
Glama
vipankumar87

MCP Multi-Tool Server

by vipankumar87
README.md
# MCP Multi-Tool Server

A comprehensive Model Context Protocol (MCP) server built with FastMCP that provides calculator tools, document resources, and prompt templates. This server demonstrates multiple MCP capabilities including tools, resources, and prompts in a single implementation.

## Features

### 🧮 Calculator Tools
- **Basic Operations**: Addition, subtraction, multiplication, division
- **Advanced Math**: Power, square root, factorial calculations  
- **Utility Functions**: Percentage calculations
- **Error Handling**: Division by zero protection, negative square root protection, factorial range limits

### šŸ“– Document Resources  
- **TypeScript SDK Resource**: Access to MCP TypeScript SDK documentation
- **Dynamic File Reading**: Reads from configurable file paths
- **Error Handling**: Graceful handling of missing files

### šŸ“ Prompt Templates
- **Meeting Summary Template**: Executive meeting summary generator
- **Variable Substitution**: Dynamic template variable replacement
- **Structured Output**: Professional meeting summary format

## Quick Start

### Prerequisites
- Python 3.12 or later
- `uv` package manager

### Installation

1. **Clone the repository**
   ```bash
   git clone <your-repo-url>
   cd mcp-multi-tool-server
   ```

2. **Install dependencies**
   ```bash
   uv sync
   ```

3. **Test the server**
   ```bash
   uv run mcp dev server.py
   ```
   
   Open http://localhost:3000 to test the server in MCP Inspector.

## Usage

### Calculator Tools

The server provides 8 calculator tools:

| Tool | Description | Example |
|------|-------------|---------|
| `add` | Add two numbers | `add(5, 3) → 8` |
| `subtract` | Subtract second from first | `subtract(10, 4) → 6` |
| `multiply` | Multiply two numbers | `multiply(6, 7) → 42` |
| `divide` | Divide first by second | `divide(15, 3) → 5` |
| `power` | Raise to power | `power(2, 8) → 256` |
| `square_root` | Calculate square root | `square_root(16) → 4` |
| `factorial` | Calculate factorial | `factorial(5) → 120` |
| `calculate_percentage` | Calculate percentage | `calculate_percentage(200, 15) → 30` |

### TypeScript SDK Resource

Access the TypeScript SDK documentation:

```python
# Resource URI: file://typesdk
# Returns the contents of the TypeScript SDK documentation
```

**Configuration**: Update `DESKTOP_FILE_PATH` in `server.py` to point to your documentation file:
```python
DESKTOP_FILE_PATH = r"C:\Users\VipanKumar\Desktop\typesdk.md"
```

### Meeting Summary Prompt

Generate structured meeting summaries:

```python
# Prompt: meeting_summary
# Required parameters:
# - meeting_date: Date of the meeting
# - meeting_title: Title or purpose of the meeting  
# - transcript: Meeting transcript or notes
```

**Output Structure**:
- Overview (purpose, participants, topics)
- Key Decisions (major decisions, strategic changes)
- Action Items (next steps, responsibilities, deadlines)
- Follow-up Required (pending discussions, future meetings)

## Claude Desktop Integration

### Configuration

Add to your Claude Desktop config file:

**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "multi-tool-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/your/server/directory",
        "run",
        "python",
        "server.py"
      ],
      "env": {
        "UV_PROJECT_ENVIRONMENT": ".venv"
      }
    }
  }
}
```

### Restart Claude Desktop

After updating the configuration, restart Claude Desktop to load the server.

## Development

### Project Structure

```
mcp-multi-tool-server/
ā”œā”€ā”€ server.py                 # Main server implementation
ā”œā”€ā”€ templates/
│   └── Prompt.md             # Meeting summary template
ā”œā”€ā”€ pyproject.toml            # Project configuration
ā”œā”€ā”€ claude_desktop_config.json # Claude Desktop config example
ā”œā”€ā”€ README.md                 # This file
└── .venv/                    # Virtual environment
```

### Testing

**MCP Inspector (Recommended)**
```bash
uv run mcp dev server.py
```

**Direct Server Testing**
```bash
python server.py
```

**Testing Individual Components**

1. **Calculator Tools**: Use MCP Inspector to call each tool with test parameters
2. **Resource Access**: Check the resource tab in MCP Inspector for `file://typesdk`  
3. **Prompt Templates**: Test the `meeting_summary` prompt with sample data

### Customization

**Adding New Calculator Tools**:
```python
@mcp.tool()
def new_calculation(param1: float, param2: float) -> float:
    """Description of the new calculation."""
    return param1 + param2  # Your calculation logic
```

**Adding New Resources**:
```python
@mcp.resource("file://your-resource")
async def get_your_resource() -> str:
    """Description of your resource."""
    # Your resource logic
    return "Resource content"
```

**Adding New Prompts**:
```python
@mcp.prompt("your_prompt")
async def your_prompt(param1: str, param2: str) -> str:
    """Description of your prompt."""
    # Your prompt logic
    return f"Processed: {param1}, {param2}"
```

## Error Handling

The server includes comprehensive error handling:

- **Division by Zero**: Returns appropriate error message
- **Negative Square Roots**: Prevents invalid operations
- **Factorial Limits**: Restricts calculations to reasonable ranges (n ≤ 100)
- **File Not Found**: Graceful handling of missing resource files
- **Template Errors**: Proper error reporting for prompt template issues

## Configuration Options

### File Paths

Update these paths in `server.py` for your environment:

```python
# TypeScript SDK documentation path
DESKTOP_FILE_PATH = r"C:\Users\YourUser\Desktop\typesdk.md"

# Prompt template path (relative to server.py)
PROMPT_TEMPLATE_PATH = os.path.join(os.path.dirname(__file__), "templates", "Prompt.md")
```

### Server Name

Change the server name in `server.py`:
```python
mcp = FastMCP("Your Server Name")
```

## Troubleshooting

### Common Issues

**Server won't start**:
- Check Python version (3.12+ required)
- Verify `uv` installation: `uv --version`
- Check virtual environment: `uv sync`

**Tools not appearing in Claude**:
- Verify Claude Desktop config file location
- Check file paths in configuration
- Restart Claude Desktop after config changes

**Resource file not found**:
- Verify `DESKTOP_FILE_PATH` points to correct file
- Check file permissions
- Ensure file exists and is readable

**Prompt template errors**:
- Verify `templates/Prompt.md` exists
- Check template syntax
- Ensure proper variable placeholders: `{{ variable_name }}`

### Debug Mode

Run with debug output:
```bash
uv run python server.py --debug
```

## Contributing

1. Fork the repository
2. Create a feature branch: `git checkout -b feature-name`
3. Make your changes
4. Add tests for new functionality
5. Submit a pull request

## License

This project is licensed under the MIT License. See LICENSE file for details.

## Resources

- [MCP Documentation](https://modelcontextprotocol.io/)
- [FastMCP GitHub](https://github.com/jlowin/fastmcp)
- [Claude Desktop MCP Setup](https://claude.ai/docs)

---

**Built with FastMCP** - A high-level Python library for building MCP servers. 

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct mathematical operation with no overlap in purpose. For example, 'add' and 'subtract' are complementary but not ambiguous, and 'factorial' and 'power' serve unique functions. An agent can easily differentiate between them based on their specific descriptions.

Naming Consistency4/5

The tool names are mostly consistent, using clear verb-based or descriptive terms like 'add', 'multiply', and 'square_root'. However, there is a minor deviation with 'calculate_percentage' which is more verbose compared to others like 'divide' or 'power', slightly breaking the pattern but still maintaining readability.

Tool Count5/5

With 8 tools, this server is well-scoped for a basic mathematical operations toolkit. Each tool earns its place by covering fundamental arithmetic and mathematical functions, such as addition, subtraction, multiplication, division, and specialized operations like factorial and square root, without being overly complex or sparse.

Completeness5/5

The tool set provides complete coverage for basic mathematical operations, including all core arithmetic (add, subtract, multiply, divide) and common functions (percentage, factorial, power, square root). There are no obvious gaps for this domain, as it supports a wide range of calculations an agent might need without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues