MCP server de python-mcp-as400
Commit 24 oct 2026Conecta asistentes de IA con sistemas IBM i (AS/400) para consultar Db2, leer código fuente, compilar programas y analizar spooled files de forma segura.
También conocido como LorenteFacundo/python-mcp-as400
- Stars
- 2
- Herramientas
- 5
- Descargas, 30 días
- —
- Última versión
- —
- Último commit
- 24 oct 2026
- Licencia
- MIT
¿Qué es python-mcp-as400 MCP?
python-mcp-as400 es un MCP server. Conecta asistentes de IA con sistemas IBM i (AS/400) para consultar Db2, leer código fuente, compilar programas y analizar spooled files de forma segura. Expone 5 herramientas, como execute_sql, execute_cl_command, read_source_member.
Resumen generado a partir del README del proyecto
Acerca del MCP server de python-mcp-as400
Este MCP server permite conectar asistentes de IA con sistemas IBM i para realizar análisis y desarrollo de forma segura. Permite a los desarrolladores usar clientes como Claude o Cursor para interactuar con Db2 for i, leer código fuente en RPG, COBOL o CL, y gestionar tareas de compilación. Al cerrar la brecha entre los modelos de lenguaje extensos y la lógica de negocio heredada, ayuda a los equipos a realizar análisis de impacto en miles de tablas mucho más rápido que la inspección manual.
El servidor funciona localmente a través de stdio y requiere Python 3.10+, el IBM i Access ODBC Driver y credenciales de base de datos válidas proporcionadas mediante variables de entorno. Está diseñado con un modelo de seguridad estricto que prioriza el análisis sobre la destrucción. Utiliza una capa de validación para asegurar que las consultas SQL sigan siendo de solo lectura y que los comandos CL estén restringidos a una lista de permitidos específica, evitando cualquier modificación accidental de datos o eliminación de objetos.
Los desarrolladores pueden usar herramientas específicas como execute_sql para consultar tablas del sistema, read_source_member para inspeccionar código y compile_program para compilar programas en RPG o C. También incluye read_spoolfile para examinar logs de trabajos y listados de compilación, lo que lo convierte en una herramienta integral para mantener y comprender entornos complejos de IBM i.
Qué puedes hacer con él
- 1Inspeccionar código fuente heredadoPuedes pedirle a una IA que explique la lógica dentro de miembros específicos de RPG o COBOL.
- 2Depurar errores de compilaciónEl asistente puede compilar un programa y luego leer los spooled files resultantes para diagnosticar fallos.
- 3Consultar metadatos del sistemaLos desarrolladores pueden encontrar columnas específicas o estructuras de tablas utilizando comandos SQL de solo lectura.
Escrito a partir del README del proyecto. Cada caso de uso se verifica con una cita del mismo.
Herramientas de python-mcp-as400 MCP 5
Detectado desde el READMEexecute_sqlexecute_cl_commandread_source_membercompile_programread_spoolfile
| execute_sql | — | |
| execute_cl_command | — | |
| read_source_member | — | |
| compile_program | — | |
| read_spoolfile | — |
Configuración
DB_HOSTDB_PASSDB_USER
| Nombre | Descripción | Tipo |
|---|---|---|
| DB_HOST | — | |
| DB_PASS | — | |
| DB_USER | — |
Verificaciones automáticas
Ejecutado 14 nov 2026Informe completo →Aún no verificado. Un servidor necesita una puntuación de 80, ningún hallazgo grave y suficientes datos para que podamos revisarlo. Cómo funcionan las verificaciones
- Repositorio de origen vinculado y accesiblelorentefacundo/python-mcp-as400 is public and reachablegithub.com/lorentefacundo/python-mcp-as400 ↗Aprobado
- El paquete cita este repositorio como fuenteNo verificado
- Procedencia de la compilación (atestación Sigstore)No verificado
- Licencia de código abierto (OSI)MITspdx.org/licenses/MIT.html ↗Aprobado
- Commit o lanzamiento en el último añoLast commit or release 2026-10-24github.com/lorentefacundo/python-mcp-as400 ↗Aprobado
- OpenSSF ScorecardNo verificado
- El nombre del paquete no es similar a un paquete popularNo verificado
- Sin avisos críticos en el paquete ni en sus dependenciasNo verificado
- Sin instrucciones ocultas para el modelo5 tool descriptions and the README read; no override phrases, credential paths or hidden charactersAprobado
- Las herramientas destructivas están etiquetadasNo verificado
- El endpoint remoto responde al handshake MCPNo verificado
README
Ver en GitHubAS/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.
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 |
|---|---|---|
execute_sql |
Read-only SQL (SELECT, WITH, VALUES) |
SELECT * FROM QSYS2.SYSTABLES FETCH FIRST 5 ROWS ONLY |
execute_cl_command |
Allow-listed CL commands | DSPFD FILE(MYLIB/MYFILE) OUTPUT(*OUTFILE) OUTFILE(QTEMP/FDA) |
read_source_member |
Reads a source member | biblioteca='MYLIB', archivo_fuente='QRPGLESRC', miembro='MYPGM' |
compile_program |
Compiles RPG, CL, COBOL or C | library='DEVLIB', source_file='QRPGLESRC', member='MYPGM' |
read_spoolfile |
Lists or reads spooled files (compile listings, job logs) | program_name='MYPGM' |
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_PASS
The 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]"
pytest
| File | Purpose |
|---|---|
server.py |
MCP tools and the ODBC connection |
validation.py |
Security checks (no dependencies) |
tests/ |
Tests for every check, including real attack strings |
License
Preguntas sobre python-mcp-as400 MCP
¿Qué herramientas proporciona python-mcp-as400 MCP?
Expone 5 herramientas, incluidas execute_sql, execute_cl_command, read_source_member, compile_program, read_spoolfile.
¿Puede el asistente de IA modificar datos en mi sistema IBM i?
No, el servidor está diseñado únicamente para análisis y compilación. Utiliza SQL de solo lectura y una lista de permitidos estricta para comandos CL con el fin de evitar la destrucción de datos.