Skip to main content
Glama
dinek-k

DB & Calculator MCP Server

by dinek-k
README.md
# MCP Example Server

This is a Model Context Protocol (MCP) server that provides two main categories of tools:
1. **Database Tools** - For interacting with a SQLite database
2. **Calculator Tools** - For performing mathematical calculations

## Features

### Database Tools
- `query_database` - Execute custom SQL queries
- `get_all_users` - Retrieve all users with optional limit
- `get_user_by_id` - Get a specific user by ID
- `add_user` - Add a new user to the database
- `update_user` - Update an existing user
- `delete_user` - Delete a user from the database

### Calculator Tools
- `calculate` - Perform basic mathematical operations (add, subtract, multiply, divide, power, sqrt, sin, cos, tan, log, abs, round, floor, ceil)
- `calculate_expression` - Evaluate mathematical expressions
- `calculate_stats` - Calculate statistical measures (mean, median, variance, standard deviation, etc.)

## Installation

1. Install dependencies:
```bash
npm install
```

2. The database will be automatically created when you first run the server.

## Usage

### Starting the Server

```bash
npm start
```

Or for development with auto-restart:
```bash
npm run dev
```

### Database Schema

The server creates a SQLite database with the following schema:

```sql
CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  email TEXT UNIQUE NOT NULL,
  age INTEGER,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
```

Sample data is automatically inserted when the database is first created.

### Tool Examples

#### Database Operations

1. **Get all users:**
```json
{
  "name": "get_all_users",
  "arguments": {}
}
```

2. **Get user by ID:**
```json
{
  "name": "get_user_by_id",
  "arguments": {
    "id": 1
  }
}
```

3. **Add a new user:**
```json
{
  "name": "add_user",
  "arguments": {
    "name": "John Doe",
    "email": "john@example.com",
    "age": 30
  }
}
```

4. **Execute custom query:**
```json
{
  "name": "query_database",
  "arguments": {
    "query": "SELECT * FROM users WHERE age > 25"
  }
}
```

#### Calculator Operations

1. **Basic calculation:**
```json
{
  "name": "calculate",
  "arguments": {
    "operation": "add",
    "numbers": [5, 3]
  }
}
```

2. **Evaluate expression:**
```json
{
  "name": "calculate_expression",
  "arguments": {
    "expression": "2 + 3 * 4"
  }
}
```

3. **Statistical analysis:**
```json
{
  "name": "calculate_stats",
  "arguments": {
    "numbers": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  }
}
```

## Available Calculator Operations

- `add` - Addition
- `subtract` - Subtraction
- `multiply` - Multiplication
- `divide` - Division (with zero check)
- `power` - Exponentiation
- `sqrt` - Square root
- `sin` - Sine function
- `cos` - Cosine function
- `tan` - Tangent function
- `log` - Natural logarithm
- `abs` - Absolute value
- `round` - Round to nearest integer
- `floor` - Floor function
- `ceil` - Ceiling function

## Project Structure

```
├── package.json
├── README.md
├── src/
│   ├── server.js      # Main MCP server
│   ├── database.js    # Database operations
│   └── calculator.js  # Calculator operations
└── data/
    └── example.db     # SQLite database (created automatically)
```

## Error Handling

The server includes comprehensive error handling for:
- Invalid SQL queries
- Database connection issues
- Mathematical operation errors (division by zero, invalid inputs)
- Missing required parameters
- Unknown tool names

## Development

To modify or extend the server:

1. Add new tools in the `setupTools()` method in `server.js`
2. Implement corresponding handler methods
3. Update the tools list in the `tools/list` handler
4. Add any necessary database operations in `database.js`
5. Add calculator functions in `calculator.js`

## Dependencies

- `@modelcontextprotocol/sdk` - MCP SDK for Node.js
- `sqlite3` - SQLite database driver
- `express` - Web framework (for potential future HTTP transport)

## License

MIT