Skip to main content
Glama
NimbleBrainInc

MCP Echo Service

README.md
# Echo MCP Server

[![mpak](https://img.shields.io/badge/mpak-registry-blue)](https://mpak.dev/packages/@nimblebraininc/echo?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)
[![NimbleBrain](https://img.shields.io/badge/NimbleBrain-nimblebrain.ai-purple)](https://nimblebrain.ai?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)
[![Discord](https://img.shields.io/badge/Discord-community-5865F2)](https://nimblebrain.ai/discord?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that echoes messages, delays, and structured JSON data. Useful for testing MCP client integrations, verifying protocol connectivity, and validating tool call behavior.

**[View on mpak registry](https://mpak.dev/packages/@nimblebraininc/echo?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)** | **Built by [NimbleBrain](https://nimblebrain.ai?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)**

## Install

Install with [mpak](https://mpak.dev?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo):

```bash
mpak install @nimblebraininc/echo
```

### Claude Code

```bash
claude mcp add echo -- mpak run @nimblebraininc/echo
```

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "echo": {
      "command": "mpak",
      "args": ["run", "@nimblebraininc/echo"]
    }
  }
}
```

See the [mpak registry page](https://mpak.dev/packages/@nimblebraininc/echo?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo) for full install options.

## Tools

### echo_message

Echo back a message with optional uppercase formatting.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `message` | `string` | Yes | The message to echo back |
| `uppercase` | `boolean` | No | Convert the message to uppercase (default: `false`) |

**Example call:**

```json
{
  "name": "echo_message",
  "arguments": {
    "message": "Hello Echo!",
    "uppercase": true
  }
}
```

**Example response:**

```json
{
  "original_message": "Hello Echo!",
  "echoed_message": "HELLO ECHO!",
  "uppercase_applied": true,
  "message_length": 11,
  "timestamp": "2025-01-15T12:00:00+00:00"
}
```

### echo_with_delay

Echo back a message after a simulated delay. Useful for testing timeout handling and async behavior.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `message` | `string` | Yes | The message to echo back |
| `delay_seconds` | `number` | No | Delay in seconds, max 5.0 (default: `1.0`) |

**Example call:**

```json
{
  "name": "echo_with_delay",
  "arguments": {
    "message": "Delayed echo",
    "delay_seconds": 2.0
  }
}
```

**Example response:**

```json
{
  "original_message": "Delayed echo",
  "echoed_message": "Delayed echo",
  "requested_delay": 2.0,
  "actual_delay": 2.001,
  "start_time": "2025-01-15T12:00:00+00:00",
  "end_time": "2025-01-15T12:00:02+00:00",
  "timestamp": "2025-01-15T12:00:02+00:00"
}
```

### echo_json

Echo back structured JSON data with validation and analysis.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `data` | `object` | Yes | JSON object to echo back |

**Example call:**

```json
{
  "name": "echo_json",
  "arguments": {
    "data": {
      "name": "test",
      "count": 42,
      "active": true
    }
  }
}
```

**Example response:**

```json
{
  "original_data": {"name": "test", "count": 42, "active": true},
  "echoed_data": {"name": "test", "count": 42, "active": true},
  "analysis": {
    "key_count": 3,
    "keys": ["name", "count", "active"],
    "data_types": {"name": "str", "count": "int", "active": "bool"},
    "total_size": 42
  },
  "timestamp": "2025-01-15T12:00:00+00:00"
}
```

## Quick Start

### Local Development

```bash
git clone https://github.com/NimbleBrainInc/mcp-echo.git
cd mcp-echo

# Install dependencies
uv sync

# Run the server (stdio mode)
uv run python -m mcp_echo.server

# Or run via FastMCP
uv run fastmcp run src/mcp_echo/server.py
```

The server supports HTTP transport with:
- Health check: `GET /health`
- MCP endpoint: `POST /mcp`

## Development

```bash
# Install with dev dependencies
uv sync --group dev

# Run unit tests
make test

# Run with coverage
make test-cov

# Run all checks (format, lint, typecheck, unit tests)
make check

# Format
uv run ruff format .

# Lint
uv run ruff check .
```

### E2E Tests

End-to-end tests validate the full MCPB bundle lifecycle: building the bundle, deploying it into a Docker container, and calling tools over HTTP.

**Prerequisites:** Docker running, `mcpb` CLI installed (`npm install -g @anthropic-ai/mcpb`)

```bash
make test-e2e
```

The tests:
1. Vendor dependencies for the Docker container's Linux architecture
2. Build a `.mcpb` bundle with `mcpb pack`
3. Serve the bundle over HTTP
4. Start a `nimbletools/mcpb-python` container that downloads and runs the bundle
5. Verify the `/health` endpoint, MCP tool listing, and tool invocation via streamable HTTP

## About

Echo MCP Server is published on the [mpak registry](https://mpak.dev?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo) and built by [NimbleBrain](https://nimblebrain.ai?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo). mpak is an open registry for [Model Context Protocol](https://modelcontextprotocol.io) servers.

- [mpak registry](https://mpak.dev?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)
- [NimbleBrain](https://nimblebrain.ai?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)
- [MCP specification](https://modelcontextprotocol.io)
- [Discord community](https://nimblebrain.ai/discord?utm_source=github&utm_medium=readme&utm_campaign=mcp-echo)

## License

MIT

TDQS

A4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: echo_json handles structured JSON with analysis, echo_message handles plain text with optional formatting, and echo_with_delay adds a timing component. There is no ambiguity or overlap between the tools.

Naming Consistency5/5

All tool names follow a consistent 'echo_' prefix with snake_case, and each name clearly indicates its function (json, message, with_delay). The pattern is predictable and uniform.

Tool Count5/5

With 3 tools, the server is well-scoped for an echo service. Each tool provides a distinct mode of echoing, covering the basic needs without being overly numerous or sparse.

Completeness5/5

The tool surface covers the core use cases for an echo service: plain text, JSON, and delayed echoing. There are no obvious missing operations given the server's simple purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues