Skip to content

Connect Paylocity to Claude: Sync Workforce Records and Shift Data

Nachi Raman Nachi Raman 10 min read AI & Agents
Elaichi from the team behind Truto

Paylocity in Claude, in about a minute.

The best way to connect Paylocity to Claude is Elaichi: connect Paylocity 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 Paylocity

    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 Paylocity into your own product? This guide is for you.

The developer guide

Learn how to connect Paylocity to claude using Truto. Step-by-step guide to tool calling, API quirks, and autonomous workflows.

If your team needs to connect Paylocity to Claude to automate workforce management, audit time and labor data, or orchestrate payroll batches, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's tool calls and Paylocity's REST API. 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-paylocity-to-chatgpt-manage-hr-data-and-payroll-batches/ or explore our broader architectural overview on /connect-paylocity-to-ai-agents-automate-time-labor-and-payroll/.

Giving a Large Language Model (LLM) read and write access to a specialized human capital management system like Paylocity is a serious engineering challenge. You have to manage complex authentication lifecycles, handle domain-specific pagination schemes, map massive payroll schemas to MCP tool definitions, and deal with strict API quotas. Every time the vendor deprecates a field or updates an endpoint, you own the maintenance of your custom integration code.

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

The Engineering Reality of the Paylocity API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover and execute tools, the reality of implementing it against specialized B2B APIs is painful. Paylocity's API architecture reflects the complexity of enterprise payroll, tax compliance, and time tracking.

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

Destructive Updates on Core Entities Many of Paylocity's endpoints rely on full entity replacement. For example, updating a job code via the jobs.update endpoint is a full PUT operation. If an LLM attempts to update a single field (like deactivating a job) and omits the rest of the payload, Paylocity sets every omitted field to null or its system default. You must engineer your MCP server to force a "read-modify-write" pattern, ensuring Claude reads the complete job, changes only the target field, and sends the entire object back.

Fragmented API Versions Paylocity's API surface is heavily versioned. The Employee Demographic API v1 returns employees as flat objects with basic string arrays. The newer v2 API (which is currently in early-access beta) fundamentally changes this structure, requiring callers to explicitly pick data sections (contact, sensitive, workAuthorization, rates) and returning heavily nested objects. An LLM has no inherent context on which version to use or how to format requests for each. Your MCP server must act as a normalization layer, explicitly defining schemas so Claude knows exactly what payload structure is required.

Asynchronous Punch Data Retrieval Fetching detailed time and labor punch data from Paylocity is not a simple GET request. It requires orchestrating a three-step asynchronous flow: first, you submit a punch detail operation for a specific time window (POST); the API returns a 202 Accepted with a Location header. Second, you must poll that location to check the operation status until it reads succeeded. Finally, you extract a resource ID from the URL to fetch the actual shift data. Building tools that encapsulate this async logic so an LLM can simply ask for "punch data" requires complex state management on your custom server.

Step 1: Generate the Paylocity MCP Server

Truto eliminates the need to build a custom integration layer by auto-generating an MCP server directly from Paylocity's API documentation and your connected tenant. Tool generation is dynamic - any endpoint with a valid description and schema in Truto's integration registry is exposed as a callable tool over a JSON-RPC 2.0 endpoint.

You can generate this server via the Truto dashboard or programmatically via the API.

Method A: Via the Truto UI

  1. Log into your Truto dashboard and navigate to your Integrated Accounts.
  2. Select your connected Paylocity account.
  3. Click the MCP Servers tab.
  4. Click Create MCP Server.
  5. Select your desired configuration. You can restrict the server to specific tags (e.g., payroll, employees) or methods (read, write).
  6. Copy the generated MCP server URL (e.g., https://api.truto.one/mcp/abc123def456).

Method B: Via the Truto API

If you are dynamically provisioning AI capabilities for your own end-users, you can create the MCP server programmatically. Truto validates the configuration, generates a cryptographically hashed token stored in Cloudflare KV, and returns the endpoint.

Make a POST request to /integrated-account/:id/mcp:

curl -X POST "https://api.truto.one/admin/integrated-accounts/<paylocity_account_id>/mcp" \
  -H "Authorization: Bearer <YOUR_TRUTO_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Paylocity Payroll Assistant",
    "config": {
      "methods": ["read", "write"],
      "tags": ["payroll", "employees", "shifts"]
    },
    "expires_at": "2026-12-31T23:59:59Z"
  }'

The response contains the secure URL required to connect Claude to Paylocity:

{
  "id": "mcp-789-xyz",
  "name": "Paylocity Payroll Assistant",
  "url": "https://api.truto.one/mcp/abc123def456"
}

