ea_repository
ea_repository is the tool for the repository as a whole rather than for what is inside it. It tells you which model is open and opens or creates one, reports whether a newer AI Power Tools version exists, takes and restores package baselines, moves packages in and out as XMI files, runs EA's own report templates, rolls elements up into portfolio counts, carries the older skills installer, and builds the reporting business layer that Power BI and other reporting tools read. It has 27 operations in five groups.
| Group | Operations | Effect on the model |
|---|---|---|
| Project | get_repository_info, open_project, close_project, open_model, launch_ea, create_model, check_for_updates, aggregate_portfolio |
create_model creates a new model file; the others do not change model content |
| Baselines | create_baseline, list_baselines, compare_baseline, apply_baseline |
create_baseline stores a snapshot; apply_baseline overwrites package content |
| Import and export | export_xmi, import_xmi, generate_report |
import_xmi adds content to a package |
| Skills (legacy) | list_available_skills, install_skills, prune_legacy_skills, get_skill_update_diff, resolve_skill_conflict |
None. They write files in your Claude folder, never the model |
| Reporting business layer | build_business_layer, check_business_layer, remove_business_layer, build_reporting_database, replay_reporting_database, start_reporting_refresh, get_reporting_refresh |
None in the model's content. On the direct-access path, build_business_layer adds views to the EA repository's own database, in a schema of their own, and remove_business_layer drops them |
Conventions for this tool:
- Most operations need an open model. Without a running EA they return
ea_not_running; without an open model,ea_no_model_open. The exceptions arelaunch_ea,open_project,open_model,create_model,check_for_updates, the skills-installer operations, and the reporting operations that do not read EA:replay_reporting_database,remove_business_layerandget_reporting_refresh. - Package numbers and baseline identifiers come from
list_root_packages,list_child_packagesandfind_packages_by_name(Packages) and fromlist_baselines. - Read-only mode refuses
create_model,create_baseline,apply_baseline,import_xmi,build_business_layerandremove_business_layer, and refusesstart_reporting_refreshfor a profile that builds inside the EA repository's own database.
Project
These operations answer "which model am I working in?" and move between models. Run get_repository_info before anything writes, because writing to the wrong model is silent. aggregate_portfolio is the odd one out: it is a read-only roll-up that supports stakeholder views such as "Westbrook business applications by lifecycle".
| Operation | What it does | When you would use it | Changes the model | Logic |
|---|---|---|---|---|
get_repository_info |
Reports the open model's location, EA version, repository type, whether EA user security is on and who is signed in, the root packages, and any update notice | Right after ping, to confirm the intended model is open before writing |
No | Deterministic |
open_project |
Opens a model file in the running EA. If that model is already open nothing happens; if another is open, EA switches | Switching to the intended model at the start of a session | No | Deterministic |
close_project |
Closes the open model without exiting EA | Releasing a model file before another tool needs it | No | Deterministic |
open_model |
Opens an existing model file by path, always issuing the open | Recovering from "no model open"; opening a model by path | No | Deterministic |
launch_ea |
Starts EA on this machine and waits up to 30 seconds for it to respond | When EA is not running, after you have agreed. With computer use the assistant can instead start EA through the desktop | No | Deterministic |
create_model |
Creates a new, empty local model file (.qea) and opens it |
Starting from an empty model, or a scratch model | Yes: creates a new file | Deterministic |
check_for_updates |
Reports whether a newer AI Power Tools version exists, with download and release-notes links, how AI Power Tools was installed on this machine, and the upgrade steps for that installation | Answering "am I current?" and "how do I upgrade?" | No | Deterministic |
aggregate_portfolio |
Groups every element of one stereotype by the value of one tagged value and returns the groups with counts, largest first | Portfolio roll-ups, for example Westbrook WBABusinessApplication elements grouped by lifecycle |
No | Deterministic |
Notes: project operations
get_repository_infoshows phantom roots. EA's in-memory list can include a root package that no longer exists. Such a root is flagged as unresolved and is not counted. Do not use it for anything. Update notices come from background checks that refresh at most once every 24 hours and never delay the reply.- Opening a file is slow. EA may show "(Not Responding)" for several seconds. Wait and check again before repeating the request. The server attaches to one EA instance and does not start a second one against the same file. If EA refuses to open a file, the failure arrives as a plain tool error and not as a named one, and EA often shows a dialog as well. See Blocking dialogs in How tools and operations work for how the dialog is read and dismissed.
- Launching EA is your decision. The server returns
launch_eaas a remedy and never launches by itself; the skills ask first. With computer use the assistant can start EA through the desktop instead, and open the model through EA's own menus. Without computer use,launch_eastill starts EA, or you start it. Either way, check that EA is not already running before you agree. Starting a second instance against the same model file can damage work, and a per-user EA license limits how many instances can run at once. create_modelalways makes a.qeafile. A name that does not end in.qeagets the suffix appended. It is reported to fail on some EA builds. If it does, the assistant creates the model through EA's own menus when it has computer use and then callsopen_model. Without computer use, it asks you to create the model in EA and give it the path. Read-only mode refusescreate_model.check_for_updatesis advisory. It reads the public releases feed in the background and sends no model information. The notice names how the server was installed, worked out from where the server runs, and gives the upgrade steps for that installation (Updating and uninstalling):- the Claude Desktop extension (the server sits in Claude Desktop's
Claude Extensionsfolder): download the newer extension file and drag it onto the Extensions pane, disabling the extension before you click Update and re-enabling it afterward. Only this installation carries the extra warning about disabling first, because the running server otherwise holds a lock on its own file; - the VS Code extension: download the newer extension file from the release page, install it from the Command Palette and reload the window;
- a server that arrived inside a plugin package (in Claude's plugin cache or Claude Desktop's plugin staging folders): the notice says the plugin carries only the skills, gives the steps to install the Claude Desktop extension, and says to sync
novocircleunder Manage marketplaces and restart Claude Desktop for the skills. For a plugin file uploaded in Claude Desktop, which does not update itself, it sends you to the skills release for the newer file; - a location it does not recognize: neutral guidance to download the release and install it the way you installed this one, then restart the application that runs the server.
The skills are checked through
pingand not through this operation (The AI Power Tools MCP Server for Sparx EA).
- the Claude Desktop extension (the server sits in Claude Desktop's
Baselines
A baseline is EA's own snapshot of one package and everything beneath it, stored inside the repository. Take one before a bulk edit, a package delete, an MDG rollout, an XMI import or a ruleset fix. The four operations wrap EA's baseline feature, and the workflow around them (when to offer a baseline, how to review the ones that accumulate) is in the ea-change-management skill.
| Operation | What it does | When you would use it | Changes the model | Logic |
|---|---|---|---|---|
create_baseline |
Takes a baseline of a package and its subtree, under a version label and optional note, and returns the new baseline's identifier | Before any change you cannot afford to lose | Yes: adds a snapshot to the repository | Deterministic |
list_baselines |
Lists the baselines stored against one package | Finding the baseline to compare or restore; re-confirming the target just before an apply | No | Deterministic |
compare_baseline |
Compares the package as it is now with one of its baselines and returns an item-by-item, property-by-property difference | Seeing what changed since a snapshot; previewing what an apply would undo | No (it opens EA's own comparison view) | Deterministic |
apply_baseline |
Restores a package and its subtree to a baseline, then checks by comparing again that nothing differs | Rolling back a failed bulk edit, delete or import | Yes: destructive. Overwrites package content | Deterministic |
Notes: baseline operations
create_baselinefinds its own result by label. After EA creates the baseline, the server looks it up by version label and note and takes the first match, so reusing a label can return an older baseline's identifier. Use a distinct label each time and confirm withlist_baselines.- A baseline is always the whole subtree. Each baseline adds a compressed copy to the repository file, which grows a
.qeafile, so baseline the narrowest package that contains the change. list_baselinesis reliable for version and notes only. In some EA builds the date and author come back empty, so do not build checks on them. A baseline is deleted with a direct database statement or in EA's user interface.- Reading a comparison. Each compared item has one of four statuses: Model only (in the model, not in the baseline, so added since), Baseline only (deleted since), Changed, or Identical. Identical items are counted but not listed unless asked for. The reply also gives live counts for the whole current subtree. Connector counts include only connectors whose source element is inside the package.
- The two identifier spellings are not interchangeable. Items carry the braced GUID that element lookups take; the compared packages carry EA's underscore form. The server never merges them and does not warn if you mix them; the result is simply no match.
- If a comparison seems to hang, EA is probably showing a dialog. EA reports an unrunnable query as a dialog that holds the connection until someone dismisses it, and the server cannot see it. See Blocking dialogs in How tools and operations work: with computer use the assistant reads and dismisses it, and without computer use you paste a screenshot of it into the conversation and then dismiss it.
apply_baselineverifies instead of trusting. After driving EA's restore, the server compares again and reports "restored" only if EA finds no remaining differences. Possible outcomes are restored; already identical (nothing changed); EA accepted the restore but nothing changed, with the manual route (right-click the package, Package Control, Baselines, select the baseline, Restore), which the assistant follows in EA's window when it has computer use and otherwise hands to you; and several named failures. Every reply carries the warning that the operation overwrites current content. If the comparison run after the restore itself fails, a missing comparison reads as "no differences", so a reply can say "restored" without the check having run. Runcompare_baselineyourself afterward when the outcome matters.- Read-only mode refuses
create_baselineandapply_baseline.
Import and export
These operations move a package out of the model as an XMI file, bring one in, or produce a formatted document from a package. The ea-import-export skill drives them.
| Operation | What it does | When you would use it | Changes the model | Logic |
|---|---|---|---|---|
export_xmi |
Exports a package as an XMI file, then reads the file back and refuses to report success unless it is XMI and contains the package's content | Moving a package to another repository or tool; making a file copy of a package | No (writes a file) | Deterministic |
import_xmi |
Imports an XMI file into a package and reports how many items arrived | Bringing a package from another repository or tool; restoring an exported package | Yes: adds content to the target package | Deterministic |
generate_report |
Runs one of EA's report templates against a package and writes the document | A formatted document (headings, tagged values, prose) rather than a picture | No (writes a file) | Deterministic |
Notes: import and export operations
- Export is checked, not trusted. The server rejects a file that is not XMI or that holds none of the package's element names, and it names the failure. The check confirms the export is not empty; it does not prove the export is complete. Six XMI versions are accepted: 1.0, 1.1, 1.2, 2.1 (the default), 2.4.1 and 2.5.1.
- Export is not a rollback. For a rollback point inside the same model, take a baseline (Baselines).
- Import changes the target in place. Take a baseline of the target first. It brings diagrams across by default and gives everything imported fresh GUIDs, so the import behaves as a copy. Leave the fresh-GUID setting on unless you are restoring into a repository that does not already contain these GUIDs: importing with the original GUIDs into a model that already holds them can leave the call running without ever returning. A result of zero items is reported as a failed import, never as a success. The count covers elements and child packages directly under the target.
- Reports are produced by EA's own report engine. They are reported to come out as RTF only, so name the output file with an
.rtfending. The template name is not validated: a name that matches nothing can still produce EA's default document and report success, so open the output and check that your template was used. Never pass an empty template name, which can hang the call. Report templates are authored in EA's own menus. With computer use the assistant can drive that editor (the ea-help skill covers the procedure). Without it, you author the template in EA, and the assistant then runs it withgenerate_report. - Check a report before sharing it. The document embeds each element's author and last-modified-by values exactly as the model holds them, which are the modelers' EA or Windows user names.
Skills (legacy)
The AI Power Tools skills reach your machine through the Claude plugin, which carries the skills and no server (Claude plugin). These five operations are an older installer that fetched the skills from a public repository and copied them into %USERPROFILE%\.claude\skills. They remain for machines that still use that older channel and for cleaning it up. They never touch the model; they read and write files in your Claude folder and contact the public skills repository.
| Operation | What it does | When you would use it | Changes the model | Logic |
|---|---|---|---|---|
list_available_skills |
Lists the skills in the public bundle and whether each works with the running server | Checking what the older installer would install | No | Deterministic |
install_skills |
Installs skills (and rulesets) from the public bundle. It declines when the plugin already supplies the skills | Only on machines that deliberately use the older channel | No (writes files) | Deterministic |
prune_legacy_skills |
Removes skill folders AI Power Tools installed earlier and has since renamed, withdrawn or relocated. A dry run unless told to apply | Clearing leftovers of the older installer | No (deletes files when applied) | Deterministic |
get_skill_update_diff |
Returns the local and the latest published content of one skill file that has a conflict | Reading both versions before resolving a conflict | No | Deterministic |
resolve_skill_conflict |
Applies your decision (keep local, use the published version, or use a merged text) to one locally edited skill file | Finishing a conflict resolution on the older copy | No (writes a file) | Deterministic |
Notes: skills (legacy) operations
- Plugin plus older copy loads every skill twice. The skills then appear unprefixed and again as
ai-power-tools:<name>, which doubles their cost in the assistant's context. The supported cleanup is the migration scriptmigrate-to-plugin.ps1, described in Moving from an older installation; run it with its what-if option first. It removes only the copies the older installer's own record proves it wrote, and it reads both forms of that record, so it also finds installs made before version 2.2.0, whose record sits inside the skills folder.prune_legacy_skillsdoes not by itself resolve the doubling, because it never removes current skill folders. - With the plugin found installed, the skills check reports leftovers only. When the server finds the plugin installed (it runs from the plugin cache, or Claude's plugin register lists the plugin), the background skills check does not fetch the release manifest. The only thing it reports, in the skills-update block of
get_repository_info, is skill copies the older installer left in%USERPROFILE%\.claude\skills, which load a second time beside the plugin's, withmigrate-to-plugin.ps1as the remedy. With no leftovers, it reports nothing. A plugin installed on a claude.ai account is kept in a store the server cannot read. When the server is the Claude Desktop extension, the skills come from that plugin, so the block never recommendsinstall_skills. It lists the older installer's copies, if any (they load a second time beside the plugin's skills in the Code tab only), and says to add the plugin on your claude.ai account if it is not there yet and then to remove the copies withmigrate-to-plugin.ps1orprune_legacy_skillsapplied withplugin_confirmed, which on the extension needs only your confirmation. With no copies, it says nothing once the assistant'spinghas reported a skills release, and otherwise gives one pointer to claude.ai/customize/plugins, where you add theNovoCircle/ai-power-tools-skillsmarketplace and install AI Power Tools. On any other route, when the assistant'spingreports a skills release that no copy in the skills folders can have produced, the block lists the older installer's copies with a conditional note that they duplicate the plugin's skills if you installed the plugin on your account. install_skillsdeclines when the plugin supplies the skills. Nothing is written, and the reply says to sync thenovocirclemarketplace at claude.ai/customize/plugins and then quit and reopen Claude Desktop. A force option installs anyway, and also overwrites files that look locally edited. Read whether the install is complete, not whether the call succeeded: the call can succeed while a requested file is not in place. Each downloaded file is checked against a published fingerprint, and a file that does not match is not written. It refuses entirely if the server is older than the bundle requires.- A "locally edited" file is a suspicion, not a finding. A file counts as edited only when it differs from both the bundle and the installer's own record of what it installed. Show the list, then choose between the force option and the diff-and-resolve route.
prune_legacy_skillsremoves only what it can prove AI Power Tools installed. A folder goes only if the install record lists it and the plugin is found installed, or its exact name is one AI Power Tools shipped before, with no prefix matching. When the plugin is only reported by the session'sping, it lists the record's copies and removes them only when called withapplyandplugin_confirmed, which is set only after you say you installed the plugin on your claude.ai account. Without it the reply carries a confirmation-needed message and the copies stay. A skill you wrote yourself is never touched, even if its name starts withea-. Edited files are backed up first. Skills in the old location%APPDATA%\Claude\skills, which no Claude client reads, are also cleared.- All four
targetnames mean the same place.auto,desktop,vscodeandcliall resolve to%USERPROFILE%\.claude\skills, the only folder Claude reads skills from. Backups of overwritten files go to a timestamped backup folder inside it. - Rulesets travel the same way. The ArchiMate 3.1 ruleset is installed with the older installer's other content; see ArchiMate 3.1 ruleset and ea_validate.
- Read-only mode does not refuse these operations, because they write files on disk and not the model.
Reporting business layer
These seven operations build the business layer: reporting tables named and shaped by the modeling language that governs your model, which Power BI, a SQL client or an agent reads instead of EA's own tables. They read the technology's definition the same way get_mdg_from_runtime does (Discovering technologies), read the repository, and write SQL Server views, a separate reporting database, or files. They never write an EA table and never change the model's content. The ea-reporting-database skill drives them, including the decisions they need from you, and ea-power-bi builds the Power BI project from the result.
The business tables. Every build produces the same tables, whichever way it is delivered, so a report built on one delivery works on another:
- entity tables, one per element stereotype the technology declares, named by the stereotype's alias, with the declared tagged values as typed columns and each element's package path;
- connector tables, one per combination of source stereotype, connector stereotype and target stereotype the technology allows, with the connector's tagged values as columns;
- tables marked (not in MDG) for stereotypes and connector combinations outside the technology that you chose to include;
- tag-row tables, only where a column cannot hold the data: tagged values the technology does not declare, and tagged values that list several referenced elements;
- a Table Directory, one row per business table.
Every build also writes a definition file beside the profile, listing every table with its columns, types and row counts. The Power BI generator reads it, so it needs no database connection.
The reporting profile. Every operation except get_reporting_refresh, which takes the run id returned by start_reporting_refresh, takes the path of a saved reporting profile, a file you keep. It records the technology, the packages in scope and the packages left out (by GUID, so a renamed or moved package keeps its setting), what to include beyond the technology, and where the business tables go. Every build and refresh reuses it, so the answers you gave once are not asked again. The skill writes the profile with you.
Three ways to deliver the tables. The profile names one of them.
| Delivery | For whom | What is built | Data |
|---|---|---|---|
| Views in the EA repository's own database | You can reach the EA database, it is SQL Server, and the account may create views in it | The business tables as views in a schema of their own inside the EA database, plus views of EA's own tables limited to the packages in scope | Live: the views read EA's tables as they stand |
| A reporting database | You have no direct database access, for example through a cloud connection, but you can run SQL Server or have a SQL database in Microsoft Fabric | A separate database, on SQL Server or a SQL database in Microsoft Fabric, holding a copy of EA's tables, read through EA, with the excluded packages cut out, and the business views over that copy | A snapshot, rebuilt in full on every build |
| Parquet files | You have no direct database access and no database to run | The business tables' rows, written beside the profile for the Parquet step in ea-power-bi, which writes the files | A snapshot, rewritten on every build |
SQL Server is reached through the database providers Windows already has, with the Windows account that runs AI Power Tools, so nothing extra is installed. A reporting database in a SQL database in Microsoft Fabric is reached with Microsoft Entra sign-in instead, when the profile asks for it: the first operation in a server process that opens the database shows Microsoft's sign-in window, a person signs in with a Microsoft work account, and later operations in the same process reuse the sign-in. It needs the Microsoft OLE DB Driver for SQL Server, and the database is created in the Fabric portal first. Views in the EA repository's own database use Windows authentication only. See ea-reporting-database.
| Operation | What it does | When you would use it | Changes the model | Logic |
|---|---|---|---|---|
build_business_layer |
Builds the business tables as SQL Server views from a profile, all inside one transaction in their own schema, and writes the definition. For direct access it first checks that the database holds an EA repository and that the account has the rights it needs, and changes nothing if either check fails | Building the business layer with direct access; regenerating the views after the technology or your inclusion choice changed | No. Writes views into the target database, which with direct access is the EA repository's own database | Deterministic |
check_business_layer |
Checks a built business layer without changing it: whether it aligns with the technology's metamodel and, by default, whether every value matches an independent read through EA | Acceptance check after a build; before quoting a figure from the layer | No | Deterministic |
remove_business_layer |
Drops every view in the profile's schema, then the schema. EA's tables, and a reporting database's copied tables, are not touched | Removing everything AI Power Tools placed in the EA database; starting over | No. Drops the views | Deterministic |
build_reporting_database |
Reads EA's tables through EA, cuts the packages the profile leaves out, and reports a preflight. Unless you asked for the preflight only, or the preflight found a blocking defect, it loads the reporting database and builds the business views over it, or writes the rows for Parquet. Keeps this run's extract beside the profile | Building or rebuilding a reporting database or Parquet output; running the preflight on its own | No. Writes a separate database or files | Deterministic |
replay_reporting_database |
Rebuilds the reporting database, or the Parquet rows, from the last kept extract, with no EA connection | Retesting a build; settling a disputed figure against the exact rows it was built from | No | Deterministic |
start_reporting_refresh |
Starts a refresh of a saved profile in the background and returns at once with a run id. For views in the EA repository's own database it regenerates the views; for a reporting database it runs the full build; for Parquet it rewrites the rows | A refresh triggered by a scheduled agent, or any build you do not want to wait on | No. As for the build it runs | Deterministic |
get_reporting_refresh |
Reports a refresh's status (running, succeeded or failed) and, once it has finished, its full result or why it stopped | Polling a refresh started with start_reporting_refresh |
No | Deterministic |
Notes: reporting business layer operations
- What they need. EA running with the repository open on this machine, for every operation except
replay_reporting_database,remove_business_layerandget_reporting_refresh. A build reads the technology's definition from a registered file or the model (Technology states), and a repository with no technology has no metamodel to build from. SQL Server is the only database for direct access. A reporting database is on SQL Server or in a SQL database in Microsoft Fabric. - The preflight comes first. Before loading anything,
build_reporting_databasereports the rows read and the rows it would keep, the links that cross from kept content into a package left out (kept, with an "(excluded)" stand-in at the far end that shows the element type, never the name), and two kinds of finding. A blocking finding stops the build: a connector whose stereotype is stored as text with no binding to the technology. Fix it in EA, after a baseline, and run the preflight again. A flag is shown and the decision is yours: an element carrying two of the technology's stereotypes (it appears in both tables), a root package created since the profile was saved (left out until you add it), a profile entry that matches no package, and an element with two tagged values of the same name. Asking for the preflight only writes nothing; a blocked preflight writes nothing either. - Readers never see a partial build. The views are rebuilt inside one transaction, and a reporting database is built in a staging area and swapped in inside one transaction. A build or refresh that fails, or is stopped by its preflight, leaves the previous reporting data in place.
- It never replaces an EA repository. A reporting-database build refuses a target database that holds an EA repository's own tables, because a build replaces the tables in its target. A direct-access build refuses a database that holds no EA repository.
- The kept extract. For a reporting database and for Parquet, the rows actually loaded, after the cut, are kept beside the profile, replacing the previous run's; only the last run is kept. Content in excluded packages is never written to disk. The kept extract holds everything you chose to report, so treat it with the same care as the reporting data. Direct access reads EA live and keeps no extract.
- Checking the build.
check_business_layerreports alignment with the metamodel: every allowed combination has a table, every connector lands in an allowed combination or is reported as outside every one, and every included element is in at least one entity table. With values on, it compares the names, package paths, tagged-value columns, connector ends and connector tagged values in the views with a separate read through EA, so the open repository must be the one the layer was built from. A check that compared nothing is a failure, never a pass. A Parquet build has no views to check; its build reports the same alignment summary. - Builds flag drift. Every build and refresh reports stereotypes and connector combinations that the saved inclusion choice does not cover, and a technology whose version has changed since the choice was made. A refresh uses the saved choice and does not decide anything new; you review the flags and update the profile.
- Values as EA shows them. Of two tagged values with one name on an element, the first is used, as EA's Properties window shows it. A memo tagged value is read from its notes. A tagged value that lists referenced elements becomes a tag-row table with one row per element. Dates read through EA in the machine's locale are stored in one standard date form. An empty value and a missing value cannot be told apart, because EA returns both the same way.
- The refresh. One refresh of a profile runs at a time; asking to start another while one runs returns the running one's id. Run ids are kept until the server restarts. To keep the data fresh, a scheduled AI agent connected to the machine where EA runs calls
start_reporting_refreshand pollsget_reporting_refresh. EA must be running with the repository open on that machine, or the refresh fails. A refresh into a SQL database in Microsoft Fabric also needs a person to complete the sign-in when the server process first opens the database; an unanswered sign-in stops the run after about ten minutes and leaves the previous data in place. - Read-only mode refuses
build_business_layerandremove_business_layer, and refusesstart_reporting_refreshfor a direct-access profile, because those write into the EA repository's database. It does not refusebuild_reporting_databaseorreplay_reporting_database, which write a separate database or files. - No masking. Everything in a package in scope is reported, including notes and tagged values. To keep content out, leave its package out.