Binding Rule
Binding rules define specific relationships between assets and collections. They are a subset of the relationship types possible, with MCPBindings and AgentBindings being the other possibilities. Collectively, these three types are known as binding edges.
Binding Edges
Binding edges describe how things are related right now in the graph and how broad capabilities (MCPs and agents) are narrowed down into the specific, local context of an asset or collection.
Where assets and collections describe what exists in the environment (equipment, patients, rooms, workcells, projects), binding edges capture:
- The live relationships between those objects (what's in what, what's part of what, who's related to whom).
- The focused slices of MCPs and agents that are relevant to a particular asset or collection.
Conceptually, there are three edge variants:
- Binding Rule edge – connects assets/collections and references a reusable
BindingRuleConfigthat controls how context flows across that relationship. - MCP edge – connects an asset/collection to a broad MCP, then uses an
MCPBindingto narrow that MCP down to "the bit that matters here." - Agent edge – connects an asset/collection to a broad agent, then uses an
AgentBindingto narrow that agent down to how it behaves for this node.
The assembler walks all three kinds of edges when it assembles intelligence from context for a given role × collection.
What Binding Edges Represent
Binding edges capture the real-world structure of a customer's environment and how capabilities attach to it.
Structural edges (Binding Rule edges)
These are asset/collection → asset edges that express physical or logical relationships, for example:
- collection → asset
- A sensor "lives in" a line.
- A piece of equipment is in a specific room or bay.
- A client is currently associated with a ward or clinic area.
- asset → asset
- A camera is part of an inspection armature.
- A pump is part of a larger skidded system.
- A patient is marked as a parent, sibling, or dependent of another record.
These structural edges are directional (A → B is not automatically B → A) and each carries a reference to a binding rule that describes how context is allowed to flow when the assembler crosses that relationship.
Capability edges (MCP / Agent edges)
These are asset/collection → MCP and asset/collection → agent edges that attach broad definitions to specific things:
- An MCP, by itself, might be able to talk to many sensors or many records.
- An agent, by itself, might be able to orchestrate workflows across many lines, many wards, or many customers.
The edge bindings are what narrow those broad capabilities down to the focused bit that belongs to a specific asset or collection.
- MCP edges use an
MCPBindingpayload to say:"From this asset or collection, this MCP is only about these IDs / paths / modes."
- Agent edges use an
AgentBindingpayload to say:"From this asset or collection, this agent runs in this configuration, against these resources."
You can think of it as:
- Binding Rule edge – "From this context, you're allowed to look through this relationship, using that high-level policy."
- MCP edge – "Here is the local slice of a broader MCP that belongs to this node."
- Agent edge – "Here is the local slice of a broader agent that belongs to this node."
Dynamic Edges from Attach / Move
Structural binding edges (the ones that reference Binding Rules) are dynamic and track how the real world changes:
- RTLS events can trigger attach/move/detach as assets move between zones.
- Business systems (ERP, EHR, CMMS, etc.) can re-parent records, work orders, or dependents.
- Operators can manually attach or move assets in the Bifrost admin tool.
Every attach/modify/move operation:
- Chooses which two nodes should be connected (source and target).
- Selects a binding rule to apply to that relationship.
- Creates or updates the Binding Rule edge to reference that rule.
Because binding rules are reusable, a single rule (for example, Asset-in-Room (Operational Sensors)) can govern many edges as assets move around. Attach/move is where that rule is applied to a specific relationship.
All attach/detach/modify/move operations are logged, so you can always reconstruct:
- When a structural edge existed.
- Which binding rule it used at that time.
Capability edges (MCP/agent edges) are typically created and maintained when you bind tools or agents to assets/collections. They are generally more stable.
Binding Rules as Relationship Models
A binding rule is a relationship model for structural edges. It defines how context is allowed to flow across any edge that references it, with emphasis on:
- Which MCPs and agents are allowed to propagate along that relationship.
- Which masks are applied to those MCPs.
- How many additional hops (
depth) the assembler may take after crossing that relationship. - Default allow/deny behavior for MCPs and Agents not explicitly listed.
Important:
While the schema allows binding rules to use MCPBinding / AgentBinding structures, a binding rule typically does not:
- impose detailed
parameter_overrides - add
resource_scope_fragments.
Instead, binding rules are usually topological and coarse-grained: they decide whether an MCP/agent is allowed to propagate across a relationship and how far context can spread. The fine-grained narrowing (IDs, scopes, concrete configuration) is handled on MCP and agent edges.
So in the common pattern:
- Binding rules shape where you can go and which broad MCPs/agents are even eligible across relationships.
- MCP/agent edges shape what those MCPs/agents specifically mean at each node.
Binding Rule Config Model
Binding Rules are represented by the following configuration object:
BindingRuleConfig {
binding_rule_id: string
name?: string
description?: string
default_pass_behavior?: boolean
depth?: number
mcp_rules?: MCPBinding[]
agent_rules?: AgentBinding[]
created_at?: number
updated_at?: number
customer_id?: string
}Identity & metadata
binding_rule_id: string
Stable ID used by structural edges, logs, and audit exports.
name?: string
Human-readable label seen in Bifrost (for example, Guardian → Dependent (Healthcare)).
description?: string
Why this rule exists and how it should be used (ideal for policy notes).
created_at?: number / updated_at?: number
Timestamps for governance and change history.
customer_id?: string
Metadata used by Mimory. Not modifiable.
Behavior
default_pass_behavior?: boolean
Fallback behavior for MCPs/Agents not explicitly listed:
true→ Allowed by default unless explicitly constrained.false→ Denied by default unless explicitly granted.
For high-assurance deployments, this is typically false, so only named MCPs/Agents can propagate along structural edges using this rule.
depth?: number
Maximum number of additional structural edges the assembler may traverse after crossing an edge that uses this rule:
0– Do not traverse beyond the node.1– One more hop, then stop.N– Up toNhops, subject to loop detection.
Example: In a healthcare graph, a binding rule used for family relationships might set depth = 2, limiting reach to first- and second-degree relatives.
mcp_rules?: MCPBinding[] / agent_rules?: AgentBinding[]
Optional lists of MCPBinding and AgentBinding entries used at the rule level to say which broad MCPs/Agents are allowed to traverse this relationship and which masks they must use. In many deployments, detailed parameter and scope fields are left empty here and pushed down onto the individual MCP/Agent edges instead.
Because structural edges reference the rule by binding_rule_id, changes to a binding rule are picked up automatically by every edge that points to it the next time an assembly occurs.
MCPBinding (Narrowing MCPs on MCP Edges)
class MCPBinding(BaseModel):
mcp_id: str
mask: str
parameter_overrides: Optional[Dict[str, List[str]]] = None
resource_scope_fragments: Optional[List[str]] = NoneAn MCPBinding is the payload for MCP edges (asset/collection → MCP). It is the mechanism that turns a broad MCP into the local, focused slice that belongs to a given node.
mcp_id: str
The MCP this binding refers to (the edge's target).
mask: str
The mask applied when this MCP is used from this node:
- Masks trim a broad tool surface down to a curated subset appropriate for this context (for example,
"read_only_sensors","guardian_summary","line_maintenance"). - That masked set is then intersected with role-based permissions defined on the MCP.
parameter_overrides: Optional[Dict[str, List[str]]]
Per-parameter narrowing that makes the MCP about this asset/collection:
- Keys: parameter names.
- Values: lists of allowed values.
- Example patterns:
- A telemetry MCP that can read thousands of sensors globally is bound with
parameter_overrides["sensor_id"] = ["sensor0034"]on an edge from that specific device node. - A patient MCP that can query many patients globally is bound with a specific
patient_id(or a small set) on an edge from a patient or ward node.
- A telemetry MCP that can read thousands of sensors globally is bound with
resource_scope_fragments: Optional[List[str]]
OAuth resource fragments that make the token about the same slice:
- These fragments combine with the customer's global OAuth chunks to build the final scope list.
- Example: add
"resource:sensor0034"so the MCP's access from this node lines up with how the authorization system names that sensor.
Conceptually:
The MCP is global.
The MCP edge plus itsMCPBindingturn it into "the MCP for this asset/collection, with this subset of parameters and scopes."
AgentBinding (Narrowing Agents on Agent Edges)
class AgentBinding(BaseModel):
agent_id: str
parameter_overrides: Optional[Dict[str, Any]] = None
resource_scope_fragments: Optional[List[str]] = NoneAn AgentBinding is the payload for agent edges (asset/collection → agent). It is the mechanism that turns a broad agent into the local, focused behavior that belongs to a given node.
agent_id: str
The agent this binding refers to (the edge's target).
parameter_overrides: Optional[Dict[str, Any]]
Initialization or configuration that makes the agent about this asset/collection:
- A "Rounds Planning" agent that could plan across an entire system is bound on a ward edge with a specific ward ID and shift window.
- A "Line Health" agent is bound on a line node with a specific line identifier and maintenance mode.
resource_scope_fragments: Optional[List[str]]
OAuth resource fragments that narrow what the agent can touch from this context:
- For example, scoping a remediation agent to a specific production line, customer account, or patient cohort.
Conceptually:
The agent is global.
The agent edge plus itsAgentBindingturn it into "the agent for this asset/collection, with this configuration and scopes."
Bifrost and Relationships
The Bifrost admin tool is where teams:
- Define and manage binding rules.
- Inspect and reason about which rules are applied to which structural edges.
- View the MCP/agent capabilities attached to specific assets and collections.
In Bifrost:
- A binding rule might be defined in human terms such as:
Guardian → Dependent (Healthcare)Asset-in-Room (Operational Sensors Only)Subsystem → System (Maintenance Agent Enabled)
A binding rule detail view typically shows:
- Name and description.
default_pass_behavioranddepth.- Any MCP/Agent templates associated with the rule (if used).
- Audit metadata (
binding_rule_id, created/updated timestamps).
On an individual asset or collection, Bifrost can surface:
- Structural edges – what nodes are targets for this node's edges and which binding rules govern those relationships.
- MCP edges – which MCPs are attached locally, and how they're narrowed via
mask,parameter_overrides, andresource_scope_fragments. - Agent edges – which agents are attached locally, and how they're narrowed via configuration and scopes.

Binding Edges in Assembly
During assembly, the engine walks all three kinds of edges:
- Starting from a role × collection, the assembler:
- Follows structural edges (Binding Rule edges) outward, respecting
depthand directionality. - Encounters MCP and agent edges off of those nodes.
- Follows structural edges (Binding Rule edges) outward, respecting
- At each Binding Rule edge, it:
- Looks up the
BindingRuleConfig. - Decides which MCPs and Agents are even eligible to propagate across that relationship.
- Uses
default_pass_behavioranddepthto decide how far to continue. The lower ofdepthand global remaining search depth is used.
- Looks up the
- At each MCP edge, it:
- Uses the
MCPBindingto turn the global MCP into the local slice for that node. - Applies
maskandparameter_overrides. - Adds any
resource_scope_fragmentsto the assembled OAuth scope.
- Uses the
- At each Agent edge, it:
- Uses the
AgentBindingto turn the global agent into the local slice for that node. - Applies configuration via
parameter_overrides. - Adds any
resource_scope_fragmentsfor that agent.
- Uses the
- Assets and Collections union what they receive; Binding Rules and edge bindings act as filters and lenses as context flows upward.
The result is a mim_assembly that precisely reflects:
- Which structural relationships were traversed.
- Which Binding Rules were applied where.
- Which MCPs and Agents are available from this point of view.
- How those MCPs and Agents were narrowed to specific IDs, configurations, and OAuth scopes by the edges that attach them.
That's how binding edges, across their three variants, turn broad, global capabilities into local, governed, explainable intelligence tied to real-world assets and collections.