Skip to main content
Glama

MCP Server POC

by ranit532

MCP Server POC

A cutting-edge Proof of Concept (POC) implementation of a Model Context Protocol (MCP) server using Python and modern technologies. This server provides tools and resources that can be accessed by AI assistants and other MCP clients.

๐Ÿ—๏ธ Architecture

The MCP Server follows a modular architecture with clear separation of concerns:

graph TB subgraph "Client Layer" AI[AI Assistant/Client] CLI[CLI Client] end subgraph "Transport Layer" STDIO[STDIO Transport] HTTP[HTTP Transport - Future] end subgraph "MCP Server Core" SERVER[MCP Server Instance] HANDLER[Request Handler] TOOLS[Tools Registry] RESOURCES[Resources Registry] end subgraph "Tool Implementations" CALC[Calculate Tool] FETCH[Fetch URL Tool] SYSINFO[System Info Tool] PROCESS[Process Data Tool] FILE[File Operations Tool] end subgraph "Resource Providers" FILE_RES[File Resources] CONFIG_RES[Config Resources] end subgraph "External Services" HTTP_API[HTTP APIs] FILE_SYS[File System] end AI --> STDIO CLI --> STDIO STDIO --> SERVER SERVER --> HANDLER HANDLER --> TOOLS HANDLER --> RESOURCES TOOLS --> CALC TOOLS --> FETCH TOOLS --> SYSINFO TOOLS --> PROCESS TOOLS --> FILE RESOURCES --> FILE_RES RESOURCES --> CONFIG_RES FETCH --> HTTP_API FILE --> FILE_SYS FILE_RES --> FILE_SYS

Workflow Diagram

sequenceDiagram participant Client participant Transport participant Server participant Tool participant Resource Client->>Transport: Initialize Connection Transport->>Server: Connection Established Client->>Server: List Tools Request Server->>Client: Tools List Response Client->>Server: List Resources Request Server->>Client: Resources List Response Client->>Server: Call Tool Request Server->>Tool: Execute Tool Tool->>Server: Tool Result Server->>Client: Tool Response Client->>Server: Read Resource Request Server->>Resource: Fetch Resource Resource->>Server: Resource Data Server->>Client: Resource Response

๐Ÿš€ Features

  • Modern Python Stack: Built with Python 3.10+ and async/await patterns

  • Type Safety: Full type hints with Pydantic models

  • High Performance: Uses uvloop for enhanced async performance

  • Comprehensive Tools: Multiple example tools demonstrating various capabilities

  • Resource Management: File and configuration resource providers

  • Testing: Complete test suite with pytest

  • Configuration: Environment-based configuration management

๐Ÿ“‹ Prerequisites

  • Python 3.10 or higher

  • pip or poetry for package management

  • Git (for cloning the repository)

๐Ÿ› ๏ธ Installation

Step 1: Clone the Repository

git clone <repository-url> cd MCP-server

Step 2: Create Virtual Environment

# Using venv python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # Or using conda conda create -n mcp-server python=3.10 conda activate mcp-server

Step 3: Install Dependencies

# Using pip pip install -r requirements.txt # For development (includes testing tools) pip install -r requirements-dev.txt # Or using poetry (if you prefer) poetry install

Step 4: Configure Environment

# Copy example environment file cp .env.example .env # Edit .env file with your settings (optional) # nano .env

๐Ÿงช Testing

Run All Tests

pytest

Run Tests with Coverage

pytest --cov=src --cov-report=html

Run Specific Test

pytest tests/test_server.py::test_calculate_tool -v

๐ŸŽฏ Usage

Running the Server

Method 1: Direct Python Execution

python -m src.server

Method 2: Using the Script

python scripts/run_server.py

Method 3: As a Module

python -m src.server

Example Client Usage

Run the example client to see the server in action:

python examples/example_client.py

Available Tools

