Skip to main content
Glama
openl-tablets

OpenL MCP Server

Official

Search Project Files

openl_search_project_files
Read-onlyIdempotent

Search project files and folders by glob pattern, file extension, resource type, or text content. Use recursive search to find matching files across nested folders.

Instructions

Search a project's files and folders by ant-glob path 'pattern' (e.g. 'rules//*.xlsx'), file 'extensions', resource 'type' (FILE/FOLDER/ANY), and/or a case-insensitive 'content' substring. Maps to POST /projects/{projectId}/file-search. CONTENT LIMITATION: Studio searches inside TEXT files only. It does not inspect binary formats such as XLSX/XLS/ZIP/images; find those only by path pattern, extension, or name, then read/download them separately. Combining content with a binary-only pattern or extension therefore returns no matches even when that text is visible in an Excel workbook. IMPORTANT: set recursive=true to search nested folders — by default (recursive omitted/false) only the project's TOP LEVEL is searched, and a '' glob alone does NOT descend (so a project-wide search needs recursive=true, and to match files in subfolders use a '/' pattern such as '/.xlsx', not '.xlsx'). Scope SUBTREE (default) searches within the project and may target a historical 'version'; scope ANCESTORS walks up to the repository root. Returns matching nodes (path, name, type, size, ...), paginated client-side via 'limit'/'offset' (the response carries pagination metadata; the server returns the full match set). Use 'branch' to pin the project's branch. Use this for questions like "where is portability loading mentioned in XML or Markdown?" (content, recursive=true) or "list every xlsx under rules" (pattern '**/*.xlsx', recursive=true, without content).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fromNoProject-relative path to start the search from.
typeNoRestrict results to files, folders, or both (ANY, default).
limitNo
scopeNoSUBTREE (default) searches within the project; ANCESTORS walks up to the repository root.
branchNoBranch the project must be on for this operation. Ignored when blank. Fails if the repository has no branches or the project is on another branch. Omit for repository 'local' and non-branch repositories.
fieldsNoComma-separated response fields to return per result (e.g. 'path,name,type'). When omitted, the full response is returned.
offsetNo
contentNoCase-insensitive substring to match inside TEXT files only. Studio does not inspect binary content such as XLSX/XLS/ZIP/images; use pattern/extensions to locate binary files instead.
patternNoAnt-glob path pattern, e.g. 'rules/**/*.xlsx' or '**/*.xml'. This can find binary files by path, but content is never searched inside them.
versionNoHistorical revision (commit hash) to search; SUBTREE scope only.
projectIdYesProject ID returned by backend. Use the exact 'projectId' value from openl_list_projects() response without modification or reformatting.
recursiveNoWhether to descend into nested folders. IMPORTANT: defaults to false (top level only) — set true to search the whole project/subtree. A '**' glob still needs recursive:true to actually descend.
extensionsNoFilter by file extensions without the dot, e.g. ['xlsx','xml']. With content, only matching text files are inspected; binary extensions such as xlsx can be located but not searched internally.
response_formatNoResponse format: 'json' for structured, round-trippable data (default), 'markdown' for human-readable output, 'markdown_concise' for a brief summary (1-2 paragraphs), or 'markdown_detailed' for full details with contextjson

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed5 schema fields changedv1.2.0
    • changedInput schema / properties / content / description
      Previous value: -"Case-insensitive content substring to match inside files (full-text search)."New value: +"Case-insensitive substring to match inside TEXT files only. Studio does not inspect binary content such as XLSX/XLS/ZIP/images; use pattern/extensions to locate binary files instead."
    • changedInput schema / properties / extensions / description
      Previous value: -"Filter by file extensions without the dot, e.g. ['xlsx','xml']."New value: +"Filter by file extensions without the dot, e.g. ['xlsx','xml']. With content, only matching text files are inspected; binary extensions such as xlsx can be located but not searched internally."
    • changedInput schema / properties / pattern / description
      Previous value: -"Ant-glob path pattern, e.g. 'rules/**/*.xlsx' or '**/*.xml'."New value: +"Ant-glob path pattern, e.g. 'rules/**/*.xlsx' or '**/*.xml'. This can find binary files by path, but content is never searched inside them."
    • changedInput schema / properties / response_format / default
      Previous value: -"markdown"New value: +"json"
    • changedInput schema / properties / response_format / description
      Previous value: -"Response format: 'json' for structured data, 'markdown' for human-readable (default), 'markdown_concise' for brief summary (1-2 paragraphs), 'markdown_detailed' for full details with context"New value: +"Response format: 'json' for structured, round-trippable data (default), 'markdown' for human-readable output, 'markdown_concise' for a brief summary (1-2 paragraphs), or 'markdown_detailed' for full details with context"
  2. Addedv1.1.0

TDQS

A4.8/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: the text-only content limitation for binaries, the recursive default trap (top-level only; '**' alone does not descend), client-side pagination with the server returning the full match set, scope semantics for SUBTREE vs ANCESTORS, version targeting, and branch pinning behavior. None of this appears in the annotations, yet all of it shapes call results. The readOnlyHint=true annotation is fully consistent with the described search semantics.

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 long (~200 words) but every section earns its place given 14 parameters and multiple non-obvious traps; critical warnings are front-loaded in CAPS and the core function leads the first sentence. It loses a point because it partially restates schema content — extensions, scope, recursive, and branch each already have parameter descriptions in the schema — making it denser than strictly necessary.

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?

Despite having no output schema, the description discloses the return shape ('path, name, type, size'), pagination behavior, endpoint mapping, scope/version/branch semantics, the binary content limitation, and recursion defaults. For a 14-parameter tool with three enums and a high trap surface, there is no meaningful missing context an agent would need before invoking it correctly.

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 high (86%), so the schema already documents most parameters; the description goes beyond it on the foot-gun parameters: recursive's '**' trap, content's text-only restriction, and pattern's binary caveat with the '**/' vs '*.xlsx' distinction. The description adds real nuance that the schema alone does not convey, though the schema still carries the primary weight for the majority of parameters, so a 4 is appropriate rather than a 5.

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 first sentence names the exact verb, resource, and the four search dimensions ('ant-glob path pattern', 'extensions', 'type' FILE/FOLDER/ANY, case-insensitive 'content' substring). It maps to a concrete endpoint and ends with two realistic query examples that leave no doubt about what the tool does. The scope ('search a project's files and folders') clearly distinguishes it from siblings like openl_read_project_file, which reads a known file, and openl_list_projects, which lists projects.

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?

Explicit when-to-use guidance is given with concrete questions ('where is portability loading mentioned in XML or Markdown?') and the exact parameter recipe to answer them (content, recursive=true; pattern '**/*.xlsx', recursive=true, without content). It also states when NOT to use content search — binary files must be 'read/download them separately' — and warns that combining content with a binary pattern yields no matches. This is full when/when-not coverage.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/openl-tablets/openl-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server