Simple MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Simple MCP Serverhello world with name Alice and 2 second delay"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Related MCP server: MCP Server Demo
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
Installation
Clone this repository:
git clone https://github.com/rjmoggach/simple-mcp-server.git cd simple-mcp-serverInstall dependencies:
uv sync
Usage
You can run the server in three different modes:
Run with both transports (default)
python run_server.pyThis will start the HTTP server on port 9876 and the stdio server simultaneously.
HTTP transport only
python run_server.py --http-onlystdio transport only
python run_server.py --stdio-onlyAvailable Tools
The server provides these example tools:
hello_world - A simple greeting tool
Parameters:
name(string, default: "World"): Name to greetdelay(integer, default: 0): Optional delay in seconds
Returns: A greeting message
get_version - Returns server version information
Returns: Version details including server name and API version
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:
"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:
{
"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 inrun_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:
@mcp.tool()
async def your_custom_tool(param1: str, param2: int = 0) -> dict:
"""Your custom tool description."""
# Implementation here
return {"result": "Your output"}License
Available Tools
3 toolsget_versionB
Get server version information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does without disclosing behavioral traits. It doesn't mention whether this is a read-only operation, if it requires authentication, rate limits, or what format the version information returns, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a simple tool with no parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and behavioral unknowns, the description is incomplete. It doesn't address what the return value looks like, potential errors, or operational context, leaving the agent with insufficient information for confident use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a high baseline score for not adding unnecessary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('server version information'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'system_info' which might also provide version-related data, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'system_info' or 'hello_world'. The description offers no context about appropriate use cases or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hello_worldC
A simple hello world tool that returns a greeting.
Args:
name: Name to greet
delay: Optional delay in seconds
Returns:
A greeting message
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | World | |
| delay | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It mentions the tool returns a greeting and has an optional delay, but lacks details on behavioral traits such as whether it's read-only, if it has side effects, rate limits, or error handling. The description doesn't contradict annotations (none exist), but it's insufficient for a tool with parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a brief overview and structured parameter/return sections. It's front-loaded with the purpose, but the formatting with indentation and bullet-like points could be more streamlined for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, no output schema, no annotations), the description is somewhat complete but has gaps. It explains parameters and returns, but lacks behavioral context and usage guidelines. For a simple tool, it's adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'name' is for greeting and 'delay' is an optional delay in seconds, which clarifies beyond the schema's basic titles. However, it doesn't cover defaults (e.g., name defaults to 'World') or constraints, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns a greeting, which is a clear purpose, but it's vague about what 'hello world' entails beyond that. It doesn't distinguish from siblings like get_version or system_info, which might also return simple outputs. The phrase 'simple hello world tool' is somewhat tautological with the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_version or system_info. The description implies it's for greetings, but there's no explicit context for when it's appropriate or any exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_infoB
Get basic system information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 states the tool 'Get[s]' information, implying a read-only operation, but doesn't specify if it requires permissions, has rate limits, returns real-time vs. cached data, or what format the output takes. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence ('Get basic system information.') that is front-loaded and wastes no words. It directly communicates the core purpose without unnecessary elaboration, making it highly concise and well-structured for its simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is minimally complete. It states what the tool does but lacks details on behavioral traits, output format, or usage context. This is adequate for a basic tool but leaves gaps that could hinder an agent's understanding in more complex scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% description coverage, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, which is appropriate here. A baseline of 4 is applied as it adequately handles the lack of parameters without introducing confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get basic system information' clearly states the verb ('Get') and resource ('basic system information'), making the purpose immediately understandable. It distinguishes from siblings like 'get_version' (which likely returns version-specific data) and 'hello_world' (a test endpoint) by focusing on general system details. However, it doesn't specify what 'basic' entails (e.g., OS, memory, CPU), keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'get_version'. The description implies it's for retrieving system information but doesn't clarify if 'get_version' is a subset or a different type of data, nor does it mention any prerequisites or exclusions. This leaves the agent without explicit usage context.
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. Dates show when Glama detected each change.
3 tool updates
- First observed
get_version - First observed
hello_world - First observed
system_info
TDQS
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.
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.
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.
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
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
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server exposing the Backtest360 engine API as tools for AI agents.
POC MCP server. Tool say_hello returns 'Welcome' (agent -> MCP -> API path).
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA minimal Model Context Protocol server demo that exposes tools through HTTP API, including greeting, weather lookup, and HTTP request capabilities. Demonstrates MCP server implementation with stdio communication and HTTP gateway functionality.10ISC
- AlicenseNot gradedqualityDmaintenanceA minimal tool server demonstrating Model Context Protocol (MCP) interactions via local CLI and WebSocket transports. It provides tools for simple greeting responses and making external HTTP API calls using a configurable base URL.225MIT
- AlicenseNot gradedqualityDmaintenanceA 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.17MIT
- FlicenseNot gradedqualityCmaintenanceA basic MCP server demonstrating tool registration and SSE transport, enabling AI clients to call greeting, arithmetic, and time tools.-
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ilil1/simple-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server