Three tools and no write path is the whole design: the model discovers tables, reads columns and runs SELECTs, so a badly framed question produces a wrong answer rather than a changed record. Two things decide whether it fits. The CData JDBC driver is a separate licensed product, with a trial key to start on. And the `Tables` field in the connection profile is where you choose how much of Sage 300 is reachable — left blank, everything the connection can see is in scope.
A read-only MCP server built on CData's JDBC Driver for Sage 300. The driver exposes Sage 300 as relational tables; the server puts three tools over it, so a client can discover what tables exist, read a table's columns, and run a SELECT — without anyone writing SQL by hand.
- The tables the driver exposes for Sage 300, returned as CSV with a header row — `sage300_get_tables`
- The columns of one of those tables, also as CSV, so a query can be composed against real field names — `sage300_get_columns`
- A SQL SELECT executed against live Sage 300 data — `sage300_run_query`
- Tool names that carry the prefix you set in the connection profile — the sample uses `Prefix=sage300` — so several CData servers can run side by side without colliding
- A `Tables` field in the profile that decides how much of Sage 300 is visible at all: leave it blank for everything the connection can reach, or list the tables you want exposed
Java and Maven to build — `mvn clean install` produces `CDataMCP-jar-with-dependencies.jar`. The CData JDBC Driver for Sage 300 is a separate download and needs licensing: run `java -jar cdata.jdbc.sage300.jar --license` and enter a name, an email and either `TRIAL` or a licence key. Connection settings go in a `.prp` file carrying `Prefix`, `ServerName` (the sample uses `CDataSage300`), `ServerVersion`, `DriverPath`, `DriverClass` (`cdata.jdbc.sage300.Sage300Driver`), the `JdbcUrl` produced by the driver's connection-string utility, and the optional `Tables` list. The client then launches `java -jar CDataMCP-jar-with-dependencies.jar <your>.prp`. Transport is stdio, so the server has to run on the same machine as the client. If the data source authenticates over OAuth, you approve it in a browser while building the connection string.
Build from source — clone the repository and build it, then point your client at the binary
