Skip to main content
Glama

Search inside a board's files

search_board
Read-onlyIdempotent

Use to find where something appears across a board's text files in ONE call, instead of reading files one by one: give a literal string (a net name, a reference designator, a part number, a footprint) and get back the file, line number and matching line for each hit. Optionally restrict to a file extension with path_suffix. Matching is literal and case-insensitive, not a regular expression. Prefer read_schematic for schematic wiring, read_pcb for copper vias/pads/tracks, and query_design for a file's structure; use this when you need to locate something by name.

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": {
      "board": "<board>",
      "query": "<query>"
    },
    "name": "search_board"
  }
}

Input Schema

NameRequiredDescriptionDefault
boardYesA board: handle/slug or a boardrepo.com URL. Use search_boards for public boards or list_my_boards for personal and authorised organisation boards. Do not invent references.
queryYesThe literal text to find, e.g. "USB_DP" or "ATmega328". Not a regular expression.
versionNoWhich saved version to read: a version number (3 or "v3"), a versionId from list_board_versions, "latest", or a release tag such as "rev-A". Omit for the latest version. Results echo the version they read; pass its id back to stay on it.
max_resultsNoOptional cap on matches returned (default 100).
path_suffixNoOptional. Only search files ending with this, e.g. ".kicad_sch" or ".md".

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / version
      Added value: +{
      +  "anyOf": [
      +    {
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    {
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Which saved version to read: a version number (3 or \"v3\"), a versionId from list_board_versions, \"latest\", or a release tag such as \"rev-A\". Omit for the latest version. Results echo the version they read; pass its id back to stay on it."
      +}
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "bytesTruncated": {
      +        "type": "boolean"
      +      },
      +      "filesScanned": {
      +        "type": "integer"
      +      },
      +      "filesSkipped": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "filesTruncated": {
      +        "type": "boolean"
      +      },
      +      "hasMore": {
      +        "type": "boolean"
      +      },
      +      "matches": {
      +        "items": {
      +          "additionalProperties": true,
      +          "properties": {
      +            "line": {
      +              "type": "integer"
      +            },
      +            "path": {
      +              "type": "string"
      +            },
      +            "text": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "path",
      +            "line",
      +            "text"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "note": {
      +        "type": "string"
      +      },
      +      "query": {
      +        "type": "string"
      +      },
      +      "timeTruncated": {
      +        "type": "boolean"
      +      },
      +      "version": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "latest": {
      +            "type": "boolean"
      +          },
      +          "number": {
      +            "type": "integer"
      +          },
      +          "tags": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "number",
      +          "latest",
      +          "tags"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "query",
      +      "matches",
      +      "filesScanned",
      +      "filesSkipped",
      +      "filesTruncated",
      +      "bytesTruncated",
      +      "hasMore"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "appError": {
      +        "type": "string"
      +      },
      +      "bytesNeeded": {
      +        "type": "integer"
      +      },
      +      "cause": {
      +        "type": "string"
      +      },
      +      "currentHead": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "currentPolicyHash": {
      +        "type": "string"
      +      },
      +      "docsUrl": {
      +        "type": "string"
      +      },
      +      "fix": {
      +        "type": "string"
      +      },
      +      "freeBytes": {
      +        "type": "integer"
      +      },
      +      "issues": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "message": {
      +              "type": "string"
      +            },
      +            "path": {
      +              "type": "string"
      +            },
      +            "received": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "path",
      +            "message"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "operationId": {
      +        "type": "string"
      +      },
      +      "projectsLeft": {
      +        "type": "integer"
      +      },
      +      "reason": {
      +        "type": "string"
      +      },
      +      "resetsAt": {
      +        "type": "string"
      +      },
      +      "retryAfterMs": {
      +        "type": "integer"
      +      },
      +      "retryable": {
      +        "type": "boolean"
      +      },
      +      "sourceSaved": {
      +        "type": "boolean"
      +      },
      +      "storedResultAvailable": {
      +        "type": "boolean"
      +      },
      +      "suggestions": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "board": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "url": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "board",
      +            "name",
      +            "url"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "uploadLinks": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "bytes": {
      +              "type": "integer"
      +            },
      +            "expiresAt": {
      +              "type": "string"
      +            },
      +            "headers": {
      +              "type": "object"
      +            },
      +            "method": {
      +              "const": "PUT"
      +            },
      +            "path": {
      +              "type": "string"
      +            },
      +            "sha256": {
      +              "type": "string"
      +            },
      +            "uploadUrl": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "path",
      +            "bytes",
      +            "sha256",
      +            "uploadUrl",
      +            "method",
      +            "headers",
      +            "expiresAt"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "visibility": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "reason",
      +      "message"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedOutput schema / properties
      Removed value: -{
      -  "bytesTruncated": {
      -    "type": "boolean"
      -  },
      -  "filesScanned": {
      -    "type": "integer"
      -  },
      -  "filesSkipped": {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "filesTruncated": {
      -    "type": "boolean"
      -  },
      -  "hasMore": {
      -    "type": "boolean"
      -  },
      -  "matches": {
      -    "items": {
      -      "additionalProperties": true,
      -      "properties": {
      -        "line": {
      -          "type": "integer"
      -        },
      -        "path": {
      -          "type": "string"
      -        },
      -        "text": {
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "path",
      -        "line",
      -        "text"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "note": {
      -    "type": "string"
      -  },
      -  "query": {
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "query",
      -  "matches",
      -  "filesScanned",
      -  "filesSkipped",
      -  "filesTruncated",
      -  "bytesTruncated",
      -  "hasMore"
      -]
  2. Changed1 schema field changed
    • changedInput schema / properties / board / description
      Previous value: -"A public board: handle/slug (e.g. alice/keezyboost40) or a boardrepo.com URL. Discover it with search_boards; do not invent one."New value: +"A board: handle/slug or a boardrepo.com URL. Use search_boards for public boards or list_my_boards for personal and authorised organisation boards. Do not invent references."
  3. Changed2 schema fields changed
    • addedOutput schema / properties / bytesTruncated
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "query",
      -  "matches",
      -  "filesScanned",
      -  "filesSkipped",
      -  "filesTruncated",
      -  "hasMore"
      -]New value: +[
      +  "query",
      +  "matches",
      +  "filesScanned",
      +  "filesSkipped",
      +  "filesTruncated",
      +  "bytesTruncated",
      +  "hasMore"
      +]
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered; the description adds genuinely new behavioral facts — matching is literal and case-insensitive (not regex), results are per-hit with line numbers, and the default cap is 100. It stops short of describing truncation signaling or what happens on a board with no matches, 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.

Conciseness4/5

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

The core action, the literal-matching caveat, and the sibling routing are front-loaded with no filler. The single long opening sentence packs several ideas together, which slightly hurts scanability, but every clause carries information.

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?

With an output schema present and full annotation coverage, the description only needs to cover intent, matching semantics, and routing — all of which it does. Minor omission: no note on what an empty or truncated result looks like, though max_results partly covers this.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented, including that query is literal and path_suffix is an extension filter; the description only reinforces those points and adds example query classes (net name, reference designator, part number, footprint). It says nothing extra about `board` or `version`, so this is baseline rather than added value.

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 ('find where something appears across a board's text files in ONE call') and specifies the return shape (file, line number, matching line). It explicitly contrasts itself with three siblings — read_schematic, read_pcb, query_design — so an agent can route without opening any 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?

Gives an explicit when-to-use ('use this when you need to locate something by name') and names each alternative with the condition that selects it ('Prefer read_schematic for schematic wiring, read_pcb for copper..., query_design for a file's structure'). The avoid-reading-files-one-by-one framing further clarifies the intended workflow.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.