Skip to main content
Glama

set_interface_bindings

Idempotent

Bind Solidity interfaces to concrete contracts so call-flow analysis resolves interface calls into implementation bodies and rebuilds flows without recompiling.

Instructions

Bind interfaces to concrete contracts so flows follow calls like IOracle(addr).price() into the chosen implementation's body. Rebuilds flows instantly (no recompile). Bound edges are marked as asserted, not proven.

Args:
    repo_path: Project root.
    bindings: {"IInterface": "ConcreteContract", ...}. Map an interface to ""
        to remove its binding.
    replace: Replace all current bindings instead of merging.
    save: Persist the resulting bindings to the [bindings] table of
        solflow.toml (only that table is rewritten).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "repo_path": "<repo_path>",
      "bindings": "<bindings>"
    },
    "name": "set_interface_bindings"
  }
}

Input Schema

NameRequiredDescriptionDefault
saveNo
replaceNo
bindingsYes
repo_pathYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses real behavior: the operation rewrites only the [bindings] table of solflow.toml, 'replace' wipes all existing bindings rather than merging, and bound edges are marked asserted rather than proven, which directly affects how downstream results should be trusted. It also states that flows rebuild without recompilation, so the agent knows the effect is immediate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and its concrete example are front-loaded in one sentence, followed by a compact args block where every line adds distinct information. No filler or restated schema types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, persistence-touching tool the description covers semantics, side effects, and the asserted-vs-proven caveat well. The remaining gap is that with no output schema, nothing is said about what the call returns or how binding errors (e.g. a name that matches no contract) are surfaced, and no hint is given on where to obtain valid interface names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: bindings is explained as an interface-to-contract map with the special '' value meaning 'remove this binding', replace is defined as replace-all versus merge, and save is scoped to a single named config table. Only repo_path is glossed thinly as 'Project root', but its meaning is clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Bind interfaces to concrete contracts', and the worked example (IOracle(addr).price() resolving into the implementation's body) makes the mechanism unambiguous. It never names a sibling such as list_unresolved or get_flow, so the agent gets no explicit differentiation from the tools that would surface the unresolved calls this tool fixes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the reader infers this is the follow-up action after finding unresolved interface calls, and 'Rebuilds flows instantly (no recompile)' hints at when it is cheap to call. There is no explicit when-to-use/when-not statement and no pointer to the sibling that identifies which interfaces need binding.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.