Skip to main content
Glama

Astro Blog MCP Server

MCP (Model Context Protocol) Server para automatizar la creación de posts en un blog Astro desplegado en Vercel.

🚀 Características

  • ✅ Creación automática de posts vía API REST

  • ✅ Integración directa con GitHub

  • ✅ Validación y sanitización de inputs

  • ✅ Seguridad con API Keys

  • ✅ Rate limiting

  • ✅ Trigger automático de deployments en Vercel

  • ✅ Compatible con n8n y otras herramientas de automatización

📦 Instalación

1. Clona el repositorio

git clone <tu-repo>
cd astro-blog-mcp

2. Instala dependencias

pnpm install

3. Configura variables de entorno

Copia .env.example a .env y completa los valores:

cp .env.example .env

Variables requeridas:

  • GITHUB_TOKEN: Personal Access Token de GitHub con permisos de repo

  • GITHUB_OWNER: Tu usuario de GitHub

  • GITHUB_REPO: Nombre del repositorio de tu blog

  • GITHUB_BRANCH: Branch a usar (default: main)

  • API_SECRET_KEY: Una clave secreta aleatoria de al menos 32 caracteres

  • MCP_PORT: Puerto del servidor (default: 3000)

  • DEPLOY_HOOK: (Opcional) Deploy Hook de Vercel

4. Compila el proyecto

pnpm build

🎯 Uso

Iniciar el servidor

Modo desarrollo:

pnpm dev

Modo producción:

pnpm start

Probar la API

pnpm test

🔑 Configuración de GitHub Token

  1. Ve a GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)

  2. Genera un nuevo token con estos permisos:

    • repo (acceso completo)

  3. Copia el token y agrégalo a tu .env

🔗 Configuración de Vercel Deploy Hook

  1. En tu proyecto de Vercel, ve a Settings → Git

  2. En la sección "Deploy Hooks", crea un nuevo hook

  3. Copia la URL y agrégala a DEPLOY_HOOK en tu .env

📡 API Endpoints

Health Check

GET /health

Validar configuración

GET /api/validate
Headers: x-api-key: YOUR_API_KEY

Crear un post

POST /api/posts
Headers:
  Content-Type: application/json
  x-api-key: YOUR_API_KEY

Body:
{
  "title": "Mi Nuevo Post",
  "description": "Descripción del post",
  "tags": ["astro", "blog"],
  "category": "Tutorial",
  "draft": false,
  "content": "# Contenido del post\n\nTexto aquí..."
}

Actualizar un post

PUT /api/posts/:fileName
Headers:
  Content-Type: application/json
  x-api-key: YOUR_API_KEY

Body: (mismo formato que crear)

🔌 Integración con n8n

Paso 1: Añadir Credentials

En n8n:

  1. Ve a CredentialsNew

  2. Selecciona Header Auth

  3. Configura:

    • Name: Astro Blog MCP

    • Header Name: x-api-key

    • Value: Tu API_SECRET_KEY

Paso 2: Crear Workflow

  1. Añade un nodo HTTP Request

  2. Configura:

    • Method: POST

    • URL: http://tu-servidor:3000/api/posts

    • Authentication: Selecciona las credentials creadas

    • Body Content Type: JSON

    • Body:

    {
      "title": "{{ $json.title }}",
      "description": "{{ $json.description }}",
      "tags": {{ $json.tags }},
      "category": "{{ $json.category }}",
      "content": "{{ $json.content }}"
    }

Ejemplo de Workflow n8n

{
  "nodes": [
    {
      "parameters": {
        "method": "POST",
        "url": "http://localhost:3000/api/posts",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "headerAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "title",
              "value": "Nuevo Post desde n8n"
            },
            {
              "name": "description",
              "value": "Post creado automáticamente"
            },
            {
              "name": "tags",
              "value": ["automation", "n8n"]
            },
            {
              "name": "category",
              "value": "Automation"
            },
            {
              "name": "content",
              "value": "# Hola Mundo\n\nEste post fue creado por n8n"
            }
          ]
        }
      },
      "name": "Create Blog Post",
      "type": "n8n-nodes-base.httpRequest",
      "position": [250, 300]
    }
  ]
}

🐳 Deploy con Docker

docker build -t astro-blog-mcp .
docker run -p 3000:3000 --env-file .env astro-blog-mcp

🔒 Seguridad

  • ✅ Autenticación con API Key

  • ✅ Rate limiting (20 req/min)

  • ✅ Validación de nombres de archivo (previene path traversal)

  • ✅ Sanitización de inputs con Zod

  • ✅ Timing-safe comparison para API keys

  • ✅ CORS configurado

🧪 Testing

El proyecto incluye un script de prueba completo:

pnpm test

Esto probará:

  1. Health check

  2. Validación de acceso a GitHub

  3. Creación de un post de prueba

📝 Formato de Posts

Los posts se crean con este front-matter:

---
title: Título del Post
published: 2025-10-25
description: "Descripción corta"
image: ""
tags: ["tag1", "tag2"]
category: "Categoría"
draft: false
---
Contenido del post aquí...

🛠️ Troubleshooting

Error: "Failed to validate GitHub access"

  • Verifica que tu GITHUB_TOKEN sea válido

  • Confirma que el token tenga permisos de repo

  • Verifica que GITHUB_OWNER y GITHUB_REPO sean correctos

Error: "File already exists"

  • El archivo ya existe en el repositorio

  • Usa un nombre diferente o el endpoint PUT para actualizar

Error: "API key is required"

  • Asegúrate de incluir el header x-api-key en tus requests

  • Verifica que la API key coincida con API_SECRET_KEY

📚 Recursos

📄 Licencia

MIT

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/amilcar-laniakea/mcp-auto-post-astro'

If you have feedback or need assistance with the MCP directory API, please join our Discord server