ServeMyAPI

Un servidor personal para almacenar y acceder de forma segura a claves de API mediante el Llavero de macOS.

Documentación

ServeMyAPI

smithery badge

Un servidor personal MCP (Model Context Protocol) para almacenar y acceder de forma segura a claves de API en distintos proyectos mediante el Llavero de macOS.

🔒 SEGURIDAD PRIMERO: ServeMyAPI está diseñado para ejecutarse LOCALMENTE en tu máquina. Las claves de API NUNCA se transmiten por internet y NUNCA deben desplegarse en servicios en la nube. Lee las pautas de seguridad críticas antes de usarlo.

Soporte multiplataforma: ServeMyAPI ahora incluye una capa de abstracción de almacenamiento que permite soportar múltiples plataformas:

  • macOS: Usa el Llavero nativo (predeterminado)
  • Windows/Linux: Usa almacenamiento de archivos cifrado
  • Docker: Usa automáticamente almacenamiento de archivos cifrado
  • Memoria: Disponible para pruebas y almacenamiento temporal

Resumen

ServeMyAPI te permite almacenar claves de API de forma segura en el Llavero de macOS y acceder a ellas a través de una interfaz MCP consistente. Esto facilita:

  • Almacenar claves de API de forma segura (nunca son visibles en archivos .env o de configuración)
  • Acceder a las mismas claves en múltiples proyectos
  • Usar lenguaje natural para almacenar y recuperar claves (cuando se usa con LLMs como Claude)
  • Proporcionar claves directamente a tu asistente de IA cuando necesite acceder a servicios

¿Por qué ServeMyAPI en lugar de archivos .ENV?

Usar ServeMyAPI en lugar de archivos .ENV tradicionales resuelve varios problemas comunes:

  1. Conflictos de seguridad con GitHub:

    • Los archivos .ENV deben excluirse de los repositorios Git por seguridad (mediante .gitignore)
    • Esto crea un problema de "contexto oculto" donde la configuración importante es invisible para colaboradores y LLMs
    • Los nuevos desarrolladores a menudo tienen dificultades para configurar las variables de entorno correctas
  2. Desafíos de integración con LLMs:

    • Los LLMs como Claude no pueden acceder directamente a tus archivos .ENV debido a restricciones de seguridad
    • Cuando los LLMs necesitan claves de API para completar tareas, a menudo se requieren soluciones manuales
    • ServeMyAPI permite que tu asistente de IA solicite claves mediante lenguaje natural
  3. Consistencia entre proyectos:

    • Con archivos .ENV, normalmente necesitas duplicar las claves de API en múltiples proyectos
    • Cuando las claves cambian, debes actualizar varios archivos
    • ServeMyAPI proporciona una ubicación de almacenamiento central accesible desde cualquier proyecto

Este enfoque te da lo mejor de ambos mundos: almacenamiento seguro de credenciales sensibles sin sacrificar la visibilidad y accesibilidad para tus herramientas de IA.

Características

  • Almacenamiento seguro de claves de API en el Llavero de macOS
  • Herramientas MCP simples para almacenar, recuperar, listar y eliminar claves
  • Interfaz CLI conveniente para la gestión de claves desde la terminal
  • Soporte para transportes stdio y HTTP/SSE (con autenticación)
  • Compatible con cualquier cliente MCP (Claude Desktop, etc.)
  • Características de seguridad mejoradas:
    • Validación de entrada para prevenir ataques de path traversal
    • Almacenamiento de archivos cifrado para despliegues en Docker
    • Autenticación con token Bearer para endpoints HTTP
    • Limitación de velocidad y gestión de sesiones
    • Cabeceras de seguridad y protección CORS
    • Registro seguro con redacción automática de datos sensibles

Instalación

# Clone the repository
git clone https://github.com/yourusername/servemyapi.git
cd servemyapi

# Install dependencies
npm install

# Build the project
npm run build

Uso

Interfaz CLI

ServeMyAPI incluye una interfaz de línea de comandos para la gestión rápida de claves directamente desde tu terminal:

