Dev.to MCP Server

Un servidor MCP para la API de Dev.to que permite buscar, explorar, leer y crear contenido en la plataforma.

Documentación

🚀 Dev.to MCP Server

License: AGPL v3 Docker Dev.to API


Una implementación de un servidor de Protocolo de Contexto de Modelo (MCP) para la API de Dev.to, que ofrece capacidades para buscar, navegar, leer y crear contenido en Dev.to.


✨ Características

CaracterísticaDescripción
🔍 Navegar artículos recientesObtén los artículos más recientes de Dev.to
🌟 Navegar artículos popularesObtén los artículos más populares
🏷️ Navegar por etiquetaObtén artículos con una etiqueta específica
📚 Navegar por títuloObtén artículos con un título específico
📖 Leer artículoObtén información detallada sobre un artículo específico
👤 Perfil de usuarioObtén información sobre un usuario de Dev.to
🔎 Buscar artículosBusca artículos usando palabras clave
👤 Buscar artículos por usuarioBusca todos los artículos de un usuario específico
📝 Obtener artículo por IDObtén información detallada sobre un artículo específico
📝 Obtener artículo por títuloObtén información detallada sobre un artículo específico
🧠 Analizar artículoAnaliza un artículo específico (basado en prompts, salida de resumen)
🧠 Analizar perfil de usuarioAnaliza un perfil de usuario específico (basado en prompts, salida de resumen)
📝 Crear artículoCrea y publica nuevos artículos
✏️ Actualizar artículoActualiza tus artículos existentes
📝 Actualizar artículo por títuloActualiza tus artículos existentes por título (se resuelve a ID)
📜 Listar mis artículosLista tus propios artículos publicados
📝 Listar mis borradoresLista tus propios artículos en borrador
📝 Listar mis artículos no publicadosLista tus propios artículos no publicados
📝 Listar mis artículos programadosLista tus propios artículos programados
🧑‍💻 Publicar artículo por IDPublica tus propios artículos por ID
📝 Publicar artículo por títuloPublica tus propios artículos por título
🧑‍💻 Despublicar artículo por IDDespublica tus propios artículos por ID
📝 Despublicar artículo por títuloDespublica tus propios artículos por título
📝 Eliminar artículoElimina tus propios artículos

🧠 Herramientas de análisis

CaracterísticaDescripción
🧠 Analizar artículoAnaliza un artículo específico (basado en prompts, salida de resumen)
🧠 Analizar perfil de usuarioAnaliza un perfil de usuario específico (basado en prompts, salida de resumen)

Nota: Las herramientas de análisis proporcionan resúmenes e información en lenguaje natural, no volcados de datos sin procesar.


📝 Licencia

Este proyecto está licenciado bajo la GNU Affero General Public License v3.0 (AGPLv3).

ADVERTENCIA DE USO COMERCIAL

Si deseas usar o implementar este código de cualquier forma como un servicio monetizado para otros, incluso si no cobras específicamente por el código, debes contactarme para obtener permiso (esto significa TÚ Smithery/Glama o CUALQUIER servicio similar), que solo se otorgará tras el pago de la tarifa de licencia correspondiente. No, puede que no estés cobrando por el uso del código en sí, y puede que estés proporcionando la infraestructura, pero estarías usando MI código para facilitar TU servicio. Esa es una dependencia intrínseca que DEBE estar licenciada.

Para cualquier otra persona, ya sea un negocio o un individuo, espero que te sea útil. Disfrútalo.


⚙️ Configuración del servidor

El servidor se puede configurar usando las siguientes variables de entorno:

Variable de entornoDescripciónValor predeterminado
PORTPuerto en el que se ejecuta el servidor8000
LOG_LEVELNivel de registro (INFO, DEBUG, etc.)INFO

🔐 Autenticación del cliente

Cada cliente debe proporcionar su propia clave de API de Dev.to para operaciones autenticadas. Esto se hace de forma segura proporcionando la clave de API como variable de entorno en la configuración del servidor MCP del cliente.

Nota: La clave debe proporcionarse como DEVTO_API_KEY en la sección de entorno de la configuración de tu cliente MCP.


🚀 Primeros pasos

🐳 Ejecutar con Docker

  1. Clona el repositorio:
git clone https://github.com/rawveg/devtomcp.git
cd devtomcp
  1. Compila y ejecuta con Docker Compose:
docker-compose up --build

