Skip to main content
Glama
MCP Custom Tools Server

MCP Custom Tools Server

by SergiFuster

MCP Custom Tools Server

Un servidor MCP (Model Context Protocol) personalizado con un conjunto completo de herramientas para fecha/hora, manejo de archivos, información del sistema, procesamiento de texto y operaciones web.

Características

  • ✅ Servidor MCP completo implementado desde cero

  • ✅ Gestión moderna de dependencias con pyproject.toml

  • ✅ 30+ herramientas personalizadas organizadas por categorías

  • ✅ Comunicación asíncrona con soporte para stdio

  • ✅ Logging configurable y manejo de errores robusto

  • ✅ CLI integrado con opciones flexibles

Related MCP server: Simple MCP Server

Herramientas Disponibles

🕒 Fecha y Hora (datetime_tools)

  • current_time - Obtener fecha y hora actual

  • format_timestamp - Formatear timestamp a formato legible

  • calculate_age - Calcular edad a partir de fecha de nacimiento

  • days_between - Calcular días entre dos fechas

  • month_calendar - Generar calendario mensual

📁 Manejo de Archivos (file_tools)

  • read_file - Leer contenido de archivo (async/sync)

  • file_info - Obtener información detallada de archivo

  • list_directory - Listar contenido de directorio

  • calculate_hash - Calcular hash MD5/SHA256 de archivo

  • search_files - Buscar archivos por patrón

💻 Sistema (system_tools)

  • system_info - Información general del sistema

  • cpu_info - Información detallada de CPU

  • memory_info - Información de memoria RAM

  • disk_info - Información de discos y almacenamiento

  • network_info - Información de interfaces de red

  • process_list - Lista de procesos en ejecución

  • environment_vars - Variables de entorno del sistema

📝 Procesamiento de Texto (text_tools)

  • word_count - Contar palabras, líneas y caracteres

  • search_replace - Búsqueda y reemplazo con regex

  • extract_emails - Extraer direcciones de email

  • extract_urls - Extraer URLs de texto

  • text_analysis - Análisis detallado de texto

  • encode_decode - Codificación/decodificación de texto

  • generate_hash - Generar hash de texto

  • split_text - Dividir texto en chunks

🌐 Web (web_tools)

  • http_request - Realizar peticiones HTTP

  • parse_url - Parsear y analizar URLs

  • build_url - Construir URLs desde componentes

  • url_encode_decode - Codificar/decodificar URLs

  • validate_url - Validar formato y accesibilidad

  • extract_domain - Extraer información de dominio

Instalación

Prerrequisitos

  • Python 3.10+

  • uv (gestor de paquetes y entornos virtuales moderno)

Instalación desde código fuente

# Clonar el repositorio
git clone <repository-url>
cd mcp-custom-tools

# Instalar uv (si no lo tienes)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Instalar dependencias y crear entorno virtual automáticamente
uv sync

# Instalar dependencias de desarrollo
uv sync --group dev

# Verificar instalación
uv run mcp-server --help

Uso

Ejecutar el servidor

# Método recomendado - usando el script instalado
uv run mcp-server

# Con nivel de logging específico
uv run mcp-server --log-level DEBUG

# Con configuración personalizada
uv run mcp-server --log-level INFO --name "Mi Servidor MCP" --version "1.0.0"

# Método alternativo - usando módulo Python
uv run python -m mcp_custom_tools.server

# Con configuración personalizada usando módulo
uv run python -m mcp_custom_tools.server --log-level INFO --name "Custom Server"

Opciones de CLI

  • --log-level - Nivel de logging (DEBUG, INFO, WARNING, ERROR)

  • --name - Nombre del servidor MCP

  • --version - Versión del servidor

  • --help - Mostrar ayuda

⚠️ Importante: Usar siempre uv run

En Windows, los scripts instalados con uv no están disponibles globalmente en PATH. Siempre usa:

# ✅ Correcto
uv run mcp-server

# ❌ Error - No funciona
mcp-server

Integración con clientes MCP

El servidor usa comunicación stdio y es compatible con cualquier cliente MCP estándar.

Configuración JSON:

{
  "mcpServers": {
    "mcp-custom-tools": {
      "command": "uv",
      "args": [
        "run",
        "mcp-server",
        "--log-level",
        "INFO"
      ],
      "cwd": "/path/to/mcp-custom-tools"
    }
  }
}

Ejemplos de rutas por sistema operativo:

// Windows
"cwd": "C:\\Users\\TuUsuario\\mcp-custom-tools"

