HR & People Ops
Workday, BambooHR, Rippling, Gusto, Greenhouse, Lever, and Deel toolsets.
#HR & people ops
HRIS, payroll, and applicant-tracking connectors. Every connector follows the standard @toolset / @toolify shape and the agent-ready toolset pattern (compact summaries by default, opt-in raw IDs, tolerant write inputs).
#Agent-ready behavior (overview)
All list tools across this category return compact summaries with response-local display refs (worker_ref, employee_ref, candidate_ref, job_ref, opportunity_ref, contract_ref, user_ref). Raw provider IDs (Workday WIDs, BambooHR numeric IDs, Rippling employee UUIDs, Gusto employee UUIDs, Greenhouse numeric job/candidate IDs, Lever opportunity IDs, Deel person IDs) are hidden by default and exposed via include_ids=True when a follow-up tool needs them. Default page size is 25 unless otherwise noted.
Write tools that take an identifier (get_worker, get_employee, update_employee, advance_application, reject_application, update_opportunity_stage, archive_opportunity, create_time_off_request, etc.) accept a raw ID string or the dict from the corresponding list tool.
Destructive tools across this group (require user confirmation): reject_application (Greenhouse), archive_opportunity (Lever).
#WorkdayToolSet
from maivn_tools import WorkdayToolSet
connector = WorkdayToolSet(
tenant_url="https://wd2-impl-services1.workday.com/ccx",
tenant="acme",
access_token=token,
)OAuth exchange against Workday Identity is left to the caller. Tools: list_workers, get_worker, list_organizations, list_job_changes, list_time_off_balances, submit_time_off, list_positions, list_job_postings, list_candidates.
Agent-ready behavior
list_workers: summary withworker_ref, name, primary email, job title, manager name, hire date, status. Raw WID hidden; opt in withinclude_ids=True(needed byget_worker,list_time_off_balances,submit_time_off).list_job_postings: summary withjob_ref, title, location, department, posted date. Opt in for the raw posting ID.list_candidates: summary withcandidate_ref, name, email, stage, posting title. Opt in for the raw candidate ID.
workers = connector.list_workers(include_ids=True)
balance = connector.list_time_off_balances(workers["workers"][0]["worker_id"])#BambooHRToolSet
from maivn_tools import BambooHRToolSet
connector = BambooHRToolSet(
subdomain="acme",
api_key=secrets["BAMBOOHR_KEY"],
)Tools: list_employees, get_employee, create_employee, update_employee, get_who_is_out, list_time_off_requests, create_time_off_request, get_custom_report, list_meta_fields, list_meta_time_off_types.
Agent-ready behavior
list_employees: summary withemployee_ref, name, work email, job title, department, status, location. Raw numeric employee IDs hidden; opt in withinclude_ids=True(needed byget_employee,update_employee,create_time_off_request).- Tolerant inputs:
get_employeeandupdate_employeeaccept a numeric employee ID or the employee dict fromlist_employees(include_ids=True).
#RipplingToolSet
from maivn_tools import RipplingToolSet
connector = RipplingToolSet(access_token=secrets["RIPPLING_TOKEN"])Tools: get_current_company, list_employees, get_employee, list_departments, list_work_locations, list_groups, list_leave_requests, list_compensations, list_teams.
Agent-ready behavior
list_employees: summary withemployee_ref, name, work email, job title, manager name, hire date, status. Rippling employee UUIDs hidden; opt in withinclude_ids=True(needed byget_employee).
#GustoToolSet
from maivn_tools import GustoToolSet
connector = GustoToolSet(access_token=secrets["GUSTO_TOKEN"])For Gusto Demo, override base_url="https://api.gusto-demo.com". Tools: list_companies, get_company, list_employees, get_employee, create_employee, list_payrolls, get_payroll, list_pay_schedules, list_time_off_requests, list_jobs.
Agent-ready behavior
list_employees: summary withemployee_ref, name, work email, job title, department, terminated state. Raw Gusto employee UUIDs hidden; opt in withinclude_ids=True(needed byget_employee,list_jobs).percontrols per-page size and pagination is forwarded as standard Gusto headers.
#GreenhouseToolSet
from maivn_tools import GreenhouseToolSet
connector = GreenhouseToolSet(
api_key=secrets["GREENHOUSE_KEY"],
on_behalf_of="123", # required for writes
)Tools: list_jobs, get_job, list_candidates, get_candidate, create_candidate, list_applications, advance_application, reject_application (destructive), list_scorecards, list_offers.
Agent-ready behavior
list_jobs: summary withjob_ref, name, status, office, opened date. Raw numeric job IDs hidden; opt in withinclude_ids=True(needed byget_job).list_candidates: summary withcandidate_ref, name, primary email, last activity, source. Opt in forcandidate_id.- Destructive:
reject_application. Confirm with the user before invoking (rejection emails the candidate and closes the application).
#LeverToolSet
from maivn_tools import LeverToolSet
connector = LeverToolSet(api_key=secrets["LEVER_KEY"])Pass sandbox=True to target the Lever sandbox. Tools: list_opportunities, get_opportunity, create_opportunity, update_opportunity_stage, list_postings, get_posting, list_stages, list_users, list_feedback, archive_opportunity (destructive).
Agent-ready behavior
list_opportunities: summary withcandidate_ref, name, headline, stage, owner, last interaction. Raw opportunity IDs hidden; opt in withinclude_ids=True(needed byget_opportunity,update_opportunity_stage,archive_opportunity).list_postings: summary withjob_ref, text, state, team, location. Opt in forposting_id.list_users: summary withuser_ref, name, email, access role. Opt in foruser_id.- Destructive:
archive_opportunity. Confirm with the user before invoking.
#DeelToolSet
from maivn_tools import DeelToolSet
connector = DeelToolSet(api_token=secrets["DEEL_TOKEN"])Tools: list_people, get_person, list_contracts, get_contract, create_invoice_adjustment, list_invoice_adjustments, list_time_off, review_time_off, list_payroll_events, list_legal_entities.
Agent-ready behavior
list_people: summary withemployee_ref, name, work email, hiring status, employment type, country. Raw Deel person IDs hidden; opt in withinclude_ids=True(needed byget_person).list_contracts: summary withcontract_ref, title, status, type, worker name, start date. Opt in forcontract_id(needed byget_contract,create_invoice_adjustment).