# Install the CLI globally
npm run build
npm link

# List all stored API keys
api-key list

# Get a specific API key
api-key get github_token

# Store a new API key
api-key store github_token ghp_123456789abcdefg

# Delete an API key
api-key delete github_token

# Display help
api-key help

Ejecutar como servidor stdio

Esta es la forma más sencilla de usar ServeMyAPI como servidor MCP, especialmente cuando trabajas con Claude Desktop:

npm start

Ejecutar como servidor HTTP

Para aplicaciones que requieren acceso HTTP:

node dist/server.js

Esto iniciará el servidor en el puerto 3000 (o el puerto especificado en la variable de entorno PORT).

⚠️ ADVERTENCIA DE SEGURIDAD IMPORTANTE

NO USES LA VERSIÓN HOSPEDADA DE SMITHERY para almacenar claves de API reales. El despliegue en Smithery existe solo con fines de demostración. Usarlo:

  1. Transmitiría tus claves de API por internet (incluso con HTTPS, esto viola el principio de mantener las claves locales)
  2. Almacenaría tus claves en el servidor de otra persona (la infraestructura de Smithery)
  3. Podría exponer tus claves al operador del servicio o en caso de una brecha de seguridad

ServeMyAPI está diseñado para ejecutarse LOCALMENTE en tu máquina únicamente. Todo el modelo de seguridad depende de que las claves nunca salgan de tu entorno local.

Configuración de clientes MCP

ServeMyAPI funciona con cualquier cliente compatible con MCP. Los archivos de configuración de ejemplo se proporcionan en el directorio examples.

Claude Desktop

Para usar ServeMyAPI con Claude Desktop:

  1. Localiza o crea el archivo de configuración de Claude Desktop:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %AppData%\Claude\claude_desktop_config.json
  2. Agrega ServeMyAPI a la sección mcpServers (puedes copiarlo desde examples/claude_desktop_config.json):

    {
      "mcpServers": {
        "serveMyAPI": {
          "command": "node",
          "args": [
            "/ABSOLUTE/PATH/TO/servemyapi/dist/index.js"
          ]
        }
      }
    }
    
  3. Reemplaza /ABSOLUTE/PATH/TO/servemyapi con la ruta real a tu instalación de ServeMyAPI.

  4. Reinicia Claude Desktop.

Windsurf

Para usar ServeMyAPI con Windsurf:

  1. Abre el editor Windsurf y navega a Configuración
  2. Agrega ServeMyAPI a tu configuración de servidor MCP usando el ejemplo en examples/windsurf_config.json
  3. Adapta las rutas a tu instalación local

Herramientas MCP

ServeMyAPI expone las siguientes herramientas:

store-api-key

Almacena una clave de API en el llavero.

Parámetros:

  • name: El nombre/identificador de la clave de API
  • key: La clave de API a almacenar

Ejemplo (desde Claude):

Using serveMyAPI, store my API key ABC123XYZ as "OpenAI API Key"

get-api-key

Recupera una clave de API del llavero.

Parámetros:

  • name: El nombre/identificador de la clave de API a recuperar

Ejemplo (desde Claude):

Using serveMyAPI, get the API key named "OpenAI API Key"

delete-api-key

Elimina una clave de API del llavero.

Parámetros:

  • name: El nombre/identificador de la clave de API a eliminar

Ejemplo (desde Claude):

Using serveMyAPI, delete the API key named "OpenAI API Key"

list-api-keys

Lista todas las claves de API almacenadas.

No se requieren parámetros.

Ejemplo (desde Claude):

Using serveMyAPI, list all my stored API keys

Opciones de almacenamiento

ServeMyAPI selecciona automáticamente el mejor proveedor de almacenamiento para tu plataforma:

Detección de plataforma

  • macOS: Llavero (predeterminado)
  • Windows: Almacenamiento de archivos cifrado
  • Linux: Almacenamiento de archivos cifrado
  • Docker: Almacenamiento de archivos cifrado

Configuración manual

