Server Development Guide
Comprehensive guide to building MCP servers from scratch.
Model Context Protocol (MCP) is a standardized way for AI applications to communicate with external data sources and tools. It enables AI models to access real-time information, perform actions, and interact with various services through a consistent interface. MCP provides a common language for AI applications to: - Access databases and APIs - Execute commands and scripts - Retrieve real-time data - Interact with external services - Maintain context across sessions
Before you can build MCP servers, you'll need to set up your development environment. This includes installing the necessary tools and dependencies.
# Install Python 3.8+ python --version # Install MCP SDK pip install mcp-sdk # Create a new project mkdir my-mcp-server cd my-mcp-server python -m venv venv # Activate virtual environment # On Windows: venv\Scripts\activate # On macOS/Linux: source venv/bin/activate # Install additional dependencies pip install asyncio aiohttp
Let's create a simple MCP server that responds to basic requests. This example demonstrates the fundamental concepts of MCP server development.
from mcp import Server, StdioServerTransport from mcp.types import ( CallToolRequest, CallToolResult, ListToolsRequest, ListToolsResult, Tool, ) class MyFirstServer(Server): def __init__(self): super().__init__() self.register_tool_handler("hello", self.hello) async def list_tools(self, request: ListToolsRequest) -> ListToolsResult: return ListToolsResult( tools=[ Tool( name="hello", description="Say hello to the user", inputSchema={ "type": "object", "properties": { "name": {"type": "string", "description": "User's name"} } } ) ] ) async def hello(self, request: CallToolRequest) -> CallToolResult: name = request.arguments.get("name", "World") return CallToolResult( content=[ { "type": "text", "text": f"Hello, {name}! Welcome to MCP." } ] ) if __name__ == "__main__": server = MyFirstServer() transport = StdioServerTransport() import asyncio asyncio.run(transport.run(server))
It's important to test your MCP server to ensure it works correctly. Here's how to create basic tests for your server.
import asyncio from my_first_server import MyFirstServer from mcp.types import CallToolRequest, ListToolsRequest async def test_server(): server = MyFirstServer() # Test list_tools tools_result = await server.list_tools(ListToolsRequest()) print(f"Available tools: {[tool.name for tool in tools_result.tools]}") # Test hello tool hello_result = await server.hello( CallToolRequest( name="hello", arguments={"name": "Alice"} ) ) print(f"Response: {hello_result.content}") if __name__ == "__main__": asyncio.run(test_server())
Once your server is working locally, you'll want to deploy it for production use. Here are the steps to package and deploy your MCP server.
# Create setup.py for packaging from setuptools import setup, find_packages setup( name="my-mcp-server", version="1.0.0", packages=find_packages(), install_requires=[ "mcp-sdk>=1.0.0", ], entry_points={ "console_scripts": [ "my-mcp-server=my_first_server:main", ], }, ) # Install your server pip install -e . # Run the server my-mcp-server
Client Integration Guide
How to integrate MCP servers
API Reference
Complete API documentation