Skip to main content
Glama
Simple MCP Server

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 recent community issues