Skip to main content
Glama
StenSeegel

mcp-blanko

by StenSeegel
README.md
# mcp-blanko

A template for building your own [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server in TypeScript.

Includes placeholder tools, dual transport support (stdio + SSE), and a simple pattern for adding your own tools.

## Quick Start

```bash
npm install
npm run build
npm start
```

## Project Structure

```
src/
├── index.ts          # Entry point — transport selection
├── server.ts         # Server setup & tool registration
└── tools/
    ├── hello-world.ts      # Simple greeting tool
    ├── complex-input.ts    # Rich input schema with error handling
    ├── async-operation.ts  # Simulated long-running task
    ├── external-api.ts     # Placeholder for API integration
    └── file-operation.ts   # Local file read/write
```

## Adding Your Own Tool

1. Create a new file in `src/tools/`:

```typescript
import { z } from "zod";
import type { ToolDefinition } from "../server.js";

export const myTool: ToolDefinition = {
  name: "my_tool",
  description: "What this tool does",
  inputSchema: z.object({
    param: z.string().describe("Description of param"),
  }),
  handler: async ({ param }) => {
    return {
      content: [{ type: "text", text: `Result: ${param}` }],
    };
  },
};
```

2. Register it in `src/server.ts`:

```typescript
import { myTool } from "./tools/my-tool.js";

const tools: ToolDefinition[] = [
  // ... existing tools
  myTool,
];
```

3. Build and run:

```bash
npm run build && npm start
```

## Transport Modes

### stdio (default)

```bash
npm start
# or
npm run start:stdio
```

### SSE (HTTP)

```bash
npm run start:sse
# or
MCP_PORT=3001 node dist/index.js --transport=sse
```

The SSE endpoint will be available at `http://localhost:3001/sse`.

## Configuration

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "mcp-blanko": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-blanko/dist/index.js"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add mcp-blanko node /absolute/path/to/mcp-blanko/dist/index.js
```

## Docker Deployment

Build and run with Docker Compose:

```bash
docker compose up -d
```

The SSE endpoint will be available at `http://localhost:3001/sse`. Put a reverse proxy (e.g., nginx, Caddy, Traefik) in front for HTTPS.

Or build and run manually:

```bash
docker build -t mcp-blanko .
docker run -d -p 3001:3001 mcp-blanko
```

## Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `MCP_TRANSPORT` | `stdio` | Transport mode: `stdio` or `sse` |
| `MCP_PORT` | `3001` | HTTP port for SSE transport |
| `MCP_FILES_DIR` | `cwd` | Base directory for the file operation tool |

## License

MIT

TDQS

C2.8/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: fetching external API, greeting, long-running task, file management, and order processing. No overlap.

Naming Consistency3/5

Three tools use verb_noun pattern (fetch_data, manage_file, process_order), but hello_world and long_running_task deviate with different structures. Inconsistent but still readable.

Tool Count5/5

5 tools is well-scoped for a demo server illustrating various MCP patterns. Not too many or too few.

Completeness4/5

As a demo server, it covers common patterns (API call, async, file I/O, complex schema, simple greeting). Could include more patterns like resource subscriptions, but the set is reasonable.

Maintenance

ActivityInactive
ResponsivenessNo issues