Step 2: Connect the MCP Server to Claude

Once you have the Truto MCP URL, you need to register it with your LLM client. Because MCP communicates over standard JSON-RPC, the client requires no custom code to discover the Paylocity tools.

Method A: Via the Claude Desktop UI

If you are using an enterprise AI client with a UI (like ChatGPT Developer Mode or Claude Enterprise connectors), connecting is straightforward:

  1. Open your AI client settings (e.g., Settings -> Integrations -> Add MCP Server).
  2. Name the connection (e.g., "Paylocity Data").
  3. Paste the Truto MCP server URL.
  4. Click Add. The client will automatically send an initialize request to discover the Paylocity tools.

Method B: Via Manual Config File (Claude Desktop)

For Claude Desktop, you register servers using the claude_desktop_config.json file. Because Claude Desktop communicates with local MCP servers via standard input/output (stdio), and Truto provides a remote HTTP/SSE endpoint, you use the official @modelcontextprotocol/server-sse bridge utility.

Open your configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add the Paylocity server block:

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

Save the file and restart Claude Desktop. The hammer icon will appear in the input box, indicating the Paylocity tools are ready for use.

Hero Tools for Paylocity

Truto dynamically derives tool schemas from the Paylocity API documentation, standardizing inputs and outputs. When Claude calls a tool, the query and body parameters share a flat input namespace, which Truto intelligently routes to the correct upstream structures.

Here are the highest-leverage tools available for automating Paylocity workflows.

List All Paylocity Employees

Retrieves the core demographic data for the workforce. This tool (list_all_paylocity_employees) queries the Employee Demographic API v1. Because Paylocity returns up to 20 employees per page, Claude will receive the standard next_cursor property in the response to fetch subsequent pages.

"Fetch the first page of active employees in Paylocity. If there are more than 20, use the cursor to fetch the next batch."

Get Single Paylocity Employee By ID

Fetches a comprehensive profile for a specific worker, including their current status, position, and active pay rates. The get_single_paylocity_employee_by_id tool is critical for workflows that require verifying an individual's compensation before making payroll adjustments.

"Look up the employee record for ID '883492' and tell me their current pay rate and FLSA status."

List All Paylocity Employee Shifts

Extracts scheduled shifts for a specific employee. The list_all_paylocity_employee_shifts tool is heavily used for time and labor audits. It requires an employee_id and can filter by startDateTime.

"Retrieve all scheduled shifts for employee ID '10293' for the first week of November. Group them by cost center."

Update a Paylocity Job By ID

Modifies a company job code. The update_a_paylocity_job_by_id tool triggers a full PUT request. You must instruct Claude to fetch the job first using the get tool, modify the desired fields, and pass the complete object back to prevent data loss.

"Fetch the job code 'WAREHOUSE_L1'. We need to deactivate it. Send the update request with the exact same data, but change isActive to false."

List All Paylocity Employee Deductions

Returns an employee's active recurring deductions (e.g., healthcare, 401k). The list_all_paylocity_employee_deductions tool provides the critical id (resourceId) required if you need to update or delete a specific deduction line item.

"List all active recurring deductions for employee ID '99210'. Flag any deductions with a priority higher than 5."

Create a Paylocity Pay Entry Batch

Initiates a payroll batch submission for a specific check date. The create_a_paylocity_pay_entry_batch tool accepts batch metadata and an array of pay entries. It returns a timeImportFileTrackingId which must be polled to confirm the batch was successfully validated by Paylocity.

"Create a new pay entry batch for the check date '2026-03-15'. Include the approved bonus pay entries for the engineering team. Once submitted, give me the tracking ID."

To view the complete Paylocity tool inventory, including query structures, JSON schemas, and data models for custom fields, earnings, and webhooks, visit the Paylocity Integration Page.

Workflows in Action

Exposing individual endpoints to an LLM is useful, but the real power of MCP comes from chaining tools together to automate multi-step domain workflows.

Scenario 1: Pre-Payroll Shift and Deduction Audit

The Problem: An HR administrator needs to audit a contractor's upcoming shifts and verify that a specific uniform deduction is actively applied before the payroll cut-off.

User Prompt:

"Audit the upcoming scheduled shifts for employee ID '44102' for next week. Also, check their active deductions and confirm if the 'UNIFORM_FEE' deduction code is present. Calculate the total hours scheduled."

How Claude Executes the Workflow:

  1. Calls list_all_paylocity_employee_shifts passing the employee_id and a startDateTime filter for the upcoming week.
  2. Calls list_all_paylocity_employee_deductions using the same employee_id.
  3. Claude analyzes the shift array, summing the duration fields to calculate total scheduled hours.
  4. Claude filters the deductions array looking for the specific code.
  5. Claude formulates a final summary for the administrator, alerting them if the deduction is missing or if the scheduled hours exceed standard capacity.
