Skip to main content
Glama

find

Read-only

Unified search across a workspace or share — ONE query, results GROUPED BY TYPE into buckets (files, metadata [workspace only], comments), each independently paginated and health-reported. Call action='describe' for the full action/param reference. For a FILE lookup start with storage action=search — smaller default page, files_scope/metadata_filters, the depth surface. Use find when you also need metadata-only hits or comments in the same call; metadata action=search for lexical metadata fields alone.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryNoAlias for search (the name storage + code-mode search use).
actionYesOperation. Use 'describe' for full action reference.
detailNoFiles-bucket rows on workspaces AND shares: caps `content_snippet` (standard 600 bytes, terse 200, full untrimmed). On a WORKSPACE also the `facts` tier: standard (default) up to 8 fields WITH values, full up to 100, terse names-only so a terse row carries NO `facts`. Shares carry no facts at any tier. See action='describe'.
searchNoSearch query string. 1-1024 chars; empty/blank rejected (platform 1605). Searched across every applicable bucket. (Alias: query.)
share_idNoAlias for profile_id when profile_type=share.
search_inNofilename | content | both (DEFAULT). filename = name only, find-style. content = the AI's summary + semantic, NOT grep. OMIT unless you mean it — sending it changes the response shape (adds a search_metadata block); omitting reproduces today's behavior byte-for-byte. Pair filename with name_match.
context_idNoAlias for profile_id.
name_matchNoauto (DEFAULT) | exact | prefix | contains | glob. exact = whole name; prefix = starts with; contains = substring — those three are LITERAL (* and ? are ordinary chars). glob = wildcards over the WHOLE name: *.pdf, report-*.xlsx. Do NOT pre-escape. Applies when search_in is filename or both; auto keeps today's relevance. Precise modes cap the pattern at 256 chars, reject an empty one.
profile_idNoWorkspace or share opaque ID (19-digit numeric ID or custom name). Pair with profile_type. Four accepted aliases besides this one (five id params total): workspace_id, share_id, context_id, instance_id — the supplied id must match profile_type (workspace_id only with profile_type=workspace, share_id only with share).
files_limitNofiles bucket page size (default 25).
instance_idNoAlias for profile_id (REST/how-to name; profile_id is canonical).
context_typeNoAlias for profile_type.
files_offsetNofiles bucket result offset (default 0).
profile_typeNoProfile to search: "workspace" or "share". (Alias: context_type.)
workspace_idNoAlias for profile_id when profile_type=workspace.
case_sensitiveNoCase-sensitive matching for exact/prefix/contains/glob. Default false (like find -iname), which folds non-ASCII too. Ignored under name_match=auto.
comments_limitNocomments bucket page size (default 25).
metadata_limitNometadata bucket page size (default 25). Workspace only — dropped from the request on a share (shares have no metadata bucket).
comments_offsetNocomments bucket result offset (default 0).
metadata_offsetNometadata bucket result offset (default 0). Workspace only — dropped from the request on a share (shares have no metadata bucket).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / detail / description
      Previous value: -"WORKSPACE files rows only — the per-row tier for extracted fields (`facts`); a share carries none at any tier. Default standard: up to 8 fields WITH their values. full: up to 100. terse asks for a names-only list this tool cannot render, so a terse row carries NO `facts` at all. See action='describe'."New value: +"Files-bucket rows on workspaces AND shares: caps `content_snippet` (standard 600 bytes, terse 200, full untrimmed). On a WORKSPACE also the `facts` tier: standard (default) up to 8 fields WITH values, full up to 100, terse names-only so a terse row carries NO `facts`. Shares carry no facts at any tier. See action='describe'."
  2. Changed1 schema field changed
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "WORKSPACE files rows only — the per-row tier for extracted fields (`facts`); a share carries none at any tier. Default standard: up to 8 fields WITH their values. full: up to 100. terse asks for a names-only list this tool cannot render, so a terse row carries NO `facts` at all. See action='describe'.",
      +  "enum": [
      +    "terse",
      +    "standard",
      +    "full"
      +  ],
      +  "type": "string"
      +}
  3. Changed4 schema fields changed
    • addedInput schema / properties / case_sensitive
      Added value: +{
      +  "description": "Case-sensitive matching for exact/prefix/contains/glob. Default false (like find -iname), which folds non-ASCII too. Ignored under name_match=auto.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / name_match
      Added value: +{
      +  "description": "auto (DEFAULT) | exact | prefix | contains | glob. exact = whole name; prefix = starts with; contains = substring — those three are LITERAL (* and ? are ordinary chars). glob = wildcards over the WHOLE name: *.pdf, report-*.xlsx. Do NOT pre-escape. Applies when search_in is filename or both; auto keeps today's relevance. Precise modes cap the pattern at 256 chars, reject an empty one.",
      +  "enum": [
      +    "auto",
      +    "exact",
      +    "prefix",
      +    "contains",
      +    "glob"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / profile_id / description
      Previous value: -"Workspace or share opaque ID (19-digit numeric ID or custom name). Pair with profile_type. Four accepted aliases besides this one (five id params total):…"New value: +"Workspace or share opaque ID (19-digit numeric ID or custom name). Pair with profile_type. Four accepted aliases besides this one (five id params total): workspace_id, share_id, context_id, instance_id — the supplied id must match profile_type (workspace_id only with profile_type=workspace, share_id only with share)."
    • addedInput schema / properties / search_in
      Added value: +{
      +  "description": "filename | content | both (DEFAULT). filename = name only, find-style. content = the AI's summary + semantic, NOT grep. OMIT unless you mean it — sending it changes the response shape (adds a search_metadata block); omitting reproduces today's behavior byte-for-byte. Pair filename with name_match.",
      +  "enum": [
      +    "filename",
      +    "content",
      +    "both"
      +  ],
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • removedInput schema / properties / workflows_limit
      Removed value: -{
      -  "description": "workflows bucket page size (default 25).",
      -  "maximum": 9007199254740991,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / workflows_offset
      Removed value: -{
      -  "description": "workflows bucket result offset (default 0).",
      -  "maximum": 9007199254740991,
      -  "minimum": 0,
      -  "type": "integer"
      -}
  5. Changed4 schema fields changed
    • addedInput schema / properties / instance_id
      Added value: +{
      +  "description": "Alias for profile_id (REST/how-to name; profile_id is canonical).",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / properties / profile_id / description
      Previous value: -"Workspace or share opaque ID (19-digit numeric ID or custom name). Pair with profile_type. Three accepted aliases besides this one (four id params total):…"New value: +"Workspace or share opaque ID (19-digit numeric ID or custom name). Pair with profile_type. Four accepted aliases besides this one (five id params total):…"
    • addedInput schema / properties / query
      Added value: +{
      +  "description": "Alias for search (the name storage + code-mode search use).",
      +  "maxLength": 1024,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / properties / search / description
      Previous value: -"Search query string. 1-1024 chars; empty/blank rejected (platform 1605). Searched across every applicable bucket."New value: +"Search query string. 1-1024 chars; empty/blank rejected (platform 1605). Searched across every applicable bucket. (Alias: query.)"
  6. Added

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is clear. The description adds genuinely useful behavioral detail beyond those annotations: grouped buckets, independent pagination, health reports, search_in changing the response shape when sent, and the detail tier affecting the facts field. It does not fully enumerate every behavioral nuance, but with annotations covering the core safety profile, the added context justifies a 4.

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 description is dense but every sentence earns its place: it front-loads the core behavior, then siblings, then parameter semantics, then the action='describe' pointer. The main trade-off is that the opening sentence is long. The structure is otherwise tight, with no filler.

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 20-parameter tool with 6 enums and no output schema, the description is strong: it covers result shape, pagination, health reporting, workspace-vs-share differences, and the action='describe' escape hatch. It does not restate every schema property, which is appropriate given 100% schema coverage. The main omission is not describing the search_metadata block shape after search_in is sent, but the escape hatch compensates.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond by explaining cross-parameter relationships: search_in changes response shape and pairs with name_match; name_match exact/prefix/contains treat * and ? literally while glob uses wildcards; metadata_limit and metadata_offset are dropped on shares; and five id params are aliases that must match profile_type. That adds meaning the schema alone does not provide.

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 leads with a specific verb ('search') and a precise resource scope ('across a workspace or share'), then distinguishes the tool by its grouped-by-type result shape and explicitly contrasts it with storage action=search and metadata action=search. That contrast makes it immediately distinguishable from 19 sibling tools.

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?

The description gives concrete routing guidance: use storage action=search for file lookups, use find when metadata-only hits or comments are needed in the same call, and use metadata action=search for lexical metadata fields alone. It also tells the agent to call action='describe' for the full action/param reference, which is a strong when-to-use signal.

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.

Resources