// macOS/Linux  
"cwd": "/home/tuusuario/mcp-custom-tools"
// o
"cwd": "~/mcp-custom-tools"

Configuración para otros clientes MCP

Para otros clientes que soporten MCP, usar la siguiente configuración base:

{
  "name": "mcp-custom-tools",
  "command": ["uv", "run", "mcp-server"],
  "args": ["--log-level", "INFO"],
  "cwd": "/path/to/mcp-custom-tools"
}

Verificar la configuración

  1. Reinicia Claude Desktop después de modificar la configuración

  2. Abre una nueva conversación en Claude

  3. Verifica las herramientas escribiendo: "¿Qué herramientas tienes disponibles?"

  4. Prueba una herramienta como: "¿Qué hora es ahora?"

Solución de problemas

Si el comando 'mcp-server' no se reconoce:

Este es el error más común en Windows. El script se instala en el entorno virtual pero no está en PATH global.

# ❌ Error común
mcp-server
# Error: 'mcp-server' no se reconoce como comando

# ✅ Solución
uv run mcp-server

Si el servidor no se conecta:

  1. Verificar que "cwd" apunte al directorio correcto del proyecto

  2. Verificar uv: Comprobar que uv esté instalado: uv --version

  3. Sincronizar proyecto: Ejecutar uv sync en el directorio del proyecto

  4. Revisar logs: Verificar logs en Claude Desktop (Ver > Herramientas de desarrollador)

  5. Probar manualmente: uv run mcp-server --log-level DEBUG desde el directorio del proyecto

Logs y debugging:

# Probar el servidor directamente
uv run mcp-server --log-level DEBUG

# Verificar herramientas disponibles
uv run python -c "from mcp_custom_tools.tools import get_available_tools; print(list(get_available_tools().keys()))"

# Verificar que uv funciona correctamente
uv run python --version

# Verificar instalación del paquete
uv run python -c "import mcp_custom_tools; print('Instalación OK')"

Desarrollo

Estructura del Proyecto

mcp-custom-tools/
├── src/
│   └── mcp_custom_tools/
│       ├── __init__.py
│       ├── server.py
│       └── tools/
│           ├── __init__.py
│           ├── datetime_tools.py
│           ├── file_tools.py
│           ├── system_tools.py
│           ├── text_tools.py
│           └── web_tools.py
├── pyproject.toml
├── README.md
└── .gitignore

Configuración de Desarrollo

# Instalar dependencias de desarrollo
uv sync --group dev

# Ejecutar linting
black src/
isort src/
flake8 src/
mypy src/

# Ejecutar tests
pytest

# Ejecutar tests con cobertura
pytest --cov=mcp_custom_tools

Añadir Nuevas Herramientas

  1. Crear nueva función de herramienta:

def my_new_tool(args: Dict[str, Any]) -> str:
    """Mi nueva herramienta."""
    # Implementación
    return "resultado"
  1. Registrar en función de registro:

def register_my_tools(tools: Dict[str, Dict[str, Any]]) -> None:
    tools["my_tool"] = {
        "description": "Descripción de mi herramienta",
        "handler": my_new_tool,
        "inputSchema": {
            "type": "object",
            "properties": {
                "param": {"type": "string", "description": "Parámetro"}
            },
            "required": ["param"]
        }
    }
  1. Importar y registrar en tools/__init__.py

Dependencias

Principales

  • mcp - Protocolo MCP core

  • httpx - Peticiones HTTP async

  • aiofiles - Operaciones de archivo async

  • psutil - Información del sistema

  • click - CLI framework

Desarrollo

  • black - Formateo de código

  • isort - Ordenamiento de imports

  • mypy - Type checking

  • flake8 - Linting

  • pytest - Testing framework

Licencia

MIT License - ver archivo LICENSE para detalles.

Contribuir

  1. Fork el proyecto

  2. Crear rama de feature (git checkout -b feature/AmazingFeature)

  3. Commit cambios (git commit -m 'Add some AmazingFeature')

  4. Push a la rama (git push origin feature/AmazingFeature)

  5. Abrir Pull Request

Soporte

Para reportar bugs o solicitar features, crear un issue en GitHub.

Changelog

v1.0.0

  • Implementación inicial del servidor MCP

  • 30+ herramientas personalizadas

  • Gestión con pyproject.toml

  • CLI integrado

  • Documentación completa

Available Tools

31 tools
analyze_textC

Análisis completo de texto con estadísticas y patrones

Inputs: text (required).

build_urlB

Construir URL a partir de componentes

