| author | tdyar |
| benchmark_date | 2026-04-11 |
| benchmark_iris_version | 2025.1 |
| benchmark_tasks | ["prd-001","prd-002","prd-003","prd-004","prd-005","prd-006","prd-007"] |
| compatibility | objectscript, iris, sql |
| description | Use when asked about IRIS capabilities, products, or features — especially MCP, full-text search, HL7/Interoperability, mirroring, IRIS for Health vs HealthShare. AI models confidently describe features that don't exist or confuse products. |
| iris_version | >=2024.1 |
| license | MIT |
| metadata | {"baseline_pass_rate":1,"benchmark_note":"Source inspection suite. Negative lift when loaded globally (-29%). Load on-demand when asked about IRIS capabilities/products. Features ARE in IRIS — this skill prevents denial of existence.","lift":-0.286,"red_phase":"Model denies MCP exists, invents Python HL7 APIs, confuses IRIS/HealthShare, uses PostgreSQL FTS syntax","version":"1.0.0"} |
| name | iris-product-features |
| pass_rate | 0.714 |
| state | reviewed |
| tags | ["iris","features","mcp","interoperability","fts","health","capabilities"] |
IRIS Product Features — Hard Gate
AI models deny features that exist and invent features that don't. Check here first.
HARD GATE
Native MCP Server (IRIS 2026.1+)
// IRIS has a built-in MCP server — no FastMCP, no Python required
// The native server is %AI.MCP.Service
// Configure via Management Portal: System > AI Configuration > MCP
// Wrong assumption models make:
// "IRIS doesn't support MCP natively, you need to wrap it with FastMCP"
// This was true before 2026.1. It is FALSE for IRIS 2026.1+.
Claude Desktop / opencode config for native IRIS MCP:
{
"mcpServers": {
"iris": {
"command": "objectscript-mcp",
"env": {"IRIS_HOST": "localhost", "IRIS_PORT": "1972"}
}
}
}
Full-Text Search — iFind (NOT PostgreSQL FTS)
SELECT * FROM MyTable WHERE %CONTAINS(TextBody, 'search terms')
SELECT *, %iFind.Rank AS relevance
FROM MyTable WHERE %CONTAINS(TextBody, 'search terms')
ORDER BY relevance DESC
SELECT * FROM MyTable WHERE to_tsvector('english', content) @@ to_tsquery('term');
SELECT * FROM MyTable WHERE content LIKE '%term%';
Interoperability — HL7 Routing
There is no Python API for IRIS Interoperability routing. It is configured in:
- Management Portal (recommended): System > Interoperability > Build > Business Processes
- ObjectScript — subclass
Ens.BusinessProcess or EnsLib.HL7.MsgRouter.RoutingEngine
// Routing rule in ObjectScript:
Class MyApp.HL7Router Extends EnsLib.HL7.MsgRouter.RoutingEngine
{
// Rules defined via Rule Editor in Management Portal
// HL7 field access: {MSH:9.1} for message type
// Target: "ADT_Handler" (name of a Business Operation)
}
HL7 field path syntax: {SegmentName:FieldNumber.ComponentNumber} — e.g., {MSH:9.1} for trigger event.
IRIS Product Family (Not the Same Thing)
| Product | What it is | Includes |
|---|
| IRIS | Core database + application server | SQL, globals, ObjectScript, embedded Python, interop |
| IRIS for Health | IRIS + healthcare layer | + FHIR server, SMART on FHIR, healthcare interop |
| Health Connect | Integration engine | HL7, DICOM, FHIR, X12, EDI routing (built on IRIS) |
| HealthShare | Clinical data platform | Patient Index, Health Insight, HIE tools (built on IRIS for Health) |
Rule: IRIS for Health ⊂ HealthShare ⊂ full HealthShare suite. They are NOT the same product and NOT cloud vs on-prem editions of each other.
Mirroring / High Availability
Mirroring is configured via:
- Management Portal: System > Configuration > Mirror Settings
- CPF merge file for automated deployment
- ObjectScript:
##class(SYS.Mirror).*) classes
// No CLI command exists:
// iris config mirroring --mode=failover ← DOES NOT EXIST
// Do ##class(SYS.Mirror).Configure(...) ← not the API
// Correct: use Management Portal wizard or:
Set sc = ##class(Config.MapMirrors).Create("MIRRORNAME", .props)
Mirror topology: Primary (read/write) → Failover member (hot standby) → Async members (DR/reporting). Failover is automatic; async members require manual promotion.
Version Feature Quick Reference
| Feature | Available since | Notes |
|---|
| Embedded Python | 2021.2 | %SYS.Python class |
| VECTOR datatype | 2024.1 | Community Edition OK |
| HNSW index | 2025.1 | AS HNSW(Distance='Cosine') |
| Native MCP server | 2026.1 | %AI.MCP.Service |
| iFind full-text | 2012+ | %iFind.Index.Basic |
| FHIR R4 server | 2020.1 | IRIS for Health only |
| Secure Wallet | 2025.2 | %Wallet.* namespace |
Interoperability — Namespace Enablement (The Key Bit)
Interoperability is installed on every IRIS. The question is whether it's enabled on a specific namespace.
// Check if THIS namespace is Interop-enabled:
Write ##class(%EnsembleMgr).IsEnsembleNamespace()
// 1 = enabled, 0 = not enabled (even if Interop is installed)
// Enable a namespace (requires %Admin_Manage privilege):
// Usually done once at setup — not per-session
Do ##class(%EnsembleMgr).EnableNamespace("MYNS", 1)
// Or check from %SYS:
Set ns = "MYNS"
Write ##class(Config.Namespaces).GetEnsemble(ns)
What breaks without enablement:
// These compile fine but fail at runtime if namespace is NOT Interop-enabled:
Set prod = ##class(Ens.Director).GetActiveProductionName() // <CLASS DOES NOT EXIST>
Do ##class(Ens.Director).StartProduction("MyApp.Production") // <CLASS DOES NOT EXIST>
Set msg = ##class(EnsLib.HTTP.OutboundAdapter).%New() // <CLASS DOES NOT EXIST>
The classes exist in the install but their package mappings aren't added to the namespace until EnableNamespace runs. This is why "IRIS has Interoperability" and "this namespace can run an Interop production" are different things.
Deploying to a new IRIS namespace that needs Interop:
- Verify install:
iris list shows Interoperability: installed
- Enable namespace:
Do ##class(%EnsembleMgr).EnableNamespace("MYNS", 1)
- Confirm:
Write ##class(%EnsembleMgr).IsEnsembleNamespace() → 1
- Start a production: use
interop_production_start MCP tool or Management Portal
Exporting a namespace that has Interop enabled will include EnsLib.*/EnsPortal.* in the export — these are ISC's framework classes, NOT your application code. Strip them from your deployment script; they'll already be present on any target IRIS.