Skip to main content
Glama
kuldeepcodes

hello-mcp-server

by kuldeepcodes

hello-mcp-python

ci Python 3.14 licence: MIT

一个用 Python 编写的 hello-world Model Context Protocol 服务器,外加一个控制台聊天客户端,它用一个 小型本地 LLM 来驱动服务器上的工具。

它刻意做得小巧,但它并不是玩具。它使用官方的 Python MCP SDK,同时支持两种传输(stdio 和 streamable HTTP),被 29 项自动化测试 所覆盖,包括通过真实管道进行的真实协议往返测试,并处理了那些在实践中真正会令 MCP 服务器出问题的细节。

刚接触 MCP 吗? 请从 GETTING-STARTED.md 开始——它会从空目录开始一步一步构建整个项目,解释每一个依赖和每一个文件。

快速开始

前置条件: Python 3.14 或更高版本。

git clone https://github.com/kuldeepcodes/hello-mcp-python.git
cd hello-mcp-python

python -m venv .venv
source .venv/bin/activate        # Windows: .\.venv\Scripts\Activate.ps1

python -m pip install -e ".[dev]"
python -m pytest                 # 29 tests

# Works with no model at all, using deterministic keyword routing
python -m hello_mcp.chat --provider none --ask "hello Kuldeep"

如需真实对话,请安装 Ollama 并拉取一个小模型:

ollama pull phi3          # ~2.2 GB, works with the prompt planner
python -m hello_mcp.chat --ask "what is 17.5 plus 24.25?"

Related MCP server: Pistachio MCP Server

服务器工具

工具

描述

say_hello

用 10 种语言按姓名问候某人:enesfrdeitpthijazhar

echo

原样返回消息;适用于连接检查。

get_server_time

返回结构化的 utclocaltimeZoneutcOffsethuman 字段。

add

将两个数字相加,并采用十进制格式,因此 0.1 + 0.2 等于 0.3

