Skip to main content
Glama

obj_modify

Applies one set of property values to every object matching a single filter, enabling bulk edits like renaming nets or setting parameters across sheets.

Instructions

Apply ONE set of property values to every object matching ONE filter.

IMPORTANT, if every target object needs a DIFFERENT value (move 10 pins to 10 different positions, rename 5 nets to 5 different names, set distinct designators per component), use obj_batch_modify instead. Each call to this tool is a full LLM round-trip; doing that in a loop is the single biggest wall-time cost in the server. One obj_batch_modify with a list of operations does the same work in one turn.

Use this tool when the SAME set string applies to every match (e.g., "set every 10k resistor's Tolerance to 1%").

Args: object_type: Altium object type constant (see obj_query) set: Pipe-separated property=value assignments to apply, e.g.: "Text=NEW_NAME", set Text property "Location.X=100|Location.Y=200", set multiple properties "Height=31.5|StrokeWidth=3.94", a board text's size (lengths on a board are decimal mils; a value that is not a number is reported failed, never written as 0) scope: Document scope: "active_doc", current sheet only (default) "project", all SCH sheets in focused project "doc:C:\path\to\Sheet.SchDoc", specific sheet by path (no focus change) "lib_component:NAME", a named symbol in the active SchLib -- selects that component first, so there is no need for a separate lib_set_current_component call filter: Pipe-separated property=value conditions (AND logic)

Returns: Dictionary with "matched" count and "sheets_processed"

Example - rename a net across all sheets (one value fits all matches): obj_modify( object_type="eNetLabel", scope="project", filter="Text=OLD_NET", set="Text=NEW_NET" ) Example - modify a specific sheet without switching: obj_modify( object_type="eParameter", scope="doc:C:\path\MODULE_A.SchDoc", filter="Name=Title", set="Text=Module A" ) Example - edit a pin inside one SchLib symbol (no lib_set_current_component): obj_modify( object_type="ePin", scope="lib_component:R_0402", filter="Designator=1", set="Name=A" )

Input Schema

NameRequiredDescriptionDefault
setYes
scopeNoactive_doc
filterNo
object_typeYes

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.6.1

TDQS

A4.8/5.0
Behavior4/5

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

Without annotations, the description carries a lot of the behavioral burden: it explains scope side effects, filter AND logic, non-numeric value failure behavior, and that `lib_component` scope selects the component first. It does not fully state undo, save, or permission implications for a mutation tool, so it falls short of complete behavioral disclosure.

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 behavior and sibling alternative are front-loaded, followed by compact Args, Returns, and examples. The length is justified by four undocumented parameters and multiple scope modes.

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

Completeness5/5

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

The description covers purpose, alternative routing, parameter semantics, scope behavior, error handling, and examples. An output schema exists, so the additional return note is sufficient rather than necessary.

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 must compensate, and it does: it defines `object_type`, `set` syntax with examples, all `scope` values and defaults, and `filter` syntax with AND semantics. This adds substantial meaning beyond the bare schema.

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

Purpose5/5

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

The description states a precise verb and resource: apply one set of property values to every object matching one filter. It explicitly distinguishes this tool from `obj_batch_modify`, so an agent can select it without opening the schema.

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

Usage Guidelines5/5

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

It gives explicit when-to-use and when-not-to-use guidance, naming `obj_batch_modify` for cases where each object needs a different value. It also explains the key selection criterion: use this when the same `set` string applies to every match.

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

Deploy Server

Other Tools