browse-integrations
Discover the external services a project consumes and browse their cached contracts through the MDL CATALOG — OData entities and actions, REST clients and operations, AsyncAPI channels and messages. U
SKILL.md.claude/skills/mendix/browse-integrations/SKILL.md
GitHub<!-- skill-index: generated by scripts/skill-index.py; make check-skill-index -->
<!-- /skill-index -->
Find it fast
sed -n '<from>,<to>p' SKILL.md one section rather than reading the file;
./mxcli syntax <topic> answers how do I write this for a fraction of either.
| lines | section |
|---|---|
| 27-34 | When to Use This Skill |
| 35-62 | Discovery: List All Services |
| 63-91 | Contract Browsing: OData $metadata |
| 92-106 | Contract Browsing: AsyncAPI (Business Events) |
| 107-143 | Catalog Queries (requires REFRESH CATALOG) |
| 144-195 | Workflow: Import Entities from a Contract |
Browse Integration Services and Contracts
This skill covers discovering external services, browsing cached contracts, and querying integration assets via the MDL CATALOG (local project metadata).
⚠️ NOTE: This covers the MDL CATALOG keyword (SELECT ... FROM CATALOG.entities), NOT the Mendix Catalog CLI (mxcli catalog search). See .claude/skills/mendix/catalog-search for the external service registry.
When to Use This Skill
- User asks what external services are configured in the project
- User wants to see available entities or actions from an OData service
- User wants to browse a business event contract (AsyncAPI)
- User asks about integration catalog tables
- User wants to find entities available in a contract but not yet imported
Discovery: List All Services
-- All OData clients (consumed services)
list consumed odata services;
-- All published OData services
list published odata services;
-- All consumed REST services
list consumed rest services;
-- All published REST services
list published rest services;
-- All business event services
list business event services;
-- All database connections
list database connections;
-- All external entities (imported from OData)
list external entities;
-- All external actions used in microflows
list external actions;
Contract Browsing: OData $metadata
create consumed odata service auto-fetches and caches the $metadata XML from HTTP(S) URLs or reads it from local files. Browse it without network access:
Note: MetadataUrl supports:
https://...orhttp://...— fetches from HTTP endpointfile:///abs/path— reads from local absolute path./pathorpath/file.xml— reads from local relative path (resolved against.mprdirectory)
Local metadata files enable offline development, reproducible testing, and version-pinned contracts.
create consumed odata service auto-fetches and caches the $metadata XML. Browse it without network access:
-- List all entity types from the contract
list contract entities from MyModule.SalesforceAPI;
-- List actions/functions
list contract actions from MyModule.SalesforceAPI;
-- Inspect a specific entity (properties, keys, navigation)
describe contract entity MyModule.SalesforceAPI.PurchaseOrder;
-- Generate a CREATE EXTERNAL ENTITY statement from the contract
describe contract entity MyModule.SalesforceAPI.PurchaseOrder format mdl;
-- Inspect an action's signature
describe contract action MyModule.SalesforceAPI.CreateOrder;
Contract Browsing: AsyncAPI (Business Events)
Business event client services cache the AsyncAPI YAML:
-- List channels
list contract channels from MyModule.ShopEventsClient;
-- List messages with payload info
list contract messages from MyModule.ShopEventsClient;
-- Inspect a message's payload properties
describe contract message MyModule.ShopEventsClient.OrderChangedEvent;
Catalog Queries (requires REFRESH CATALOG)
refresh catalog;
-- All contract entities across all OData clients
select ServiceQualifiedName, EntityName, EntitySetName, PropertyCount, Summary
from CATALOG.CONTRACT_ENTITIES;
-- All contract actions
select ServiceQualifiedName, ActionName, ParameterCount, ReturnType
from CATALOG.CONTRACT_ACTIONS;
-- All contract messages
select ServiceQualifiedName, MessageName, ChannelName, OperationType, PropertyCount
from CATALOG.CONTRACT_MESSAGES;
-- Find available entities NOT YET imported
select ce.EntityName, ce.ServiceQualifiedName, ce.PropertyCount
from CATALOG.CONTRACT_ENTITIES ce
left join CATALOG.EXTERNAL_ENTITIES ee
on ce.ServiceQualifiedName = ee.ServiceName and ce.EntityName = ee.RemoteName
where ee.Id IS null;
-- All REST operations across all consumed services
select ServiceQualifiedName, HttpMethod, path, Name
from CATALOG.CONSUMED_REST_OPERATIONS
ORDER by ServiceQualifiedName, path;
-- Cross-cutting: all integration services in a module
select ObjectType, QualifiedName
from CATALOG.OBJECTS
where ObjectType in ('CONSUMED_ODATA_SERVICE', 'CONSUMED_REST_SERVICE', 'PUBLISHED_ODATA_SERVICE',
'PUBLISHED_REST_SERVICE', 'BUSINESS_EVENT_SERVICE', 'DATABASE_CONNECTION')
and ModuleName = 'Integration';
Workflow: Import Entities from a Contract
Bulk import (all or filtered)
mdl 1;
-- Import all entity types at once
create external entities from MyModule.SalesforceAPI;
-- Import into a different module
create external entities from MyModule.SalesforceAPI into Integration;
-- Import only specific entities
create external entities from MyModule.SalesforceAPI entities (PurchaseOrder, Supplier);
-- Idempotent re-import (updates existing)
create or modify external entities from MyModule.SalesforceAPI;
Single entity (with customization)
Browse available entities:
list contract entities from MyModule.SalesforceAPI;Inspect the entity you want:
describe contract entity MyModule.SalesforceAPI.PurchaseOrder;Generate the CREATE statement:
describe contract entity MyModule.SalesforceAPI.PurchaseOrder format mdl;Copy, customize (remove unwanted attributes), and execute:
mdl 1; create external entity MyModule.PurchaseOrder from consumed odata service MyModule.SalesforceAPI ( EntitySet: 'PurchaseOrders', RemoteName: 'PurchaseOrder', Countable: Yes ) ( Number: long, status: string(200), SupplierName: string(200), GrossAmount: decimal );