The server provides the following tools:

  1. calculate: Perform mathematical calculations

    • Input: {"expression": "2 + 2"}

    • Output: Calculation result

  2. fetch_url: Fetch content from URLs

    • Input: {"url": "https://example.com", "method": "GET"}

    • Output: HTTP response content

  3. get_system_info: Get system information

    • Input: {}

    • Output: System details and environment variables

  4. process_data: Process and transform data

    • Input: {"data": "hello", "operation": "uppercase"}

    • Operations: reverse, uppercase, lowercase, count

  5. write_file: Write content to files

    • Input: {"filepath": "output.txt", "content": "Hello World"}

    • Output: Confirmation message

Available Resources

  1. Example File: file://example.txt - Example file resource

  2. Server Configuration: config://server-config - Current server configuration

๐Ÿ“ Project Structure

MCP-server/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ __init__.py # Package initialization โ”‚ โ”œโ”€โ”€ server.py # Main MCP server implementation โ”‚ โ””โ”€โ”€ config.py # Configuration management โ”œโ”€โ”€ tests/ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ””โ”€โ”€ test_server.py # Unit tests โ”œโ”€โ”€ examples/ โ”‚ โ””โ”€โ”€ example_client.py # Example client implementation โ”œโ”€โ”€ scripts/ โ”‚ โ””โ”€โ”€ run_server.py # Server runner script โ”œโ”€โ”€ .env.example # Example environment configuration โ”œโ”€โ”€ .gitignore # Git ignore rules โ”œโ”€โ”€ pyproject.toml # Project metadata and dependencies โ”œโ”€โ”€ pytest.ini # Pytest configuration โ”œโ”€โ”€ requirements.txt # Production dependencies โ”œโ”€โ”€ requirements-dev.txt # Development dependencies โ””โ”€โ”€ README.md # This file

๐Ÿ”ง Configuration

The server can be configured using environment variables:

  • MCP_SERVER_NAME: Server name (default: mcp-server-poc)

  • MCP_SERVER_VERSION: Server version (default: 0.1.0)

  • LOG_LEVEL: Logging level (default: INFO)

  • ENABLE_METRICS: Enable metrics collection (default: true)

๐Ÿงฉ Technology Stack

  • MCP SDK: Official Model Context Protocol SDK for Python

  • Pydantic: Data validation and settings management

  • httpx: Modern async HTTP client

  • aiofiles: Async file operations

  • uvloop: High-performance event loop

  • pytest: Testing framework

  • python-dotenv: Environment variable management

๐Ÿ” Development

Code Formatting

# Format code with black black src/ tests/ examples/ # Lint with ruff ruff check src/ tests/ # Type checking with mypy mypy src/

Adding New Tools

  1. Add tool definition in list_tools() function

  2. Implement tool logic in call_tool() function

  3. Add tests in tests/test_server.py

Example:

# In list_tools() Tool( name="my_new_tool", description="Description of my tool", inputSchema={ "type": "object", "properties": { "param": {"type": "string"} }, "required": ["param"] } ) # In call_tool() elif name == "my_new_tool": param = arguments.get("param") # Your tool logic here return [TextContent(type="text", text=f"Result: {result}")]

๐Ÿ› Troubleshooting

Common Issues

  1. Import Errors: Ensure all dependencies are installed

    pip install -r requirements.txt
  2. Python Version: Ensure Python 3.10+ is being used

    python --version
  3. Virtual Environment: Make sure virtual environment is activated

    source venv/bin/activate
  4. Permission Errors: Check file permissions for write operations

๐Ÿ“ License

See LICENSE file for details.

๐Ÿค Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests

  5. Submit a pull request

๐Ÿ“š Additional Resources

๐ŸŽ‰ Next Steps

  • Add more sophisticated tools (database queries, API integrations)

  • Implement authentication and authorization

  • Add metrics and monitoring

  • Support for streaming responses

  • WebSocket transport support

  • Resource caching and optimization


Note: This is a POC project. For production use, consider adding:

  • Proper error handling and logging

  • Security measures (authentication, input validation)

  • Rate limiting

  • Comprehensive monitoring

  • Documentation generation

  • CI/CD pipelines

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ranit532/MCP-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server