logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

cdata-workday-live-data-interface

Facilitates natural language interactions with live Workday data via a read-only Model Context Protocol (MCP) endpoint. This architecture permits Large Language Models (LLMs) to dynamically fetch current Workday metrics without requiring direct SQL scripting. It leverages the CData JDBC Driver to abstract Workday datasets into a consumable, relational SQL schema.

Author

cdata-workday-live-data-interface logo

CDataSoftware

MIT License

Quick Info

GitHub GitHub Stars 3
NPM Weekly Downloads 0
Tools 1
Last Updated 2026-02-19

Tags

jdbccdatasoftwarecdatacdata jdbccdatasoftware workdayworkday data

CData Workday Data Abstraction Layer (via MCP)

This deployment establishes a non-mutating MCP server specifically for Workday access.

:heavy_exclamation_mark: For comprehensive data manipulation (CRUD operations) and a streamlined initial configuration, please examine our complimentary CData MCP Server for Workday (Beta) available here.

Objective

The primary goal of this read-only MCP service is to empower LLMs (such as Claude Desktop) to execute queries against real-time Workday information. This is achieved by utilizing the underlying CData JDBC Driver for Workday.

The CData JDBC Driver translates Workday's structure into familiar relational SQL constructs.

This wrapper server exposes Workday data through the standard MCP mechanism, enabling AI agents to retrieve up-to-date insights using conversational queries—eliminating the need for manual SQL generation.

Deployment Protocol

  1. Obtain the source code repository: bash git clone https://github.com/cdatasoftware/workday-mcp-server-by-cdata.git cd workday-mcp-server-by-cdata

  2. Compile the application: bash mvn clean install

    This step generates the executable artifact: CDataMCP-jar-with-dependencies.jar 3. Acquire and install the CData JDBC Driver for Workday: Download Link 4. Driver Licensing Procedure: * Navigate to the lib directory within the driver's installation location (e.g., C:\Program Files\CData\CData JDBC Driver for Workday\ or /Applications/CData JDBC Driver for Workday/). * Execute the license utility: java -jar cdata.jdbc.workday.jar --license * Provide your credentials and use "TRIAL" or your specific license key. 5. Define the Data Source Connection: * Initiate the Connection Utility: java -jar cdata.jdbc.workday.jar

    • Configure all necessary parameters for the connection string and validate connectivity using "Test Connection".

      OAuth Prerequisite: If OAuth is involved, an in-browser authentication flow will be triggered.

    • Copy the finalized, validated JDBC connection string.
    • Construct the Configuration Property File (e.g., workday.prp):
    • This file governs the MCP exposure settings. Key parameters include:
    • Prefix: The namespace prefix for exposed tools.
    • ServerName: The identifier for this specific data endpoint.
    • ServerVersion: Versioning metadata.
    • DriverPath: Absolute path to the installed JDBC driver JAR.
    • DriverClass: The fully qualified name of the driver's main class (e.g., cdata.jdbc.workday.WorkdayDriver).
    • JdbcUrl: The connection string obtained in step 5.
    • Tables: Specify table names for restricted access, or leave empty (Tables=) for full schema exposure. env Prefix=workday ServerName=CDataWorkday ServerVersion=1.0 DriverPath=PATH\TO\cdata.jdbc.workday.jar DriverClass=cdata.jdbc.workday.WorkdayDriver JdbcUrl=jdbc:workday:InitiateOAuth=GETANDREFRESH; Tables=

Integration with AI Clients (e.g., Claude Desktop)

  1. Prepare the AI client configuration file (claude_desktop_config.json):

    • Add a new entry under the mcpServers object, mapping a unique classname-derived key to the execution instructions.

    Windows Configuration Snippet:

    { "mcpServers": { "{classname_dash}": { "command": "PATH\TO\java.exe", "args": [ "-jar", "PATH\TO\CDataMCP-jar-with-dependencies.jar", "PATH\TO\workday.prp" ] }, ... } }

    Linux/Mac Configuration Snippet:

    { "mcpServers": { "{classname_dash}": { "command": "/PATH/TO/java", "args": [ "-jar", "/PATH/TO/CDataMCP-jar-with-dependencies.jar", "/PATH/TO/workday.prp" ] }, ... } }

    • Deploy this configuration file to the client's designated directory (e.g., Claude Desktop's configuration path).

    Windows Deployment Example: bash cp C:\PATH\TO\claude_desktop_config.json %APPDATA%\Claude\claude_desktop_config.json

    Linux/Mac Deployment Example: bash cp /PATH/TO/claude_desktop_config.json /Users/{user}/Library/Application\ Support/Claude/claude_desktop_config.json'

  2. Restart or refresh the connected client application. The new MCP endpoint should then become discoverable.

Tip: If the server does not appear after configuration, ensure the client application is completely terminated (check Task Manager/Activity Monitor) before relaunching.

Standalone Server Execution

To run the MCP server independently (useful for debugging or environments without a direct client integration): bash java -jar /PATH/TO/CDataMCP-jar-with-dependencies.jar /PATH/TO/workday.prp

