Skip to content

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 email 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 calls
  • connectors — Named connector configurations
  • description — Agent description
  • llm
  • logging — Logging configuration overrides
  • mcp
  • name — Agent name
  • plant
  • sandbox — 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.