Skip to main content
Glama
emanuelmartin

MCP Parse Server

README.md
# MCP Parse Server

Servidor MCP (Model Context Protocol) completo para Parse Server con funcionalidades de CRUD, gestión de schemas, roles, ACL y Cloud Functions.

## 🚀 Características

### 📖 Lectura de Datos
- `parse_get_object` - Obtener objeto por ID
- `parse_query` - Consultar con filtros, ordenamiento y paginación
- `parse_count` - Contar objetos con filtros
- `parse_aggregate` - Queries de agregación (MongoDB pipeline)

### ✍️ Escritura de Datos
- `parse_create_object` - Crear nuevos objetos
- `parse_update_object` - Actualizar objetos existentes
- `parse_delete_object` - Eliminar objetos
- `parse_batch` - Operaciones batch (múltiples operaciones)
- `parse_increment_field` - Incrementar campos numéricos
- `parse_add_to_array` - Añadir elementos a arrays
- `parse_remove_from_array` - Remover elementos de arrays

### 🗂️ Gestión de Schemas
- `parse_get_schemas` - Listar todos los schemas
- `parse_get_schema` - Obtener schema de una clase
- `parse_create_class` - Crear nueva clase con schema
- `parse_update_schema` - Actualizar schema de clase
- `parse_delete_class` - Eliminar clase
- `parse_add_field` - Añadir campo a clase
- `parse_delete_field` - Eliminar campo de clase

### 🔐 Seguridad (Roles, Users, ACL)
- `parse_create_role` - Crear rol
- `parse_get_role` - Obtener rol
- `parse_list_roles` - Listar roles
- `parse_update_role` - Actualizar rol
- `parse_delete_role` - Eliminar rol
- `parse_add_users_to_role` - Añadir usuarios a rol
- `parse_remove_users_from_role` - Remover usuarios de rol
- `parse_update_clp` - Actualizar Class Level Permissions
- `parse_create_user` - Crear usuario
- `parse_get_user` - Obtener usuario
- `parse_list_users` - Listar usuarios

### ☁️ Cloud Functions
- `parse_call_cloud_function` - Llamar Cloud Function
- `parse_run_job` - Ejecutar Background Job
- `parse_get_cloud_code_info` - Información de Cloud Code

## 📦 Instalación

```bash
npm install
```

## ⚙️ Configuración

Crea un archivo `.env` en la raíz del proyecto:

```env
PARSE_URL=https://tu-parse-server.com/parse
PARSE_APP_ID=tu-app-id
PARSE_REST_KEY=tu-rest-key
PARSE_MASTER_KEY=tu-master-key

# Opcional: Permite certificados autofirmados (solo desarrollo)
ALLOW_SELF_SIGNED_CERT=true
# O alternativamente:
# NODE_TLS_REJECT_UNAUTHORIZED=0
```

**Notas importantes:**
- `PARSE_MASTER_KEY` es opcional pero necesario para operaciones de schema, roles y algunas operaciones administrativas.
- `ALLOW_SELF_SIGNED_CERT=true` permite certificados SSL autofirmados. **⚠️ Solo usar en desarrollo local, nunca en producción.**

## 🏃 Uso

### Iniciar el servidor

```bash
npm start
```

### Modo desarrollo (con watch)

```bash
npm run dev
```

## 📁 Estructura del Proyecto

```
mcp-parse-server/
├── index.mjs                 # Punto de entrada principal
├── src/
│   ├── utils/
│   │   ├── config.js         # Configuración y variables de entorno
│   │   └── parse-client.js   # Cliente HTTP para Parse REST API
│   └── tools/
│       ├── read.js           # Herramientas de lectura
│       ├── write.js          # Herramientas de escritura
│       ├── schema.js         # Herramientas de schema
│       ├── security.js       # Herramientas de roles y ACL
│       └── cloud.js          # Herramientas de Cloud Functions
├── package.json
├── .env
└── README.md
```

## 🔧 Configuración en Claude Desktop / VS Code

Añade esta configuración a tu archivo de configuración MCP:

**Para Claude Desktop (`claude_desktop_config.json`):**

```json
{
  "mcpServers": {
    "parse-server": {
      "command": "node",
      "args": ["/ruta/absoluta/a/mcp-parse-server/index.mjs"],
      "env": {
        "PARSE_URL": "https://tu-parse-server.com/parse",
        "PARSE_APP_ID": "tu-app-id",
        "PARSE_REST_KEY": "tu-rest-key",
        "PARSE_MASTER_KEY": "tu-master-key",
        "ALLOW_SELF_SIGNED_CERT": "true"
      }
    }
  }
}
```

**Para VS Code:**

Configura en tu `settings.json` del workspace o global.

## 📚 Ejemplos de Uso

### Crear una clase con schema

```javascript
{
  "className": "Product",
  "fields": {
    "name": {
      "type": "String",
      "required": true
    },
    "price": {
      "type": "Number",
      "required": true
    },
    "category": {
      "type": "Pointer",
      "targetClass": "Category"
    },
    "tags": {
      "type": "Array"
    }
  }
}
```

### Query con filtros

```javascript
{
  "className": "Product",
  "where": {
    "price": { "$gte": 10, "$lte": 100 },
    "category": {
      "__type": "Pointer",
      "className": "Category",
      "objectId": "abc123"
    }
  },
  "order": "-createdAt",
  "limit": 20,
  "include": "category"
}
```

### Crear rol con usuarios

```javascript
{
  "name": "Moderator",
  "users": ["userId1", "userId2"],
  "ACL": {
    "*": { "read": true },
    "role:Admin": { "write": true }
  }
}
```

### Actualizar CLP

```javascript
{
  "className": "Product",
  "permissions": {
    "get": { "*": true },
    "find": { "*": true },
    "create": { "requiresAuthentication": true },
    "update": { "role:Admin": true },
    "delete": { "role:Admin": true }
  }
}
```

## 🛡️ Permisos

Algunas operaciones requieren la **Master Key**:
- Operaciones de schema (crear/modificar/eliminar clases)
- Gestión de roles
- Operaciones administrativas
- Background Jobs
- Queries de agregación

Asegúrate de configurar `PARSE_MASTER_KEY` en tu `.env` para estas operaciones.

## 📝 Licencia

MIT

## 🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor abre un issue o pull request.

TDQS

A3.7/5.0

Scored across 35 tools

Disambiguation5/5

Each tool targets a distinct resource and action, with clear separation between object, schema, role, user, and relation operations. Even similar deletes (field, class, object) are unambiguous due to explicit resource naming.

Naming Consistency5/5

All tools follow a consistent parse_<verb>_<resource> pattern, using clear verbs like create, get, update, delete, list, add, remove, and query. Minor variations like get vs list are contextually appropriate (singular vs plural).

Tool Count4/5

35 tools is above typical ranges, but the server covers the broad domain of Parse Server management including objects, schemas, roles, users, relations, and cloud code. Each tool serves a distinct purpose, making the large count justified for the scope.

Completeness3/5

Object, schema, role, and relation operations have comprehensive CRUD coverage, but user management is incomplete: users can be created, fetched, and listed, yet there are no update_user or delete_user tools. This leaves a notable lifecycle gap.

Maintenance

ActivitySlowing
ResponsivenessNo issues