Note: This instance communicates via standard input/output (stdio), restricting its use to clients running on the same host machine.

Interaction Guidelines

Once integrated, the AI client can utilize the exposed functions to query or manipulate the underlying Workday data sources conversationally. Explicit tool invocation is usually unnecessary.

Example conversational queries: * "What is the average salary for employees hired in the last quarter across the organization?" * "List all open requisitions tied to the 'Talent Acquisition' department." * "Summarize the performance review statuses for all managers in the EMEA region."

Available Toolset

The following functions are provided by the server, where {servername} corresponds to the key defined in the configuration (e.g., workday): * {servername}_get_tables - Fetches a delimited list of accessible data entities (tables). Consult {servername}_get_columns for schema details. Output adheres to CSV format with header row. * {servername}_get_columns - Retrieves the fields (columns) associated with a specified table. Must be preceded by {servername}_get_tables to identify valid inputs. * {servername}_run_query - Executes arbitrary SQL SELECT statements against the Workday data model.

JSON-RPC Invocation Examples (For Scripted Use)

Requests adhere to the JSON-RPC 2.0 protocol specification.

Request to Retrieve Tables

{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "workday_get_tables", "arguments": {} } }

Request to Describe Columns on 'JobProfile'

{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "workday_get_columns", "arguments": { "table": "JobProfile" } } }

Request to Execute a Data Retrieval Query

{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "workday_run_query", "arguments": { "sql": "SELECT EmployeeID, PositionTitle FROM [Worker] WHERE [IsActive] = TRUE AND [WorkerType] = 'Contingent'" } } }

Troubleshooting Checklist

  1. Client Visibility Issue: If the server isn't listed in the AI client, guarantee the client process is fully shut down (not just minimized or backgrounded).
  2. Data Retrieval Failure: Verify that the connection string configuration in the .prp file is accurate, matching the one validated via the driver's connection utility.
  3. Connectivity Problems: If the underlying Workday connection fails, seek assistance from the CData Support Desk.
  4. MCP Server Functionality Feedback: For issues related to the server wrapper or general suggestions, please engage with the CData User Community.

Licensing Terms

This server software is distributed under the permissive MIT License. Review the LICENSE file for comprehensive usage, modification, and redistribution rights.

Comprehensive Connector Catalog

(Table omitted for brevity, refers to the extensive list of supported data sources provided by CData drivers.)

Background Context: XMLHttpRequest (XHR)

WIKIPEDIA: XMLHttpRequest (XHR) is an API in the form of a JavaScript object whose methods transmit HTTP requests from a web browser to a web server. The methods allow a browser-based application to send requests to the server after page loading is complete, and receive information back. XMLHttpRequest is a component of Ajax programming. Prior to Ajax, hyperlinks and form submissions were the primary mechanisms for interacting with the server, often replacing the current page with another one.

== History == The concept behind XMLHttpRequest was conceived in 2000 by the developers of Microsoft Outlook. The concept was then implemented within the Internet Explorer 5 browser (1999). However, the original syntax did not use the XMLHttpRequest identifier. Instead, the developers used the identifiers ActiveXObject("Msxml2.XMLHTTP") and ActiveXObject("Microsoft.XMLHTTP"). As of Internet Explorer 7 (2006), all browsers support the XMLHttpRequest identifier. The XMLHttpRequest identifier is now the de facto standard in all the major browsers, including Mozilla's Gecko layout engine (2002), Safari 1.2 (2004) and Opera 8.0 (2005).

=== Standards === The World Wide Web Consortium (W3C) published a Working Draft specification for the XMLHttpRequest object on April 5, 2006. On February 25, 2008, the W3C published the Working Draft Level 2 specification. Level 2 added methods to monitor event progress, allow cross-site requests, and handle byte streams. At the end of 2011, the Level 2 specification was absorbed into the original specification. At the end of 2012, the WHATWG took over development and maintains a living document using Web IDL.

== Usage == Generally, sending a request with XMLHttpRequest has several programming steps.

Create an XMLHttpRequest object by calling a constructor: Call the "open" method to specify the request type, identify the relevant resource, and select synchronous or asynchronous operation: For an asynchronous request, set a listener that will be notified when the request's state changes: Initiate the request by calling the "send" method: Respond to state changes in the event listener. If the server sends response data, by default it is captured in the "responseText" property. When the object stops processing the response, it changes to state 4, the "done" state. Aside from these general steps, XMLHttpRequest has many options to control how the request is sent and how the response is processed. Custom header fields can be added to the request to indicate how the server should fulfill it, and data can be uploaded to the server by providing it in the "send" call. The response can be parsed from the JSON format into a readily usable JavaScript object, or processed gradually as it arrives rather than waiting for the entire text. The request can be aborted prematurely or set to fail if not completed in a specified amount of time.

== Cross-domain requests ==

In the early development of the World Wide Web, it was found possible to brea

See Also

`