Skip to content

Connect SAP SuccessFactors to Claude: Sync Time Off & Org Structures

Nidhi KN Nidhi KN 10 min read AI & Agents
Elaichi from the team behind Truto

SAP SuccessFactors in Claude, in about a minute.

The best way to connect SAP SuccessFactors to Claude is Elaichi: connect SAP SuccessFactors to Elaichi once, then add Elaichi to Claude as a connector. Two steps, about a minute, with a 14‑day free trial and no credit card required.

  • No credit card required
  • 500+ connectors
  • Credentials vaulted, never read back
  1. Start your free trial

    14 days free, no credit card required.

  2. Connect SAP SuccessFactors

    Once, in Elaichi. Claude never gets more access than you have.

  3. Add Elaichi to Claude

    In Claude, open Customize, then Connectors, press Add and paste the URL. Sign in and approve.

    https://api.elaichi.ai/mcp
TrutoFor product teams

Building SAP SuccessFactors into your own product? This guide is for you.

Connect SAP SuccessFactors to Claude using Truto's managed MCP server. This guide covers overcoming OData v2 quirks, effective-dated entities, and generating secure tools for AI agents.

The developer guide

Learn how to connect SAP SuccessFactors to Claude using a managed MCP server. Execute OData queries, manage time off, and audit org structures with AI agents.

If your team needs to connect SAP SuccessFactors to Claude to automate HR operations, audit organizational structures, or streamline time-off requests, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's tool calls and the SAP SuccessFactors OData APIs. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL. If your team uses ChatGPT, check out our guide on /connect-sap-successfactors-to-chatgpt-manage-personnel-payroll/ or explore our broader architectural overview on /connect-sap-successfactors-to-ai-agents-automate-talent-odata-ops/.

Giving a Large Language Model (LLM) read and write access to a sprawling enterprise Human Capital Management (HCM) system like SAP SuccessFactors is a serious engineering challenge. You have to handle complex OData v2 authentication lifecycles, map massive entity schemas to MCP tool definitions, and deal with SuccessFactors' specific data formatting quirks. Every time your organization updates a custom field (cust_*) or modifies an approval workflow, you have to update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for SAP SuccessFactors, connect it natively to Claude Desktop, and execute complex HR workflows using natural language.

The Engineering Reality of the SAP SuccessFactors API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against enterprise B2B APIs is painful. SAP SuccessFactors is built on an older OData v2 architecture, and its data model is designed to handle global enterprise compliance, payroll integrations, and historical auditing. Its API reflects that immense complexity.

If you decide to build a custom SAP SuccessFactors MCP server, here are the specific integration challenges you will face:

Effective-Dated Entities and Time Slicing In SuccessFactors, employment records (like EmpJob or PerPersonal) are rarely flat records. They are "effective-dated." This means the API stores a continuous history of changes as time slices. A single employee might have dozens of EmpJob rows, each keyed by a composite primary key like userId + startDate + seqNumber. If an LLM simply asks for an employee's job, a naïve API wrapper will return the entire historical array. You must build logic to filter by fromDate and toDate to isolate the active time slice, otherwise the model will hallucinate by reading an outdated salary or title.

Legacy Microsoft-JSON Date Formats Because SuccessFactors uses OData v2, it does not return standard ISO-8601 timestamps. Instead, date and time fields are returned in the legacy Microsoft-JSON format, which looks like /Date(1609459200000)/. An LLM cannot natively perform date math or comparisons on this string format. Your MCP server must intercept all payloads, traverse the JSON tree, find these specific strings, and parse the internal milliseconds into human-readable ISO-8601 strings before passing the data to Claude. When writing data back via upserts, you must reverse this transformation.

OData Navigation Properties and Schema Expansion SuccessFactors rarely returns all relevant data in a single entity. For example, querying a user's location via EmpJob will only yield a location code. To get the actual address, you must use OData's $expand parameter to pull in the locationNav property. Building MCP tools that dynamically instruct the LLM on which navigation properties to expand - and handling the massive nested JSON schemas that result - requires a sophisticated schema translation engine.

How to Generate an MCP Server for SAP SuccessFactors

