Skip to content

Domain

The words the rest of the docs use, each with one meaning. Read the architecture overview first. Read Seams next.

Connectors and actions

Term Meaning
Connector An adapter for one external system, such as google_drive, stripe or fhir_epic. It is a BaseConnector subclass in its own package, src/node_wire_<connector_id>/, and it registers through the node_wire.connectors entry-point group. Generated connectors subclass RestConnector.
Connector id The connector's stable name (connector_id). The same string appears in connectors.yaml, NW_ALLOWED_CONNECTORS, the entry-point key, REST paths and MCP tool names.
Action One operation a connector exposes (files.list, charge, read_patient). It is declared with @nw_action / @sdk_action or an action_specs entry. Each action has a Pydantic input model with an action: Literal[...] discriminator.
Manifest The list of (connector_id, action, input_schema, output_schema) entries built by build_manifest(). REST routes, MCP tools and gRPC dispatch are all derived from it (bindings).
Tool name An action's MCP name: <connector_id>_<action>, with dots in the action replaced by underscores (google_drive_files_list). Legacy dotted names still work on tools/call.
Normalizer An optional per-action function (mcp_normalize) that maps LLM-friendly argument aliases to canonical fields before validation. It runs on REST and MCP.

Results and errors

Term Meaning
ConnectorResponse The envelope every run() returns: success, data, trace_id, error_code, error_category, message. Actions never return raw vendor objects, and failures never escape as exceptions.
ErrorCategory The error taxonomy: RETRYABLE, BUSINESS, AUTH, FATAL. Bindings translate it into an HTTP status, a gRPC reply or an MCP tool error (Errors).
Error code A stable string such as GDRIVE_RATE_LIMIT or MISSING_TENANT. A connector's own codes come from its error_map, scoped to that connector's id; the runtime-wide ones, for failures inside or before a run, are listed in Errors.

Tenancy

Term Meaning
Tenant The caller's organisation. With multi-tenancy off, every call is __default__ (DEFAULT_TENANT). With it on, the binding resolves the tenant from the request (Tenancy).
Named config One configuration of a connector for a tenant, such as sandbox or live, holding a config block, an auth block and secrets. A tenant can hold several. The first one created is the default.
Entitlement A tenant may use a connector only if it has at least one config for it. There is no separate allow list.
Config store ConnectorConfigStore: the runtime store of named configs, keyed by (tenant, connector, config_name). It is loaded from connectors.yaml (as __default__) and from NW_TENANTS_PATH.
Tenant pin The tenant a factory-built connector instance is bound to. run() uses the pin. A different tenant_id returns TENANT_MISMATCH without calling out. Not the same as the MCP session pin (NW_TENANT_ID).

Callers and policy

Term Meaning
Principal / scopes The caller identity a binding passes to run(), from an API key or a JWT.
Scope A permission string. By convention an action needs mcp:<connector_id>.<action>. NW_MCP_ACTION_SCOPE_MAP_JSON can override this per action.
Scope policy The allow/deny decision made before an action runs, by ScopePolicyHook (Seams).