该服务器还公开了提示词(friendly_greetingsummarize_capabilities)和资源(hello://server/info,以及模板化的 hello://greetings/{language})。

运行服务器

# stdio, for local MCP clients
.\.venv\Scripts\python.exe -m hello_mcp.server

# streamable HTTP, endpoint /mcp and liveness /healthz
.\.venv\Scripts\python.exe -m hello_mcp.server --http --port 5099

在 stdio 模式下,stdout 专用于 JSON-RPC。所有日志都被刻意送往 stderr。

MCP 客户端配置

VS Code 或 Claude Desktop 风格的 stdio 配置。请使用绝对路径——客户端不会从你的项目目录运行:

{
  "mcpServers": {
    "hello-mcp-python": {
      "command": "/absolute/path/to/hello-mcp-python/.venv/bin/python",
      "args": ["-m", "hello_mcp.server"],
      "cwd": "/absolute/path/to/hello-mcp-python"
    }
  }
}

在 Windows 上,解释器是 ...\\.venv\\Scripts\\python.exe,并且需要在 JSON 中反斜杠机来转义。

使用 --http 启动服务器后,HTTP 客户端可以连接到 http://127.0.0.1:5099/mcp

聊天策略

策略

适用时机

工作方式

原生工具调用

模型接受带有 tools 数组的探测请求。

模型直接发出工具调用。

提示规划器

模型可访问,但拒绝使用工具,就像 Ollama 中的 phi3 那样。

客户端显示工具名称、描述和 JSON Schema,要求一个 JSON 决策并执行,然后让模型对结果进行措辞表述。

离线路由

没有模型可访问,或使用了 --provider none

确定性的关键词规则支持 hello NAMEwhat time is itadd 2 and 3echo ...

所选择的策略及原因会在启动时打印出来。

真实对话记录

  hello-mcp-chat v1.0.0
  a Model Context Protocol client for Python

Connected to hello-mcp-server (4 tools)
Model strategy: prompt planner - Ollama says this model does not support tools

  [tool] add {"a": 17.5, "b": 24.25} -> 41.75
bot> The sum of 17.5 and 24.25 is 41.75.

测试与代码检查

.\.venv\Scripts\python.exe -m ruff check .
.\.venv\Scripts\python.exe -m pytest

集成测试通过 stdio 启动真实的服务器,执行真实的 MCP 握手,并列出工具、调用工具、列出提示词、读取资源,并断言 stdout 中只包含 JSON-RPC。

局限性

  • 提示规划器刻意采取保守策略,而且比原生工具调用更易于出错。

  • HTTP 传输没有认证;这是一个本地教学项目。

  • Windows 需要 tzdata 包才能支持 IANA 时区,例如 Asia/Kolkata

技术栈

  • mcp==2.0.0 — 官方 Python MCP SDK。此版本中,最易用的 API 是 mcp.server.mcpserver.MCPServer;旧例子中可能称之为 FastMCP 风格。

  • httpx — 用于 Ollama 和 OpenAI 兼容的 HTTP 调用。

  • pytest — 单元测试和集成测试。

  • ruff — 代码检查与格式化。

同一项目,其他语言版本

这是三个并行实现之一,同样的工具、同样的行为、同样的经验:

许可证

MIT — 请参阅 LICENSE

Available Tools

4 tools
addAdd two numbersA

Adds two numbers and returns their sum. Prefer this over doing arithmetic yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It states that this is a pure computation: it adds the two numbers and returns the sum, with no mention of side effects or external state. It does not discuss numeric edge cases, but none are particularly relevant for a simple addition tool.

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 two short sentences with no wasted text. The first sentence states the complete behavior and return value, and the second adds a useful usage directive. It is front-loaded and easy to parse.

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

Completeness5/5

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

For a two-parameter arithmetic tool, the description covers the operation, the inputs, and the return value. No output schema exists, but 'returns their sum' is enough to describe the successful outcome. The tool is simple enough that nothing essential is missing.

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 provides only names and number types, with no descriptive text. The description says 'two numbers' and 'their sum,' which maps to the a and b parameters and clarifies that both are operands in the addition. This is adequate for such a simple case, though it does not add deeper individual-parameter details.

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 the operation ('Adds two numbers') and the result ('returns their sum'), using a specific verb-resource form. It is immediately distinguishable from the sibling tools, which are unrelated (say_hello, echo, get_server_time).

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

Usage Guidelines4/5

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

It gives an explicit usage directive: 'Prefer this over doing arithmetic yourself.' It does not name any alternative tool, but none of the siblings are arithmetic-related, so there is no real alternative to distinguish. The guidance is sufficient for such a simple operation.

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

echoEcho a messageA

Echoes a message back verbatim. Useful for verifying that the connection between the client and this MCP server is healthy.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosure. It clearly conveys that the tool performs no transformation and returns the message exactly as provided, implying a safe, stateless operation. It does not mention error cases or side effects, but there is no indication any exist.

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?

Two sentences, no filler: the first states behavior, the second gives practical context. The important verb-and-echo concept is front-loaded.

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

Completeness5/5

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

For a tool this simple, the description is complete. It defines the sole parameter, the behavior, and the use case, and the lack of an output schema is acceptable because the tool's output is obvious from 'echoes ... back verbatim.'

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

Parameters4/5

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

The schema provides zero description coverage, so the description must compensate. It does by clarifying that the `message` parameter is the input that will be echoed back verbatim. This is sufficient for a single-string parameter, though more detail about constraints or format could be added.

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 states a specific verb and resource: 'Echoes a message back verbatim.' This clearly differentiates it from siblings like say_hello, get_server_time, and add, all of which have different behaviors.

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

Usage Guidelines4/5

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

The description explicitly states its use: 'Useful for verifying that the connection between the client and this MCP server is healthy.' It does not describe when not to use it or list alternatives, but the intended context is clear.

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

get_server_timeGet server timeA

Returns the current date and time on the machine hosting this MCP server. Use this whenever the user asks what time or date it is; the answer cannot be known without calling this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_zoneNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It clearly conveys that this is a read-only operation that reports server-local time rather than the client's time, and it explains why the tool must actually be invoked. There is no hidden mutation or surprising side effect, though it could optionally mention that time_zone affects the returned representation.

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 exactly two sentences, front-loaded with the main purpose and immediately followed by usage guidance. There is no filler, redundant restating of the title, or unnecessary detail.

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?

This is a simple tool with one optional parameter and an output schema, so the description does not need to explain return values. However, the behavior of the time_zone parameter is not addressed anywhere, so an agent could not confidently know how to request a time in a specific timezone or why the parameter exists.

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

Parameters2/5

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

The input schema provides only a 'time_zone' property with a default of null and no description. The tool description does not explain how time_zone changes the result, whether null means server-local time, or what formats are accepted. Since the description provides zero parameter explanation and schema description coverage is 0%, this is a clear gap.

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 uses a specific verb ('Returns') and resource ('current date and time on the machine hosting this MCP server'), making the tool's action and result immediately clear. It also distinguishes this tool from siblings like say_hello, echo, and add by defining its exact purpose.

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

Usage Guidelines5/5

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

The description explicitly states when to use it: 'Use this whenever the user asks what time or date it is.' It also adds a strong practical instruction by noting that the answer cannot be known without calling this tool, helping the agent avoid guessing.

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

say_helloSay helloA

Greets a person by name. Use this whenever the user asks to greet, welcome, or say hello to someone. Supports several languages via an ISO 639-1 code.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
languageNoen

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool supports multiple languages and requires a person's name, which is useful. However, it does not describe output format, potential side effects, or any limitations/error behaviors—though as a greeting tool, the behavioral surface is small. A score of 3 is appropriate because the description covers core behavior but not edge details.

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?

Three sentences, all essential. First sentence defines action, second establishes usage context, third explains param. No filler or redundant restatement of the title.

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?

The tool is simple with 2 parameters, no nested objects, no output schema, and no annotations. The description covers what the tool does, when to use it, and clarifies parameters. Minor gap: does not list accepted language codes or the greeting format, but the default 'en' is in schema. Adequate for making a correct call.

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

Parameters4/5

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

Schema description coverage is 0%: the schema provides only field names and types, with no descriptions. The tool description compensates by explaining that 'name' is the person to greet and 'language' accepts an ISO 639-1 code. It doesn't document possible values for language beyond default 'en', but it gives enough meaning to infer usage. Since the description adds meaningful semantics beyond the bare schema, a 4 is justified.

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 states a specific verb and resource: 'Greets a person by name.' It clearly distinguishes itself from sibling tools (echo, get_server_time, add) by focusing on greeting functionality. The mention of language support via ISO 639-1 adds specificity.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'Use this whenever the user asks to greet, welcome, or say hello to someone.' This provides clear contextual guidance and implicitly contrasts with sibling tools that serve different purposes.

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

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a completely distinct purpose: greeting, echoing, retrieving time, and adding numbers. There is no overlap or ambiguity in what an agent should call.

Naming Consistency4/5

All names are lowercase snake_case and use a verb-first style, but 'echo' and 'add' are bare verbs while 'say_hello' and 'get_server_time' have object/adjective complements. This is a minor inconsistency, not a confusing mix.

Tool Count5/5

Four tools is an appropriate, well-scoped count for a small hello/utility MCP server. Each tool is independently useful and the count is firmly within the ideal range.

Completeness4/5

The set covers its obvious standalone capabilities fully—greetings, echoes, time, and arithmentic are all self-contained. The only minor gap is that it is not a fully powered calculator and has no broader domain expectations, but nothing needed seems missing.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    A minimal demonstration server showcasing MCP protocol capabilities including tools, resources, and prompts with basic examples like hello world functionality.
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A remote MCP server built with Node.js and TypeScript that enables tool calls and prompt templates via streamable HTTP transport. It includes example implementations for a calculator and localized greetings, featuring built-in CORS support for web-based clients.
  • A
    license
    Not graded
    quality
    D
    maintenance
    A minimal learning-focused MCP server that demonstrates core primitives like tools and resources through simple greeting functions. It provides a foundational example for connecting AI models to external data using both Streamable HTTP and stdio transports.
    17
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A simple MCP server demonstrating resources, tools, and prompts, including a greeting resource, an addition tool, and a calculation prompt.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kuldeepcodes/hello-mcp-python'

If you have feedback or need assistance with the MCP directory API, please join our Discord server