
TestMcpServer
A Model Context Protocol server implementation providing mathematical operations through a standardized interface. Built with TypeScript and Node.js, this server demonstrates how to create and expose tools via the Model Context Protocol specification.
what is TestMcpServer?
TestMcpServer is a Model Context Protocol server implementation that provides mathematical operations through a standardized interface, built with TypeScript and Node.js.
how to use TestMcpServer?
To use TestMcpServer, clone the repository, run npm install
, build the server with npm run build
, and then run it using node build/index.js
. For development, use npm run dev
to watch for changes.
key features of TestMcpServer?
- Implements the Model Context Protocol for mathematical operations.
- Easy to understand and manage code structure.
- Allows adding new mathematical tools through a defined process.
use cases of TestMcpServer?
- Creating a custom MCP server for mathematical operations.
- Adding new mathematical tools like addition and multiplication.
- Integrating with other applications that require mathematical computations.
FAQ from TestMcpServer?
- What programming languages are required to run TestMcpServer?
Node.js, npm, and TypeScript are required to run the server.
- How can I add new tools to the server?
You can add new tools by creating a tool definition, implementing a controller, and registering it in the tool registry.
- Is there a guide for setting up the server?
Yes, the repository includes a detailed guide on installation and adding new tools.
TestMcpServer
Introduction
This example MCP Server implementation uses Anthropic's open source Model Context Protocol. I found the existing examples to be unbearable to look at, mostly very long one-filers and very hard to read through. With this more manageable approach I want users to find examples that are easier to understand and get into than what is currently out there. Let this be the foundation for your next MCP Server project.
Requires Node, npm, typescript
Installation
run npm install
upon cloning the repository.
Check package.json for scripts to use.
Run npm run build
to build the server.
Run node build/index.js
to run the server.
I suggest the following however:
Run npm run dev
to watch changes on save and then rebuild and re-run inspector so you can test it in localhost:5173
Before being able to run the MCP server in Cursor it must be built first.
MCP Server - Adding New Tools
This guide explains how to add new tools to the MCP server. The process involves four main components:
/src/definitions/
)
1. Tool Definition (First, create your tool definition in the appropriate category folder (e.g., maths/
):
// Example: src/definitions/maths/addition.ts
import { Tool } from "@modelcontextprotocol/sdk/types.js";
export const ADDITION: Tool = {
name: "addition",
description: "Add two numbers together",
inputSchema: {
type: "object",
properties: {
a: {
type: "number",
description: "First number to add",
},
b: {
type: "number",
description: "Second number to add",
},
},
required: ["a", "b"],
},
};
Then add it to the category's main file:
// src/definitions/maths/main.ts
import { ADDITION } from "./addition.js";
import { MULTIPLICATION } from "./multiplication.js";
const MATHS_TOOLS = [ADDITION, MULTIPLICATION] as const;
export default MATHS_TOOLS;
/src/controllers/
)
2. Controller Implementation (Add the handler method to the appropriate controller:
// src/controllers/MathsController.ts
class MathsController {
async handleAddition(a: number, b: number) {
try {
const result = a + b;
return {
content: [
{
type: "text",
text: `Sum: ${result}`,
},
],
isError: false,
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error calculating sum: ${
error instanceof Error ? error.message : String(error)
}`,
},
],
isError: true,
};
}
}
}
/src/utils/toolRegistry.ts
)
3. Tool Registry (Register your tool in the controllerMap
:
const controllerMap: ControllerMap = {
// Math tools
addition: {
controller: MathsController,
handlerMethod: "handleAddition",
},
multiplication: {
controller: MathsController,
handlerMethod: "handleMultiplication",
},
};
The registry exports two main functions:
// Get tool definitions for server registration
export function getToolDefinitions() {
return {
MATHS_TOOLS,
};
}
// Get handler for tool execution
export function getToolHandler(toolName: string) {
const mapping = controllerMap[toolName];
if (!mapping) {
return null;
}
const controllerInstance = new mapping.controller();
return async (args: any) => {
return await controllerInstance[mapping.handlerMethod](
...Object.values(args)
);
};
}
/src/index.ts
)
4. Server Configuration (The server is configured to use the tool registry:
const tools = getToolDefinitions();
const server = new Server(
{
name: "mcp-server",
version: "0.1.0",
},
{
capabilities: {
tools: getToolDefinitions(), // Register tools array
},
}
);
// List available tools
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: tools,
}));
// Handle tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => {
try {
const handler = getToolHandler(request.params.name);
if (!handler) {
return toolController.getUnknownToolResponse(request.params.name);
}
return await handler(request.params.arguments);
} catch (error) {
return toolController.getErrorResponse(error);
}
});
Conventions
- Tool Names: Use lowercase (e.g.,
addition
,multiplication
) - Handler Methods: Name them as
handle
+ PascalCase of the tool name (e.g.,handleAddition
,handleMultiplication
) - Tool Categories: Group related tools in their own directory under
definitions/
- Controllers: Group related handlers in a controller class named after the category (e.g.,
MathsController
)
Example Flow
- Create tool definition in
src/definitions/category/toolname.ts
- Add tool to category's
main.ts
- Add handler method to appropriate controller
- Register tool in
toolRegistry.ts
'scontrollerMap
- Test the new tool
Add MCP Server to Cursor
- Open settings
- Go to Features
- Scroll to MCP Servers
- Click Add new MCP server
- Give MCP Server a name of your preference
- For type use
command
- Server URL for local use should be
node <absolute path to project>\build\index.js>
It should light up green and list the registered tools.