Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FXRAY_HOMENoOverride for the per-user config folder. Default is %LOCALAPPDATA%\fxray on Windows, ~/.config/fxray elsewhere.
FXRAY_CONFIGNoExplicit path to the fxray configuration file. If set, it must exist.
FXRAY_WORKSPACENoPath to the workspace folder. Used to look for fxray.toml in that folder.

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
pac_statusA

Check the setup: config (allowlisted environments, writes enabled, output folder), the pac CLI version, and pac's auth profiles. Run this first when anything fails. Does not contact an environment.

whoamiA

Who pac is signed in as and which org it reaches for an allowlisted environment (pac env who). Fails with instructions if the sign-in expired. environment = URL or id from the allowlist (default: first).

list_environmentsA

All Dataverse environments the signed-in account can see (global discovery), each marked allowed / not allowed. Only allowed ones can be used by the other tools.

list_solutionsA

Solutions in an allowlisted environment: unique name, display name, version, managed flag, publisher. Managed (mostly Microsoft system) solutions are hidden unless include_managed=true. name_filter is a case-insensitive substring on unique or display name.

solution_componentsA

What a solution contains. Offline (source= a solution zip or unpacked folder): manifest (name, version, managed, publisher/prefix), root components by name, canvas apps, flows, connection references, environment variables, missing dependencies. Live (solution= unique name): every component row from the environment with type and, for tables, canvas apps, flows, environment variables and connection references, the resolved name (others show the object id).

list_canvas_appsA

Canvas apps: live in an environment (pac canvas list: name, created by, modified on), or offline in a solution zip / unpacked folder (logical name, display name, AppVersion stamp).

export_solutionA

Export a solution from an allowlisted environment (read-side: nothing changes in the environment) into a new timestamped folder under the output dir, and by default unpack it there (pac solution unpack) so its tables, relationships and canvas apps can be read offline. managed=true exports the managed package (only possible from the environment where the solution is unmanaged). Takes ~1 minute. Returns the zip and folder paths.

unpack_solutionA

Unpack a solution zip (pac solution unpack, local only) into a new folder under the output dir (or /unpacked/). Returns the folder, which works as source= for the offline tools.

solution_checkA

Run the Power Apps solution checker on a solution zip (pac solution check): uploads the zip to Microsoft's checker service (a cloud call, nothing changes in the environment), waits, and summarizes the SARIF results by rule and severity. Takes several minutes. Output is kept under /checks/.

diff_solutionsA

What changed between two versions of a solution (each a zip or unpacked folder, e.g. two export_solution outputs): version/publisher/root components, tables and columns (type, required level, length, choices), relationships, canvas apps (screens, controls, formula changes as small diffs, data sources), flows/env vars/ connection references, and changed files for anything else (views, forms).

canvas_overviewA

Summary of a canvas app's source: screens (in Studio order) with control counts, components, control types, data sources and app checker counts. source = .msapp, SourceCode folder (Src/*.pa.yaml), or a solution zip / unpacked folder (then app= logical or display name when it holds several apps).

list_controlsA

The control tree (name, type, variant, parent, depth, number of properties), optionally for one screen and/or one control type (substring, e.g. 'Gallery', 'Button'). Use get_control for formulas.

get_controlB

One control (or screen, or 'App') with its type, variant, parent, children and property formulas (Power Fx). properties= limits to named properties (e.g. ['OnSelect', 'Items']).

search_formulasA

Search every Power Fx formula in a canvas app for a substring (or regex=true). code_only=true ignores matches inside string literals and comments. property= restricts to one property name (e.g. 'OnSelect'); control= to controls whose name contains it. Returns control, property, and the matching lines.

canvas_data_sourcesA

The app's data sources (Dataverse tables, connectors, static data) with the formulas that reference each one. Flags UNREFERENCED data sources, which Power Apps Studio silently drops on the next save/publish. On a solution source it also checks meta.xml DatabaseReferences (empty = every write breaks after import) and reports columns the solution defines but the app's cached table schema lacks (invisible to the published player).

app_checker_resultsC

The App Checker results Power Apps Studio saved inside the app (AppCheckerResult.sarif): counts by level and issues grouped by rule with locations (screen.control.property). level= filters (Critical/High/Medium/Low).

list_tablesA

Dataverse tables. With source= (solution zip/folder, or canvas .msapp/SourceCode folder for the tables the app caches): name, display name, entity set, column counts. Without source: live table NAMES from the environment (the entity catalog via FetchXML; pac has no live column metadata, so describe_table needs a source). pattern = substring on logical or display name.

describe_tableA

Columns of one table: logical name, type, display name, required level, max length, lookup targets, choice values; plus primary id/name columns and relationships. table = logical, display or entity-set name. System columns (createdby, versionnumber, ...) are hidden unless include_system_columns=true. full=true adds descriptions, formats and numeric ranges. source: solution zip/folder, or a canvas app (its cached schema).

list_relationshipsA

Table relationships from a solution (or a canvas app's cached schema): one-to-many (referenced/one side, referencing/many side and its lookup column, cascade delete) and many-to-many (intersect table). table= limits to relationships touching that table.

fetch_queryA

Run a read-only FetchXML query against an allowlisted environment (pac env fetch) and return rows as dicts. FetchXML cannot modify data. Rows are capped at max_rows (default from config, ceiling 5000): pac itself ignores top/count/page and would page through every record, so the server stops reading at the cap. pac also ignores ; the server sorts client-side when the result is complete. Values are pac's formatted strings. Prefer filters and explicit lists; the primary key column is always appended.

pack_solutionA

Pack an unpacked solution folder into a solution zip (pac solution pack). Local only: nothing is sent to an environment. dry_run=true (default) returns the plan and command plus warnings (canvas data sources Studio would prune, empty DatabaseReferences). Default zip goes under /packs/. Executing needs allow_writes=true.

import_solutionA

Import a solution zip into an ALLOWLISTED environment. dry_run=true (default) returns the plan: target org (verified with pac env who), package name/version/managed, what is installed now, whether this is a new install, an update or an upgrade, blockers and warnings (managed/unmanaged mismatch, downgrade, canvas AppVersion trap, empty DatabaseReferences), backup and the exact pac command. mode: 'update' (default; never deletes), 'upgrade' (managed only; DELETES components missing from the zip), 'holding'. Executing (dry_run=false, allow_writes=true) first exports the installed unmanaged solution as a backup and returns an undo recipe.

publish_customizationsA

Publish all customizations in an allowlisted environment (pac solution publish). dry_run=true (default) returns the verified target and command. Executing needs allow_writes=true and dry_run=false.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 23 tools

Disambiguation5/5

Each tool targets a distinct resource and action granularity: environment status, solution lifecycle, canvas app analysis, and Dataverse metadata are cleanly separated. Even similarly named tools like list_controls/get_control and list_tables/describe_table occupy clearly different levels of detail.

Naming Consistency3/5

The majority of tools follow a verb_noun pattern such as list_solutions, export_solution, and describe_table, but several use noun-first names like canvas_overview, app_checker_results, and solution_components, with outliers like pac_status and whoami. The mix is readable but not a consistent convention.

Tool Count3/5

At 23 tools this falls in the 16-25 range that feels heavy for a single server, even though the broad Power Platform domain justifies much of the surface. It could plausibly be split into separate environment/solution and canvas-app analysis servers.

Completeness5/5

The tool set covers a complete workflow from environment discovery, solution export/unpack/diff, canvas app deep inspection, Dataverse metadata queries, to pack/import/publish with dry-run safeguards. Export outputs feed directly into the offline analysis tools, so there are no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues