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
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ística | Descripción |
|---|---|
| 🔍 Navegar artículos recientes | Obtén los artículos más recientes de Dev.to |
| 🌟 Navegar artículos populares | Obtén los artículos más populares |
| 🏷️ Navegar por etiqueta | Obtén artículos con una etiqueta específica |
| 📚 Navegar por título | Obtén artículos con un título específico |
| 📖 Leer artículo | Obtén información detallada sobre un artículo específico |
| 👤 Perfil de usuario | Obtén información sobre un usuario de Dev.to |
| 🔎 Buscar artículos | Busca artículos usando palabras clave |
| 👤 Buscar artículos por usuario | Busca todos los artículos de un usuario específico |
| 📝 Obtener artículo por ID | Obtén información detallada sobre un artículo específico |
| 📝 Obtener artículo por título | Obtén información detallada sobre un artículo específico |
| 🧠 Analizar artículo | Analiza un artículo específico (basado en prompts, salida de resumen) |
| 🧠 Analizar perfil de usuario | Analiza un perfil de usuario específico (basado en prompts, salida de resumen) |
| 📝 Crear artículo | Crea y publica nuevos artículos |
| ✏️ Actualizar artículo | Actualiza tus artículos existentes |
| 📝 Actualizar artículo por título | Actualiza tus artículos existentes por título (se resuelve a ID) |
| 📜 Listar mis artículos | Lista tus propios artículos publicados |
| 📝 Listar mis borradores | Lista tus propios artículos en borrador |
| 📝 Listar mis artículos no publicados | Lista tus propios artículos no publicados |
| 📝 Listar mis artículos programados | Lista tus propios artículos programados |
| 🧑💻 Publicar artículo por ID | Publica tus propios artículos por ID |
| 📝 Publicar artículo por título | Publica tus propios artículos por título |
| 🧑💻 Despublicar artículo por ID | Despublica tus propios artículos por ID |
| 📝 Despublicar artículo por título | Despublica tus propios artículos por título |
| 📝 Eliminar artículo | Elimina tus propios artículos |
🧠 Herramientas de análisis
| Característica | Descripción |
|---|---|
| 🧠 Analizar artículo | Analiza un artículo específico (basado en prompts, salida de resumen) |
| 🧠 Analizar perfil de usuario | Analiza 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 entorno | Descripción | Valor predeterminado |
|---|---|---|
PORT | Puerto en el que se ejecuta el servidor | 8000 |
LOG_LEVEL | Nivel 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_KEYen la sección de entorno de la configuración de tu cliente MCP.
🚀 Primeros pasos
🐳 Ejecutar con Docker
- Clona el repositorio:
git clone https://github.com/rawveg/devtomcp.git
cd devtomcp
- 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íficoanalyse_user_profile- Analiza un usuario específico
Navegando contenido
browse_latest_articles()- Obtén los artículos más recientes de Dev.tobrowse_popular_articles()- Obtén los artículos más popularesbrowse_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íficoget_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 clavesearch_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 publicadoslist_my_draft_articles(page=1, per_page=30)- Lista tus propios artículos en borradorlist_my_unpublished_articles(page=1, per_page=30)- Lista tus propios artículos no publicadoscreate_article(title, content, tags="", published=False)- Crea un nuevo artículoupdate_article(id, title=None, content=None, tags=None, published=None)- Actualiza un artículo existentedelete_article(id)- Elimina un artículo existentepublish_article_by_id(id)- Publica tus propios artículos por IDpublish_article_by_title(title)- Publica tus propios artículos por títulounpublish_article_by_id(id)- Despublica tus propios artículos por IDunpublish_article_by_title(title)- Despublica tus propios artículos por títuloupdate_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:
| Modo | Descripción |
|---|---|
| 🟢 SSE/MCP | Para integración con LLM/agentes, usando el Protocolo de Contexto de Modelo (MCP) |
| 🟦 REST/OpenAPI | Para 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
Authorizationcomo token Bearer:Authorization: Bearer YOUR_DEVTO_API_KEY - No es necesario configurar
DEVTO_API_KEYen.envpara el modo REST.
📖 OpenAPI y Swagger UI
- Documentación interactiva: http://localhost:8000/docs
- Esquema OpenAPI: http://localhost:8000/openapi.json
- Totalmente compatible con el function calling de OpenAI, LangChain y otros ejecutores de herramientas OpenAPI.
🧑💻 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
/docspara 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:
-
Sigue la Guía de inicio rápido de Google Cloud Run para configurar tu entorno
-
Configura tu clave de API de Dev.to como secreto:
gcloud secrets create devto-api-key --data-file=- <<< "your_api_key_here" -
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
Variable Descripción Valor predeterminado LOG_LEVELNivel de registro (INFO, DEBUG, etc.) INFODEVTO_API_KEYClave de API de Dev.to NoneDEVTO_API_BASE_URLURL base de la API de Dev.to https://dev.to/apiSERVER_MODEEl modo de servidor en el que implementar sseEstas 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
Variable Descripción Valor predeterminado LOG_LEVELNivel de registro (INFO, DEBUG, etc.) INFOSERVER_MODEModo de servidor en el que implementar restDEVTO_API_BASE_URLURL base de la API de Dev.to https://dev.to/apiEstas 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-unauthenticatedhace 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:
- Usa Autenticación de Cloud Run
- Configura Proxy de Identidad (IAP)
- Configura Controles de Servicio VPC
- Usa Controles de Ingress
-
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.