sequenceDiagram
    participant User as User
    participant Claude as Claude
    participant MCP as Truto MCP
    participant API as Paylocity API

    User->>Claude: "Audit shifts and deductions for employee 44102..."
    
    Claude->>MCP: Call tool: list_all_paylocity_employee_shifts<br>{"employee_id": "44102", "startDateTime": "2026-11-01"}
    MCP->>API: GET /v1/companies/{companyId}/employees/44102/shifts
    API-->>MCP: Array of shift objects
    MCP-->>Claude: JSON response
    
    Claude->>MCP: Call tool: list_all_paylocity_employee_deductions<br>{"employee_id": "44102"}
    MCP->>API: GET /v1/companies/{companyId}/employees/44102/deductions
    API-->>MCP: Array of deduction objects
    MCP-->>Claude: JSON response
    
    Claude->>User: "Employee 44102 is scheduled for 38 hours. The UNIFORM_FEE deduction is active."

Scenario 2: Standardizing Job Codes and Launching a Batch

The Problem: A payroll manager needs to update a legacy job code to reflect a new internal naming convention, and then immediately submit an off-cycle bonus batch using that updated code.

User Prompt:

"Fetch the job code 'DEV_L2'. We need to update its description to 'Senior Software Engineer'. Apply the update. Then, submit a pay entry batch named 'Q4_Bonuses' for check date '2026-12-15' containing a $5,000 bonus for employee '10045' using the updated job code."

How Claude Executes the Workflow:

  1. Calls get_single_paylocity_job_by_id to retrieve the complete DEV_L2 job object.
  2. Modifies the description field in memory, keeping isActive, isCertified, and payEntry intact.
  3. Calls update_a_paylocity_job_by_id passing the fully reconstructed object to fulfill Paylocity's full-replacement requirement.
  4. Calls create_a_paylocity_pay_entry_batch constructing the nested pay entry array with the employee ID, the $5,000 amount, and the DEV_L2 job code.
  5. Claude informs the user of the successful submission and provides the file tracking ID.

Security and Access Control

Giving an AI agent direct write access to a payroll system requires strict security boundaries. Truto's MCP architecture provides highly granular control over what the LLM can see and do:

  • Method Filtering: When generating the server, use config.methods to restrict operations. A server configured with methods: ["read"] ensures the agent can only execute get and list operations, physically blocking any chance of accidental job deletions or rogue batch submissions.
  • Tag Filtering: Use config.tags to limit the server's scope to specific API domains. For example, passing tags: ["shifts", "time_and_labor"] hides sensitive compensation tools and exposes only scheduling operations.
  • Enforced API Authentication: By default, possessing the MCP URL grants access. For production environments, setting require_api_token_auth: true forces the client to also pass a valid Truto API token in the Authorization header, enforcing a zero-trust model.
  • Time-To-Live Expiry: Use the expires_at configuration to provision ephemeral MCP servers. Once the timestamp passes, a Durable Object alarm automatically purges the token from the database and Cloudflare KV, revoking all agent access immediately.

Handling Paylocity Rate Limits in Production

Enterprise platforms strictly enforce API quotas. It is critical to understand that Truto does not automatically retry, throttle, or apply backoff logic when an upstream API throws a rate limit exception.

When Paylocity returns an HTTP 429 Too Many Requests error, Truto passes that error directly back to the caller (Claude) as a failed tool execution. However, Truto does normalize the upstream rate limit data into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification.

The system interacting with the MCP server (your agent orchestration layer or Claude itself) is responsible for reading these headers and executing the appropriate exponential backoff strategy before retrying the tool.

Final Thoughts

Connecting Paylocity to Claude via a custom integration requires months of building auth flows, parsing versioned schemas, and managing async orchestration. Truto's managed MCP architecture eliminates this overhead, transforming complex payroll operations into natural language capabilities instantly.

By leveraging Truto's dynamic tool generation, method filtering, and standardized schemas, engineering teams can safely deploy AI agents that audit shifts, reconcile deductions, and automate payroll batches without maintaining a single line of API glue code.

Two ways to put Paylocity to work

Elaichifrom the team behind Truto

For you and your team

Use Paylocity in Claude yourself

Connect Paylocity 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 Paylocity to your customers

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

FAQ

What is the easiest way to connect Paylocity to Claude?
The best way to connect Paylocity to Claude is Elaichi: connect Paylocity 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.
Paylocity Paylocity in Claude14 days free Start free

More from our Blog