My MCP Server

Local setup required. This server has to be cloned and prepared on your machine before you register it in Claude Code.
1

Set the server up locally

Run this once to clone and prepare the server before adding it to Claude Code.

Run in terminal
npm install
npm run build
2

Register it in Claude Code

After the local setup is done, run this command to point Claude Code at the built server.

Run in terminal
claude mcp add my-mcp -- node "<FULL_PATH_TO_MY_MCP>/dist/index.js"

Replace <FULL_PATH_TO_MY_MCP>/dist/index.js with the actual folder you prepared in step 1.

README.md

A custom Model Context Protocol (MCP) server with an extensible architecture

My MCP Server

A custom Model Context Protocol (MCP) server with an extensible tool architecture for Claude Code. This server makes it easy to add custom tools that Claude can use during conversations.

Features

  • Extensible Architecture: Easy-to-use pattern for adding new tools
  • TypeScript: Full type safety with TypeScript
  • Example Tools Included: Calculator and Echo tools to demonstrate the pattern
  • Production-Ready: Proper error handling and validation with Zod
  • Well-Documented: Clear examples and documentation for adding new tools

Available Tools

1. Calculate

Perform basic arithmetic operations (add, subtract, multiply, divide).

Example usage:

  • "Calculate 15 + 27"
  • "What's 100 divided by 4?"
  • "Multiply 8 by 9"

2. Echo

Echo a message back, with optional text transformation (uppercase/lowercase).

Example usage:

  • "Echo 'Hello World'"
  • "Echo 'test message' in uppercase"
  • "Echo 'LOUD TEXT' in lowercase"

Installation

1. Install Dependencies

npm install

2. Build the Project

npm run build

This will compile the TypeScript code to JavaScript in the build/ directory.

3. Configure Claude Code

Add the following configuration to your ~/.claude.json file:

{
  "mcpServers": {
    "my-mcp": {
      "type": "stdio",
      "command": "node",
      "args": ["/Users/martin/src/my-mcp/build/index.js"]
    }
  }
}

Important: Make sure to use the absolute path to your build/index.js file.

4. Restart Claude Code

After updating the configuration, restart Claude Code to load the MCP server.

Adding New Tools

Adding a new tool is simple and follows a consistent pattern:

Step 1: Create a New Tool File

Create a new file in src/tools/ with the naming convention your-tool.tool.ts:

import { z } from "zod";
import type { ToolDefinition } from "../types/index.js";

export const yourTool: ToolDefinition = {
  name: "your_tool_name",
  description: "Description of what your tool does",

  inputSchema: z.object({
    param1: z.string().describe("Description of parameter 1"),
    param2: z.number().optional().describe("Optional parameter 2"),
  }),

  handler: async (args) => {
    // Your tool logic here
    const result = `Processed: ${args.param1}`;

    return {
      content: [{
        type: "text",
        text: result
      }]
    };
  }
};

Step 2: Register the Tool

Add your tool to the registry in src/tools/index.ts:

import { yourTool } from "./your-tool.tool.js";

export const tools: ToolDefinition[] = [
  echoTool,
  calculatorTool,
  yourTool,  // Add your tool here
];

Step 3: Rebuild

npm run build

Step 4: Restart Claude Code

Restart Claude Code to load the new tool.

Step 5: Test

Try using your new tool in a conversation with Claude!

Tool Examples

Simple Text Processing Tool

import { z } from "zod";
import type { ToolDefinition } from "../types/index.js";

export const reverseTool: ToolDefinition = {
  name: "reverse",
  description: "Reverse a string",

  inputSchema: z.object({
    text: z.string().describe("The text to reverse"),
  }),

  handler: async (args) => {
    const reversed = args.text.split("").reverse().join("");

    return {
      content: [{
        type: "text",
        text: reversed
      }]
    };
  }
};

API Call Tool

import { z } from "zod";
import type { ToolDefinition } from "../types/index.js";

export const weatherTool: ToolDefinition = {
  name: "get_weather",
  description: "Get current weather for a location",

  inputSchema: z.object({
    location: z.string().describe("City name or zip code"),
  }),

  handler: async (args) => {
    try {
      // Make API call (example)
      const response = await fetch(
        `https://api.weather.example.com/current?location=${args.location}`
      );
      const data = await response.json();

      return {
        content: [{
          type: "text",
          text: `Weather in ${args.location}: ${data.temperature}°F, ${data.conditions}`
        }]
      };
    } catch (error) {
      return {
        isError: true,
        content: [{
          type: "text",
          text: `Failed to fetch weather: ${error instanceof Error ? error.message : 'Unknown error'}`
        }]
      };
    }
  }
};

Project Structure

my-mcp/
├── src/
│   ├── index.ts                    # Main entry point
│   ├── server.ts                   # Server initialization and request handlers
│   ├── tools/
│   │   ├── index.ts                # Tool registry (add new tools here)
│   │   ├── calculator.tool.ts      # Calculator tool implementation
│   │   └── echo.tool.ts            # Echo tool implementation
│   └── types/
│       └── index.ts                # TypeScript type definitions
├── build/                          # Compiled JavaScript (generated)
├── package.json                    # Project depende

Tools (2)

calculatePerform basic arithmetic operations like addition, subtraction, multiplication, and division.
echoEcho a message back with optional text transformation.

Configuration

claude_desktop_config.json
{"mcpServers": {"my-mcp": {"type": "stdio", "command": "node", "args": ["/absolute/path/to/my-mcp/build/index.js"]}}}

Try it

Calculate 15 + 27
What is 100 divided by 4?
Echo 'Hello World' in uppercase
Echo 'LOUD TEXT' in lowercase

Frequently Asked Questions

What are the key features of My MCP Server?

Extensible architecture for adding custom tools. Full type safety with TypeScript. Built-in calculator and echo tools. Production-ready error handling and validation with Zod.

What can I use My MCP Server for?

Adding custom business logic tools to Claude Code. Performing quick arithmetic calculations during coding sessions. Testing text transformation workflows with the echo tool. Building a modular foundation for complex MCP tool development.

How do I install My MCP Server?

Install My MCP Server by running: npm install && npm run build

What MCP clients work with My MCP Server?

My MCP Server works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep My MCP Server docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare