Iris Dev
AI coding tools for InterSystems IRIS β single binary MCP server for VS Code Copilot and Claude Code
Ask AI about Iris Dev
Powered by Claude Β· Grounded in docs
I know everything about Iris Dev. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
iris-dev
Connect GitHub Copilot, Claude Code, or any MCP-compatible AI assistant directly to a live InterSystems IRIS instance. Your AI can compile, test, search, read, write, and debug ObjectScript without leaving the chat.
No Python. No pip. No npm. No API keys.
How it works
iris-dev runs as a local MCP (Model Context Protocol) server. Your AI assistant calls its tools β iris_compile, iris_doc, iris_execute, etc. β and iris-dev executes them against your real IRIS instance over the Atelier REST API. The AI sees compile errors, class definitions, and execution output in-line, the same way it would with a local filesystem.
Quick start β pick your setup
Option A: IRIS in Docker (local dev)
# 1. Install iris-dev (Mac Apple Silicon)
curl -fsSL https://github.com/intersystems-community/iris-dev/releases/latest/download/iris-dev-macos-arm64 \
-o /usr/local/bin/iris-dev && chmod +x /usr/local/bin/iris-dev
xattr -d com.apple.quarantine /usr/local/bin/iris-dev 2>/dev/null
# 2. Let iris-dev find your container automatically
iris-dev init # writes .iris-dev.toml from your running containers
# 3. Add to Claude Code (~/.claude/settings.json)
{
"mcpServers": {
"iris-dev": {
"command": "iris-dev",
"args": ["mcp"],
"env": { "OBJECTSCRIPT_WORKSPACE": "${workspaceFolder}" }
}
}
}
Option B: Remote or server IRIS (no Docker)
# Set connection via env vars β no .iris-dev.toml needed
{
"mcpServers": {
"iris-dev": {
"command": "iris-dev",
"args": ["mcp"],
"env": {
"IRIS_HOST": "iris.example.com",
"IRIS_WEB_PORT": "52773",
"IRIS_USERNAME": "_SYSTEM",
"IRIS_PASSWORD": "SYS",
"IRIS_NAMESPACE": "MYAPP"
}
}
}
}
For HTTPS or a non-root web gateway path:
"IRIS_SCHEME": "https",
"IRIS_WEB_PORT": "443",
"IRIS_WEB_PREFIX": "irisaicore"
Option C: VS Code Copilot Agent Mode
- Install the binary (see Installation below)
- Download
vscode-iris-dev-*.vsixfrom the releases page - In VS Code: Extensions (
Ctrl+Shift+X) β...β Install from VSIX - Reload VS Code β iris-dev (IRIS) appears automatically in Copilot Chat β Agent mode β tools
The extension reads your existing objectscript.conn and intersystems.servers config β no extra setup if you already use the InterSystems VS Code extensions.
Installation
Mac
# Apple Silicon (M1/M2/M3):
sudo mkdir -p /usr/local/bin
curl -fsSL https://github.com/intersystems-community/iris-dev/releases/latest/download/iris-dev-macos-arm64 \
-o /usr/local/bin/iris-dev && chmod +x /usr/local/bin/iris-dev
xattr -d com.apple.quarantine /usr/local/bin/iris-dev 2>/dev/null
# Intel Mac: replace "arm64" with "x86_64" above
Linux
curl -fsSL https://github.com/intersystems-community/iris-dev/releases/latest/download/iris-dev-linux-x86_64 \
-o /usr/local/bin/iris-dev && chmod +x /usr/local/bin/iris-dev
Windows
- Download
iris-dev-windows-x86_64.exefrom the releases page - Save it somewhere permanent, e.g.
C:\Users\yourname\bin\iris-dev.exe - In VS Code User Settings (JSON), set the binary path:
"iris-dev.serverPath": "C:\\Users\\yourname\\bin\\iris-dev.exe"
WSL2: Use the Windows binary. Set
IRIS_HOSTto the Windows host IP βlocalhostin WSL2 resolves to the Linux VM, not the Windows host.
Tools
iris-dev exposes 23 tools to your AI assistant:
| Tool | Needs Docker? | What it does |
|---|---|---|
iris_compile | β | Compile a class, routine, or wildcard (MyApp.*.cls). Returns errors with line numbers. |
iris_execute | β | Run arbitrary ObjectScript and return output. |
iris_query | β | Execute SQL, return rows as JSON. |
iris_doc | β | Read, write, delete, or check any IRIS document. SCM checkout handled via chat dialog. |
iris_symbols | β | Search classes and methods via %Dictionary. |
docs_introspect | β | Deep class inspection: methods, properties, XData, superclasses. |
iris_search | β | Full-text search across the namespace. Supports regex and category filters. |
iris_info | β | Namespace discovery: documents, jobs, CSP apps, metadata. |
iris_macro | β | Macro inspection: list, signature, definition, expand. |
iris_debug | β | Map INT errors to source lines, fetch error logs, capture error state. |
iris_generate | β | Build a context-rich prompt for the AI to generate ObjectScript. No API key needed. |
iris_generate_class | β | Generate and compile a class from a description (requires LLM API key). |
iris_generate_test | β | Generate %UnitTest scaffolding for an existing class. |
iris_source_control | β | Check lock status, checkout, execute SCM actions. |
iris_test | β | Run %UnitTest tests and return structured pass/fail results. |
iris_production | β | Start, stop, update, check, or recover an Interoperability production. |
iris_interop_query | β | Query production logs, queue depths, or message archive. |
iris_containers | β | List, select, or start IRIS Docker containers. |
iris_admin | β | IRIS administration: list namespaces, databases, users, roles, web apps; check permissions; create/delete users, namespaces, webapps (requires IRIS_ADMIN_TOOLS=1). |
iris_get_log | β | Retrieve a stored result by log_id from the progressive disclosure store. With id: returns the full result (paginated with limit/offset). Without id: lists all stored log entries. Use when a tool returns truncated: true. |
skill | β | Manage the local skills registry (list, describe, search, forget). |
skill_community | β | Browse community skills. |
kb | β | Index markdown files into a searchable knowledge base. |
Tools marked β Needs Docker require IRIS_CONTAINER to be set. Tools without the mark work over Atelier REST and work with any IRIS instance β local or remote.
Configuration reference
Environment variables
| Variable | Default | Description |
|---|---|---|
IRIS_HOST | localhost | IRIS web gateway hostname |
IRIS_WEB_PORT | 52773 | Web gateway port |
IRIS_SCHEME | http | http or https |
IRIS_WEB_PREFIX | (empty) | URL path prefix (e.g. irisaicore for /irisaicore/api/atelier/) |
IRIS_USERNAME | _SYSTEM | IRIS username |
IRIS_PASSWORD | SYS | IRIS password |
IRIS_NAMESPACE | USER | Default namespace |
IRIS_CONTAINER | (empty) | Docker container name β required for Docker-dependent tools |
OBJECTSCRIPT_WORKSPACE | $PWD | Workspace root for .iris-dev.toml lookup |
IRIS_LOG_STORE_MAX | 50 | Max entries in the progressive disclosure log store. Oldest entry evicted when full. |
IRIS_LOG_TTL_MINUTES | 60 | Minutes before a log entry expires. Expired entries return LOG_EXPIRED. |
IRIS_INLINE_COMPILE | 20 | iris_compile: max distinct error/warning entries returned inline before truncation. |
IRIS_INLINE_SEARCH | 30 | iris_search: max result entries returned inline before truncation. |
IRIS_INLINE_INFO | 30 | iris_info (what=documents): max document entries returned inline before truncation. |
IRIS_INLINE_ERROR_LOGS | 20 | debug_get_error_logs: max log entries returned inline before truncation. |
.iris-dev.toml (per-project config)
Drop this file in your project root and commit it so teammates get the same setup automatically.
# Local Docker container
container = "myapp-iris"
namespace = "MYAPP"
# Remote IRIS (alternative to Docker)
# host = "iris.example.com"
# web_port = 52773
# scheme = "https" # for TLS
# web_prefix = "irisaicore" # for non-root gateway path
Generate from your running containers: iris-dev init
Enterprise containers (intersystems/iris, intersystems/irishealth)
Enterprise images ship with WebServer=0 β no private web server. The standard solution is the ISC Web Gateway container alongside IRIS. iris-dev auto-detects it.
# docker-compose snippet
services:
iris:
image: containers.intersystems.com/intersystems/iris:2026.1
ports: ["4972:1972"]
webgateway:
image: containers.intersystems.com/intersystems/webgateway:2026.1
ports: ["52773:80"] # iris-dev scans port 52773
entrypoint: ["/bin/sh", "/init.sh"]
volumes: ["./webgateway-init.sh:/init.sh:ro"]
Three non-obvious setup gotchas in fresh containers β see iris-vscode-objectscript skill for the complete working webgateway-init.sh.
Connection discovery order
iris-dev resolves the connection in this order β first match wins:
- CLI flags (
--host,--web-port,--scheme) .iris-dev.tomlin the workspace root- Environment variables (
IRIS_HOST, etc.) - VS Code
settings.json(objectscript.conn/intersystems.servers) - Docker containers (scored by workspace name similarity)
- Localhost port scan (52773, 41773, 51773, 8080)
VS Code: Server Manager integration
If you use the InterSystems VS Code extensions, iris-dev reads your server definitions automatically. Your objectscript.conn should reference a named server so the full definition (including pathPrefix for non-standard gateways) is picked up:
"objectscript.conn": { "active": true, "server": "your-server-name" }
If iris-dev can't find your server: View > Output > iris-dev shows which servers were found and where.
Secure credential storage: If the InterSystems Server Manager extension is installed, iris-dev uses it to retrieve credentials from the OS keychain. On first use you'll be prompted for username and password. When the password prompt appears, click the π key icon before pressing Enter to store it in the keychain β subsequent VS Code restarts will then be fully silent. Pressing Enter without clicking π uses the password for the current session only. Server Manager is optional; without it iris-dev falls back to credentials in your server definition or MCP env vars.
Commands
iris-dev mcp # Start the MCP server (used by Claude Code / Copilot)
iris-dev compile MyApp.Foo.cls # Compile from the terminal
iris-dev init # Generate .iris-dev.toml from running containers
iris-dev --version # Check version
Contributing
Issues and PRs welcome. File bugs at the Issues tab β visible to the team and helps prioritization.
Questions or urgent issues: thomas.dyar@intersystems.com
