python-mcp-as400
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@python-mcp-as400list the first 5 tables in library MYLIB"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AS/400 MCP Server
English · Español
An MCP server that lets AI assistants (Claude, Cursor, any MCP client) work with IBM i (AS/400) systems: query Db2 for i, read RPG/COBOL/CL source, compile programs and read spooled files. Every input goes through strict validation, so the assistant can analyze everything without being able to break anything.
Why I built it
A lot of critical business logic still runs on IBM i, and the people who know it are few and busy. Understanding the impact of a change means reading thousands of tables and programs by hand. I wanted an AI assistant to do that reading for me, but connecting an LLM to a production system is only acceptable if it cannot change data or objects. This server is that bridge.
Related MCP server: mcp-server-db2i
Results
I presented it at BDT Global, where it was approved as a billable initiative and piloted with a client:
Manual | With the MCP server | |
Task estimated by a senior developer | 5 days | 3 hours (13x) |
Impact analysis across 6,000+ tables | 6 hours | 20 minutes (18x), and it found 2 tables missed by hand |
Tools
Tool | What it does | Example |
| Read-only SQL ( |
|
| Allow-listed CL commands |
|
| Reads a source member |
|
| Compiles RPG, CL, COBOL or C |
|
| Lists or reads spooled files (compile listings, job logs) |
|
Security model
The philosophy: analysis and compilation yes, destruction never. Validation lives in validation.py, has no dependencies, and is covered by 72 tests that run in CI on every push.
Read-only SQL
Only
SELECT,WITHandVALUES; no;, so no statement stacking.Blocks data-change table references hidden inside a
SELECT(SELECT * FROM FINAL TABLE (DELETE ...)).Blocks Db2 for i functions with side effects:
QCMDEXC(runs any CL command),HTTP_*/HTTP*CLOB(data exfiltration),IFS_WRITE*,END_JOBand others.Ignores string literals and quoted identifiers when checking keywords, so
WHERE MSG = 'DELETE'or aLAST_UPDATEcolumn still work.Adds
FETCH FIRST 1000 ROWS ONLYwhen there is no limit.
CL commands: strict allow list
Allowed:
DSP*,WRK*,CHKOBJ, compilation (CRTBNDRPG,CRTSQLRPGI,CRTBNDCBL, ...), library list and overrides.Everything else is rejected:
DLTOBJ,DLTLIB,CLRPFM,RUNSQLSTM,SBMJOB,CALL,GRTOBJAUT, ...Qualified commands (
QSYS/DLTLIB) are rejected.OUTFILE(...)must point toQTEMP, soDSP*commands cannot create or replace files in real libraries.
Everything else
Library, file, member, user and spooled-file names are validated against the IBM i naming rules before they reach any SQL.
Error messages never include credentials or connection strings.
Defense in depth. These checks reduce risk, they don't replace IBM i security. Connect with a user profile that only has the authorities it needs (ideally
*USEon the data and a development library for compiles).
Found by the tests
Writing the test suite (v1.1) exposed real gaps in v1.0, now fixed:
read_spoolfileconcatenateduserandspoolfile_nameinto SQL. Combined withQSYS2.QCMDEXC, that allowed running any CL command.execute_sqlacceptedVALUES QSYS2.QCMDEXC(...),FINAL TABLE (DELETE ...)andHTTP_POST(...).DSP*commands could write theirOUTFILEto any library.
Getting started
Requirements: Python 3.10+, the IBM i Access ODBC Driver, and a user on an IBM i system.
git clone https://github.com/LorenteFacundo/python-mcp-as400.git
cd python-mcp-as400
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e .
cp .env.example .env # then fill in DB_HOST, DB_USER, DB_PASSThe server talks MCP over stdio. Add it to your client, for example Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"as400": {
"command": "python",
"args": ["/path/to/python-mcp-as400/server.py"],
"env": {
"DB_HOST": "your-ibmi-host.com",
"DB_USER": "YOUR_USER",
"DB_PASS": "YOUR_PASSWORD"
}
}
}
}Or with Claude Code: claude mcp add as400 -- python /path/to/python-mcp-as400/server.py
Example prompts
"Which tables in MYLIB have a column called CUSTNO?" →
execute_sqloverQSYS2.SYSCOLUMNS"Which programs use the file CUSTOMERS?" →
DSPPGMREF ... OUTFILE(QTEMP/REFS)+execute_sql"Explain what CALCPRICE does" →
read_source_member"Compile CALCPRICE and tell me what failed" →
compile_program+read_spoolfile
Development
pip install -e ".[dev]"
pytestFile | Purpose |
| MCP tools and the ODBC connection |
| Security checks (no dependencies) |
| Tests for every check, including real attack strings |
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Connect AI assistants to explicitly paired computers, servers, and VMs for permitted remote actions.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with IBM i systems through SQL tools and commands, supporting secure authentication, system monitoring, and database operations via the Model Context Protocol.87Apache 2.0- AlicenseAqualityAmaintenanceEnables AI assistants to query and inspect IBM DB2 for i databases using read-only SQL commands and schema inspection tools. It provides secure access to table metadata, views, and indexes via the JT400 JDBC driver.19221 npm27MIT
- AlicenseNot gradedqualityCmaintenanceEnables development support for AS400/IBM i systems by providing read-only access to metadata, source code, and program dependencies via ODBC. It supports CL, RPG, and COBOL environments, allowing users to retrieve library, table, and system information.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with IBM i systems through the Model Context Protocol, providing secure SQL-based access to Db2 for i databases for querying, monitoring, and executing operations.Apache 2.0