cdata-teams-mcp-gateway
Facilitate natural language interactions for retrieving live Microsoft Teams datasets by establishing an MCP server utilizing the CData JDBC Driver, eliminating the necessity for users to possess SQL proficiency.
Author

CDataSoftware
Quick Info
Actions
Tags
CData Teams Model Context Protocol Gateway
:warning: This repository presents a read-only MCP server implementation. For comprehensive data manipulation capabilities (CRUD operations and actions) coupled with streamlined deployment, explore the complimentary CData MCP Server for Microsoft Teams (beta).
Objective
This read-only MCP Server was engineered to empower Large Language Models (LLMs), such as Claude Desktop, with the ability to query extant Microsoft Teams data. This functionality is underpinned by the CData JDBC Driver for Microsoft Teams.
The CData JDBC Driver serves to map Microsoft Teams entities into standard relational SQL structures.
This server component encapsulates the driver, exposing Teams data via a straightforward MCP interface. Consequently, LLMs can extract current information by posing queries in plain English—SQL knowledge is entirely bypassed.
Deployment Instructions
-
Obtain the repository source code: bash git clone https://github.com/cdatasoftware/microsoft-teams-mcp-server-by-cdata.git cd microsoft-teams-mcp-server-by-cdata
-
Compile the server application: bash mvn clean install
This process yields the bundled JAR file: CDataMCP-jar-with-dependencies.jar 3. Acquire and install the CData JDBC Driver specific to Microsoft Teams: https://www.cdata.com/drivers/msteams/download/jdbc 4. License the CData JDBC Driver: * Navigate to the
libdirectory within the driver installation path (common locations): * (Windows)C:\Program Files\CData\CData JDBC Driver for Microsoft Teams\* (Mac/Linux)/Applications/CData JDBC Driver for Microsoft Teams/* Execute the command:java -jar cdata.jdbc.msteams.jar --license* Input your credentials (name, email) and the licensing token ("TRIAL" or your purchased key). 5. Establish the data source connection configuration (using a placeholder like Salesforce for illustration): * Initiate the Connection String utility via:java -jar cdata.jdbc.msteams.jar- Define the connection parameters and validate with "Test Connection"
Note: OAuth-based data sources necessitate in-browser user authorization.
- Upon successful validation, capture and retain the resulting JDBC connection string.
- Generate a property file (e.g.,
microsoft-teams.prp) detailing the JDBC parameters, formatted as follows: - Prefix: A short identifier for exposed tools.
- ServerName: A distinct label for the server instance.
- ServerVersion: The version identifier for the server.
- DriverPath: The absolute file system path to the required JDBC driver JAR.
- DriverClass: The fully qualified name of the JDBC Driver implementation class (e.g., cdata.jdbc.msteams.MSTeamsDriver).
- JdbcUrl: The connection string obtained previously for the CData JDBC Driver.
- Tables: Either left empty for schema-wide access or populated with a delimited list of specific tables to expose. env Prefix=msteams ServerName=CDataMSTeams ServerVersion=1.0 DriverPath=PATH\TO\cdata.jdbc.msteams.jar DriverClass=cdata.jdbc.msteams.MSTeamsDriver JdbcUrl=jdbc:msteams:InitiateOAuth=GETANDREFRESH; Tables=
- Define the connection parameters and validate with "Test Connection"
Integration with Claude Desktop
-
Construct or update the configuration file for Claude Desktop (typically
claude_desktop_config.json) to incorporate the new MCP server definition. If the file exists, append the entry to themcpServersobject.Windows Client
{ "mcpServers": { "{classname_dash}": { "command": "PATH\TO\java.exe", "args": [ "-jar", "PATH\TO\CDataMCP-jar-with-dependencies.jar", "PATH\TO\microsoft-teams.prp" ] }, ... } }
Linux/Mac Client
{ "mcpServers": { "{classname_dash}": { "command": "/PATH/TO/java", "args": [ "-jar", "/PATH/TO/CDataMCP-jar-with-dependencies.jar", "/PATH/TO/microsoft-teams.prp" ] }, ... } }
If necessary, relocate the finalized configuration file to the client's designated directory: Windows bash cp C:\PATH\TO\claude_desktop_config.json %APPDATA%\Claude\claude_desktop_config.json
Linux/Mac bash cp /PATH/TO/claude_desktop_config.json /Users/{user}/Library/Application\ Support/Claude/claude_desktop_config.json'
-
Initiate or restart your consuming application (e.g., Claude Desktop).
Crucial Note: A full application shutdown (ensuring the process is terminated via Task Manager/Activity Monitor) and subsequent reopening is often required for new MCP servers to register correctly.
Independent Server Execution
- Execute the MCP Server standalone using the following command structure:
bash
java -jar /PATH/TO/CDataMCP-jar-with-dependencies.jar /PATH/TO/Salesforce.prp
Constraint: The server communicates exclusively via
stdio, restricting its use to client applications running on the identical host machine.
Operational Details
Once the MCP Server is initialized and linked via the configuration, the connected AI client gains access to integrated tools for direct data interaction. Explicit tool invocation is generally unnecessary; users should formulate direct questions about the desired underlying data system. For instance: * "Provide the statistical relationship between finalized sales opportunities and the industry classification of the associated accounts." * "Quantify the volume of pending support cases within the designated SUPPORT service area." * "Summarize my scheduled engagements for the present day."
Available Tooling and Functions
Tool names below utilize {servername} as a placeholder corresponding to the identifier specified in the configuration file (e.g., {classname_dash}).
* {servername}_get_tables: Fetches a comprehensive manifest of accessible tables from the data repository. Consult {servername}_get_columns for schema details per table. Output is provided in CSV format, including column headers in the initial row.
* {servername}_get_columns: Retrieves the attribute listing for a specified table. Use {servername}_get_tables beforehand to enumerate available targets. Output adheres to CSV formatting with a header row.
* {servername}_run_query: Executes a standard SQL SELECT statement against the data source.
JSON-RPC Interaction Examples
For scenarios involving programmatic tool invocation rather than relying on an LLM frontend, utilize the following JSON-RPC 2.0 compliant payloads when communicating with the MCP endpoint.
Example: Fetching Tables
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "microsoft_teams_get_tables", "arguments": {} } }
Example: Inspecting Columns
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "microsoft_teams_get_columns", "arguments": { "table": "Account" } } }
Example: Executing a Query
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "microsoft_teams_run_query", "arguments": { "sql": "SELECT * FROM [Account] WHERE [IsDeleted] = true" } } }
Remediation Guide
- Server Not Appearing in Client: Verify that the client application (Claude Desktop) has been completely terminated (check system process monitors) and relaunched.
- Data Retrieval Failures: Confirm the JDBC connection string configured in the property (.prp) file is accurate, ideally validated using the Connection String Builder utility.
- Connectivity Issues: For persistent difficulties connecting to the underlying data source, engage the CData Support Team.
- MCP Server Operational Feedback: For issues related to the MCP gateway itself or general suggestions, participate in the CData Community.
Licensing
This MCP gateway component is distributed under the terms of the MIT License. This permits unrestricted use, modification, and dissemination, subject to adherence to the MIT License stipulations. Full details are accessible in the repository's LICENSE file.
Comprehensive Source Connectivity
(Table content detailing supported data sources remains unchanged for conciseness, as it is factual metadata.)
| 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: 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.
== Origin Story == The conceptual underpinning for XMLHttpRequest was first devised in 2000 by the development team behind Microsoft Outlook. This concept subsequently saw its initial implementation within the Internet Explorer 5 browser release (1999). However, the syntax employed initially deviated from the standardized XMLHttpRequest identifier, instead using COM objects like ActiveXObject("Msxml2.XMLHTTP") and ActiveXObject("Microsoft.XMLHTTP"). By the release of Internet Explorer 7 (2006), all contemporary browsers had adopted native support for the XMLHttpRequest identifier. Today, the XMLHttpRequest identifier functions as the established protocol across all primary browser engines, including Mozilla's Gecko rendering engine (adopted circa 2002), Safari 1.2 (2004), and Opera 8.0 (2005).
=== Formal Specification Evolution === The World Wide Web Consortium (W3C) issued the initial Working Draft specification for the XMLHttpRequest object on April 5, 2006. Subsequently, on February 25, 2008, the W3C published the Level 2 specification draft. Level 2 introduced crucial enhancements such as event progress monitoring capabilities, support for cross-site request execution, and mechanisms for handling binary byte streams. By the close of 2011, the features defined in Level 2 were integrated back into the primary specification. Development responsibilities transitioned to the WHATWG near the end of 2012, where it is currently maintained as a dynamic document using Web IDL standards.
== Execution Pattern == Generally, dispatching a request using XMLHttpRequest mandates adherence to several distinct programming stages.
- Instantiate an XMLHttpRequest object via its constructor call:
- Invoke the "open" method to define the request methodology, pinpoint the target resource URI, and specify whether the operation should proceed synchronously or asynchronously:
- For asynchronous operations, assign a dedicated event listener configured to trigger upon any change in the request's state:
- Initiate the actual data transfer by executing the "send" method:
- Process state transitions within the assigned event listener. Upon receipt of server data, this response is, by default, stored in the "responseText" property. When the object concludes processing the inbound transmission, its state transitions to 4, signifying the "done" condition. Beyond these fundamental steps, XMLHttpRequest offers numerous configuration points to fine-tune request transmission and response handling. Developers can inject custom header fields to guide server fulfillment logic, and data payloads can be transmitted to the server via arguments provided to the "send" call. The response data stream permits parsing from JSON format into native JavaScript objects, or processing incrementally as segments arrive rather than waiting for complete buffer reception. Furthermore, the request can be preemptively terminated or configured to fail automatically if a specified time threshold is exceeded.
== Inter-Origin Communication ==
During the nascent stages of the World Wide Web, constraints were quickly identified that prevented direct data exchange betwee