Instead of building an OData translation layer from scratch, you can use Truto to generate an MCP server dynamically. Truto reads the SAP SuccessFactors OData $metadata document, parses the entities (including your tenant's custom cust_* fields), and translates them into discrete, LLM-ready MCP tools.

A factual note on rate limits: Truto does not automatically retry, throttle, or apply backoff on rate limit errors. When the SAP SuccessFactors API returns an HTTP 429 (Too Many Requests), Truto passes that error directly to the caller. However, Truto does normalize the upstream rate limit information into standardized HTTP headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. Your AI agent or client application is strictly responsible for implementing retry logic and backoff.

There are two ways to generate a Truto MCP server for an integrated SAP SuccessFactors account.

Method 1: Via the Truto UI

For administrators who want to quickly generate a server URL without writing code:

  1. Log into your Truto dashboard and navigate to your connected SAP SuccessFactors integrated account.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Select your desired configuration. You can optionally filter the available tools by specific methods (e.g., only read operations) or apply specific tool tags.
  5. Copy the generated MCP server URL. It will look like https://api.truto.one/mcp/abc123def456....

Method 2: Via the Truto API

For developers building programmatic onboarding flows, you can generate MCP servers dynamically using the Truto REST API. This generates a secure token linked to the specific integrated account.

Endpoint: POST /integrated-account/:id/mcp

Example Request:

curl -X POST https://api.truto.one/integrated-account/YOUR_ACCOUNT_ID/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "SuccessFactors HR Assistant",
    "config": {
      "methods": ["read", "write"]
    }
  }'

Example Response:

{
  "id": "mcp_srv_98765",
  "name": "SuccessFactors HR Assistant",
  "config": {
    "methods": ["read", "write"]
  },
  "expires_at": null,
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f6g7h8i9j0"
}

You now have a fully authenticated, schema-aware JSON-RPC endpoint ready to be plugged into Claude.

Connecting the MCP Server to Claude

Once you have the generated URL, you can connect it directly to Claude. The process varies depending on whether you are using a UI-based interface or a local desktop client.

Method A: Via the Claude UI

If your organization uses Claude Enterprise or Claude Team tiers with custom connector support:

  1. Open Claude and navigate to Settings.
  2. Go to Integrations or Connectors (depending on your plan level).
  3. Click Add MCP Server or Add custom connector.
  4. Paste the Truto MCP server URL you copied earlier and click Add.

Claude will immediately perform a handshake with the URL, exchange capabilities, and list the available SAP SuccessFactors tools.

Method B: Via Manual Config File (Claude Desktop)

If you are a developer using Claude Desktop locally, you can connect the server by modifying your claude_desktop_config.json file. Truto MCP servers operate over standard HTTP POST, so you will use the official @modelcontextprotocol/server-sse wrapper to handle the Server-Sent Events (SSE) transport layer.

Locate your configuration file (usually at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS) and add the following:

{
  "mcpServers": {
    "sap-successfactors": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "https://api.truto.one/mcp/YOUR_GENERATED_TOKEN"
      ]
    }
  }
}

Restart Claude Desktop. The application will initialize the MCP connection and load the SAP SuccessFactors tools into the agent's context.

Hero Tools for SAP SuccessFactors

Truto automatically generates tools for every OData entity exposed by your SuccessFactors instance. Because the API surface is massive (often hundreds of entities), we will focus on six high-leverage "hero tools" that power the most common HCM workflows.

list_all_sap_success_factors_odata_per_personals

Queries the PerPersonal entity to retrieve effective-dated personal information for employees, such as birth names, marital status, and gender.

Contextual usage notes: This entity requires personIdExternal as part of its key. If you do not specify fromDate and toDate, the API defaults to the current active time slice. Be prepared to handle OData V2 Microsoft-JSON date strings.

"Fetch the current personal information for the employee with personIdExternal '10425'. Ensure you only retrieve the active time slice for today."

list_all_sap_success_factors_odata_emp_jobs

Lists records from the EmpJob entity. This is the core employment entity containing job classifications, department assignments, manager hierarchies, and employment status.

Contextual usage notes: The composite key is userId + startDate + seqNumber. The seqNumber handles scenarios where multiple job changes occur on the exact same date. Use $expand=managerNav to inline the employee's direct manager data without needing a secondary query.

"Look up the job history for userId 'asmith'. Filter the results to show all job changes that occurred in the year 2024 by passing the appropriate fromDate and toDate query parameters."

list_all_sap_success_factors_odata_time_types

Retrieves TimeType records, which represent the different types of absences and leave policies configured in the tenant (e.g., Annual Leave, Sick Time, Jury Duty).

Contextual usage notes: You generally query this entity to discover the valid externalCode identifiers needed before attempting to log a new absence for an employee.

