Machina capability matrix¶
Code-derived from machina.introspect.describe(). This file is generated — do not edit it by hand. Run python scripts/gen_spine.py to regenerate after changing connectors, capabilities, or seams.
Capability x connector matrix¶
| Capability | Method | calendar | document_store | excel | excel_csv | generic_cmms | generic_sql | maximo | mqtt | opcua | sap_pm | slack | sql | telegram | upkeep | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| browse_nodes | browse_nodes |
yes | ||||||||||||||
| cancel_work_order | cancel_work_order |
cfg | ||||||||||||||
| close_work_order | close_work_order |
cfg | ||||||||||||||
| create_calendar_event | create_event |
cfg | ||||||||||||||
| create_work_order | create_work_order |
cfg | cfg | yes | cfg | yes | yes | cfg | yes | |||||||
| delete_calendar_event | delete_event |
cfg | ||||||||||||||
| get_work_order | get_work_order |
cfg | yes | yes | yes | |||||||||||
| publish_message | publish |
yes | ||||||||||||||
| read_assets | read_assets |
yes | yes | yes | yes | yes | yes | yes | yes | |||||||
| read_calendar_events | read_events |
yes | ||||||||||||||
| read_failure_modes | read_failure_modes |
cfg | cfg | cfg | cfg | cfg | ||||||||||
| read_maintenance_history | read_maintenance_history |
yes | ||||||||||||||
| read_maintenance_plans | read_maintenance_plans |
cfg | yes | yes | yes | |||||||||||
| read_node_value | read_value |
yes | ||||||||||||||
| read_node_values | read_values |
yes | ||||||||||||||
| read_spare_parts | read_spare_parts |
yes | yes | yes | yes | |||||||||||
| read_work_orders | read_work_orders |
yes | yes | yes | yes | yes | yes | yes | yes | |||||||
| receive_message | listen |
yes | yes | yes | ||||||||||||
| retrieve_section | retrieve_section |
yes | ||||||||||||||
| search_documents | search_documents |
yes | ||||||||||||||
| send_message | send_message |
yes | yes | yes | ||||||||||||
| subscribe_to_nodes | subscribe |
yes | ||||||||||||||
| subscribe_to_topics | subscribe |
yes | ||||||||||||||
| update_work_order | update_work_order |
cfg | cfg | cfg | yes | yes | yes |
Legend: yes = declared and backed by a live method; cfg = available only under the right configuration/backend (annotated, not resolved — describe() runs without a config).
Capabilities¶
- browse_nodes (method
browse_nodes) - provided by: opcua
- cancel_work_order (method
cancel_work_order) - provided by: —
- configurable in: generic_cmms
- close_work_order (method
close_work_order) - provided by: —
- configurable in: generic_cmms
- create_calendar_event (method
create_event) - provided by: —
- configurable in: calendar
- create_work_order (method
create_work_order) - provided by: generic_cmms, maximo, sap_pm, upkeep
- configurable in: excel, excel_csv, generic_sql, sql
- delete_calendar_event (method
delete_event) - provided by: —
- configurable in: calendar
- get_work_order (method
get_work_order) - provided by: maximo, sap_pm, upkeep
- configurable in: generic_cmms
- publish_message (method
publish) - provided by: mqtt
- read_assets (method
read_assets) - provided by: excel, excel_csv, generic_cmms, generic_sql, maximo, sap_pm, sql, upkeep
- read_calendar_events (method
read_events) - provided by: calendar
- read_failure_modes (method
read_failure_modes) - provided by: —
- configurable in: excel, excel_csv, generic_cmms, generic_sql, sql
- read_maintenance_history (method
read_maintenance_history) - provided by: generic_cmms
- read_maintenance_plans (method
read_maintenance_plans) - provided by: maximo, sap_pm, upkeep
- configurable in: generic_cmms
- read_node_value (method
read_value) - provided by: opcua
- read_node_values (method
read_values) - provided by: opcua
- read_spare_parts (method
read_spare_parts) - provided by: generic_cmms, maximo, sap_pm, upkeep
- read_work_orders (method
read_work_orders) - provided by: excel, excel_csv, generic_cmms, generic_sql, maximo, sap_pm, sql, upkeep
- receive_message (method
listen) - provided by: email, slack, telegram
- retrieve_section (method
retrieve_section) - provided by: document_store
- search_documents (method
search_documents) - provided by: document_store
- send_message (method
send_message) - provided by: email, slack, telegram
- subscribe_to_nodes (method
subscribe) - provided by: opcua
- subscribe_to_topics (method
subscribe) - provided by: mqtt
- update_work_order (method
update_work_order) - provided by: maximo, sap_pm, upkeep
- configurable in: excel, excel_csv, generic_cmms
Extension seams¶
To add a connector, place it at connectors/{category}/{name}.py and implement the BaseConnector Protocol structurally (a bare class — do NOT subclass it).
Protocol seams¶
BaseConnector (machina.connectors.base)¶
Protocol that all Machina connectors must satisfy.
capabilities(...)— Typed set of actions this connector supports.async connect(...)— Establish a connection to the external system.async disconnect(...)— Gracefully close the connection.async health_check(...)— Check whether the external system is reachable and responsive.
RefreshableConnector (machina.connectors.docs.watcher)¶
Any connector with a synchronous refresh method.
refresh(...)
SupportsConfirmation (machina.connectors.comms.types)¶
Channels that can confirm a pending write synchronously, in-turn.
async request_confirmation(...)— Ask the user to confirm a pending write and return their decision.
Convention seams¶
Not reflectable Protocols — conventions an implementer follows, with where each one lives:
- MCP tool registration — Map a capability to the MCP tool(s) auto-registered when a connector declares it.
- location:
mcp/tools.py::CAPABILITY_TO_TOOL - capability vocabulary — Add a new action identifier to the Capability StrEnum.
- location:
connectors/capabilities.py::Capability.{NEW_MEMBER} - capability→method map — Map the new capability to its backing method name (capability values are not always method names).
- location:
introspect/_methods.py::CAPABILITY_TO_METHOD - connector-type registration — Register a new connector type → dotted factory path so the runtime and MCP layer can discover it.
- location:
runtime._CONNECTOR_FACTORIES['{type}'] = '{dotted.path.ConnectorClass}' - transport/mapper split — Vendor payload↔domain mapping lives as pure functions, separate from the connector's transport code; the connector imports the mapper.
- location:
connectors/cmms/mappers/{vendor}.py - workflow builtins — Drop a built-in workflow template into the builtins package.
- location:
workflows/builtins/{workflow_name}.py
Configuration schema (shape only)¶
Top-level keys of MachinaConfig (from model_json_schema()). Shape only — never any configured values:
channels— Communication channels (defaults to CLI if empty)confirmations— Require human confirmation before write/mutation tool callsconnectors— Named connector configurationsdescription— Agent descriptionllmlogging— Logging configuration overridesmcpname— Agent nameplantsandbox— Enable sandbox mode (writes are logged, not executed)
Nested config objects: ChannelConfig, ConnectorConfig, LLMConfig, McpConfig, PlantConfig
Known gaps¶
Capabilities in the vocabulary that no registered connector provides (declared only by connectors absent from the default factory registry — e.g. SimulatedSensorConnector):
- get_latest_reading — Declared by SimulatedSensorConnector (machina.connectors.iot.simulated), which is not in the default factory registry (_CONNECTOR_FACTORIES); no registered connector provides it.
- get_related_readings — Declared by SimulatedSensorConnector (machina.connectors.iot.simulated), which is not in the default factory registry (_CONNECTOR_FACTORIES); no registered connector provides it.
Per-connector settings is an open dict[str, Any] (extra=allow), so connector-specific settings keys are NOT captured by MachinaConfig.model_json_schema(). Introspecting connector init signatures to surface them is a deferred, security-constrained stretch.