Inputs: host (required), scheme, port, path, +2 more.

calculate_ageC

Calcular edad basada en fecha de nacimiento

Inputs: birth_date (required).

calculate_file_hashC

Calcular hash de un archivo

Inputs: file_path (required), algorithm.

count_wordsB

Contar palabras, líneas y caracteres en un texto

Inputs: text (required).

days_between_datesC

Calcular días entre dos fechas

Inputs: start_date (required), end_date (required).

encode_decodeC

Codificar/decodificar texto en diferentes formatos

Inputs: text (required), operation, format.

extract_domainC

Extraer información detallada del dominio de una URL

Inputs: url (required).

extract_emailsC

Extraer direcciones de email de un texto

Inputs: text (required).

extract_urlsC

Extraer URLs de un texto

Inputs: text (required).

find_replaceC

Buscar y reemplazar texto con soporte para regex

Inputs: text (required), search (required), replace, use_regex, +1 more.

format_timestampC

Convertir timestamp Unix a fecha legible

Inputs: timestamp (required), format.

generate_hashC

Generar hash de un texto

Inputs: text (required), algorithm.

get_calendar_monthC

Mostrar calendario de un mes específico

Inputs: year, month.

get_cpu_infoB

Obtener información detallada de la CPU

Inputs: no named parameters.

get_current_timeB

Obtener la fecha y hora actual con formato personalizable

Inputs: timezone, format.

get_disk_infoB

Obtener información de discos y particiones

Inputs: no named parameters.

get_env_varsC

Obtener variables de entorno del sistema

Inputs: filter.

get_file_infoC

Obtener información detallada de un archivo o directorio

Inputs: file_path (required).

get_memory_infoB

Obtener información de memoria RAM y swap

Inputs: no named parameters.

get_network_infoB

Obtener información de interfaces de red

Inputs: no named parameters.

get_processesB

Listar procesos del sistema con información de uso

Inputs: limit, sort_by.

get_system_infoB

Obtener información general del sistema operativo

Inputs: no named parameters.

http_requestC

Realizar petición HTTP a una URL

Inputs: url (required), method, headers, data, +1 more.

list_directoryC

Listar el contenido de un directorio

Inputs: dir_path, show_hidden.

parse_urlC

Parsear y analizar componentes de una URL

Inputs: url (required).

read_fileC

Leer el contenido completo de un archivo

Inputs: file_path (required), encoding.

search_filesC

Buscar archivos por patrón en un directorio

Inputs: pattern (required), dir_path, recursive.

split_textC

Dividir texto por diferentes criterios

Inputs: text (required), delimiter, max_length.

url_encode_decodeB

Codificar/decodificar componentes de URL

Inputs: text (required), operation, component.

validate_urlC

Validar formato y accesibilidad de una URL

Inputs: url (required), check_accessibility.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 31 tools

    Disambiguation4/5

    Most tools have distinct purposes, but there are a few potential overlaps: 'build_url' and 'parse_url' both handle URL components, 'encode_decode' and 'url_encode_decode' both handle encoding/decoding, and 'generate_hash' and 'calculate_file_hash' both handle hashing. However, the descriptions clarify their specific contexts (text vs. file vs. URL), so misselection is unlikely.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., 'analyze_text', 'calculate_age', 'get_system_info'). There are no deviations in naming conventions, making the set predictable and readable.

    Tool Count3/5

    With 31 tools, the count is borderline high for a general-purpose utility server. While many tools are useful, the set feels heavy and could be streamlined (e.g., merging related tools like 'encode_decode' and 'url_encode_decode'). It's not extreme, but it approaches the upper limit of reasonable scope.

    Completeness4/5

    The server covers a broad range of utility functions (text analysis, system info, file operations, URL handling, etc.) with good coverage in each area. Minor gaps exist, such as no direct tool for writing files or more advanced text processing, but agents can work around these with the available tools.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A unified MCP server with composable tools for GitHub operations, file management, shell execution, kanban boards, Discord messaging, and package management. Features role-based security, HTTP/stdio transports, and a web-based development UI.
      GPL 3.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      A self-contained, dependency-free MCP server that provides utility tools for time, date, mathematical calculations, and shell command execution. It supports remote connectivity through SSE and is designed for easy deployment via Docker.
      GPL 3.0
    • F
      license
      A
      quality
      D
      maintenance
      A general-purpose MCP server that provides utility tools for echo, date/time, and file operations within Claude Code and Claude Desktop. It functions as an extensible framework designed to help developers easily build and register custom Python-based tools.
      11
      -