"List all available time types in the system, specifically looking for the external code associated with paid parental leave."

list_all_sap_success_factors_odata_employee_times

Queries the EmployeeTime entity, which tracks actual recorded absences for employees.

Contextual usage notes: This tool is used to read historical time-off requests, check approval statuses (approvalStatus), and identify the duration of the leave. It connects deeply with the TimeAccount entities.

"Find all EmployeeTime records for userId 'jdoe' that have a start date after January 1st. Tell me if any of their vacation requests are still pending approval."

sap_success_factors_odata_v_2_upsert

A powerful, generic write operation that can insert or update up to 1,000 records across any OData v2 entity in a single payload.

Contextual usage notes: To successfully use this tool, the LLM must provide the __metadata object containing the correct uri for the entity being updated. Deletes can also be processed by setting the operation flag to DELETE.

"Use the upsert tool to update the FOCompany entity. Set the defaultLocation to 'NYC_HQ' for externalCode 'US_CORP'. Ensure you include the __metadata.uri property required for the OData upsert."

list_all_sap_success_factors_odata_fo_departments

Retrieves FODepartment records, which represent the Foundation Object (FO) generic structures for departments in the organization.

Contextual usage notes: Like most Foundation Objects, this is effective-dated. Departments contain localized descriptions, cost center associations, and parent-child hierarchical relationships.

"Query the FODepartment entity to find the department with externalCode 'ENG_01'. Return its current active description and associated cost center."

For the complete inventory of available SAP SuccessFactors tools, including payroll, benefits, and calibration schemas, view the SAP SuccessFactors integration page.

Workflows in Action

Connecting Claude to SAP SuccessFactors transforms static HCM data into an interactive, agentic workflow system. Here is how specific personas use these tools in practice.

Workflow 1: HR Admin Auditing Employment History

When investigating an employment dispute or preparing for an audit, HR administrators need a clear timeline of an employee's job history and manager changes.

"I need a complete employment history for user 'mchen'. Pull their personal information to verify their start date, then fetch their entire job history. Create a summary of every title change and manager transition they've had since they joined."

Execution Steps:

  1. Claude calls list_all_sap_success_factors_odata_per_personals using personIdExternal='mchen' to verify baseline identity and original hire date details.
  2. Claude calls list_all_sap_success_factors_odata_emp_jobs with the userId, applying broad fromDate and toDate parameters to capture all historical time slices.
  3. Claude iterates through the returned EmpJob array, sorting by startDate and seqNumber.
  4. Claude synthesizes the data into a chronological timeline, highlighting every time the managerId or job title field changed across the effective-dated records.
sequenceDiagram
    participant User as HR Admin
    participant Claude as Claude Desktop
    participant Truto as Truto MCP Server
    participant API as SAP API (OData)

    User->>Claude: "Pull employment history for mchen..."
    Claude->>Truto: Call list_all_sap_success_factors_odata_per_personals
    Truto->>API: GET /odata/v2/PerPersonal
    API-->>Truto: Return Microsoft-JSON payload
    Truto-->>Claude: Return normalized personal data
    Claude->>Truto: Call list_all_sap_success_factors_odata_emp_jobs<br>(with broad date range)
    Truto->>API: GET /odata/v2/EmpJob
    API-->>Truto: Return array of time slices
    Truto-->>Claude: Return job history array
    Claude-->>User: Present chronological audit report

Workflow 2: Manager Querying Time Off Balances

Managers frequently need to audit their team's upcoming leave to ensure adequate coverage during critical project phases.

"Check the upcoming time off for my direct report, 'tknowles'. First, find out what time types are available, then query their employee time records to see if they have any approved or pending annual leave for next month."

Execution Steps:

  1. Claude calls list_all_sap_success_factors_odata_time_types to understand the taxonomy of leave in this specific tenant (e.g., discovering that Annual Leave has the external code ANN_LV).
  2. Claude calls list_all_sap_success_factors_odata_employee_times filtering by userId='tknowles' and the identified time type code.
  3. Claude inspects the approvalStatus and date fields of the returned records.
  4. Claude formulates a response detailing exactly when the employee will be out of the office and whether the request is fully approved or still pending.

Workflow 3: Reorganizing Department Structures

During a corporate restructuring, Operations teams need to audit and update department hierarchies, aligning them with new cost centers.

"We are reorganizing the Engineering departments. Pull the current structure for department 'ENG_01'. Check its current cost center. Then, draft a payload I could use with the upsert tool to change its cost center to 'CC_TECH_99' effective today."

