MCP Math Server
# MCP Math Server
A Model Context Protocol (MCP) server built with TypeScript and Node.js, designed to provide basic math operations and a greeting resource for AI assistants and tool integrations.
## Features
- Addition, Subtraction, Multiplication, Division (with division-by-zero error handling)
- Square and Square Root (with error handling for negative input, and results rounded to two decimals)
- Greatest Common Measure (GCM) and Least Common Multiple (LCM)
- Number Comparison tools (less than, greater than, less than or equal, greater than or equal, general comparison)
- Greeting resource (returns a personalized greeting)
- Fully type-safe using Zod schemas
- Easily extensible for more tools/resources
## Installation
1. Clone the repository or copy the project files.
2. Install dependencies:
```sh
npm install
```
3. Compile the TypeScript code:
```sh
npx tsc
```
## Running the Server
This project is designed to run as an MCP server using VS Code's MCP integration.
1. Ensure your `.vscode/mcp.json` is configured as follows:
```jsonc
{
"servers": {
"my-mcp-server-d95b22f0": {
"type": "stdio",
"command": "node",
"args": ["d:/Proj/3/mcp-demo/dist/index.js"]
}
},
"inputs": []
}
```
2. Start VS Code and ensure the MCP extension is enabled. The server will start automatically.
## Available Tools
- **add**: Add two numbers
- Input: `{ a: number, b: number }`
- Output: `The sum of a and b is result`
- **subtract**: Subtract b from a
- Input: `{ a: number, b: number }`
- Output: `The difference of a and b is result`
- **multiply**: Multiply two numbers
- Input: `{ a: number, b: number }`
- Output: `The product of a and b is result`
- **divide**: Divide a by b
- Input: `{ a: number, b: number }`
- Output: `The quotient of a divided by b is result` (error if b = 0)
- **square**: Square a number
- Input: `{ a: number }`
- Output: `The square of a is result`
- **sqrt**: Square root of a number
- Input: `{ x: number }`
- Output: `The square root of x is result` (rounded to two decimals, error if x < 0)
- **gcm**: Greatest Common Measure of two numbers
- Input: `{ a: number, b: number }`
- Output: `The greatest common measure of a and b is result`
- **lcm**: Least Common Multiple of two numbers
- Input: `{ a: number, b: number }`
- Output: `The LCM of a and b is result`
- **lessThan**: Compare if a is less than b
- Input: `{ a: number, b: number }`
- Output: `a is less than b` or `a is not less than b`
- **greaterThan**: Compare if a is greater than b
- Input: `{ a: number, b: number }`
- Output: `a is greater than b` or `a is not greater than b`
- **lessThanOrEqual**: Compare if a is less than or equal to b
- Input: `{ a: number, b: number }`
- Output: `a is less than or equal to b` or `a is not less than or equal to b`
- **greaterThanOrEqual**: Compare if a is greater than or equal to b
- Input: `{ a: number, b: number }`
- Output: `a is greater than or equal to b` or `a is not greater than or equal to b`
- **compare**: General comparison tool
- Input: `{ a: number, b: number }`
- Output: `Comparison result: -1, 0, or 1` with description
## Greeting Resource
- **greet**: Returns a greeting for a given name
- Resource URI: `greet://{name}`
- Output: `Hello, {name}!`
## Example Usage
- Add: `{ a: 2, b: 3 }` → `The sum of 2 and 3 is 5`
- Subtract: `{ a: 10, b: 5 }` → `The difference of 10 and 5 is 5`
- Multiply: `{ a: 4, b: 6 }` → `The product of 4 and 6 is 24`
- Divide: `{ a: 8, b: 2 }` → `The quotient of 8 divided by 2 is 4`
- Square: `{ a: 7 }` → `The square of 7 is 49`
- Square Root: `{ x: 5 }` → `The square root of 5 is 2.24`
- GCM: `{ a: 12, b: 18 }` → `The greatest common measure of 12 and 18 is 6`
- LCM: `{ a: 2, b: 5 }` → `The LCM of 2 and 5 is 10`
- Less Than: `{ a: 3, b: 5 }` → `3 is less than 5`
- Greater Than: `{ a: 7, b: 4 }` → `7 is greater than 4`
- Less Than or Equal: `{ a: 5, b: 5 }` → `5 is less than or equal to 5`
- Greater Than or Equal: `{ a: 8, b: 3 }` → `8 is greater than or equal to 3`
- Compare: `{ a: 2.5, b: 3.7 }` → `Comparison result: -1 (2.5 is less than 3.7)`
- Greeting: `greet://Alice` → `Hello, Alice!`
## Extending the Project
You can easily add more tools or resources by registering them in `src/index.ts` using the MCP SDK and Zod schemas.
## License
MIT
TDQS
Scored across 8 tools
Every tool has a clearly distinct mathematical operation with no overlap in purpose. The descriptions specify unique functions like addition, division, GCD, LCM, multiplication, square root, squaring, and subtraction, making misselection highly unlikely.
The naming is mostly consistent with a simple verb-based pattern (e.g., add, divide, multiply, subtract), but there are minor deviations: 'gcm' and 'lcm' use acronyms instead of full names, and 'sqrt' is an abbreviation, which slightly breaks the pattern while remaining readable.
With 8 tools, the server is well-scoped for a basic math utility, covering essential arithmetic and number theory operations. Each tool earns its place without redundancy, and the count is neither too sparse nor overwhelming for the domain.
The tool set covers core arithmetic operations (add, subtract, multiply, divide) and key number theory functions (GCD, LCM, square, square root), with minor gaps such as lacking advanced operations like exponentiation or trigonometric functions, but agents can work around this for basic math tasks.