El servidor estará disponible en http://localhost:8000 con el endpoint SSE en http://localhost:8000/sse.


🛠️ Herramientas MCP

Analizando contenido

  • analyse_article - Analiza un artículo específico
  • analyse_user_profile - Analiza un usuario específico

Navegando contenido

  • browse_latest_articles() - Obtén los artículos más recientes de Dev.to
  • browse_popular_articles() - Obtén los artículos más populares
  • browse_articles_by_tag(tag) - Obtén artículos con una etiqueta específica

Leyendo contenido

  • get_article(id) - Obtén información detallada sobre un artículo específico
  • get_user_profile(username) - Obtén información sobre un usuario de Dev.to

Buscando contenido

  • search_articles(query, page=1) - Busca artículos usando palabras clave
  • search_articles_by_user(username, page=1) - Busca todos los artículos de un usuario específico

Gestionando contenido (requiere autenticación)

  • list_my_articles(page=1, per_page=30) - Lista tus propios artículos publicados
  • list_my_draft_articles(page=1, per_page=30) - Lista tus propios artículos en borrador
  • list_my_unpublished_articles(page=1, per_page=30) - Lista tus propios artículos no publicados
  • create_article(title, content, tags="", published=False) - Crea un nuevo artículo
  • update_article(id, title=None, content=None, tags=None, published=None) - Actualiza un artículo existente
  • delete_article(id) - Elimina un artículo existente
  • publish_article_by_id(id) - Publica tus propios artículos por ID
  • publish_article_by_title(title) - Publica tus propios artículos por título
  • unpublish_article_by_id(id) - Despublica tus propios artículos por ID
  • unpublish_article_by_title(title) - Despublica tus propios artículos por título
  • update_article_by_title(title, new_title=None, content=None, tags=None, published=None) - Actualiza un artículo existente por título (se resuelve a ID)

🌐 API REST y servidor de herramientas OpenAPI

El servidor MCP de Dev.to ahora admite operación de doble modo:

ModoDescripción
🟢 SSE/MCPPara integración con LLM/agentes, usando el Protocolo de Contexto de Modelo (MCP)
🟦 REST/OpenAPIPara acceso HTTP directo, ejecutores de herramientas OpenAPI y herramientas compatibles con OpenAI

🚦 Cambiando de modo

Configura el modo en tu archivo .env:

SERVER_MODE=sse   # For SSE/MCP (default)
# or
SERVER_MODE=rest  # For REST API & OpenAPI toolserver

🔑 Autenticación en modo REST

  • Proporciona tu clave de API de Dev.to en el encabezado Authorization como token Bearer:
    Authorization: Bearer YOUR_DEVTO_API_KEY
    
  • No es necesario configurar DEVTO_API_KEY en .env para el modo REST.

📖 OpenAPI y Swagger UI

🧑‍💻 Ejemplo: Lista mis artículos (REST)

curl -X GET "http://localhost:8000/list_my_articles?page=1&per_page=30&max_pages=10" \
  -H "Authorization: Bearer YOUR_DEVTO_API_KEY"

🛠️ Endpoints REST

  • Todas las herramientas principales están disponibles como endpoints REST (consulta /docs para más detalles)
  • Cada endpoint incluye metadatos OpenAPI enriquecidos, ejemplos y etiquetas para facilitar su descubrimiento
  • update_article_by_title - Actualiza tus propios artículos por título (se resuelve a ID)

🤖 Por qué esto importa

  • Úsalo como API REST tradicional, servidor de herramientas OpenAPI o proveedor de herramientas LLM/agente, ¡todo desde un solo código base!
  • Plug-and-play con OpenAI, LangChain y cualquier cliente compatible con OpenAPI
  • Documentación interactiva y atractiva lista para usar

🖥️ Configuración del cliente

Configuración de Claude Desktop

Añade el servidor MCP en config.json de Claude Desktop:

{
  "mcpServers": {
    "devto": {
      "url": "http://localhost:8000/sse"
    }
  }
}

Configuración de Cursor

Añade el servidor MCP en la configuración de Cursor:

{
  "mcpServers": {
    "devto": {
      "url": "http://localhost:8000/sse"
    }
  }
}

NOTA

Algunos clientes pueden requerir el uso de serverUrl en lugar de url, por ejemplo: Windsurf IDE de Codium.

Acceso programático con Python

import asyncio
import os
from fastmcp.client import Client

