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, 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), and the flat-15% tax regime (approval-conditional — an AI cannot verify it, and halving somebody's tax is not a diff-door change). 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. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations are minimal (only readOnlyHint=false, etc.), so the description carries the full burden. It discloses the non-destructive nature ('does NOT change anything'), the forward-only behavior ('applies to FUTURE payroll runs. It never re-opens, recomputes or restates a payslip or payroll run'), the auto-drop of agreeing fields, refusal of empty diffs, refusal of a name as identifier, and the 'Taokeh never pays anyone' constraint. It also explains the approval flow as a diff review. This is rich behavioral context well beyond the annotations.

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?

The description is long, but it is front-loaded with the most critical fact ('FILES A PENDING DRAFT ONLY') and structured with clear sections: the draft behavior, the identifier requirement, the forward-only warning, the settable fields list, the non-settable exclusions, and the role gate. Every sentence earns its place given the high stakes (money and statutory data). It is verbose but well-organised; a slightly tighter version could exist, but the detail is justified.

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 tool with 4 parameters (including a nested object with ~30 fields), no output schema, and high stakes, the description covers everything an agent needs: the identifier source, the allowed fields, the disallowed fields with reasons, the approval workflow, the forward-only consequence, the money-safety guarantee, the role restrictions, and the empty-diff handling. It also explains how to loop for a sweep. Nothing essential is missing.

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?

The input schema already has 100% description coverage, including detailed per-field explanations (e.g., dateOfBirth drives EPF/SOCSO age bands). The description adds usage-level semantics not in the schema: how to obtain employeeId ('from payroll_summary with staff: true or perEmployee: true'), the rule that only changed fields go in 'proposed' ('A field the record already agrees with is dropped'), and the convention for 'needsReview' and 'notes'. These are valuable beyond the schema, but the schema does most of the heavy lifting, so a 4 is appropriate.

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?

The description opens with a clear, specific statement: 'FILES A PENDING DRAFT ONLY — NOTHING CHANGES UNTIL A HUMAN REVIEWS AND APPROVES IT IN TAOKEH.' It names the exact resource (employee in payroll) and the action (propose corrections as a draft). It explicitly distinguishes from siblings by listing what it is not (TP3, TP2, flat-15% tax regime) and by naming the alternative screens. The verb 'file' and the 'pending draft' concept are unambiguous.

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?

The description provides explicit when-to-use: 'Propose corrections to an employee ALREADY in Taokeh's payroll' with examples of valid corrections. It also states when not to use it: 'NOT settable here, each refused by name with the screen that owns it' for TP3, TP2, and flat-15% tax regime. It names the alternative for a wrong filed month: 'a human decision taken in Payroll → Payroll Runs.' It also gives role prerequisites: 'ADMIN AND BOOKKEEPER + PAYROLL ONLY.' No inference needed.

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