Workfeed MCP by usefulapi

Review staffing, availability and leave; create or update shifts with confirmation.

Should I use this

Quality & Safety

A
Description quality
99%
Schema completeness
72%
Naming quality
79%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'workfeed_list_salary_supplements' name length outside 3-30 rangein workfeed_list_salary_supplements

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,812Tokens (tool definitions)
~1.1 KBTypical response size
Significant attention impact (2.20% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

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

Remote endpoints

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

What it can do

Tool inventory

Tools (17)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢workfeed_list_departments

Department names and IDs. GET /departments. Unpaginated vendor response, bounded to5000rows and2MiB here.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_list_roles

Roles and their department IDs. GET /roles. Unpaginated vendor response, bounded to5000rows and2MiB here.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_list_employees

Scheduling/contact fields only; excludes national IDs, banking, tax, emergency contacts, wages, addresses and custom fields. GET /employees. Unpaginated vendor response, bounded to5000rows and2MiB here.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_get_settings

Pay-period and shift-break settings. GET /settings. Unpaginated vendor response, bounded to5000rows and2MiB here.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_list_salary_supplements

Read supplement definitions, not flex-hour supplements. Duration days are inclusive in company timezone. GET /salary-supplements. Unpaginated vendor response, bounded to5000rows and2MiB here.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_get_employee(id)

Read one selected employee. Staff responses exclude payroll identifiers; leave notes are omitted.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_get_shift(id)

Read one selected shift. Staff responses exclude payroll identifiers; leave notes are omitted.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_get_leave(id)

Read one selected leave. Staff responses exclude payroll identifiers; leave notes are omitted.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_get_availability(id)

Read one selected availability. Staff responses exclude payroll identifiers; leave notes are omitted.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_list_shifts(startFrom, startTo, employeeID, released, roleID, ...)

Read shifts whose start>=startFrom and start<startTo (not overlap). Maximum93days per request here. Optional role and department must agree. No vendor pagination parameter is invented.

Input Schema

{
  "type": "object",
  "properties": {
    "startFrom": {
      "type": "string",
      "maxLength": 40
    },
    "startTo": {
      "type": "string",
      "maxLength": 40
    },
    "employeeID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "released": {
      "type": "boolean"
    },
    "roleID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "departmentID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    }
  },
  "required": [
    "startFrom",
    "startTo"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_list_leaves(from, to, employeeIDs, typeIDs, includeDeleted)

Read any leave overlapping from/to, including leave beginning before the range. Max93days here. Free-text leave notes omitted. Repeated employeeIDs/typeIDs filters; includeDeleted defaults true upstream.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 40
    },
    "to": {
      "type": "string",
      "maxLength": 40
    },
    "employeeIDs": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "Opaque Workfeed ID from a preceding read; not a UUID."
      }
    },
    "typeIDs": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "Opaque Workfeed ID from a preceding read; not a UUID."
      }
    },
    "includeDeleted": {
      "type": "boolean"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_list_availabilities(from, to, employeeID, type)

Read contained records: start>=from AND end<to, max93days here. End exactly at to is excluded; allow an extra second beyond the last desired end. This differs from leave overlap.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "maxLength": 40
    },
    "to": {
      "type": "string",
      "maxLength": 40
    },
    "employeeID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "type": {
      "type": "string",
      "enum": [
        "WORK",
        "NO_WORK"
      ]
    }
  },
  "required": [
    "from",
    "to"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_list_department_days(departmentID, from, to)

Read stored daily notes, manual revenue, extra labor and targets; from inclusive/to exclusive company-zone days, max93days here. Array may include null for unstored days. Calculated labor totals use get_department_stats.

Input Schema

{
  "type": "object",
  "properties": {
    "departmentID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "from": {
      "type": "string"
    },
    "to": {
      "type": "string"
    }
  },
  "required": [
    "departmentID",
    "from",
    "to"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_get_department_day(departmentID, date)

Read one stored daily record; a successful null means no data is stored for that day.

Input Schema

{
  "type": "object",
  "properties": {
    "departmentID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "date": {
      "type": "string"
    }
  },
  "required": [
    "departmentID",
    "date"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢workfeed_get_department_stats(departmentID, from, to)

Calculated per-day laborCost/revenue, with from/to inclusive company-zone days, at most31days. Prefer laborCost here: shift grossPay is0 for monthly-paid staff. laborPercentage null when revenue0 is not0%.

Input Schema

{
  "type": "object",
  "properties": {
    "departmentID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "from": {
      "type": "string"
    },
    "to": {
      "type": "string"
    }
  },
  "required": [
    "departmentID",
    "from",
    "to"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴workfeed_create_shift(confirm, roleID, start, end, employeeID, ...)

Create one shift after the user approves its exact staff, role and times. confirm:true is mandatory. released:true publishes it and cannot be undone through this connector. employeeID:null creates an unassigned shift. No automatic retry; inspect before retrying an uncertain outcome.

Input Schema

{
  "type": "object",
  "properties": {
    "confirm": {
      "type": "boolean",
      "const": true
    },
    "roleID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "start": {
      "type": "string",
      "maxLength": 40
    },
    "end": {
      "type": "string",
      "maxLength": 40
    },
    "employeeID": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 128,
          "pattern": "^[A-Za-z0-9_-]+$",
          "description": "Opaque Workfeed ID from a preceding read; not a UUID."
        },
        {
          "type": "null"
        }
      ]
    },
    "released": {
      "type": "boolean"
    },
    "comment": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 5000
        },
        {
          "type": "null"
        }
      ]
    },
    "tagIDs": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "Opaque Workfeed ID from a preceding read; not a UUID."
      }
    }
  },
  "required": [
    "confirm",
    "roleID",
    "start",
    "end",
    "employeeID",
    "released",
    "comment"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴workfeed_update_shift(id, confirm, expectedUpdateTime, roleID, start, ...)

Update one shift after user review; confirm:true required. Pre-reads current shift, optionally rejects stale expectedUpdateTime, and never changes either original UTC calendar day. Vendor additionally enforces company-date rules. Published shifts cannot be unpublished. No deletes or automatic write retries; inspect uncertain outcomes.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "confirm": {
      "type": "boolean",
      "const": true
    },
    "expectedUpdateTime": {
      "type": "string",
      "maxLength": 40
    },
    "roleID": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Opaque Workfeed ID from a preceding read; not a UUID."
    },
    "start": {
      "type": "string",
      "maxLength": 40
    },
    "end": {
      "type": "string",
      "maxLength": 40
    },
    "employeeID": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 128,
          "pattern": "^[A-Za-z0-9_-]+$",
          "description": "Opaque Workfeed ID from a preceding read; not a UUID."
        },
        {
          "type": "null"
        }
      ]
    },
    "released": {
      "type": "boolean"
    },
    "comment": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 5000
        },
        {
          "type": "null"
        }
      ]
    },
    "tagIDs": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "Opaque Workfeed ID from a preceding read; not a UUID."
      }
    }
  },
  "required": [
    "id",
    "confirm"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded17 tools