Skip to main content
Glama
openl-tablets

OpenL MCP Server

Official

Read Project File

openl_read_project_file
Read-onlyIdempotent

Access project files and folders by relative path to retrieve text, base64 binary, metadata, or directory listings. Use it to read READMEs, schemas, manifests, or inspect rule files without downloading the repository.

Instructions

Read any file in a project by its project-relative path — text or binary, and folder listings too. Maps to GET /projects/{projectId}/files/{path}. Behavior by path/params: (1) a FILE path returns its content — UTF-8 text is returned verbatim, while binary is returned as base64 'content' in a JSON text envelope with byte and MIME metadata (use encoding to force 'utf-8' or binary; default 'auto' detects); (2) a FILE path with view='meta' returns JSON metadata (name, size, extension, lastModified); (3) a FOLDER path (empty string for the root, or a path ending in '/') lists its entries (use recursive, viewMode FLAT/NESTED, extensions, namePattern, foldersOnly); (4) a FOLDER path with download=true returns a ZIP as base64 in the same JSON text envelope. Optional 'version' reads a historical revision; 'branch' pins the project branch. Optional byte range (offset/length) is applied client-side AFTER fetching the whole file (the backend does not support partial transfers), so the entire file is loaded into memory; for very large/binary files, bound the RETURNED size with offset/length and read in chunks (a full file's base64 can exceed MCP message limits). Use this to read AGENTS.md, README.md, schemas, manifests, or to inspect/export xlsx rule files.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathYesProject-relative path to a file or folder (e.g. 'rules/Model.xlsx' or 'rules/'). Empty string (default) or a path ending in '/' lists the project root / that folder; a file path returns the file content.
viewNoFor a file, set to 'meta' to return JSON metadata (name, size, extension, lastModified) instead of the file content. Omit to read content (files) or list entries (folders).
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 for metadata/listing responses, including nested selection (e.g. 'id,name'). When omitted, the full response is returned.
lengthNoMaximum number of bytes of file content to return starting at 'offset'. Omit for the rest of the file. Byte count, not character count (see the note on 'offset').
offsetNoByte offset to start reading file content from (default 0). NOTE: the backend does not support partial transfers, so the whole file is fetched and then sliced client-side. offset/length are BYTE offsets — a range boundary that lands inside a multi-byte UTF-8 character makes that character decode to U+FFFD (�) at the seam; for exact bytes use encoding='base64'.
versionNoHistorical revision (commit hash) to read. Omit to read the latest revision. Applies to file content/metadata and folder listing/ZIP. An unknown revision yields 404.
downloadNoFor a folder, set true to download the folder and its contents as a ZIP archive (base64 content in a JSON text envelope). Ignored for files.
encodingYesHow to return file content. 'auto' (default) returns text as UTF-8 and binary as base64 content in a JSON text envelope; 'utf-8' forces text; 'base64' forces the base64 envelope. Ignored for metadata/listing responses.auto
viewModeNoFolder listing only: FLAT returns a flat list, NESTED returns a tree (default FLAT).
projectIdYesProject ID returned by backend. Use the exact 'projectId' value from openl_list_projects() response without modification or reformatting.
recursiveNoFolder listing only: include nested resources recursively (default false).
extensionsNoFolder listing only: filter by file extensions without the dot, e.g. ['xlsx','xml'].
foldersOnlyNoFolder listing only: if true, return only folders (default false).
namePatternNoFolder listing only: filter by name (case-insensitive contains match).
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. Changed4 schema fields changedv1.2.0
    • changedInput schema / properties / download / description
      Previous value: -"For a folder, set true to download the folder and its contents as a ZIP archive (returned base64-encoded). Ignored for files."New value: +"For a folder, set true to download the folder and its contents as a ZIP archive (base64 content in a JSON text envelope). Ignored for files."
    • changedInput schema / properties / encoding / description
      Previous value: -"How to return file content. 'auto' (default) returns text as UTF-8 and binary as base64; 'utf-8' forces text; 'base64' forces base64. Ignored for metadata/listing responses."New value: +"How to return file content. 'auto' (default) returns text as UTF-8 and binary as base64 content in a JSON text envelope; 'utf-8' forces text; 'base64' forces the base64 envelope. Ignored for metadata/listing responses."
    • 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.7/5.0
Behavior5/5

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

Discloses substantial behavior beyond the readOnly/idempotent annotations: byte ranges are applied client-side AFTER fetching the whole file because the backend does not support partial transfers, full-file base64 can exceed MCP message limits, and byte-offset boundaries inside multi-byte UTF-8 characters decode to U+FFFD at the seam. It also documents the encoding auto-detect JSON envelope, metadata view, folder listing modes, and ZIP download behavior. No contradiction with annotations.

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?

Long but justified for 16 parameters and four distinct behavior modes; the purpose and endpoint are front-loaded and the numbered behavior modes make it scannable. Every sentence earns its place — there is no filler, and the critical memory/byte-range caveat is positioned before the closing use-case sentence.

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?

With no output schema, the description carries the return-value burden and covers the main shapes: verbatim UTF-8 text, base64 JSON envelope with byte and MIME metadata, metadata JSON (name, size, extension, lastModified), folder listings, and ZIP envelopes. Version/branch behavior and the MCP message-limit hazard are also covered, leaving no critical gap an agent would need to guess at.

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. The description adds coordinating semantics beyond individual parameter docs: how encoding behaves for file vs folder paths, that offset/length bounds the returned size after a full fetch, and the chunked-read strategy for large files. This clarifies parameter interplay that the schema's per-field descriptions do not convey.

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 — 'Read any file in a project by its project-relative path' — and maps to a concrete endpoint (GET /projects/{projectId}/files/{path}). It distinguishes itself from the write/delete/search/copy/move project-file siblings by enumerating its full scope: file content, folder listings, metadata, and ZIP downloads.

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?

Gives explicit when-to-use guidance ('Use this to read AGENTS.md, README.md, schemas, manifests, or to inspect/export xlsx rule files') that makes intended use concrete. It does not explicitly name exclusions or say 'use X instead for Y', so differentiation from alternatives rests on the read-only scope, the endpoint mapping, and sibling names rather than an explicit routing statement.

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