async def main():
    # Set environment variable for authentication
    os.environ["DEVTO_API_KEY"] = "your_dev_to_api_key_here"
    
    # Connect to the MCP server
    client = Client("http://localhost:8000/sse")
    
    # Use the client
    async with client:
        # Get popular articles
        results = await client.call_tool("browse_popular_articles", {})
        print(results)

if __name__ == "__main__":
    asyncio.run(main())

☁️ Implementación en Google Cloud Run

Para implementar en Google Cloud Run:

  1. Sigue la Guía de inicio rápido de Google Cloud Run para configurar tu entorno

  2. Configura tu clave de API de Dev.to como secreto:

    gcloud secrets create devto-api-key --data-file=- <<< "your_api_key_here"
    
  3. Implementa con el secreto montado en modo SSE:

    gcloud run deploy devtomcp \
       --source . \
       --platform managed \
       --allow-unauthenticated \
       --region [REGION] \
       --set-env-vars="LOG_LEVEL=<<LOG_LEVEL>>" \
       --set-env-vars="DEVTO_API_KEY=<<DEVTO_API_KEY>>" \
       --set-env-vars="SERVER_MODE=sse" \
       --set-env-vars="DEVTO_API_BASE_URL=<<DEVTO_API_BASE_URL>>" \
       --format="json"
    

    Variables de entorno

    VariableDescripciónValor predeterminado
    LOG_LEVELNivel de registro (INFO, DEBUG, etc.)INFO
    DEVTO_API_KEYClave de API de Dev.toNone
    DEVTO_API_BASE_URLURL base de la API de Dev.tohttps://dev.to/api
    SERVER_MODEEl modo de servidor en el que implementarsse

    Estas variables deben configurarse en la línea de comandos para gcloud run deploy, ya que el archivo .env no está montado en el contenedor.

    Implementación alternativa en modo REST con herramientas OpenAPI:

    gcloud run deploy devtomcp \
       --source . \
       --platform managed \
       --allow-unauthenticated \
       --region [REGION] \
       --set-env-vars="LOG_LEVEL=<<LOG_LEVEL>>" \
       --set-env-vars="SERVER_MODE=rest" \
       --set-env-vars="DEVTO_API_BASE_URL=<<DEVTO_API_BASE_URL>>" \
       --format="json"
    

    Variables de entorno

    VariableDescripciónValor predeterminado
    LOG_LEVELNivel de registro (INFO, DEBUG, etc.)INFO
    SERVER_MODEModo de servidor en el que implementarrest
    DEVTO_API_BASE_URLURL base de la API de Dev.tohttps://dev.to/api

    Estas variables deben configurarse en la línea de comandos para gcloud run deploy, ya que el archivo .env no está montado en el contenedor.

Selección de región La región debe seleccionarse según la región de tu proyecto asociado. Puedes encontrar una lista de regiones disponibles aquí.

⚠️ Advertencia de seguridad - Modo SSE:

  • La bandera --allow-unauthenticated hace que tu servidor sea accesible públicamente

  • Dado que este es un servidor de un solo usuario con tu clave de API, DEBES implementar medidas de seguridad adicionales:

  • Al implementar en modo REST (recomendado para Cloud Run), las consideraciones de seguridad anteriores no aplican, ya que cada solicitud al servidor en este modo debe ir acompañada de un Token Bearer de Autorización Authorization: Bearer <<your_dev_to_api_key_here>>, lo que limita inmediatamente el acceso destructivo.

Consulta GCP_DEPLOYMENT.md para obtener instrucciones detalladas de configuración de seguridad.


⚠️ Manejo de errores

El servidor devuelve respuestas de error MCP estándar:

{
  "status": "error",
  "message": "Error description",
  "code": 401
}

Códigos de error comunes:

  • 401: Autenticación fallida (clave de API faltante o no válida)
  • 404: Recurso no encontrado
  • 422: Parámetros no válidos
  • 500: Error del servidor

🔒 Consideraciones de seguridad

  • El servidor usa variables de entorno para la configuración de la clave de API, proporcionando un aislamiento de seguridad adecuado
  • Cada conexión de cliente usa su propia clave de API configurada
  • Todo el manejo de credenciales de API ocurre en el lado del servidor
  • Usa HTTPS en entornos de producción
  • Usa gestión segura de secretos para claves de API en implementaciones en la nube

🤝 Contribuciones

¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.


🙏 Agradecimientos


📬 Contacto

Para preguntas, sugerencias o soporte, abre un issue.