MCP Custom Tools Server
# 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
## 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](https://docs.astral.sh/uv/) (gestor de paquetes y entornos virtuales moderno)
### Instalación desde código fuente
```bash
# 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
```bash
# 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:
```bash
# ✅ 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:**
```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:**
```json
// 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:
```json
{
"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.
```bash
# ❌ 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:**
```bash
# 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
```bash
# 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:
```python
def my_new_tool(args: Dict[str, Any]) -> str:
"""Mi nueva herramienta."""
# Implementación
return "resultado"
```
2. Registrar en función de registro:
```python
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"]
}
}
```
3. 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
TDQS
Scored across 31 tools
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.
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.
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.
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.