Puedes anular la detección automática:

# Force a specific storage type
export SERVEMYAPI_STORAGE_TYPE=file  # or 'keychain', 'memory'

# Configure file storage location
export STORAGE_DIR=/path/to/secure/directory

Tipos de almacenamiento

  1. Almacenamiento en Llavero (solo macOS)

    • Seguridad nativa a nivel de sistema operativo
    • No se necesita cifrado
    • Requiere permiso del usuario en el primer uso
  2. Almacenamiento en archivo (multiplataforma)

    • Cifrado AES-256-GCM
    • Derivación de claves PBKDF2
    • Se almacena en ~/.servemyapi/keys.json.enc por defecto
    • Requiere la variable de entorno ENCRYPTION_KEY
  3. Almacenamiento en memoria (pruebas)

    • Solo en memoria
    • Los datos se pierden al reiniciar
    • Útil para pruebas y desarrollo

Seguridad

Características de seguridad principales

  • Almacenamiento consciente de la plataforma: Selecciona automáticamente almacenamiento seguro para cada plataforma
  • Almacenamiento en Llavero de macOS: Las claves de API se almacenan en el Llavero de macOS con seguridad nativa a nivel de sistema operativo
  • Almacenamiento de archivos cifrado: Soporte multiplataforma con cifrado AES-256-GCM
  • Cifrado en Docker: Cuando se ejecuta en Docker, las claves se cifran usando AES-256-GCM con derivación de claves PBKDF2
  • Autenticación: Los endpoints HTTP/SSE requieren autenticación con token Bearer
  • Validación de entrada: La validación estricta previene ataques de path traversal e inyección
  • Limitación de velocidad: Protege contra abusos con límites de solicitudes configurables
  • Registro seguro: Redacción automática de datos sensibles en todas las salidas de registro

Seguridad del servidor HTTP

Cuando se usa el transporte HTTP/SSE:

# Set authentication key
export SERVEAPI_AUTH_KEY="your-secure-api-key"

# Set encryption key for Docker
export ENCRYPTION_KEY="your-encryption-key"

# Configure CORS origins
export ALLOWED_ORIGINS="https://app1.com,https://app2.com"

Incluye el token Bearer en las solicitudes:

Authorization: Bearer your-secure-api-key

Mejores prácticas

  1. Usa siempre HTTPS en producción - Despliega detrás de un proxy inverso con TLS
  2. Establece claves de autenticación fuertes - Usa openssl rand -base64 32 para generarlas
  3. Ejecuta como no root - La imagen de Docker usa automáticamente un usuario restringido
  4. Rotación regular de claves - Actualiza periódicamente tus claves de autenticación y cifrado
  5. Monitorea los registros de acceso - Observa patrones sospechosos o intentos no autorizados

Para una configuración de seguridad detallada, consulta docs/SECURITY.md.

Hoja de ruta

Los planes futuros para ServeMyAPI incluyen:

  • Herramienta de escaneo de código: Una herramienta que escanea automáticamente tu base de código en busca de endpoints de API, URLs sensibles y variables de entorno, y luego sugiere nombres para almacenarlos en el Llavero. Esto permitiría a los desarrolladores seguir usando archivos .ENV en su flujo de trabajo habitual mientras garantiza que las credenciales también estén disponibles para LLMs y otras herramientas cuando sea necesario.

  • Soporte multiplataforma: Investigar opciones de almacenamiento seguro de credenciales para Windows y Linux para hacer ServeMyAPI más ampliamente accesible.

  • Integración con frameworks populares: Proporcionar integración fácil con frameworks como Next.js, Express y otros.

  • Interfaz de usuario para gestión de claves: Una interfaz web simple para gestionar directamente tus claves de API almacenadas.

Siéntete libre de sugerir características adicionales o contribuir a la hoja de ruta abriendo un issue o pull request.

Desarrollo

# Run in development mode with hot reload
npm run dev

# Use the CLI during development
npm run cli list

# Lint the code
npm run lint

# Build for production
npm run build

Licencia

MIT