Skip to main content
Glama
S-CurveLabs

letin

Official
by S-CurveLabs

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LETIN_HOMENoOverride the root directory where snapshots are stored. By default, snapshots live in %LOCALAPPDATA%\letin\snapshots\<workbook>-<hash>\ (last 50 per source).%LOCALAPPDATA%\letin\snapshots

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_sourcesA

List workbooks open in Excel and models open in Power BI Desktop (both usable as source), and explain the other source forms.

list_queriesC

Every query with its kind (query/function/parameter), step count, load destination, and what it depends on / is used by.

get_queryB

Full M code of one query plus its parsed steps, data sources, dependencies and dependents.

dependency_graphA

Query-to-query lineage. With query, only its upstream and downstream. format: 'json' or 'mermaid'. Also reports roots (read external data), leaves (final outputs), orphans and cyclic references.

list_data_sourcesB

Inventory of every external source (files, folders, servers, URLs) each query reads, and whether it is hard-coded or parameterised.

find_in_queriesB

Search the M of every query. scope: all | code | strings | comments. Returns query, step and line for each hit.

lint_queriesA

Audit queries for folding breakers, hard-coded paths/servers, dead steps, brittle column lists, untyped columns, duplicated logic, orphans and cycles. Each finding carries a concrete suggestion. min_severity: info | warning | error.

set_queryA

Replace a query's M (or create it with create_if_missing). Rejects unbalanced brackets/strings before writing. For standard actions prefer apply_transform; for renames prefer rename_query / rename_step.

delete_queryB

Delete a query. Refuses when other queries reference it unless force=true.

rename_queryA

Rename a query and rewrite every reference to it in all other queries (token-aware: strings, comments and same-named columns are left alone).

rename_stepB

Rename a step inside a query and every reference to it.

remove_stepA

Delete a step and rewire the steps that used it to the step it read from.

replace_in_queriesA

Find and replace across all (or the listed) queries in one go, e.g. repoint a server or folder. scope: 'strings' (only inside text literals; safest, the default), 'code' (outside strings and comments), 'all'.

extract_parameterB

Turn a hard-coded text value (path, server, URL) into a Power Query parameter and reference it everywhere. With match_prefix, "C:\Data" also rewrites "C:\Data\sales.csv" to SourceFolder & "\sales.csv".

list_transformsA

Catalog of guided actions for apply_transform (unpivot, pivot, group_by, merge, filter, types, ...) with their params.

apply_transformB

Add a standard Power Query step without hand-writing M. action and params come from list_transforms, e.g. action='unpivot_other_columns', params={'keep_columns': ['Region']}; or action='group_by', params={'group_columns': ['Region'], 'aggregations': [{'name': 'Total', 'operation': 'sum', 'column': 'Amount'}]}. The step is appended to the end unless after_step names an earlier step (the next step is rewired, as the editor does).

copy_queriesB

Copy queries between workbooks / projects / folders, bringing the queries they depend on along.

export_queriesB

Write every query to folder as one .pq file each plus pq-manifest.json: ready to commit to git and diff in a PR. Existing .pq files in the folder are replaced.

import_queriesA

Load .pq files from folder back into source. mode='update' changes/adds queries; mode='sync' also deletes queries that are not in the folder.

diff_queriesA

Compare the queries of two sources (workbook vs workbook, workbook vs exported folder, PBIP vs PBIP ...). Line endings are ignored. To compare against a snapshot pass its path from list_snapshots.

list_snapshotsB

Snapshots taken automatically before each write to this source, newest first.

restore_snapshotA

Roll back to a snapshot. With queries, only those are restored; otherwise the whole query set is put back (queries created since are deleted). 'latest' undoes the most recent write.

validate_mA

Check M before using it: syntax errors with line/column and a plain-English cause (missing comma between steps, unquoted step name, if without else ...), unknown steps/queries/functions with did-you-mean, and wrong argument counts for library functions. Pass formula (an expression or a whole section document); add source so its query names are known. Or pass source (+ optional query) alone to validate what is already there.

format_mA

Pretty-print M (an expression or a section document): one step per line, long calls broken at their arguments, comments kept. The output is verified token-for-token against the input, so meaning can never change.

format_queriesA

Format one query, or every query, in place (same guarantees as format_m).

m_function_helpA

Look up the M standard library (generated from the real engine: 850+ members). Give an exact name ('Table.Group') for its signature and description, a namespace ('Table.' or 'List') to list its members, or words to search names and descriptions ('unpivot', 'split text delimiter'). Use it instead of guessing signatures.

evaluate_mA

Run any M expression and get the result as data. Tables come back with column names, types and the first rows rows (cell errors shown as #ERROR); lists, records, scalars and functions (with signature) are described too; an M error comes back as reason + message. With source, the expression can reference that source's queries by name (e.g. Table.RowCount(Sales)), including unsaved edits of an open workbook. count_rows and profile (Table.Profile: min/max/nulls/distinct per column) scan the whole result, so they can be slow. ignore_privacy_levels=true disables the privacy firewall for this throwaway evaluation only.

evaluate_queryA

Freshly evaluate a query, or the query only up to step, and return columns, types and sample rows. Use it to get real column names before apply_transform, to see what a step does to the data, or to find the step where an error first appears (evaluate step by step).

evaluate_stepsA

Evaluate EVERY step of a query in one engine call and describe each one (columns, types, first rows rows, or the error). The fastest way to see how a query transforms its data and to find the step where an error first appears: one call instead of evaluate_query once per step.

refresh_queryA

Refresh one query in an open Excel workbook and wait for it; returns the mashup engine's error text if it fails.

preview_queryB

Column names and first rows of a query that is loaded to a worksheet table (open Excel workbook only). Use it to get real column names before apply_transform.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 31 tools

Disambiguation4/5

Most tools are clearly distinct (apply_transform vs evaluate_m vs format_m serve different purposes), but a few could be confused: evaluate_query and evaluate_steps overlap in intent, and list_data_sources vs list_sources are similar in name and both deal with sources. Overall, descriptions help clarify, but a couple of pairs require careful reading.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern, using snake_case throughout. Verbs like list, get, create, delete, update, rename, remove, validate, format, evaluate, import, export, copy, diff, refresh, preview, replace are all used in a predictable way, making the naming highly consistent and easy to learn.

Tool Count2/5

With 27 tools, the server exceeds the typical well-scoped range of 3-15 tools. The breadth of functionality is impressive, but the high count may overwhelm agents, especially when several tools overlap in purpose (e.g., evaluate_query vs evaluate_steps). The count feels heavy for a single cohesive toolset, though each tool does serve a niche.

Completeness5/5

The toolset covers the full lifecycle of Power Query management: creating, reading, updating, deleting, renaming, formatting, validating, importing/exporting, diffing, snapshotting, searching, linting, and evaluating queries. It also includes comprehensive dependency analysis and source inventory, with no obvious dead ends for common workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues