Skip to main content
Glama
ilil1

Simple MCP Server

by ilil1
README.md
# Simple MCP Server

A minimal implementation of the Model Context Protocol (MCP) server using FastMCP. This example demonstrates how to create a simple MCP server that clients like Windsurf IDE and Claude can connect to.

## What is MCP?

The Model Context Protocol (MCP) is a standard that connects LLMs with external tools and data sources. MCP servers extend AI capabilities by providing access to specialized tools, external information, and services.

## Features

- Dual transport support (HTTP and stdio)
- Simple authentication middleware for HTTP transport
- Example tools implementation
- Compatible with MCP clients like Windsurf IDE and Claude

## Prerequisites

- Python 3.11+
- [FastMCP - https://github.com/jlowin/fastmcp](https://github.com/jlowin/fastmcp)
- [uv - https://docs.astral.sh/uv/](https://docs.astral.sh/uv/)

## Installation

1. Clone this repository:
   ```bash
   git clone https://github.com/rjmoggach/simple-mcp-server.git
   cd simple-mcp-server
   ```

2. Install dependencies:
   ```bash
   uv sync
   ```

## Usage

You can run the server in three different modes:

### Run with both transports (default)

```bash
python run_server.py
```

This will start the HTTP server on port 9876 and the stdio server simultaneously.

### HTTP transport only

```bash
python run_server.py --http-only
```

### stdio transport only

```bash
python run_server.py --stdio-only
```

## Available Tools

The server provides these example tools:

1. **hello_world** - A simple greeting tool
   - Parameters:
     - `name` (string, default: "World"): Name to greet
     - `delay` (integer, default: 0): Optional delay in seconds
   - Returns: A greeting message

2. **get_version** - Returns server version information
   - Returns: Version details including server name and API version

3. **system_info** - Returns basic system information
   - Returns: Python version and platform details

## Connecting to AI Systems

### Windsurf IDE Configuration

Add the following configuration to your Windsurf IDE settings:

```json
"simple-mcp": {
  "command": "npx",
  "args": [
    "mcp-remote", 
    "http://localhost:9876/", 
    "--allow-http", 
    "--header", 
    "Authorization: Bearer SIMPLE_MCP_SERVER"
  ]
}
```

### Claude Desktop Configuration

Add the following to your Claude Desktop configuration:

```json
{
  "mcpServers": {
    "simple-mcp": {
      "command": "uv",
      "args": [
        "run", 
        "--project", "/path/to/simple-mcp-server", 
        "python", "/path/to/simple-mcp-server/run_server.py", 
        "--stdio-only"
      ],
      "cwd": "/path/to/simple-mcp-server"
    }
  }
}
```

Replace `/path/to/simple-mcp-server` with the actual path to your project.

## Authentication

For HTTP transport, the server uses a simple token-based authentication:

- Token: `SIMPLE_MCP_SERVER` (defined in `run_server.py`)
- Header format: `Authorization: Bearer SIMPLE_MCP_SERVER`

## Extending the Server

To add your own tools, modify the `create_mcp_server()` function in `run_server.py`:

```python
@mcp.tool()
async def your_custom_tool(param1: str, param2: int = 0) -> dict:
    """Your custom tool description."""
    # Implementation here
    return {"result": "Your output"}
```

## License

[MIT License](LICENSE)

TDQS

B3.1/5.0

Scored across 3 tools

Disambiguation5/5

All three tools have clearly distinct purposes with no overlap: get_version retrieves server metadata, hello_world provides a customizable greeting function, and system_info returns hardware/OS information. An agent could easily distinguish between these different domains.

Naming Consistency4/5

Two tools follow a consistent verb_noun pattern (get_version, system_info), while hello_world uses a different convention. The deviation is minor since all names remain clear and readable, but the pattern isn't fully uniform.

Tool Count3/5

With only three tools, this feels somewhat thin for a general-purpose server. While each tool serves a distinct function, the set lacks depth and could benefit from additional utilities to form a more complete toolkit.

Completeness2/5

The server's purpose appears to be general system/server utilities, but there are significant gaps: no file operations, no network utilities, no process management, and no configuration tools. The three existing tools provide only basic informational functions without supporting common workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues