Skip to main content
Glama
StenSeegel

mcp-blanko

by StenSeegel

mcp-blanko

A template for building your own MCP (Model Context Protocol) server in TypeScript.

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

Quick Start

npm install
npm run build
npm start

Related MCP server: MCP TypeScript Starter

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/:

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}` }],
    };
  },
};
  1. Register it in src/server.ts:

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

const tools: ToolDefinition[] = [
  // ... existing tools
  myTool,
];
  1. Build and run:

npm run build && npm start

Transport Modes

stdio (default)

npm start
# or
npm run start:stdio

SSE (HTTP)

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:

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

Claude Code

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

Docker Deployment

Build and run with Docker Compose:

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:

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

Available Tools

5 tools
fetch_dataC

Placeholder for a tool that calls an external API. Replace the handler with your own API logic.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoHTTP methodGET
endpointYesAPI endpoint path (e.g., /users/123)

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description must disclose behavioral traits. It only says 'calls an external API' without detailing side effects, authentication, rate limits, or error behavior, providing minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise but lacks substantive information. As a placeholder, it is appropriately short but not optimally structured for usability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 2 parameters and no output schema, the description fails to explain return format, expected behavior, or error cases. Incomplete for a tool intended to call an external API.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100% with clear descriptions for both parameters (method enum and endpoint string). The description adds no extra meaning, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it calls an external API but is vague and labeled as a placeholder. It does not distinguish what data or endpoint, making it unclear for an AI agent to select specific purpose vs siblings like hello_world or process_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. No exclusions or comparisons provided, leaving the agent without context for appropriate selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hello_worldA

A simple greeting tool. Takes a name and returns a personalized greeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name to greet

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not explicitly state behavioral traits like idempotency or side effects. It implies a simple read-like operation but lacks full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, no unnecessary words, and directly addresses the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description adequately covers its functionality. It could mention the greeting format but is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage and describes the 'name' parameter. The description adds no additional semantic detail beyond what is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a greeting tool that takes a name and returns a greeting. It is distinct from sibling tools like fetch_data and process_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided. However, the tool's purpose is clear enough that an agent can infer its usage for generating greetings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

long_running_taskC

Demonstrates an async tool that simulates a long-running operation (e.g., data processing, report generation).

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNameYesName of the task to run
durationMsNoSimulated duration in milliseconds (100-5000)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description only says 'async' and 'simulates', but fails to disclose key behavioral traits such as return value, status checking, or cancellation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded, with no wasted words. However, it could be longer to include more context without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description is inadequate. It does not explain the return format or how the async result is delivered, leaving the agent guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the already descriptive parameter names and schema comments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool simulates an async long-running operation with examples like data processing and report generation. It distinguishes from siblings as none of them mention async or simulation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like fetch_data or process_order, nor any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_fileC

Demonstrates reading and writing local files. Operates within a configurable base directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhether to read or write
contentNoContent to write (required for write action)
filePathYesRelative file path within the working directory

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It mentions a configurable base directory but does not disclose safety aspects (e.g., read/write permissions, potential for overwriting files) or side effects beyond the basic operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (18 words) but includes a filler word ('demonstrates'). It is concise, though not optimally structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (read/write, file path, content), the description is minimally adequate. It lacks details on error handling, file existence behavior, and output, which a tool of this type would benefit from.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage; all parameters have descriptions. The description adds context about the base directory, but does not significantly enhance understanding beyond schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it performs reading and writing of local files, which is a specific verb-resource combination. However, the word 'demonstrates' gives a demo connotation rather than a production tool, slightly reducing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus siblings. Siblings include diverse tools like fetch_data and long_running_task, but no context is provided for when manage_file is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

process_orderD

Demonstrates a tool with a rich input schema: nested objects, enums, optional fields, and error handling.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesList of items to order
notesNoOptional order notes
customerYes
priorityNoOrder priority levelnormal

TDQS

D1.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'error handling' abstractly but gives no specifics on side effects, authorization needs, or return behavior, leaving the agent uninformed about safety or consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short, but it is not effective conciseness; it wastes space on meta-commentary ('Demonstrates a tool...') instead of providing functional information. Every sentence should earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and a tool that likely creates or modifies data, the description is completely inadequate. It does not mention return values, potential errors, prerequisites, or any operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (75% or more), so the baseline is 3. The description adds no extra meaning beyond what the schema already provides; it only notes the schema is 'rich' without clarifying parameter roles or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Demonstrates a tool with a rich input schema' fails to state the tool's actual function; it is a tautology about schema characteristics rather than specifying the action or resource (e.g., 'process an order').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'fetch_data' or 'manage_file'; the description is entirely meta and does not indicate context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedfetch_data
    • First observedhello_world
    • First observedlong_running_task
    • First observedmanage_file
    • First observedprocess_order

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

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    A TypeScript template for building MCP servers with stdio/SSE transport and easy tool registration.
    5
    -
  • F
    license
    B
    quality
    B
    maintenance
    A template for building MCP servers in TypeScript with placeholder tools and dual transport support (stdio + SSE).
    5
    -