Create a Custom Server
A custom MCP server that provides arithmetic calculation tools and fast mathematical operations for AI assistants.
varunidealabs
README
Create a Custom Server
Get started building your own server to use in Claude for Desktop and other clients.
In this tutorial, we'll build a simple MCP calculator server and connect it to a host, Claude for Desktop.
What is MCP?
MCP stands for Model Context Protocol — it’s a protocol that allows developers to extend AI assistants (like Claude) with custom tools and servers.
- Think of it like giving your AI assistant extra powers.
- These servers expose tools or functionalities that the assistant can use during a conversation.
- For example: you can build weather servers, calculators, finance assistants, or anything you imagine.
What We'll Be Building
We'll build a server that exposes four tools: add
, subtract
, multiply
, and divide
. Then we'll connect the server to an MCP host (in this case, Claude for Desktop):
Note: Servers can connect to any client. We've chosen Claude for Desktop here for demonstration purposes.
<details> <summary>Why Claude for Desktop and not Claude.ai?</summary> Because servers are locally run, MCP currently only supports desktop hosts. </details>
Core MCP Concepts
MCP servers can provide three main types of capabilities:
- Resources: File-like data that can be read by clients (like API responses or file contents).
- Tools: Functions that can be called by the LLM (with user approval).
- Prompts: Pre-written templates that help users accomplish specific tasks.
This tutorial will primarily focus on tools.
Let's get started with building our calculator server! You can find the complete code for what we'll be building here.
Prerequisite Knowledge
This quickstart assumes you have familiarity with:
- Python
- LLMs like Claude
System Requirements
- Python 3.10 or higher installed.
- You must use the Python MCP SDK 1.2.0 or higher.
Set Up Your Environment
First, let's install uv
and set up our Python project and environment:
MacOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Make sure to restart your terminal afterwards to ensure that the uv
command gets picked up.
Now, let's create and set up our project:
MacOS/Linux
# Create a new directory for our project
uv init calculator
cd calculator
# Create virtual environment and activate it
uv venv
source .venv/bin/activate
# Install dependencies
uv add "mcp[cli]"
# Create our server file
touch calculator.py
Windows
# Create a new directory for our project
uv init calculator
cd calculator
# Create virtual environment and activate it
uv venv
.venv\Scripts\activate
# Install dependencies
uv add "mcp[cli]"
# Create our server file
new-item calculator.py
Now let's dive into building your server.
Building Your Server
Importing Packages and Setting Up the Instance
Add these to the top of your calculator.py
:
from mcp.server.fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP("calculator")
Implementing Tool Execution
The tool execution handler is responsible for actually executing the logic of each tool. Let's add it:
@mcp.tool()
def add(a: float, b: float) -> float:
"""Add two numbers."""
return a + b
@mcp.tool()
def subtract(a: float, b: float) -> float:
"""Subtract two numbers."""
return a - b
@mcp.tool()
def multiply(a: float, b: float) -> float:
"""Multiply two numbers."""
return a * b
@mcp.tool()
def divide(a: float, b: float) -> float:
"""Divide two numbers."""
if b == 0:
raise ValueError("Division by zero is not allowed.")
return a / b
Running the Server
Finally, let's initialize and run the server:
if __name__ == "__main__":
# Initialize and run the server
mcp.run(transport='stdio')
Your server is complete! Run uv run calculator.py
to confirm that everything's working.
Testing Your Server with Claude for Desktop
Note: Claude for Desktop is not yet available on Linux.
We'll need to configure Claude for Desktop for whichever MCP servers you want to use. To do this, open your Claude for Desktop App configuration at ~/Library/Application Support/Claude/claude_desktop_config.json
in a text editor. Make sure to create the file if it doesn't exist.
MacOS/Linux
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
Windows
code $env:AppData\Claude\claude_desktop_config.json
You'll then add your servers in the mcpServers
key. The MCP UI elements will only show up in Claude for Desktop if at least one server is properly configured.
In this case, we'll add our single calculator server like so:
MacOS/Linux
{
"mcpServers": {
"calculator": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/calculator",
"run",
"calculator.py"
]
}
}
}
Windows
{
"mcpServers": {
"calculator": {
"command": "uv",
"args": [
"--directory",
"C:\\ABSOLUTE\\PATH\\TO\\PARENT\\FOLDER\\calculator",
"run",
"calculator.py"
]
}
}
}
Warning: You may need to put the full path to the
uv
executable in thecommand
field. You can get this by runningwhich uv
on MacOS/Linux orwhere uv
on Windows.
Make sure you pass in the absolute path to your server.
This tells Claude for Desktop:
- There's an MCP server named "calculator".
- To launch it by running
uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/calculator run calculator.py
.
Save the file, and restart Claude for Desktop.
Since this calculator supports basic arithmetic operations, it can be used for addition, subtraction, multiplication, and division.
For more info: MCP Official Docs
Recommended Servers
Crypto Price & Market Analysis MCP Server
A Model Context Protocol (MCP) server that provides comprehensive cryptocurrency analysis using the CoinCap API. This server offers real-time price data, market analysis, and historical trends through an easy-to-use interface.
MCP PubMed Search
Server to search PubMed (PubMed is a free, online database that allows users to search for biomedical and life sciences literature). I have created on a day MCP came out but was on vacation, I saw someone post similar server in your DB, but figured to post mine.
dbt Semantic Layer MCP Server
A server that enables querying the dbt Semantic Layer through natural language conversations with Claude Desktop and other AI assistants, allowing users to discover metrics, create queries, analyze data, and visualize results.
mixpanel
Connect to your Mixpanel data. Query events, retention, and funnel data from Mixpanel analytics.

Sequential Thinking MCP Server
This server facilitates structured problem-solving by breaking down complex issues into sequential steps, supporting revisions, and enabling multiple solution paths through full MCP integration.

Nefino MCP Server
Provides large language models with access to news and information about renewable energy projects in Germany, allowing filtering by location, topic (solar, wind, hydrogen), and date range.
Vectorize
Vectorize MCP server for advanced retrieval, Private Deep Research, Anything-to-Markdown file extraction and text chunking.
Mathematica Documentation MCP server
A server that provides access to Mathematica documentation through FastMCP, enabling users to retrieve function documentation and list package symbols from Wolfram Mathematica.
kb-mcp-server
An MCP server aimed to be portable, local, easy and convenient to support semantic/graph based retrieval of txtai "all in one" embeddings database. Any txtai embeddings db in tar.gz form can be loaded
Research MCP Server
The server functions as an MCP server to interact with Notion for retrieving and creating survey data, integrating with the Claude Desktop Client for conducting and reviewing surveys.