ABANCA MCP Server
# ABANCA MCP Server
Servidor [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) para conectar la API de OpenBanking de ABANCA (PSD2) con LLMs como Claude, ofreciendo acceso seguro a cuentas y movimientos bancarios.
## Requisitos
- Node.js 18+
- Credenciales OpenBanking de ABANCA (CLIENT_ID y CLIENT_SECRET).
- Una clave secreta de encriptación de 32 caracteres exactos para un almacenamiento seguro local de los tokens OAuth.
## Instalación
1. Clona/Instala este repositorio y entra en el directorio.
2. Instala las dependencias: `npm install`
3. Compila el código: `npm run build`
4. Renombra `.env.example` a `.env` y rellena las variables:
- `CLIENT_ID`
- `CLIENT_SECRET`
- `ENCRYPTION_KEY`: Ejemplo `12345678901234567890123456789012` (Debe ser de 32 caracteres exactos)
- `PORT`: (Opcional) el puerto local para el inicio de sesión OAuth, default 3000.
## Uso en Claude Desktop
Al ejecutarse vía stdio, no hace falta que inicies el servidor manualmente si usas un cliente MCP. Añádelo a la configuración de tu Claude Desktop (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"abanca": {
"command": "node",
"args": ["/home/pope/desarrollo/antigravity/apiABANCA/build/index.js"],
"env": {
"CLIENT_ID": "tu_client_id_real",
"CLIENT_SECRET": "tu_client_secret_real",
"ENCRYPTION_KEY": "tu_clave_de_32_caracteres_secreta"
}
}
}
}
```
*Nota: Asegúrate de reiniciar Claude Desktop si realizas cambios en el archivo de configuración.*
## Seguridad y Flujo de Autenticación
- **OAuth Efímero**: En el primer uso (cuando el servidor arranque desde Claude y no encuentre tokens locales), creará temporalmente un servidor Express en el puerto `3000` y pedirá por consola de error (`stderr`) que visites una URL en el navegador. Claude captura los logs `stderr` y te mostrará el enlace.
- Tras el login exitoso, el servidor guardará los tokens AES-256-GCM y apagará el servidor Express automáticamente para limitar vectores de ataque.
- **Minimización de datos**: Las peticiones de la API están desgranadas para proveer sólo cuenta y saldos o movimientos simplificados de cara a evitar que el LLM sufra saturación de contexto de variables no utilizables de la API bancaria originaria.
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: one retrieves a list of bank accounts with balances, while the other retrieves transactions for a specific account. There is no overlap or ambiguity in their functions, making it easy for an agent to select the correct tool based on the need.
Both tools follow a consistent verb_noun pattern with 'get_' prefix, using snake_case throughout. The naming is predictable and readable, with no deviations or mixed conventions, ensuring clarity and ease of use.
With only two tools, the server feels under-scoped for a banking domain that typically involves operations like creating accounts, updating details, or initiating transfers. This limited set may hinder agents from performing comprehensive banking tasks, indicating a mismatch with the apparent scope.
The tool surface is severely incomplete for a banking server, covering only retrieval of accounts and transactions. Missing are essential CRUD operations such as creating or updating accounts, initiating transfers, or managing payments, which are critical for typical banking workflows and will likely cause agent failures.