11![ CI] ( https://github.com/SoftwareAG/CONNX_MCP_Sample/actions/workflows/ci.yml/badge.svg )
2- ![ Python Version] ( https://img.shields.io/badge/Python-3.11%2C%203.12-blue )
2+ ![ Python Version] ( https://img.shields.io/badge/Python-3.11%2C%203.12-blue )
33
44## Table of Contents
55
1919
2020## CONNX MCP Server
2121
22- This project is a demonstration and reference implementation intended to show how an MCP server can be structured, configured, and hosted locally to enable AI-assisted access to CONNX data.
22+ This project is a demonstration and reference implementation intended to show how an MCP server can be structured, configured, and hosted locally to enable AI-assisted access to Mainframe VSAM data via Software AG CONNX .
2323
2424The server is not intended to be a complete or hardened production solution. Instead, it provides a focused, minimal example of MCP concepts, including tool definitions, resource exposure, ANSI SQL-92 query patterns, and safe interaction with legacy data sources.
2525
2626## Features
2727
2828- ODBC connection to CONNX for unified database access.
29- - MCP tools: ` query_connx ` , ` update_connx ` .
29+ - MCP tools: For example ` query_connx ` , ` update_connx ` .
3030- Resources: Schema discovery.
3131- Async support for efficiency.
3232
3333## Prerequisites
3434
35- - Python 3.8 or higher
35+ - Python 3.8 or higher (tested with Python 3.11/3.12)
3636- CONNX ODBC driver installed and configured
37+ - For Windows: CONNX ODBC Driver.
38+ - For Linux: unixODBC with CONNX driver
3739- Valid CONNX DSN (Data Source Name) configured in your system
3840- Database credentials with appropriate read/write permissions
39- - For Windows: Microsoft ODBC Driver for CONNX
40- - For Linux: unixODBC with CONNX driver
4141
4242## Installation
4343
44441 . Clone the repo: ` git clone https://github.com/SoftwareAG/CONNX_MCP_Sample.git `
45452 . Install dependencies: ` pip install -r requirements.txt `
46463 . Configure CONNX DSN (see Configuration section below)
47+ 4 . Configure Claude Desktop MCP connection
4748
4849## Configuration
4950
@@ -76,7 +77,7 @@ connection_string = (
7677
7778This server is designed to be launched by an MCP host (e.g., Claude Desktop) using stdio transport.
7879
79- You typically do not run it manually except for smoke testing.
80+ You typically do not run the Python code manually except for smoke testing.
8081
8182---
8283
@@ -86,7 +87,7 @@ This server exposes functionality through **MCP tools**, allowing clients to exe
8687
8788MCP tools provide a safe, well-defined interface for interacting with CONNX-backed data without exposing raw database connections to clients.
8889
89- ## Currently Available Tools
90+ ## Sample of Currently Available Tools
9091
9192### ` query_connx `
9293
@@ -240,7 +241,7 @@ The CONNX MCP demo uses 3 Mainframe VSAM datasets. COBOL copybooks were used to
240241
241242### Customers
242243
243- ``` cobol
244+ ``` text
244245
24524601 CUSTOMERS-VSAM.
246247 05 CUSTOMERID PIC X(5).
@@ -255,7 +256,7 @@ The CONNX MCP demo uses 3 Mainframe VSAM datasets. COBOL copybooks were used to
255256
256257### Orders
257258
258- ``` cobol
259+ ``` text
259260
26026101 ORDERS-VSAM.
261262 05 ORDERID PIC 9(4).
@@ -267,44 +268,82 @@ The CONNX MCP demo uses 3 Mainframe VSAM datasets. COBOL copybooks were used to
267268
268269### Products
269270
270- ``` cobol
271+ ``` text
271272
27227301 PRODUCTS-VSAM.
273- 05 PRODUCTID PIC 9(4).
274- 05 PRODUCTNAME PIC X(40).
275- 05 PRODUCTPRICE PIC 9(4).
276- 05 PRODUCTKEYWORDS PIC X(48).
277- 05 PRODUCTGROUPID PIC 9(4).
274+ 05 PRODUCTID PIC 9(4).
275+ 05 PRODUCTNAME PIC X(40).
276+ 05 PRODUCTPRICE PIC 9(4).
277+ 05 PRODUCTKEYWORDS PIC X(48).
278+ 05 PRODUCTGROUPID PIC 9(4).
278279```
279280
280281---
281282
282283## Sample Questions
283284
284- 1. “How many customers do we have in total?”
285- 2. “Which customers live in California?”
286- 3. “Which customers are in San Francisco?”
287- 4. “How many customers do we have in each state?”
288- 5. “Show me details for customer Z3375.”
289- 6. “Do we have any customers missing phone numbers?”
290- 7. "What products are most frequently ordered by customers?"
291-
292- ### What MCP tools are available?
293-
294- CONNX Database Server Tools:
295-
296- - query_connx - Query data from CONNX-connected databases using SQL (SELECT-only queries)
297- - update_connx - Perform update operations (requires CONNX_ALLOW_WRITES=true)
298- - count_customers - Get total number of customers
299- - customers_by_state - Get customer distribution by state
300- - customer_cities - Get customer cities information
301- - customers_missing_phone - Find customers without phone numbers
302- - get_customer - Retrieve a specific customer by ID
303- - find_customers - Search for customers by state and optional city
304- - describe_entities - Describe known business entities and their data sources
305- - count_entities - Count rows for business entities (customers, clients, etc.)
306- - customer_orders_for_product - Get detailed order information for a specific customer and product.
285+ - How many customers do we have in total?
286+ - Which customers live in California?
287+ - Which customers are in San Francisco?
288+ - How many customers do we have in each state?
289+ - Show me details for customer Z3375.
290+ - Do we have any customers missing phone numbers?
291+ - What products are most frequently ordered by customers?
292+
293+ ---
294+
295+ ### What MCP tools are available for the CONNX?
296+
297+ CONNX Demo Database Server Tools:
298+
299+ Core Query Tools
300+
301+ - ** query_connx** - Execute SELECT queries (read-only, single statement)
302+ - ** update_connx** - Execute INSERT/UPDATE/DELETE operations (requires ` CONNX_ALLOW_WRITES=true ` )
303+
304+ Customer-Specific Tools
305+
306+ - ** count_customers** - Return total number of customers
307+ - ** customers_by_state** - Get customer counts grouped by state
308+ - ** customer_cities** - Get distinct list of customer cities
309+ - ** customers_missing_phone** - Find customers without phone numbers
310+ - ** get_customer** - Get full customer details by customer ID
311+ - ** find_customers** - Find customers by state and optional city (with max_rows limit)
312+ - ** customers_by_product** - Find customers who ordered a specific product (with optional order count)
313+
314+ Entity/Metadata Tools
315+
316+ - ** describe_entities** - Describe known business entities (customers, orders, products) and their table mappings
317+ - ** count_entities** - Count rows for any known business entity using natural language names
318+
319+ Resources (not tools, but available via MCP resources)
320+
321+ - ** schema://schema** - Get all table/column schema information
322+ - ** schema://schema/{table_name}** - Get schema for a specific table
323+ - ** schema://domain/customers** - Canonical metadata about customers domain
324+ - ** domain://datasets** - Information about available datasets
325+ - ** semantic://entities** - Semantic entity information with relationships
326+
327+ ---
328+
329+ ## Tool Summary by Use Case
330+
331+ ** For exploring data:**
332+ - ` describe_entities ` - Start here to see what's available
333+ - ` query_connx ` - Flexible SQL queries
334+
335+ ** For customer operations:**
336+ - ` get_customer ` - Single customer lookup
337+ - ` find_customers ` - Search by location
338+ - ` customers_by_product ` - Product-based customer search
339+ - ` count_customers ` - Quick count
340+
341+ ** For analytics:**
342+ - ` customers_by_state ` - Geographic distribution
343+ - ` customers_missing_phone ` - Data quality checks
344+ - ` count_entities ` - Entity counts with natural language
307345
346+ The tools follow a pattern of providing both low-level SQL access (` query_connx ` ) and high-level purpose-built tools for common operations.
308347
309348---
310349
0 commit comments