Answer a stakeholder portfolio question
Goal
Answer "how many X are Y", "what is in scope for this regulation", or "how complete are these fields", in business terms, with the coverage that makes the number honest. This is for an architect answering a product owner, risk officer or executive. You end with an answer in the stakeholder's vocabulary, with the denominator, the coverage caveat, and (where relevant) a statement of what the number does not include.
Where it runs
This scenario needs the MCP server. Computer use covers its UI steps.
| Surface | How it runs |
|---|---|
| Claude Code | Fully |
| Claude Cowork | Fully |
| Claude Desktop chat | Fully, except the UI steps, which you perform: starting EA and opening the model, and handling any dialog EA raises (you screenshot it, paste the screenshot into the conversation so the assistant can analyze it, then dismiss it). |
| VS Code with GitHub Copilot | Fully, except the UI steps, which you perform: starting EA and opening the model, and handling any dialog EA raises (you screenshot it, paste the screenshot into the conversation so the assistant can analyze it, then dismiss it). |
How it works
The model has the data. The gap is translation, plus one thing translation does not fix: a roll-up is only as honest as the tagged value is complete, and nothing in the output warns you when it is not. A roll-up over a tag set on only some elements does not fail or warn. It answers with whatever fraction happens to be filled in. So the skill makes coverage the first step.
Three different coverage failures look identical until you check (illustrated on the Westbrook model):
- The tag is not on the element type at all. A roll-up returns zero elements and no groups, which reads as "no such elements" instead of "this type does not track it".
- The tag is attached but blank everywhere. A check that asks only "is the tag present" reports full coverage; the usable coverage is zero.
- Real gaps. The tag is filled in on most elements and missing on some, and nothing in the stereotype says which tags will be complete.
A fourth failure, which coverage counting misses entirely, is drift in the values themselves: one real team spelled two ways (an HTML-encoded ampersand that survived an import) shows as two teams in a roll-up.
The skill answers by asking EA directly, which suits a question or two. When the question spans the whole model, recurs, must be refreshable for Power BI, or concerns a figure that has to be checked against the repository, build the business layer instead (Build a reporting database), whose value check compares every cell with an independent read through EA. The business layer does not handle comma-joined values any better: it also keeps a comma-joined text tag as one value.
Before you start
- EA is running with the model open, and the preflight is done, including which technology is loaded.
- The stakeholder's question in their words, and the scope they mean (the whole repository, or one line of business).
- The skill is read-only. Nothing here writes to the model.
Steps
- AI with computer use; otherwise you If EA is not running or the model is not open, start EA and open it. AI
ea-stakeholder-reportingpins down the question and the scope. You say what is being asked. - AI Power Tools
ea-stakeholder-reportinggets the true denominator per stereotype (the stereotype usage summary, Summaries). - AI Power Tools
ea-stakeholder-reportingchecks coverage for the tag in question, per stereotype (the tagged-value usage summary). - AI Power Tools
ea-stakeholder-reportingrolls the elements up by the tag's value (aggregate_portfolio, an operation of theea_repositorytool; see ea_repository). - AI
ea-stakeholder-reportingscans the groups for blanks, the literal value "None", near-duplicates and combined values. If the roll-up reports any combined values, it rolls up again with values split. - AI Power Tools For a named system,
ea-stakeholder-reportingreads a plain-language view of one element (get_element_business_view, Business view). AI It translates technical names into business terms (see step 6 below). - AI
ea-stakeholder-reportinganswers in business terms with the denominator and the coverage caveat. You release the answer.
Step 3, read it as coverage. For each tag, the assistant has the number of elements that carry the tag, the number where it is filled in, the number of distinct values (counting the empty value), and a sample of the values. Presence alone does not mean covered: EA creates the tag row when a stereotype is applied whether or not it is filled in, so a tag present on every element can still be blank on every element. If the tag name is absent from the output for that stereotype, the type does not carry it.
Step 4, the roll-up. The roll-up groups elements of a stereotype by a tag's value. A bare stereotype name matches from any profile or none; a profile-qualified name (WBA::WBABusinessApplication) matches only that profile. The roll-up can be limited to a package subtree, can omit element names to return counts only, and can be told to look at profile-bound stereotypes only, ad hoc stereotypes only, or both. Groups come back ordered by count, largest first. The result gives the total of distinct matched elements.
A misspelled stereotype, a stereotype with no elements, and a real stereotype that never carries the tag all return the same empty shape. The assistant confirms the name against the denominator step before reporting a zero.
A comma-joined value (GLBA, FFIEC) is grouped whole by default, so GLBA and GLBA, FFIEC are separate groups and the exact GLBA group undercounts. The roll-up reports how many matched elements hold a comma-joined value. When that count is not zero, the assistant rolls up again with values split: each value is split on commas and the element is counted under each part. Group counts then sum to more than the number of elements, so each group is quoted against the total of matched elements, not against the sum. On the Westbrook reference model, the exact GLBA group holds 14 business applications, while the split roll-up counts 28 in GLBA scope: half the true count was hiding in combined values. A free-text tag that happens to contain a comma would be split wrongly, so the assistant checks what the values look like first.
Step 5, reading the groups. A blank group means "not recorded". The literal value "None" means assessed and not in scope, which is a different answer from blank; keep them apart. Near-duplicate spellings, such as an encoded ampersand left by an import, split one real group in two.
Step 6, translating. The display-term lookup (resolve_display_term, Display terms) knows the languages that ship with EA, and a technology's stereotypes only once that technology's XML has been parsed in the session. It never knows a technology's tags. The business view and the roll-up take their labels from the same lookup, so for your own technology their labels are technical names. The assistant therefore takes a stereotype's business name from the alias your technology declares (read with get_mdg_from_runtime, so WBABusinessApplication becomes "Business Application"), and derives a tag's label by splitting the camelCase name (businessOwner becomes "Business Owner"). A tag that is not set is omitted from the business view's properties, not shown blank, so a short list does not mean "not applicable".
What the assistant says. The number with its denominator ("22 of 52 business applications are Business-Critical"), what fraction of the data the tag covers if it is not complete, and what the number does not include (stereotypes outside the technology, elements with no stereotype). It never presents a roll-up as complete when coverage is partial.
Prompts to use
Opening:
Follow-ups:
- Scope: "Only the Consumer Banking line of business."
- Regulation: "How many are in scope for GLBA? Some have combined values, so don't just count the exact match."
- Gaps: "Which owner fields are incomplete? Check for near-duplicate team names too."
- Named system: "Give me a plain-language summary of the Fraud Decision Engine for the executive pack."
Recommended models
| Model | Fit | Why |
|---|---|---|
| Claude Fable 5.1 | Capable | The data steps are deterministic; the framing and caveats are light judgment |
| Claude Opus 5.5 | Capable | Same |
| Claude Sonnet 5.5 | Recommended | Procedural; consistently applies the coverage-first discipline |
| Claude Haiku 4.5 | Capable | Fine for a single roll-up; confirm it states the denominator and coverage |
Ratings are guidance based on the kind of reasoning the scenario needs, not measured benchmarks.
Checking the result
- Correct. The denominator in the answer equals the element count for that stereotype from the usage summary. The group counts sum to the total of matched elements (when values are not split). A named-system summary matches the element in EA. Red flag: a denominator that is not the stereotype's own count.
- Complete. The coverage statement matches the filled-in count over the denominator for that stereotype and tag. Blank groups are shown, not hidden, and "None" is kept apart from blank. Near-duplicate group values have been checked. The count of comma-joined values was checked, and the split roll-up used when it is not zero. Red flag: a clean-looking table with no coverage line.
- Nothing unintended changed. Read-only. Compare a second roll-up scoped to a package to confirm the scoped total is not larger than the repository total.
Variations
- A recurring figure, or one that must be checked against the repository. Build the business layer and answer from it (Build a reporting database). Every cell is compared with EA, and a snapshot carries its as-of time. Coverage still matters there: state the populated count with every figure.
- Dependency questions ("what depends on this system?") use the traversal operations in Trace dependencies.
- A fact about one system. The business view of that element alone.
Limitations
- An empty roll-up is ambiguous. Zero elements and no groups means no such stereotype, or no such tag on it. Check the name against the stereotype summary.
- Blank counts as a value. An empty string is a group and looks like data. "Assessed, not applicable" and "never assessed" mean different things; do not merge them.
- Encoding drift splits one bucket in two. Look for near-duplicate group values.
- Comma-joined tags undercount an exact-match roll-up. See the splitting note above.
- Your own technology's terms come back as technical names from the display-term lookup, the business view and the roll-up. Take stereotype names from the technology's aliases, and derive tag labels.
- Coverage figures quoted from the skill's reference are point-in-time Westbrook measurements. Different states of the demonstration model give different totals; recompute on yours.