Initial Release
The IRIS Execute MCP server provides 9 fully functional tools for comprehensive IRIS integration, including basic operations, compilation tools, and advanced unit testing capabilities with WorkMgr-based process isolation.
# Clone the repository git clone https://github.com/jbrandtmse/iris-execute-mcp.git cd iris-execute-mcp
Create virtual environment
python -m venv venv
Activate virtual environment
Windows:
venv\Scripts\activate
Linux/Mac:
source venv/bin/activate
Install dependencies
pip install -r requirements.txt
Create a .env
file (copy from .env.example
):
IRIS_HOSTNAME=localhost
IRIS_PORT=1972
IRIS_NAMESPACE=HSCUSTOM
IRIS_USERNAME=_SYSTEM
IRIS_PASSWORD=_SYSTEM
src/ExecuteMCP/Core/
directoryDo $System.OBJ.CompilePackage("ExecuteMCP")
If you plan to use the unit testing tools, configure the test root directory:
// Set the unit test root directory (create this directory first) Set ^UnitTestRoot = "C:\temp"
// Verify configuration
Write ^UnitTestRoot
Important: The directory specified in ^UnitTestRoot must exist and be writable by IRIS.
Add this to your Cline MCP settings:
{
"iris-execute-mcp": {
"autoApprove": [
"execute_command",
"execute_classmethod",
"get_global",
"set_global",
"get_system_info",
"compile_objectscript_class",
"compile_objectscript_package",
"queue_unit_tests",
"poll_unit_tests"
],
"disabled": false,
"timeout": 60,
"type": "stdio",
"command": "C:/iris-execute-mcp/venv/Scripts/python.exe",
"args": ["C:/iris-execute-mcp/iris_execute_mcp.py"],
"env": {
"IRIS_HOSTNAME": "localhost",
"IRIS_PORT": "1972",
"IRIS_NAMESPACE": "HSCUSTOM",
"IRIS_USERNAME": "_SYSTEM",
"IRIS_PASSWORD": "_SYSTEM"
}
}
}
✅ Server Name: iris-execute-mcp
✅ Script Name: iris_execute_mcp.py
(consolidated server with all features)
✅ 9 Tools: 5 basic + 2 compilation + 2 unit testing tools
✅ Virtual Environment: Uses isolated dependencies for reliability
✅ Environment Variables: Proper IRIS connection configuration
✅ Auto-Approve: All 9 tools approved for seamless AI workflows
# Navigate to project directory cd C:/iris-execute-mcp
Activate virtual environment
venv\Scripts\activate
Test server startup
python iris_execute_mcp.py
Expected output:
INFO - Starting IRIS Execute FastMCP Server
INFO - IRIS Available: True
INFO - ✅ IRIS connectivity test passed
INFO - 🚀 FastMCP server ready for connections
# Test all functionality python test_execute_final.py
Test FastMCP integration
python test_fastmcp.py
Validate MVP implementation
python validate_mvp.py
Test unit test implementation
python test_unittest_final_validation.py
Execute ObjectScript commands with I/O capture:
# Examples: "Execute: WRITE $ZV" → Returns actual IRIS version string
"Execute: SET ^MyGlobal = 123"
→ Returns "Command executed successfully"
Dynamically invoke ObjectScript class methods:
# Examples: "Call GetVersion on %SYSTEM.Version" → Returns IRIS version details
"Call ABS on %SYSTEM.SQL.Functions with parameter -456"
→ Returns 456
Manage IRIS globals dynamically:
# Set a global "Set global ^MyApp('Config','Version') to '1.0.0'"
Get a global
"Get the value of ^MyApp('Config','Version')"
Retrieve IRIS system information:
"What version of IRIS is running?"
→ Returns version, namespace, timestamp
Compile one or more ObjectScript classes with comprehensive error reporting.
IMPORTANT: Class names MUST include the .cls suffix for proper compilation.
# Compile single class (note the .cls suffix) "Compile ObjectScript class MyPackage.MyClass.cls" → Returns compilation status and any errors
Compile multiple classes (all with .cls suffix)
"Compile classes MyPackage.Class1.cls, MyPackage.Class2.cls"
→ Returns status for each classCustom compilation flags
"Compile MyPackage.MyClass.cls with flags 'bckry'"
→ b=rebuild, c=compile, k=keep source, r=recursive, y=display infoNote: If .cls suffix is omitted, it will be automatically added
"Compile MyPackage.MyClass" → Internally becomes "MyPackage.MyClass.cls"
Compile all classes in a package recursively:
# Compile entire package "Compile ObjectScript package MyPackage" → Compiles all classes in package and sub-packages
With custom flags
"Compile package MyPackage with flags 'bc'"
→ Basic compile without recursion
Queue unit test execution using WorkMgr async pattern for process isolation.
This tool uses %SYSTEM.WorkMgr to execute tests in an isolated worker process, avoiding %UnitTest.Manager singleton conflicts. Tests run with full assertion macro support and return immediately with a job ID for polling.
Auto-Prefix Feature: The leading colon for root test suite format is optional - it will be automatically added if missing.
# Queue a test suite (colon prefix is optional - auto-added if missing) "Queue unit test ExecuteMCP.Test.SampleUnitTest" → Returns job ID instantly for polling
With explicit colon (backward compatible)
"Queue unit test :ExecuteMCP.Test.SampleUnitTest"
→ Returns job ID instantly for pollingQueue with specific test method (no leading colon for method-specific tests)
"Queue unit test ExecuteMCP.Test.SampleUnitTest:TestAddition"
→ Runs only the TestAddition methodDefault qualifiers (optimized for VS Code workflow)
/noload - Don't load classes from filesystem (VS Code auto-syncs)
/nodelete - Don't delete test classes after run
/recursive - Run all test methods in the class/package
Custom qualifiers example
"Queue unit test :ExecuteMCP.Test with qualifiers '/debug/verbose'"
→ Runs tests with debug output
Prerequisites for Unit Testing:
Poll for unit test results from WorkMgr execution:
# Poll for results using job ID from queue_unit_tests "Poll unit test job 12345" → Returns current status if running, or complete results if finished
Response includes:
- Test counts (pass/fail/error)
- Individual test method results
- Duration and timestamps
- Detailed error messages if any
If you see “MCP error -32000: Connection closed”:
python iris_execute_mcp.py
Do $System.OBJ.CompilePackage("ExecuteMCP")
Write $SYSTEM.Security.Check("%Development","USE")
// Compile test classes (VS Code syncs but doesn't compile)
Do $System.OBJ.CompilePackage("ExecuteMCP.Test")
// Create test directory first
// Windows: mkdir C:\temp
// Then in IRIS:
Set ^UnitTestRoot = "C:\temp"
ExecuteMCP.Test.SampleUnitTest
- Auto-adds colon prefix:ExecuteMCP.Test.SampleUnitTest
- Explicit colon (backward compatible)ExecuteMCP.Test.SampleUnitTest:TestMethod
- Method-specific (no leading colon)Write ##class(%SYSTEM.WorkMgr).IsWorkerJobActive()
# Complete test workflow with compilation
1. "Compile ObjectScript package ExecuteMCP.Test"
2. "Queue unit test :ExecuteMCP.Test.SampleUnitTest"
3. "Poll unit test job "
4. "Get global ^UnitTest.Result to see raw results"
The WorkMgr-based unit testing enables robust CI/CD pipelines:
# Queue tests without blocking job_id = queue_unit_tests(":MyTestSuite")
Continue with other tasks
compile_classes()
deploy_changes()Check results when ready
results = poll_unit_tests(job_id)
if results["failed"] > 0:
raise TestFailure(results)
The unit test results are stored in globals with the following structure:
// Result global structure
^UnitTest.Result(ResultID, "ExecuteMCP\Test\SampleUnitTest", "SampleUnitTest", "TestAddition")
// Note: Suite names use backslashes, not dots
Contributions welcome! Please ensure:
MIT License - See LICENSE file for details
/documentation
directory/memory-bank
for project contextStatus: ✅ Production Ready - All 9 tools operational
Last Updated: September 7, 2025