Execution Steps:

  1. Claude calls list_all_sap_success_factors_odata_fo_departments filtering for externalCode='ENG_01' to retrieve the current active state of the department.
  2. Claude identifies the current costCenter value in the response.
  3. Claude recognizes that writing to SuccessFactors requires the sap_success_factors_odata_v_2_upsert tool and specific __metadata structures.
  4. Claude generates the exact JSON payload required for the upsert, providing it to the user for review before executing the destructive write operation.
flowchart TD
    A["User requests<br>department audit"] --> B["Claude calls<br>FODepartment tool"]
    B --> C{"Does department<br>exist?"}
    C -->|Yes| D["Claude reads<br>current cost center"]
    C -->|No| E["Return error<br>to user"]
    D --> F["Claude drafts<br>upsert payload"]
    F --> G["Claude outputs<br>JSON for review"]

Security and Access Control

Giving AI agents access to enterprise HR data demands rigorous security controls. Truto MCP servers provide several mechanisms to scope and secure access to SAP SuccessFactors:

  • Method Filtering: When generating the MCP server, you can restrict the token to specific operations. Setting methods: ["read"] ensures the agent can query EmpJob or EmployeeTime but structurally cannot execute the upsert tool, preventing accidental data modification.
  • Tag Filtering: You can restrict the MCP server to only expose tools relevant to specific domains (e.g., tags: ["time_off"]), keeping sensitive compensation tools out of the model's context entirely.
  • Expiration (TTL): The expires_at parameter allows you to generate short-lived MCP servers. This is ideal for CI/CD pipelines or temporary auditing tasks, ensuring the URL automatically invalidates after the required timeframe.
  • Secondary Authentication: By enabling require_api_token_auth, the MCP client must provide a valid Truto API token in the Authorization header in addition to possessing the server URL, preventing unauthorized access if the URL is leaked.

Summary

Connecting SAP SuccessFactors to Claude via a managed MCP server eliminates the toil of parsing legacy OData v2 structures, managing effective-dated time slices, and handling Microsoft-JSON date strings. By providing Claude with deterministic, strictly typed tools, you enable your AI agents to reliably interact with complex HCM data - from auditing employment histories to safely drafting organizational restructuring payloads. Instead of wrestling with __metadata.uri syntax and token refresh failures, your engineering team can focus on building intelligent, agentic workflows.

Two ways to put SAP SuccessFactors to work

Elaichifrom the team behind Truto

For you and your team

Use SAP SuccessFactors in Claude yourself

Connect SAP SuccessFactors once, add Elaichi to Claude, and ask. Every call is checked against your own permissions and logged.

Start free, 14 days No credit card required
Truto

For product teams

Ship SAP SuccessFactors to your customers

Your customers connect their own SAP SuccessFactors accounts. Your product gets one API and MCP tools for SAP SuccessFactors, through Truto.

FAQ

What is the easiest way to connect SAP SuccessFactors to Claude?
The best way to connect SAP SuccessFactors to Claude is Elaichi: connect SAP SuccessFactors to Elaichi once, then add Elaichi to Claude as a connector. Two steps, about a minute, with a 14-day free trial and no credit card required.
Does Truto automatically handle rate limit retries for the SAP SuccessFactors API?
No. Truto passes HTTP 429 (Too Many Requests) errors directly to the caller. Truto normalizes the upstream rate limit data into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset), but your AI agent or client application is responsible for implementing retry logic and backoff.
How does Truto handle SAP SuccessFactors' effective-dated entities?
Truto exposes the underlying OData entities as MCP tools. To query specific historical time slices, your LLM must utilize the fromDate and toDate query parameters provided in the tool's schema. If omitted, the query defaults to the currently active time slice.
Can I prevent Claude from writing data back to SuccessFactors?
Yes. When generating the MCP server via the Truto UI or API, you can configure the methods filter to only allow read operations (methods: ["read"]). This prevents the generation of the upsert tools, enforcing read-only access at the server level.
How do MCP tools handle the legacy Microsoft-JSON date format from OData v2?
SAP SuccessFactors returns dates as /Date(milliseconds)/. The LLM receives this raw format via the MCP tools and must be prompted to parse or understand the string. When writing data, the LLM must construct the payload using this required format for the upsert tool.
SAP SuccessFactors SAP SuccessFactors in Claude14 days free Start free

More from our Blog