Skip to main content
Glama

symbol_info

Resolve C symbols and nested expressions against a firmware ELF to get address, size, and type, replacing header grepping and manual GDB lookups.

Instructions

Resolve C expressions against the firmware ELF — the one-call replacement for grepping headers and hand-running GDB.

Args: elf_path: Path to the firmware .elf. expressions: A single expression or a JSON array of them. Accepts plain symbols ("g_app") and C paths with dots and array indices ("g_app.scheduler.taskCount", "g_app.scheduler.tasks[3].lastRunMs").

Returns: One line per expression: address, size, and type. Type tells float vs int vs enum vs struct — use it to pick the right live_memory/display treatment. Struct-typed entries note that sub-fields resolve as ".".

Input Schema

NameRequiredDescriptionDefault
elf_pathYes
expressionsYes

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that output is one line per expression with address/size/type, explains what the type field means and how to act on it, and notes the struct sub-field expansion convention ('<expr>.<field>'). It omits failure behavior for unresolved symbols and whether the ELF is parsed locally vs on target, which keeps it from a 5.

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?

Front-loaded with the purpose, then cleanly separated Args and Returns blocks. The GDB/grep framing earns its place by conveying differentiation, and no sentence is redundant padding.

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?

For a two-parameter lookup tool with an output schema, everything an agent needs is present: both arguments explained, accepted expression grammar shown, and return shape described including the struct-field convention. Nothing material is missing.

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 coverage is 0%, so the description must fully compensate — and it does. It explains elf_path, and critically clarifies that expressions, although typed as a plain string in the schema, accepts either a single expression or a JSON array, with concrete syntax examples covering plain symbols, dot paths, and array indices.

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?

States a specific verb and resource — resolve C expressions against the firmware ELF — and frames itself against the status quo it replaces (grepping headers, hand-running GDB), which implicitly separates it from the debug_* and live_memory_* siblings that operate on a live target. An agent can tell what this does 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 Guidelines4/5

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

It gives a clear usage context ("one-call replacement for grepping headers and hand-running GDB") and routes the agent downstream: 'use [the type] to pick the right live_memory/display treatment', which tells you this is a pre-step before live_memory_read. It stops short of naming an explicit alternative or a when-not-to-use condition, so it lands below the top score.

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