easyMcp

by wenb1n-dev

2 385 downloads Not rated yet

About

Enable developers to quickly build an MCP server service framework that supports all Model Context Protocol (MCP) transfer modes (STDIO, SSE, Streamable Http)。使开发者快速的搭建一个支持mcp协议所有传输方式(STDIO、SSE、StreamableHttp)的mcp server服务框架

Explore

- Supports STDIO, SSE, and Streamable HTTP transports.
- Two-step setup: optional config file + custom tool creation.
- Tool classes inherit a simple BaseHandler interface.
- Uses uv for dependency management and runtime.
- Example included for MySQL database integration.

Please give a like, friends!

Define the configuration information needed for your project in src/config/.env, for example, if you need database configuration:


MYSQL_HOST=192.168.3.229
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=a_llm
MYSQL_ROLE=admin

config = get_config()

uv sync

Add your own tool class in the src/handles directory, refer to the example.py sample

Inherit from BaseHandler
Define the name property, which is the name of the tool
Define the description property, which is the description of the tool
Implement the get_tool_description method, which tells the mcp client what your tool does
Implement the run_tool method, which is the method called by the mcp client to use the tool; implement your tool logic here
Import the new tool in __init__.py

example.py
```aiignore
from typing import Dict, Any, Sequence

from mcp import Tool
from mcp.types import TextContent
from .base import BaseHandler
from config import get_config

class Example(BaseHandler):
name = "get_Example"
description = (
"this is Example xxxx"
)

def get_tool_description(self) -> Tool:
return Tool(
name=self.name,
description=self.description,
inputSchema={
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "This is the text that must be entered for the example"
}
},
"required": ["text"]
}
)

async def run_tool(self, arguments: Dict[str, Any]) -> Sequence[TextContent]:

try:
if "text" not in arguments:
raise ValueError("Missing text content")

text = arguments["text"]

Just two steps to quickly build an easily extensible mcp server framework that supports all Model Context Protocol (MCP) transmission modes (STDIO, SSE, Streamable Http).

Please give a like, friends!

User Manual

1. Step One [Optional] Define the required configuration information

Define the configuration information needed for your project in src/config/.env, for example, if you need database configuration:
 # MySQL Database Configuration
MYSQL_HOST=192.168.3.229
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=a_llm
MYSQL_ROLE=admin

2. Step Two Create Your Own Tool

Add your own tool class in the src/handles directory, refer to the example.py sample

Inherit from BaseHandler
Define the name property, which is the name of the tool
Define the description property, which is the description of the tool
Implement the get_tool_description method, which tells the mcp client what your tool does
Implement the run_tool method, which is the method called by the mcp client to use the tool; implement your tool logic here
Import the new tool in __init__.py

example.py

from typing import Dict, Any, Sequence

from mcp import Tool
from mcp.types import TextContent
from .base import BaseHandler
from config import get_config

class Example(BaseHandler):
name = "get_Example"
description = (
"this is Example xxxx"
)

def get_tool_description(self) -> Tool:
return Tool(
name=self.name,
description=self.description,
inputSchema={
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "This is the text that must be entered for the example"
}
},
"required": ["text"]
}
)

async def run_tool(self, arguments: Dict[str, Any]) -> Sequence[TextContent]:

try:
if "text" not in arguments:
raise ValueError("Missing text content")

text = arguments["text"]

# Reference configuration information
config = get_config()

## todo something

result = "xxxxxxx"

# Join all results with commas
return [TextContent(type="text", text=','.join(result))]

except Exception as e:
return [TextContent(type="text", text=f"error: {str(e)}")]

__init__.py

from .example import Example

__all__ = [
"Example",
]

3. Start

Currently, this framework supports all Model Context Protocol (MCP) transmission modes (STDIO, SSE, Streamable Http).
1. Streamable Http Mode

- Use uv to start the service

Add the following content to your mcp client tool, such as cursor, cline, etc.

mcp json example:

{
"mcpServers": {
"easyMcp": {
"name": "easyMcp",
"type": "streamableHttp",
"description": "",
"isActive": true,
"baseUrl": "http://localhost:3000/mcp/"
}
}
}

Start command
```

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.