UVG Local MCP Server
UVG Local MCP Server
Autor: Anggelie Velásquez — Carné 221181 Universidad del Valle de Guatemala — Curso CC3067
1. Descripción
Servidor MCP (Model Context Protocol) local, implementado desde cero en Python 3 estándar, sin usar FastMCP ni ningún SDK oficial de MCP. El servidor se comunica con un cliente a través de stdio, usando JSON-RPC 2.0 implementado manualmente.
Related MCP server: @belal-elsabbagh-apex/copilot-mcp
2. Objetivo
Demostrar la comprensión del ciclo de vida de un servidor MCP (initialize → notifications/initialized → tools/list → tools/call) construyendo el protocolo manualmente, sin depender de librerías que oculten esa lógica.
3. Arquitectura
Cliente MCP <-- stdio (stdin/stdout) --> server.py
│
┌─────────┴─────────┐
│ │
jsonrpc.py tools.py
(formato JSON-RPC 2.0) (herramientas)server.py: punto de entrada, bucle de lectura de stdin y enrutamiento de métodos.jsonrpc.py: construcción de respuestas/errores JSON-RPC 2.0 y validación básica.tools.py: registro centralizado de herramientas (metadata + schema + función ejecutora).
4. Protocolo utilizado
Transporte: stdio (entrada estándar / salida estándar).
Framing: un mensaje JSON-RPC 2.0 por línea (JSON Lines / NDJSON). No se usa framing tipo
Content-Length.Formato de mensajes: JSON-RPC 2.0, implementado manualmente (sin librerías de JSON-RPC ni de MCP).
Versión de protocolo MCP reportada:
2024-11-05(campoprotocolVersionen la respuesta deinitialize).stdoutse reserva exclusivamente para respuestas JSON-RPC. Todos los logs se envían astderr.
5. Métodos MCP implementados
Método | Tipo | Descripción |
| Solicitud | Devuelve |
| Notificación | Confirmación del cliente; no genera respuesta. |
| Solicitud | Devuelve la lista de herramientas disponibles con su |
| Solicitud | Ejecuta una herramienta con los argumentos recibidos. |
Cualquier otro método devuelve el error JSON-RPC -32601 Method not found.
6. Herramientas disponibles
analizar_texto
Entrada: { "texto": "Hola mundo" }
Devuelve: cantidad de caracteres, cantidad de palabras, cantidad de líneas, texto en mayúsculas y en minúsculas.
calcular_estadisticas
Entrada: { "numeros": [10, 20, 30, 40] }
Devuelve: cantidad, suma, promedio, mínimo y máximo.
Valida que numeros sea una lista, no vacía, y con solo valores numéricos.
informacion_sistema
Sin argumentos. Devuelve: sistema operativo, versión de Python, plataforma y directorio de trabajo actual. No expone contraseñas, tokens, variables de entorno ni contenido de archivos.
7. Requisitos
Python 3.8 o superior.
No se requieren dependencias externas (ver requirements.txt).
8. Instalación
git clone https://github.com/Anggelie/mcp-local-server-uvg.git
cd mcp-local-server-uvg9. Cómo ejecutar el servidor manualmente
Desde PowerShell, el servidor queda esperando mensajes por stdin:
python src/server.pyPuedes escribir una línea JSON y presionar Enter, por ejemplo:
{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {}}El servidor responderá con una línea JSON en stdout. Para terminar, presiona Ctrl+Z y luego Enter (fin de stdin en Windows).
También puedes enviar todo el archivo de ejemplo de una sola vez:
Get-Content examples/requests.jsonl | python src/server.py10. Cómo probarlo
Pruebas automáticas (unittest)
python -m unittest discover tests -vCliente de demostración (subproceso)
python examples/test_client.pyEste script levanta src/server.py como subproceso y ejecuta automáticamente el ciclo initialize -> initialized -> tools/list -> tools/call para las 3 herramientas, además de un caso de método inexistente.
11. Cómo configurarlo en un cliente MCP
Se incluye una configuración de ejemplo en client-config/claude_desktop_config.example.json:
{
"mcpServers": {
"uvg-local-server": {
"command": "python",
"args": [
"C:\\RUTA\\AL\\PROYECTO\\src\\server.py"
]
}
}
}Importante: reemplaza C:\RUTA\AL\PROYECTO por la ruta real donde clonaste este repositorio en tu máquina.
12. Ejemplos
Ver examples/requests.jsonl, que contiene un mensaje JSON-RPC por línea cubriendo initialize, notifications/initialized, tools/list y tools/call para las tres herramientas, además de casos de error.
13. Estructura del proyecto
mcp-local-server-uvg/
│
├── src/
│ ├── server.py # Punto de entrada del servidor
│ ├── jsonrpc.py # Utilidades JSON-RPC 2.0
│ └── tools.py # Registro de herramientas
│
├── tests/
│ ├── test_jsonrpc.py
│ └── test_tools.py
│
├── examples/
│ ├── requests.jsonl
│ └── test_client.py
│
├── client-config/
│ └── claude_desktop_config.example.json
│
├── .gitignore
├── requirements.txt
├── README.md
└── README_ES.md14. Manejo de errores
Se implementan los códigos estándar de JSON-RPC 2.0:
Código | Significado | Cuándo ocurre |
| Parse error | La línea recibida no es JSON válido. |
| Invalid Request | Falta |
| Method not found | El método solicitado no está implementado. |
| Invalid params | Argumentos faltantes o de tipo incorrecto en |
| Internal error | Error inesperado durante la ejecución (no debe tumbar el servidor). |
This server cannot be deployed
Maintenance
Related MCP Connectors
A Model Context Protocol server for Wix AI tools
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Model Context Protocol server for Studex tools, notifications, and profile integrations
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides file reading and mathematical calculation tools through the Model Context Protocol. Enables reading file contents and evaluating mathematical expressions via stdio transport.-
- FlicenseNot gradedqualityAmaintenanceEnables EHR Copilot operations such as order cloning, queue building, and execution trace analysis over stdio.-
- AlicenseNot gradedqualityCmaintenanceEnables local tool calling over Model Context Protocol via stdio, providing deterministic tools such as calc.add, text.word_count, and text.summarize_naive after JSON-RPC handshake and discovery.MIT
- AlicenseNot gradedqualityBmaintenanceProvides a production-ready Model Context Protocol server with dual STDIO and Streamable HTTP transports, enabling file operations, memory, database queries, RAG, web search, GitHub integration, background tasks, and prompt-based workflows.MIT