Skip to main content
Glama

upwork-mcp

Un servidor MCP para la automatización de Upwork. Busca empleos, redacta y envía propuestas, gestiona mensajes y contratos, todo desde Claude Desktop o cualquier cliente compatible con MCP.

Características

  • Búsqueda de empleos — búsqueda por palabras clave con filtros (presupuesto, tarifa horaria, nivel de experiencia, calificación del cliente, antigüedad), puntuación automática y detección de señales de alerta.

  • Flujo de trabajo de propuestas — redacta a partir de plantillas, previsualiza y envía con confirmación explícita; límite diario aplicado.

  • Evaluación de clientes — comprobador de 7 condiciones de alerta (verificación de pago, calificación, historial de contrataciones, antigüedad de la cuenta, número de republicaciones, volumen de propuestas, tarifa horaria mínima).

  • Mensajes — lista de conversaciones no leídas, lectura de hilos, redacción y envío de respuestas.

  • Contratos — lista de contratos activos/pasados, visualización de detalles y entradas del diario de trabajo.

  • Seguridad de sesión — perfil de Chromium persistente, detección de Cloudflare, caducidad por inactividad de 7 días, restricción de dominio a upwork.com.

  • Registro de auditoría — cada llamada a herramienta se añade a ~/.upwork-mcp/audit.log (solo metadatos, sin contenido).

Requisitos

  • Python 3.11+

  • uv (recomendado) o pip

  • Una cuenta de Upwork válida

Instalación

Usando uv (recomendado)

git clone https://github.com/kubegrind/upwork-mcp
cd upwork-mcp
uv sync
uv run playwright install chromium

Usando pip

git clone https://github.com/kubegrind/upwork-mcp
cd upwork-mcp
pip install -e .
playwright install chromium

Configuración

Claude Desktop

Añade a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "upwork": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/upwork-mcp",
        "run",
        "upwork-mcp"
      ]
    }
  }
}

Claude Code

claude mcp add upwork -- uv --directory /absolute/path/to/upwork-mcp run upwork-mcp

Variables de entorno

Variable

Predeterminado

Descripción

UPWORK_MCP_HOME

~/.upwork-mcp

Directorio de datos para perfil, registros y plantillas

UPWORK_MCP_MIN_HOURLY_RATE

25

Tarifa horaria mínima aceptable para la detección de señales de alerta

Autenticación

El servidor utiliza un perfil de navegador Chromium persistente. En la primera ejecución, autentícate manualmente:

uv run upwork-mcp --no-headless

Se abrirá una ventana del navegador. Inicia sesión en Upwork normalmente. La sesión se guarda en ~/.upwork-mcp/profile/ y se reutiliza en ejecuciones posteriores. Las sesiones caducan tras 7 días de inactividad.

Herramientas

Empleos

Herramienta

Descripción

upwork_search_jobs

Busca por palabra clave con filtros; devuelve resultados puntuados y clasificados

upwork_get_job_details

Detalles completos del empleo, incluyendo historial del cliente y tasa de entrevistas

upwork_score_job

Puntúa un empleo específico del 1 al 10

upwork_flag_client

Comprueba un cliente frente a 7 condiciones de alerta

upwork_run_saved_search

Ejecuta una búsqueda guardada desde ~/.upwork-mcp/searches/<name>.json

Propuestas

Herramienta

Descripción

upwork_get_proposals

Lista de propuestas enviadas con estado

upwork_get_proposal_details

Detalles de una propuesta específica

upwork_draft_proposal

Redacta una propuesta a partir de una plantilla

upwork_preview_proposal

Previsualiza un borrador antes de enviarlo

upwork_submit_proposal

ESCRITURA — envía una propuesta (requiere confirmed: true)

upwork_withdraw_proposal

ESCRITURA — retira una propuesta enviada (requiere confirmed: true)

Mensajes

Herramienta

Descripción

upwork_get_messages

Lista de conversaciones no leídas

upwork_get_conversation

Lee los últimos 10 mensajes en un hilo

upwork_draft_message

Redacta una respuesta para revisión

upwork_send_message

ESCRITURA — envía un mensaje (requiere confirmed: true)

Contratos

Herramienta

Descripción

upwork_get_contracts

Lista de contratos activos y pasados

upwork_get_contract_details

Detalles del contrato e hitos

upwork_get_work_diary

Horas y entradas de notas para un contrato

Perfil

Herramienta

Descripción

upwork_get_my_profile

Nombre y título de tu perfil

upwork_get_connects_balance

Saldo actual de connects con advertencia de saldo bajo

upwork_get_profile_stats

JSS, estado Top Rated y ganancias totales

Sesión y Auditoría

Herramienta

Descripción

upwork_check_session

Verifica que la sesión esté autenticada

upwork_close_session

ESCRITURA — cierra la sesión del navegador

upwork_rotate_session

ESCRITURA — reinicia el contexto del navegador

upwork_view_audit_log

Visualiza las últimas N entradas del registro de auditoría

Plantillas de propuestas

Las plantillas se encuentran en ~/.upwork-mcp/templates/. La plantilla predeterminada se carga desde default.txt si existe. Pasa un nombre de archivo a través de template_name para usar una plantilla personalizada.

Variables admitidas:

{job_title}         {client_name}       {key_skill}
{estimated_timeline} {rate}             {years_experience}
{industries}        {custom_paragraph}  {start_date}
{your_name}

Ejemplo de plantilla (~/.upwork-mcp/templates/default.txt):

Hi {client_name},

I noticed you're looking for {key_skill} help on {job_title}.
I have {years_experience} years of relevant experience and can deliver {estimated_timeline}.

My rate is {rate}.

{your_name}

Búsquedas guardadas

Crea archivos JSON en ~/.upwork-mcp/searches/ para guardar configuraciones de búsqueda:

{
  "query": "devops kubernetes",
  "experience_level": "expert",
  "budget_min": 500,
  "client_rating_min": 4.5
}

Ejecuta con upwork_run_saved_search(search_name="devops").

Puntuación de empleos

Los empleos se puntúan del 1 al 10 usando un modelo ponderado:

Factor

Peso

Coincidencia de presupuesto

30%

Coincidencia de habilidades

25%

Calidad del cliente

20%

Competencia de propuestas

15%

Antigüedad

10%

Los empleos con una puntuación inferior a 4.0 se filtran de los resultados. Los empleos con una puntuación de 7.0 o superior se marcan como [HIGH PRIORITY].

Seguridad

  • Herramientas de ESCRITURA (submit_proposal, withdraw_proposal, send_message, close_session, rotate_session) requieren confirmed: true — el modelo no puede actuar sin la confirmación explícita del usuario.

  • Límite diario de propuestas — bloqueo estricto a 10 envíos por día.

  • Restricción de dominio — la navegación del navegador está restringida a upwork.com.

  • Sin exposición de credenciales — las cookies y los tokens nunca se devuelven, registran ni imprimen.

  • Protección contra recorrido de rutas — los nombres de archivo de plantillas y búsquedas guardadas se validan con Path.is_relative_to().

  • Registro de auditoría — todas las llamadas a herramientas se registran con marca de tiempo, tipo de acción, destino y estado.

Desarrollo

uv sync --extra dev
uv run pytest
uv run ruff check src
uv run mypy src

Licencia

MIT

Related MCP Connectors