cdata-mcp-gateway-for-successfactors
Provides an abstraction layer to query live SAP SuccessFactors data using natural language via an MCP interface, circumventing the need for direct SQL proficiency. This component facilitates the connection of sophisticated AI models to SAP SuccessFactors schemas, enabling retrieval of metadata (tables, columns) and execution of data retrieval operations.
Author

CDataSoftware
Quick Info
Actions
Tags
CData Model Context Protocol (MCP) Server Implementation for SAP SuccessFactors
:warning: This specific deployment functions strictly for read-only operations. For comprehensive data manipulation capabilities (CRUD operations and actions) alongside a streamlined setup process, please investigate the complimentary CData MCP Server for SAP SuccessFactors (beta release).
Core Rationale
This read-only MCP Server was engineered to empower Large Language Models (LLMs), such as Claude Desktop, to issue queries against live data residing in SAP SuccessFactors. This capability is realized through integration with the foundational CData JDBC Driver for SAP SuccessFactors.
The CData JDBC Driver translates SAP SuccessFactors structures into a standard relational SQL model. Our server then encapsulates this driver, exposing the SuccessFactors data via a straightforward MCP endpoint. Consequently, LLMs can extract current information using plain English requests, entirely bypassing the requirement for writing SQL code.
Deployment Sequence
-
Obtain a local copy of the source code repository: bash git clone https://github.com/cdatasoftware/sap-successfactors-mcp-server-by-cdata.git cd sap-successfactors-mcp-server-by-cdata
-
Compile the server artifact: bash mvn clean install
This action generates the executable JAR: CDataMCP-jar-with-dependencies.jar 3. Acquire and install the necessary CData JDBC Driver for {source}: https://www.cdata.com/drivers/sapsuccessfactors/download/jdbc 4. Activate the CData JDBC Driver license: * Navigate to the driver's installation directory's
libsubdirectory, typically located at: * (Windows OS)C:\Program Files\CData\CData JDBC Driver for SAP SuccessFactors\* (Unix-like OS)/Applications/CData JDBC Driver for SAP SuccessFactors/* Execute the licensing utility command:java -jar cdata.jdbc.sapsuccessfactors.jar --license* Input your identification details (name, email) and either the string "TRIAL" or your valid license key. 5. Establish the configuration parameters for your data source connection (using Salesforce setup as an illustrative example): * Execute the following command to launch the Connection String configuration utility:java -jar cdata.jdbc.sapsuccessfactors.jar- Configure the necessary connection parameters and validate the linkage using "Test Connection".
Crucial Note: If the target system utilizes OAuth for security, an interactive browser-based authentication step will be mandatory.
- Upon a successful connection verification, capture and retain the generated connection string for subsequent steps.
- Construct a configuration file, typically designated with the
.prpextension (e.g.,sap-successfactors.prp), defining the required parameters in the following format: - Prefix: A short identifier prepended to the exposed utility names.
- ServerName: A distinct label for this specific server instance.
- ServerVersion: The version designation for the server.
- DriverPath: The absolute filesystem path pointing to the loaded JDBC driver JAR file.
- DriverClass: The fully qualified name of the JDBC Driver implementation class (e.g., cdata.jdbc.sapsuccessfactors.SAPSuccessFactorsDriver).
- JdbcUrl: The connection string, obtained previously, used by the CData JDBC Driver to interface with the target data system.
- Tables: Leave this field empty to grant access to all available schema elements, or specify a delimited list of tables for restricted exposure. env Prefix=sapsuccessfactors ServerName=CDataSAPSuccessFactors ServerVersion=1.0 DriverPath=PATH\TO\cdata.jdbc.sapsuccessfactors.jar DriverClass=cdata.jdbc.sapsuccessfactors.SAPSuccessFactorsDriver JdbcUrl=jdbc:sapsuccessfactors:InitiateOAuth=GETANDREFRESH; Tables=
- Configure the necessary connection parameters and validate the linkage using "Test Connection".
Integrating the Server with Claude Desktop
-
Generate or modify the configuration file for Claude Desktop (named
claude_desktop_config.json) to incorporate the new MCP endpoint definition. If the file exists, append the new entry into the existingmcpServersstructure.For Windows Environments
{ "mcpServers": { "{classname_dash}": { "command": "PATH\TO\java.exe", "args": [ "-jar", "PATH\TO\CDataMCP-jar-with-dependencies.jar", "PATH\TO\sap-successfactors.prp" ] }, ... } }
For Linux/Mac Environments
{ "mcpServers": { "{classname_dash}": { "command": "/PATH/TO/java", "args": [ "-jar", "/PATH/TO/CDataMCP-jar-with-dependencies.jar", "/PATH/TO/sap-successfactors.prp" ] }, ... } }
If necessary, relocate the generated configuration file to the client application's designated configuration path (using Claude Desktop as the example destination): Windows Relocation bash cp C:\PATH\TO\claude_desktop_config.json %APPDATA%\Claude\claude_desktop_config.json
Linux/Mac Relocation bash cp /PATH/TO/claude_desktop_config.json /Users/{user}/Library/Application\ Support/Claude/claude_desktop_config.json'
-
Restart or refresh the connecting client application (e.g., Claude Desktop) to ensure the newly defined MCP services are loaded.
Important Notice: A complete shutdown and subsequent relaunch of the Claude Desktop client (not just minimizing it) is often required for new MCP Servers to become visible and operational.
Independent Server Execution
- To launch the MCP Server as a standalone process, utilize the following command structure:
bash
java -jar /PATH/TO/CDataMCP-jar-with-dependencies.jar /PATH/TO/Salesforce.prp
Limitation: Due to its reliance on
stdiofor communication, this server instance is only viable for client applications running on the identical host machine.
Operational Guidelines
Once the MCP Server is correctly instantiated and configured within the AI client, the client gains access to built-in instrumentation capable of reading, creating, modifying, and purging underlying data records. Typically, explicit invocation of these tools is unnecessary; the client's intelligence should permit direct questioning about the connected data architecture. For instance: * "Analyze the relationship between successfully closed deals and the associated client sector." * "Quantify the total count of outstanding support cases within the 'SUPPORT' organizational unit." * "Enumerate my scheduled calendar entries for the current day."
Available Instrumentation & Functionality Details
For definitions below, {servername} substitutes the identifier assigned to the MCP Server within the configuration file (e.g., {classname_dash}).
* {servername}_get_tables: Fetches and reports the complete roster of accessible datasets within the connected source. Consult the {servername}_get_columns utility to determine the specific fields available for any given dataset. Output format is CSV, with the initial line containing field names.
* {servername}_get_columns: Retrieves the structural definitions (columns) for a specified dataset. Use {servername}_get_tables first to enumerate valid datasets. Output format is CSV, with the initial line containing field names.
* {servername}_run_query: Executes a structured SQL SELECT command against the data source.
JSON-RPC Interaction Prototypes
If direct scripting of server interactions is needed, bypassing the AI client interface (like Claude), refer to the following JSON payload examples. These adhere to the JSON-RPC 2.0 standard for invoking the established utilities.
Example Invocation for Fetching Table Schemas (sap_successfactors_get_tables)
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sap_successfactors_get_tables", "arguments": {} } }
Example Invocation for Retrieving Column Metadata (sap_successfactors_get_columns)
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "sap_successfactors_get_columns", "arguments": { "table": "Account" } } }
Example Invocation for Executing a Data Selection Query (sap_successfactors_run_query)
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "sap_successfactors_run_query", "arguments": { "sql": "SELECT * FROM [Account] WHERE [IsDeleted] = true" } } }
Diagnostic Reference
- If the CData MCP Server is not visible within Claude Desktop, confirm that the application has been completely terminated (use Windows Task Manager or macOS Activity Monitor to verify process closure).
- If data retrieval failures occur within Claude Desktop, meticulously re-verify the connection string configuration. It is best practice to use the dedicated utility to generate the string and then paste it into the corresponding
.prpconfiguration file. - For issues related to connecting to the backend data system, escalate the inquiry to the CData Support Team.
- For feedback or difficulties encountered while utilizing the MCP server itself, please engage with the CData Community Forum.
Licensing Terms
This MCP server is distributed under the permissive MIT License. This grants broad rights to utilize, alter, and disseminate the software, contingent upon adherence to the specified terms within the MIT License document. Refer to the LICENSE file within this repository for comprehensive details.
Comprehensive Connector Catalog
| Data Source Group | Available Connectors |
|---|---|
| CRM & ERP | Salesforce, Dynamics 365, NetSuite, SAP, Zoho CRM, HubSpot |
| Cloud Storage & DB | Amazon S3, Google BigQuery, Snowflake, PostgreSQL, MongoDB, Azure Synapse |
| Analytics & BI | Google Analytics, Tableau CRM, Splunk, Power BI XMLA |
| Productivity & Collaboration | Microsoft Teams, SharePoint, Jira, Confluence, Google Drive, Slack |
| Financial & Accounting | QuickBooks Online, Xero, Sage Cloud Accounting, MYOB AccountRight |
| File Systems & APIs | REST, OData, JSON, XML, FTP, SFTP, Kafka |
| ... and many more specialized platforms ... | See full list below |
| Access | Act CRM | Act-On | Active Directory |
| ActiveCampaign | Acumatica | Adobe Analytics | Adobe Commerce |
| ADP | Airtable | AlloyDB | Amazon Athena |
| Amazon DynamoDB | Amazon Marketplace | Amazon S3 | Asana |
| Authorize.Net | Avalara AvaTax | Avro | Azure Active Directory |
| Azure Analysis Services | Azure Data Catalog | Azure Data Lake Storage | Azure DevOps |
| Azure Synapse | Azure Table | Basecamp | BigCommerce |
| BigQuery | Bing Ads | Bing Search | Bitbucket |
| Blackbaud FE NXT | Box | Bullhorn CRM | Cassandra |
| Certinia | Cloudant | CockroachDB | Confluence |
| Cosmos DB | Couchbase | CouchDB | CSV |
| Cvent | Databricks | DB2 | DocuSign |
| Dropbox | Dynamics 365 | Dynamics 365 Business Central | Dynamics CRM |
| Dynamics GP | Dynamics NAV | eBay | eBay Analytics |
| Elasticsearch | EnterpriseDB | Epicor Kinetic | |
| Exact Online | Excel | Excel Online | |
| Facebook Ads | FHIR | Freshdesk | FTP |
| GitHub | Gmail | Google Ad Manager | Google Ads |
| Google Analytics | Google Calendar | Google Campaign Manager 360 | Google Cloud Storage |
| Google Contacts | Google Data Catalog | Google Directory | Google Drive |
| Google Search | Google Sheets | Google Spanner | GraphQL |
| Greenhouse | Greenplum | HarperDB | HBase |
| HCL Domino | HDFS | Highrise | Hive |
| HubDB | HubSpot | IBM Cloud Data Engine | IBM Cloud Object Storage |
| IBM Informix | Impala | JDBC-ODBC Bridge | |
| Jira | Jira Assets | Jira Service Management | JSON |
| Kafka | Kintone | LDAP | |
| LinkedIn Ads | MailChimp | MariaDB | Marketo |
| MarkLogic | Microsoft Dataverse | Microsoft Entra ID | Microsoft Exchange |
| Microsoft OneDrive | Microsoft Planner | Microsoft Project | Microsoft Teams |
| Monday.com | MongoDB | MYOB AccountRight | MySQL |
| nCino | Neo4J | NetSuite | OData |
| Odoo | Office 365 | Okta | OneNote |
| Oracle | Oracle Eloqua | Oracle Financials Cloud | Oracle HCM Cloud |
| Oracle Sales | Oracle SCM | Oracle Service Cloud | Outreach.io |
| Parquet | Paylocity | PayPal | Phoenix |
| PingOne | Pipedrive | PostgreSQL | |
| Power BI XMLA | Presto | Quickbase | QuickBooks |
| QuickBooks Online | QuickBooks Time | Raisers Edge NXT | Reckon |
| Reckon Accounts Hosted | Redis | Redshift | REST |
| RSS | Sage 200 | Sage 300 | Sage 50 UK |
| Sage Cloud Accounting | Sage Intacct | Salesforce | Salesforce Data Cloud |
| Salesforce Financial Service Cloud | Salesforce Marketing | Salesforce Marketing Cloud Account Engagement | Salesforce Pardot |
| Salesloft | SAP | SAP Ariba Procurement | SAP Ariba Source |
| SAP Business One | SAP BusinessObjects BI | SAP ByDesign | SAP Concur |
| SAP Fieldglass | SAP HANA | SAP HANA XS Advanced | SAP Hybris C4C |
| SAP Netweaver Gateway | SAP SuccessFactors | SAS Data Sets | SAS xpt |
| SendGrid | ServiceNow | SFTP | SharePoint |
| SharePoint Excel Services | ShipStation | Shopify | SingleStore |
| Slack | Smartsheet | Snapchat Ads | Snowflake |
| Spark | Splunk | SQL Analysis Services | SQL Server |
| Square | Stripe | Sugar CRM | SuiteCRM |
| SurveyMonkey | Sybase | Sybase IQ | Tableau CRM Analytics |
| Tally | TaxJar | Teradata | Tier1 |
| TigerGraph | Trello | Trino | Twilio |
| Twitter Ads | Veeva CRM | Veeva Vault | |
| Wave Financial | WooCommerce | WordPress | Workday |
| xBase | Xero | XML | YouTube Analytics |
| Zendesk | Zoho Books | Zoho Creator | Zoho CRM |
| Zoho Inventory | Zoho Projects | Zuora | ... Dozens More |
WIKIPEDIA Reference: XMLHttpRequest (XHR) is a specialized JavaScript Application Programming Interface (API) embodied as an object. Its primary methods facilitate the transmission of HTTP requests from a running web browser environment to a designated web server. This capability allows web-based applications to dispatch requests to the server asynchronously following the initial page load, and subsequently receive return data. XHR is foundational to the architectural pattern known as Ajax. Before the advent of Ajax, standard server interaction relied predominantly on traditional hyperlink navigation and form submission mechanisms, frequently resulting in the complete replacement of the currently displayed web page.
== Chronology ==
The conceptual basis for XMLHttpRequest was first developed in the year 2000 by the engineering team responsible for Microsoft Outlook. This concept was subsequently integrated into the Internet Explorer 5 browser release (1999). However, the initial syntax did not utilize the identifier XMLHttpRequest; instead, developers employed ActiveXObject("Msxml2.XMLHTTP") and ActiveXObject("Microsoft.XMLHTTP"). As of the release of Internet Explorer 7 (2006), universal support for the standardized XMLHttpRequest identifier became available across all major browser platforms.
The XMLHttpRequest identifier has since established itself as the prevailing convention supported by all leading browser engines, including Mozilla’s Gecko rendering engine (adopted in 2002), Safari version 1.2 (2004), and Opera version 8.0 (2005).
=== Standardization Efforts === The World Wide Web Consortium (W3C) issued its initial Working Draft specification detailing the XMLHttpRequest object on April 5, 2006. On February 25, 2008, the W3C released the Working Draft for Level 2 enhancements. This Level 2 specification introduced functionality to monitor transfer progress events, enable cross-origin communication, and manage raw byte streams. By the close of 2011, the features outlined in the Level 2 specification were consolidated back into the primary standard document. In late 2012, the stewardship for maintenance transitioned to the WHATWG, which now maintains a continuously evolving document utilizing the Web IDL specification language.
== Operational Flow == Generally, initiating a server communication using XMLHttpRequest involves adhering to a sequence of programming actions.
- Instantiation: Create a new XMLHttpRequest object by invoking its constructor function:
- Configuration: Invoke the "open" method to define the request protocol (e.g., GET, POST), designate the targeted server resource URI, and stipulate whether the operation will execute synchronously or asynchronously:
- Event Handling (Asynchronous Only): For non-blocking operations, attach a dedicated event listener function designed to trigger upon state transitions of the request:
- Transmission: Activate the communication channel by calling the "send" method, optionally passing data payloads:
- Response Processing: Monitor the state changes within the registered event handler. If the server successfully transmits data, it is typically stored in the "responseText" property by default. When the object concludes all processing for that response, its status transitions to state 4, the terminal "done" state. Beyond these fundamental steps, XMLHttpRequest offers extensive configuration options to govern request transmission characteristics and response handling methods. Custom headers can be injected into the request to convey specific instructions to the server, and data can be transmitted upstream during the "send" call. The received response payload can be automatically parsed from JSON format into a native, usable JavaScript object, or processed incrementally as data arrives, avoiding latency from waiting for the complete transmission. Furthermore, a request can be prematurely terminated via an abort call or configured to time out if completion is not achieved within a set timeframe.
== Cross-Domain Communication == During the nascent phases of the World Wide Web, a security vulnerability was identified wherein scripts running on one origin could easily access resources from a different origin, leading to potential information leakage. This led to the implementation of the Same-Origin Policy.
