
Get an SAP SuccessFactors employee's compensation records: pay group, event reason, bonus target, and recurringPayComponents with each component's amount, currency and frequency (e.g. base salary). Use list_users to find the userId.
List SAP SuccessFactors compensation records with their recurring pay components, OData $filter, $orderby and paging (up to 1000 per page; totalcount gives the full count). Use getemployee_compensation for one employee.
Get one SAP SuccessFactors goal by ID: name, owner, category, metric, start and due dates, state, percent complete, target, actual and weight. Pass the entityname (Goal<planId>) the goal was listed under. Use list_goals to find goal IDs.
List SAP SuccessFactors performance goals with OData $filter, $orderby and paging (totalcount gives the full count). Goals live in Goal<planId> entities that differ by tenant (e.g. Goal1, Goal5). If the entity is not found, ask the user for their goal plan ID instead of trying many names.
Create an SAP SuccessFactors performance goal for a user in a goal plan (entity Goal<planId>, e.g. Goal1). Name and owner userId are required; category, metric, start and due dates, target and weight are optional. Use list_goals first to confirm the plan entity and reuse its categories. Needs goal plan permissions (COE0020 means none).
Update an SAP SuccessFactors goal. Only the fields passed change: name, state label, percent complete, actual value, category, metric, dates, weight. Pass the same entityname the goal was listed under. Use listgoals to find goal IDs and the state labels the plan uses.
Permanently delete an SAP SuccessFactors goal. This cannot be undone; prefer updategoal to change its state unless the user asked to delete. Pass the entityname (Goal<planId>) the goal was listed under. Use listgoals to find goal IDs.
Get an SAP SuccessFactors worker's payment information: effective dates, job country, and details with each bank account (owner, account number, bank, routing number, IBAN, BIC, currency, amount or percent split). Optionally limit to one effective date. Use list_users to find the worker ID.
List SAP SuccessFactors payment information records (worker, effective dates, job country) with OData $filter, $orderby and paging (up to 1000 per page; totalcount gives the full count). Bank account details are left out unless includedetails is true; use getpaymentinformation for one worker's bank details.
Get an SAP SuccessFactors employee's payroll runs, newest first and paged (24 per page by default; totalcount gives the full count): pay period, pay date, currency, void flag, and items with each line's wage type and amount (e.g. GROSS, TAXES, NETPAY). Use listusers to find the userId.
List SAP SuccessFactors payroll run results (headers: payroll ID, pay period, pay date, currency) with OData $filter, $orderby and paging (up to 1000 per page; totalcount gives the full count). Use getpayroll_results for one employee's line items and amounts.
Retrieve core personal information for an employee from SAP SuccessFactors by person ID. Returns comprehensive personal data including name, date of birth, gender, marital status, nationality, and preferred language. Essential for HR data management, compliance reporting, and employee profile access.
Retrieve all email addresses for an employee from SAP SuccessFactors Personal Information. Returns a list of email addresses with type (personal, work) and primary indicator. Essential for employee communications, contact information management, and system integration.
Retrieve all phone numbers for an employee from SAP SuccessFactors Personal Information. Returns a list of phone numbers with type (cell, home, work), country code, and primary indicator. Essential for employee contact management, emergency communications, and compliance.
Retrieve all addresses for an employee from SAP SuccessFactors Personal Information. Returns a list of addresses with type (home, work, mailing) including street address, city, state, zip code, and country. Essential for employee location data, mailing operations, tax compliance, and payroll processing.
Retrieve all emergency contacts for an employee from SAP SuccessFactors Personal Information. Returns a list of emergency contacts with name, relationship, phone, email, address, and primary indicator. Critical for workplace safety, emergency response procedures, and employee welfare compliance.
List SAP SuccessFactors person records (personIdExternal, date of birth, names) with OData $filter, $orderby and paging (up to 1000 per page; totalcount gives the full count). Names cannot be filtered here; use listusers to search by name.
Get one SAP SuccessFactors position by code: name, job title, department, company, location, pay grade, vacant flag, criticality. Returns the latest record, or the dated one when effectivestartdate (YYYY-MM-DD) is given. Use list_positions to find codes.
List SAP SuccessFactors positions with OData $filter, $orderby and paging (up to 1000 per page; total_count gives the full count). Filter on codes, e.g. company eq '1710'. Use vacant eq true to find open positions; incumbent is often empty even when a position is filled.
List SAP SuccessFactors companies (legal entities) with code, name, status ('A' active, 'I' inactive) and dates. Paged up to 1000 per page; total_count gives the full count. No server-side filter, so page through and filter the results.
Get one SAP SuccessFactors company (legal entity) by external code, active or inactive. Returns the latest record, or the dated one when effectivestartdate (YYYY-MM-DD, the record's start date) is given. Use list_companies to find codes.
List SAP SuccessFactors departments with code, name, status ('A' active, 'I' inactive), dates and head. Paged up to 1000 per page; total_count gives the full count. No server-side filter, so page through and filter the results; names can repeat across codes.
Get one SAP SuccessFactors department by external code, active or inactive: name, status, dates, head (userId). Returns the latest record, or the dated one when effectivestartdate (YYYY-MM-DD) is given. Use list_departments to find codes.
Get one SAP SuccessFactors job requisition by ID: status, openings, department, location, salary range. Expand 'hiringManager,recruiter' for their IDs and names, or 'jobReqLocale' for the job title. Use listjobrequisitions to find IDs.
List SAP SuccessFactors Recruiting job requisitions with OData $filter, $orderby and paging (up to 1000 per page; total_count gives the full count). Status is internalStatus, e.g. 'Approved', 'Pre-approved', 'Closed'. Expand 'hiringManager', 'recruiter' or 'jobReqLocale' for names and titles.
Get one SAP SuccessFactors time off record by external code: employee, time type, dates, quantities, approval status, comment. Expand 'timeTypeNav,userIdNav' for the time type and employee names. Use listemployeetimes to find codes.
List SAP SuccessFactors time off and absence records with OData $filter, $orderby and paging (up to 1000 per page; totalcount gives the full count). userid and filter combine. Expand 'timeTypeNav' for time type names. Use this to find an employee's valid time type codes.
Create a time off record in SAP SuccessFactors. Time type codes are tenant-specific: call listemployeetimes for this employee first and reuse a code they already have. Depending on tenant setup the record is either pending approval or approved at once; the response shows which.
Change the comment on an existing SAP SuccessFactors time off record. Only the comment can be changed here: dates, time type and quantities are fixed after creation, and approval goes through approveemployeetime or rejectemployeetime.
Delete an employee time/absence record from SAP SuccessFactors. This tool permanently removes a time record and should be used with caution. Typically used for canceling erroneous records or cleaning up test data. Consider updating approval status instead of deletion for audit trail purposes.
Approve a pending SAP SuccessFactors time off request through SAP's approval workflow, with an optional approver comment. The employee's own comment is not changed. Fails without changing anything if the record is not PENDING. Find pending requests with listemployeetimes filter approvalStatus eq 'PENDING'.
Reject a pending SAP SuccessFactors time off request through SAP's approval workflow, with a required reason recorded on the workflow. The employee's own comment is not changed. Fails without changing anything if the record is not PENDING. Find pending requests with listemployeetimes filter approvalStatus eq 'PENDING'.
Get an employee's SAP SuccessFactors time account balance for one account type. Account types differ from time types: use the TAT form (e.g. 'TATVAC_REC'), not 'VACATION'. An empty result can mean the account type code is wrong rather than no balance.
List an employee's SAP SuccessFactors time account balances for one account type, paged. Account types use the TAT form (e.g. 'TATVACREC'), not 'VACATION' or the TT time type. An empty result can mean the account type code is wrong rather than no balance.
Get one SAP SuccessFactors employee by userId (not login username): name, email, status ('t' active, 'f' inactive), department, division, location, title, hire date. Pass expand='manager' to get the manager's userId and name. Use list_users to find the userId from a name.
List employees from SAP SuccessFactors with OData $filter, $select, $orderby and paging (up to 1000 per page; total_count gives the full count). Returns only active users unless the filter names status. Use substringof, not contains; title is not filterable. Use this to find a userId from a name before calling other tools.
Create an SAP SuccessFactors user. Only userId (unique, permanent) and status are required; name, email, hire date, department, division, location, title, job code, time zone and custom fields are optional. Check the userId is free with getuser first. There is no delete tool; deactivate with updateuser status 'inactive'.
Update an SAP SuccessFactors user. Only the fields passed change (partial update): username, names, email, status, hire date, department, division, location, title, job code, time zone or custom fields. SAP edits only active users, so field changes are applied before deactivating or after reactivating. Use list_users to find the userId.
Validate SAP SuccessFactors credentials. Verifies credentials during setup.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now