README.md•3.98 kB
# 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