Workyard MCP by usefulapi

Read Workyard employees, projects, time cards and geofences; approve time cards and add notes.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
96%
Integridad del esquema
85%
Calidad de los nombres
77%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (3)

  • LOWTool 'workyard_list_time_card_activity_segments' description lacks action verben workyard_list_time_card_activity_segments
  • LOWTool 'workyard_list_time_card_activity_segments' name length outside 3-30 rangeen workyard_list_time_card_activity_segments
  • LOWTool 'workyard_list_geofence_projects' name length outside 3-30 rangeen workyard_list_geofence_projects

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~2,579Tokens (definiciones de herramientas)
~1.5 KBTamaño de respuesta típico
Impacto significativo en la atención (2.01% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "workyard": {
      "url": "https://workyard.usefulapi.io/mcp"
    }
  }
}

Puntos de conexión remotos

https://workyard.usefulapi.io/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (12)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢workyard_get_organization

The organization this connection uses (id, name, settings such as timezone) from GET /orgs/{org_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_list_employees(status, search, email, role_name, employee_id, ...)

List employees of the organization (employee_id, profile_id, name, title, role, status, contact data). Filter by status (active, removed, saas_disabled, expired; comma list), email, role name or free-text search. Paged: use next_page.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Employee status filter: active, removed, saas_disabled, expired (comma list; sent as eq:...).",
      "type": "string",
      "maxLength": 200,
      "pattern": "^(?:[a-z_]+:)?[A-Za-z_]+(,[A-Za-z_]+)*$"
    },
    "search": {
      "description": "Free-text search over name, email and identifier.",
      "type": "string",
      "maxLength": 200
    },
    "email": {
      "description": "Exact email filter (comma list allowed; sent as eq:...).",
      "type": "string",
      "maxLength": 500
    },
    "role_name": {
      "description": "Role filter: worker, manager, admin (comma list; sent as eq:...).",
      "type": "string",
      "maxLength": 100
    },
    "employee_id": {
      "description": "One or more employee ids, comma separated.",
      "type": "string",
      "maxLength": 300,
      "pattern": "^(?:[a-z_]+:)?[0-9]+(,[0-9]+)*$"
    },
    "page": {
      "description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-200 (Workyard default 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_list_projects(name, is_archived, include_computed_totals, page, limit)

List projects (id, name, identifier, customer, locations). Optionally filter by name or archived state. Paged: use next_page.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Project name: a plain name matches names starting with it (like:name%); eq:... and like:... forms are passed through.",
      "type": "string",
      "maxLength": 200
    },
    "is_archived": {
      "description": "true = archived projects only, false = active only (default: Workyard's default).",
      "type": "boolean"
    },
    "include_computed_totals": {
      "description": "Include computed totals per project.",
      "type": "boolean"
    },
    "page": {
      "description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-200 (Workyard default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_get_project(project_id)

One project by id (workyard_list_projects gives the ids).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The project id (org_project_id)."
    }
  },
  "required": [
    "project_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_list_time_cards(status, employee_id, time_approver_id, start_from_unix, start_before_unix, ...)

List time cards (id, employee_id, start_dt_unix, end_dt_unix, status, approver, totals). Workyard returns only status=working when no status is given, so pass status (for example submitted,approved) for finished work. Filter by employee and by start time (unix seconds, interpreted in the organization timezone). Paged: use next_page; the reply also carries time_summary.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Status filter such as working, submitted, approved or submitted,approved (sent as eq:...). Omitted = working only.",
      "type": "string",
      "maxLength": 200,
      "pattern": "^(?:[a-z_]+:)?[A-Za-z_]+(,[A-Za-z_]+)*$"
    },
    "employee_id": {
      "description": "One or more employee ids, comma separated.",
      "type": "string",
      "maxLength": 300,
      "pattern": "^(?:[a-z_]+:)?[0-9]+(,[0-9]+)*$"
    },
    "time_approver_id": {
      "description": "Filter by approver employee id(s).",
      "type": "string",
      "maxLength": 300,
      "pattern": "^(?:[a-z_]+:)?[0-9]+(,[0-9]+)*$"
    },
    "start_from_unix": {
      "description": "Time card started at or after this unix time (seconds).",
      "type": "integer",
      "minimum": 0,
      "maximum": 4102444800
    },
    "start_before_unix": {
      "description": "Time card started before this unix time (seconds).",
      "type": "integer",
      "minimum": 0,
      "maximum": 4102444800
    },
    "include_last_location": {
      "description": "Include the employee's last known location (personal data).",
      "type": "boolean"
    },
    "sort_by": {
      "description": "Sort in Workyard syntax: asc: or desc: plus start_dt or updated_at, joined with +, e.g. desc:start_dt.",
      "type": "string",
      "maxLength": 80,
      "pattern": "^(?:asc|desc):[a-z_]+(?:\\+(?:asc|desc):[a-z_]+)*$"
    },
    "page": {
      "description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-200 (Workyard default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_get_time_card(time_card_id)

One time card by id, with its details (workyard_list_time_cards gives the ids).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "time_card_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The time card id."
    }
  },
  "required": [
    "time_card_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_list_time_card_activity_segments(time_card_id, include_archived_projects)

The activity segments of one time card (where and on which project the employee worked, segment by segment). Not paged.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "time_card_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The time card id."
    },
    "include_archived_projects": {
      "description": "Include segments of archived projects.",
      "type": "boolean"
    }
  },
  "required": [
    "time_card_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_list_geofences(name, enabled, project_id, page, limit)

List geofences / work sites (id, name, place, enabled, radius). Filter by name, enabled state or project. Paged: use next_page.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Geofence name: a plain name matches names starting with it; eq:... and like:... forms are passed through.",
      "type": "string",
      "maxLength": 200
    },
    "enabled": {
      "description": "Only enabled (true) or disabled (false) geofences.",
      "type": "boolean"
    },
    "project_id": {
      "description": "Only geofences of this project id (comma list allowed).",
      "type": "string",
      "maxLength": 300,
      "pattern": "^(?:[a-z_]+:)?[0-9]+(,[0-9]+)*$"
    },
    "page": {
      "description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-1000 (Workyard default 1000).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_list_active_geofences

All active geofences with limited data (Workyard: GET active_geofences). It does not say who is clocked in; use workyard_list_time_cards with status working for that.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workyard_list_geofence_projects(geofence_id, is_archived, page, limit)

The projects attached to one geofence (work site). Paged: use next_page.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "geofence_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The geofence id (workyard_list_geofences gives the ids)."
    },
    "is_archived": {
      "description": "true = archived projects only.",
      "type": "boolean"
    },
    "page": {
      "description": "Page number, 1-based (default 1). Use next_page from the previous reply.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-200 (Workyard default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "required": [
    "geofence_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴workyard_approve_time_card(time_card_id)

WRITE: approve ONE time card (PATCH .../time_cards/{id}/approve). Approval feeds payroll in Workyard and may not be undoable through the API: only call it when the user asked to approve this exact time card.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "time_card_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The time card id to approve."
    }
  },
  "required": [
    "time_card_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴workyard_add_time_card_note(time_card_id, description)

WRITE: add a text note to one time card (POST .../time_cards/{id}/notes). Adds a new note on every call; it does not edit or delete existing notes.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "time_card_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The time card id."
    },
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000,
      "description": "The note text."
    }
  },
  "required": [
    "time_card_id",
    "description"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada12 herramientas