Skip to main content
Glama
dacmail

indexa-capital-mcp-server

by dacmail
README.md
# indexa-capital-mcp-server

Servidor MCP de **solo lectura** para monitorizar tus inversiones en [Indexa Capital](https://indexacapital.com) desde Claude (Desktop, Code, web).

Implementa el subconjunto de lectura de la [API REST v1.6 de Indexa](https://indexacapital.com/en/api-rest-v1):

| Tool MCP | Endpoint | Para qué sirve |
|---|---|---|
| `indexa_portfolio_summary` | varios | Resumen agregado de todas tus cuentas en una sola llamada |
| `indexa_get_me` | `GET /users/me` | Lista de cuentas y datos del usuario |
| `indexa_get_account` | `GET /accounts/{id}` | Perfil de la cuenta, riesgo, titulares |
| `indexa_get_portfolio` | `GET /accounts/{id}/portfolio` | Composición actual: valor, fondos, ISIN, P/L |
| `indexa_get_performance` | `GET /accounts/{id}/performance` | Serie histórica de rentabilidad y benchmark |
| `indexa_get_transactions` | `GET /accounts/{id}/transactions` | Movimientos: aportaciones, suscripciones, retiradas |
| `indexa_get_fees` | `GET /accounts/{id}/fees` | Comisiones de gestión por trimestre |

> **Nota de seguridad**: este servidor no implementa ningún endpoint de escritura (no puede mover dinero, abrir cuentas, ni modificar tu perfil). Si en el futuro quieres añadir aportaciones programadas o transferencias, requiere un fork explícito.

## Requisitos

- Node.js 18 o superior
- Una cuenta en Indexa Capital
- Un token de API personal (instrucciones más abajo)

## Instalación

### Desde npm (usuarios)

No hace falta clonar ni compilar: el paquete incluye el código ya construido en `dist/`.

Instalación global (el binario queda en tu PATH de npm):

```bash
npm install -g indexa-capital-mcp-server
```

O ejecutarlo sin instalar globalmente (`npx` descarga el paquete cuando hace falta; `-y` evita el prompt de confirmación):

```bash
npx -y indexa-capital-mcp-server
```

### Desde el repositorio (desarrollo)

```bash
git clone https://github.com/dacmail/indexa-capital-mcp-server.git
cd indexa-capital-mcp-server
npm install
npm run build
```

## Obtener el token de API

1. Entra en tu área privada de Indexa Capital.
2. Ve a **Configuración de usuario → Aplicaciones**.
3. Genera un token. Tendrá esta pinta: `eyJ0eXAiOiJKV1Qi...`.
4. **Guárdalo a buen recaudo**: es personal, intransferible, y suficiente para acceder a todos los datos de tu cuenta.

## Configuración en Claude Desktop

Edita `~/Library/Application Support/Claude/claude_desktop_config.json` y añade una de estas opciones.

**Con `npx` (recomendado; no necesitas ruta al clon ni al global `node_modules`):**

```json
{
  "mcpServers": {
    "indexa-capital": {
      "command": "npx",
      "args": ["-y", "indexa-capital-mcp-server"],
      "env": {
        "INDEXA_API_TOKEN": "eyJ0eXAiOiJKV1Qi..."
      }
    }
  }
}
```

**Si instalaste el paquete con `npm install -g`:**

```json
{
  "mcpServers": {
    "indexa-capital": {
      "command": "indexa-capital-mcp-server",
      "args": [],
      "env": {
        "INDEXA_API_TOKEN": "eyJ0eXAiOiJKV1Qi..."
      }
    }
  }
}
```

**Si trabajas desde un clon local** (tras `npm run build`):

```json
{
  "mcpServers": {
    "indexa-capital": {
      "command": "node",
      "args": ["/ruta/absoluta/a/indexa-capital-mcp-server/dist/index.js"],
      "env": {
        "INDEXA_API_TOKEN": "eyJ0eXAiOiJKV1Qi..."
      }
    }
  }
}
```

Reinicia Claude Desktop. Verás las 7 tools disponibles bajo el icono del enchufe.

## Configuración en Claude Code

Con paquete publicado en npm (`npx`):

```bash
claude mcp add indexa-capital \
  --env INDEXA_API_TOKEN=eyJ0eXAiOiJKV1Qi... \
  -- npx -y indexa-capital-mcp-server
```

Con instalación global:

```bash
claude mcp add indexa-capital \
  --env INDEXA_API_TOKEN=eyJ0eXAiOiJKV1Qi... \
  -- indexa-capital-mcp-server
```

Desde un clon local:

```bash
claude mcp add indexa-capital \
  --env INDEXA_API_TOKEN=eyJ0eXAiOiJKV1Qi... \
  -- node /ruta/absoluta/a/indexa-capital-mcp-server/dist/index.js
```

## Ejemplos de uso

Una vez conectado, puedes preguntarle a Claude cosas como:

- _"¿Cómo van mis inversiones en Indexa?"_ — usa `indexa_portfolio_summary`
- _"¿Qué fondos tengo en mi cartera de Indexa?"_ — usa `indexa_get_portfolio`
- _"¿Cuánto he ganado este año en mi plan de pensiones?"_ — usa `indexa_get_performance` con `date_from`
- _"Lista las aportaciones que hice en 2024"_ — usa `indexa_get_transactions` con filtro de fechas
- _"¿Cuánto me ha cobrado Indexa en comisiones desde que abrí la cuenta?"_ — usa `indexa_get_fees`

## Pruebas locales

```bash
# Compilar
npm run build

# Test rápido del token
INDEXA_API_TOKEN=eyJ... node -e "
  const axios = require('axios');
  axios.get('https://api.indexacapital.com/users/me', {
    headers: { 'X-AUTH-TOKEN': process.env.INDEXA_API_TOKEN }
  }).then(r => console.log(JSON.stringify(r.data, null, 2)));
"

# Inspector MCP oficial
npx @modelcontextprotocol/inspector node dist/index.js
```

(Recuerda exportar `INDEXA_API_TOKEN` antes de lanzar el inspector.)

## Estructura del proyecto

```
src/
├── index.ts              # Entry point, registro de tools
├── constants.ts          # API URL, headers, límites
├── schemas/
│   └── common.ts         # Schemas Zod compartidos
├── services/
│   ├── client.ts         # Cliente Axios + manejo de errores
│   └── format.ts         # Helpers de formato (Markdown/JSON/EUR)
└── tools/
    ├── get_me.ts
    ├── get_account.ts
    ├── get_portfolio.ts
    ├── get_performance.ts
    ├── get_transactions.ts
    ├── get_fees.ts
    └── portfolio_summary.ts
```

## Notas sobre la API

- El base URL es `https://api.indexacapital.com`.
- La autenticación se hace con el header `X-AUTH-TOKEN`.
- Los tokens generados desde el área privada **no caducan**, a diferencia de los tokens emitidos vía `/auth/authenticate` que duran ~16 h.
- Los endpoints `/portfolio`, `/performance`, `/transactions` y `/fees` no aparecen en la documentación pública RAML pero están confirmados por el soporte oficial y por clientes existentes (Indexa-Dashboard, plantillas Google Sheets, integraciones de la suite Sure). Las interfaces TypeScript son intencionalmente permisivas (`?` opcional, `[key: string]: unknown`) por si la API evoluciona.

## Licencia

MIT.

TDQS

A4.6/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct aspect of the Indexa Capital API: user profile, account info, portfolio, performance, transactions, fees, and an aggregated summary. Descriptions explicitly state what not to use each tool for, eliminating ambiguity.

Naming Consistency4/5

All tools follow the 'indexa_get_<noun>' pattern except 'indexa_portfolio_summary', which uses 'summary' instead of 'get'. This is a minor deviation, but overall the naming is consistent and predictable.

Tool Count5/5

With 7 tools covering user info, account details, portfolio, performance, transactions, fees, and an aggregated summary, the set is well-scoped for a read-only investment API. No tool feels superfluous or missing.

Completeness4/5

The tool set covers the core read-only operations for an investment account: user profile, account details, portfolio holdings, performance returns, transaction history, and fees. A summary tool aggregates key data. Minor gaps like tax documents or dividend details are acceptable for a read-only API.

Maintenance

ActivityInactive
ResponsivenessNo issues