MCP-YNU - Servidor FastMCP
Una implementación de servidor MCP dinámico que utiliza FastMCP que carga automáticamente herramientas, recursos y avisos desde los directorios respectivos.
Características
Carga dinámica de módulos desde los directorios
tools/,resources/yprompts/Descubrimiento y registro automático de módulos
Configuración sencilla y extensibilidad
Sugerencias de tipo para una mejor claridad del código y análisis estático
Registro completo para supervisar la actividad del servidor
Related MCP server: MCP Remote Server
Actualizaciones recientes
Se agregaron sugerencias de tipo en todo el código base
Manejo mejorado de instancias de MCP
Se agregó funcionalidad de registro
Se agregó licencia MIT
Documentación actualizada con enlaces de referencia
Estructura del directorio
mcp-ynu/
├── tools/ # Directory for tool modules
│ ├── __init__.py
│ ├── example.py
├── resources/ # Directory for resource modules
│ ├── __init__.py
│ ├── example.py
├── prompts/ # Directory for prompt modules
│ ├── __init__.py
│ ├── example.py
├── logger.py # Logger implementation
├── main.py # Main implementation
├── mcp_server.py # MCP server implementation
├── README.md # Project documentation
├── LICENSE # MIT License
└── pyproject.toml # Project configurationUso
Crear módulos en los directorios apropiados
Importar mcp mediante
from mcp_server import mcpEjecutar el servidor:
python main.pyMódulos de ejemplo
Ejemplo de módulo de herramientas (tools/example.py)
from mcp_server import mcp
import httpx
@mcp.tool()
def calculate_bmi(weight_kg: float, height_m: float) -> float:
"""Calculate BMI given weight in kg and height in meters"""
return weight_kg / (height_m**2)
@mcp.tool()
async def fetch_weather(city: str) -> str:
"""Fetch current weather for a city"""
async with httpx.AsyncClient() as client:
response = await client.get(f"https://api.weather.com/{city}")
return response.textEjemplo de módulo de recursos (resources/example.py)
from mcp_server import mcp
@mcp.resource("config://app")
def get_config() -> str:
"""Static configuration data"""
return "App configuration here"
@mcp.resource("users://{user_id}/profile")
def get_user_profile(user_id: str) -> str:
"""Dynamic user data"""
return f"Profile data for user {user_id}"Ejemplo de módulo de indicaciones (prompts/example.py)
from mcp_server import mcp
from mcp.server.fastmcp.prompts import base
@mcp.prompt()
def review_code(code: str) -> str:
return f"Please review this code:\n\n{code}"
@mcp.prompt()
def debug_error(error: str) -> list[base.Message]:
return [
base.UserMessage("I'm seeing this error:"),
base.UserMessage(error),
base.AssistantMessage("I'll help debug that. What have you tried so far?"),
]Depuración
Actualice
MCP_TRANSPORT_TYPEen.env, ejecutepython main.pypara iniciar el servidor mcpEjecute
npx @modelcontextprotocol/inspectorpara abrir la inspección .Elija el tipo de transporte
SSEcon la URLhttp://localhost:<mcp_server_port>/sseo elija el tipo de transporteSTDIOcon el comandopythony los argumentos/path/to/main.py

Requisitos
Python >= 3.10
FastMCP
Enlaces de referencia
Licencia
Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.