Skip to main content
Glama

Taokeh MCP server

File a pending employee-change draft (human approves in Taokeh)

update_employee_draft

FILES A PENDING DRAFT ONLY — NOTHING CHANGES UNTIL A HUMAN REVIEWS AND APPROVES IT IN TAOKEH. Propose corrections to an employee ALREADY in Taokeh's payroll — a wrong IC or passport number, a missing EPF/SOCSO/income-tax number, a salary keyed a digit out, a stale designation, the statutory applicability flags. This does NOT change anything: it files a pending DRAFT an admin (or a Bookkeeper + payroll login) reviews as a DIFF (current → proposed, changed fields only) and approves with one tap; only that tap writes. Pass the employee's REAL employeeId — from payroll_summary with staff: true (the whole roster, works even before the first payroll run) or perEmployee: true — and proposed, an object holding ONLY the fields you want changed. A name is refused: two people can share one, and editing the wrong person's salary silently is much worse than asking. ⚠ FORWARD ONLY, and you must tell the user this: an approved change applies to FUTURE payroll runs. It never re-opens, recomputes or restates a payslip or payroll run that has already been filed — including the year-to-date PCB, which is summed from payslips already submitted. If a filed month is wrong, that is a human decision taken in Payroll → Payroll Runs, not something this tool can do. Settable fields, mirroring the employee form exactly: staffNo, name, icNo, passportNo, countryCode, dateOfBirth, designation, joinDate, resignDate, status ('ACTIVE' or 'RESIGNED'), email, isMalaysian, isPermanentResident, basicSalary, epfEmployeeRate, bankName, bankAccountNo, epfNo, socsoNo, incomeTaxNo, epfApplicable, socsoApplicable, eisApplicable, pcbApplicable, skbbkEnrolled, maritalStatus ('SINGLE', 'MARRIED' or 'SINGLE_PARENT'), spouseWorking, numChildren, taxResident, residencyChangeMonth ('YYYY-MM'), zakatMonthly, employmentStatus (CP8D code '1'–'6'), contractEndDate, holidayState, notes. NOT settable here, each refused by name with the screen that owns it: the TP3 prior-employer figures (a signed declaration, and requesting one EMAILS the employee), the TP2 benefits-in-kind values (owned by the approved election), the flat-15% tax regime (approval-conditional — an AI cannot verify it, and halving somebody's tax is not a diff-door change), and 'pay before Taokeh this year' (the company's own opening year-to-date from its old payroll system — entered on the employee's page, because it seeds PCB and prints on the EA). bankName and bankAccountNo ARE settable because they print on the payslip and on the giro list the owner uploads at their own bank — TAOKEH NEVER PAYS ANYONE; the owner authorises every payment at their own bank, and nothing on this connector can move money. A field the record already agrees with is dropped, and a proposal that changes nothing is refused rather than filed as an empty diff. One employee per call — loop for a sweep, because each reviewable diff is the point. BE HONEST: never guess an IC, a bank account or a salary; leave the field out and say so in notes with needsReview. ADMIN AND BOOKKEEPER + PAYROLL ONLY: payroll sits behind its own role and this tool refuses on any other connection (a plain Bookkeeper included).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
notesNoA SHORT reviewer note, in the reviewer's language: what you changed, why, and what they should double-check.
proposedYesONLY the fields you want changed. A field the record already agrees with is dropped; an unknown or deliberately-excluded field is refused by name.
employeeIdYesREQUIRED — the employee's real id, from payroll_summary (`staff: true` for the roster, or `perEmployee: true` for a run). A name is refused.
needsReviewNoSet true when something gave you pause — an IC read off a blurry photo, a salary the user was unsure about.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / proposed / properties / isPermanentResident / description
      Previous value: -"Malaysian permanent resident — only meaningful when isMalaysian is false. A non-citizen who is NOT a PR pays EPF at 2% each side from October 2025 wages and has no EIS; a PR pays the Malaysian rates. Set it only on the employer's word."New value: +"Malaysian permanent resident — only meaningful when isMalaysian is false. A non-citizen who is NOT a PR pays EPF at 2% each side from October 2025 wages and has no EIS; a PR pays the Malaysian rates (EPF Part C from age 60). Set it only on the employer's word."
  2. Changed1 schema field changed
    • changedInput schema / properties / proposed / properties / taxResident / description
      Previous value: -"Tax residency (the 183-day rule) is SEPARATE from citizenship. A non-resident is taxed at a flat 30%."New value: +"Tax residency (182 days or more in Malaysia in the year) is SEPARATE from citizenship. A non-resident is taxed at a flat 30%."
  3. Changed1 schema field changed
    • addedInput schema / properties / proposed / properties / isPermanentResident
      Added value: +{
      +  "description": "Malaysian permanent resident — only meaningful when isMalaysian is false. A non-citizen who is NOT a PR pays EPF at 2% each side from October 2025 wages and has no EIS; a PR pays the Malaysian rates. Set it only on the employer's word.",
      +  "type": "boolean"
      +}
  4. Added

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare write/non-destructive/non-idempotent; the description adds the whole behavioural envelope on top: human approval gate, forward-only application that never restates a filed payslip or run, seat consumption on ACTIVE, role gating (Admin or Bookkeeper + payroll), silent no-op-drop and empty-diff refusal, and the reassurance that no money can be moved. This is far beyond what the structured fields convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the single most important constraint in the first sentence, and organised into distinct blocks (what changes, field allow/deny lists, honesty guidance, role gating) so no concern is buried. It is long and the 'nothing changes until approved' point is restated three times, but the length is defensible for a 30+ field, irreversible-looking mutation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-object mutation with no output schema, the description covers approval flow, forward-only semantics, field allow/deny lists, role requirements, honesty safeguards and the refusal model. An agent has everything needed to decide whether to call it and how to populate `proposed` and `notes`.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds real meaning the schema lacks: the enumerated class of settable fields mirroring the employee form, and the explicitly non-settable fields each refused by name with the owning screen. It also clarifies that employeeId must be a real id rather than a name and that `proposed` carries only changed fields, which the schema repeats but reinforces.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('files a pending DRAFT', corrections to an employee already in Taokeh) and immediately distinguishes the operation from an actual edit by clarifying that nothing is written until a human approves. It is clearly separable from the sibling update_*_draft tools and from payroll_summary, which it names as the id source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (correcting a wrong IC, missing statutory numbers, a mis-keyed salary), when-not (filed months already submitted, handled by a human in Payroll → Payroll Runs), the alternatives for the refused fields (TP3, TP2, flat-15% regime, opening YTD), and the one-employee-per-call/loop rule. Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources