plugins/datasite/skills/gap-analysis/SKILL.md
Data Room Gap Analysis skill for Datasite deal rooms. Use this skill whenever a sell-side deal team wants to audit what is missing, sparse, or incomplete in their data room before going live to buyers. Triggers include: "run a gap analysis", "what's missing from the data room", "check the data room coverage", "flag empty folders", "what haven't we uploaded yet", "data room readiness check", "find gaps before we go live", "are all the contracts in there", "check we have everything", or any request to assess completeness of the data room by section. Use this skill proactively whenever a deal team is preparing to launch a data room and wants to know what still needs to be uploaded or organised. Do not use for document quality issues such as PII or redaction (use document-quality-check), or for drafting Q&A responses (use bulk-qa-answers).
npx skillsauth add openai/plugins gap-analysisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are helping a sell-side deal team identify what is missing, incomplete, or sparse in their Datasite data room before buyers get access. You produce two outputs: an HTML gap dashboard for team meetings and an Excel gap register for tracking remediation.
Use these terms precisely when communicating with the user:
When in doubt: if it is not the single top-level container for the whole project, it is a folder.
| Capability | Free | Requires Blueflame | |---|:---:|:---:| | Structural gap analysis (missing/empty/sparse folders) | ✅ | — | | Year completeness checks from filenames | ✅ | — | | Contract cross-referencing (customer, employee, supplier lists) | — | ✅ | | IRL matching (if provided) | — | ✅ |
Without Blueflame: Produces a structural gap report — missing sections, empty folders, sparse time-series coverage — based on folder structure and filenames. Contract cross-referencing and IRL matching are skipped.
With Blueflame: searchDocuments finds customer, employee, and supplier lists inside documents and cross-references them against the contracts folders to identify missing agreements.
⚠️ Blueflame content guard — two-tier behaviour
searchDocumentsis the only permitted source of document content.
Do not use Claude's training knowledge, general M&A knowledge, or inference from file names for any findings.
Steps 1–4 (structural gap analysis) use
listFolderContentsonly — always free. Complete these regardless of Blueflame status.Step 5 (contract cross-referencing) requires
searchDocuments. When you reach it, attempt one call. If it returns an activation link instead of results, do not discard the structural findings already computed. Present Steps 1–4 results first, then say:"I've completed the structural gap analysis. Summary: [list top findings per section in plain text — e.g. 'Finance: FY2023 audited accounts missing', 'Legal: litigation schedule absent']. To also cross-reference your customer, employee, and vendor lists against contracts, Blueflame AI search needs to be activated: 🔗 Activate Blueflame: [activation link] With Blueflame: I'll read your lists, extract each name, and check whether a signed contract exists — identifying missing or partial coverage. Would you like to activate now, or shall I produce the gap report dashboard with structural findings only?"
Do not generate the HTML dashboard or Excel output until after the user responds to this question.
- All content findings must be sourced exclusively from tool results.
listFolderContents— efficient traversal
depth: 1(default) — immediate children only. Use for targeted lookups.depth: 5, foldersOnly: true(default when depth > 1) — full folder tree in one call, no documents. Use for structural checks.depth: 5, foldersOnly: false— full folder tree including all document metadata in one call. Use when building a document inventory.- When
depth > 1, the response is a flat list withdepthandpathcolumns — not a nested tree.
Call getProjectOverview to understand the deal: company name, sector, transaction type, deal size, and the fileroom structure. This context shapes what "complete" looks like — a SaaS M&A deal needs different coverage than a manufacturing PE deal.
Note the transactionValue and useCase — these determine:
Ask the user (briefly, in one line): "Do you have an Information Request List you'd like me to cross-reference? If so, share it and I'll flag what's been delivered vs. outstanding."
If they provide one, read it and extract each requested item. Track these separately — you'll use them in Step 4 to produce a delivered/outstanding view alongside the structural gap analysis.
If they don't have one, proceed with the structural analysis only.
Use listFolderContents to walk the entire data room, top to bottom. For each fileroom and folder, note:
3.2 Audited Financial Statements)Use listFolderContents to drill into specific folders where you need a precise document count or list of filenames.
Apply judgment based on what the folder is for:
Compare the actual data room structure against what a deal of this type should contain. Flag any top-level sections that are entirely absent:
Always expected (any M&A/PE deal):
Expected based on sector:
Expected based on transaction type:
For any folder containing time-series documents (financials, tax returns, management accounts, board minutes), verify year coverage explicitly.
Based on the deal profile:
For each time-series folder, list which years are present and which are missing. Example:
"Audited Financial Statements — FY2023 ✓, FY2024 ✓, FY2025 ✗ Missing" "Tax Returns — FY2023 ✓, FY2024 ✗ Missing, FY2025 ✗ Missing"
Use document filenames (visible via listFolderContents) to infer which year each document covers. If filenames are unclear, note it as "year unclear — review needed."
If the data room contains any of the following lists, cross-reference them against the corresponding contracts folder. Use searchDocuments to locate the list documents, then read their contents to extract names.
searchDocuments with query "customer list" or "client list"searchDocumentsReport as: "Contract missing for: [Customer Name]" — sorted by likely revenue importance if discernible from the list.
searchDocuments with query "employee list" or "staff list"searchDocumentsFocus on senior staff — it is not always expected that every employee has an individual agreement (e.g. employees on standard terms), but directors, C-suite, and named key staff should each have one.
Report as: "Employment agreement not found for: [Name], [Title]"
searchDocuments with query "supplier list" or "vendor list"Report as: "Supplier agreement missing for: [Supplier Name]"
If the user provided an Information Request List:
For each IRL item, determine its status:
searchDocuments to find it); include the VDR pathPresent this as a separate table: IRL Item | Status | VDR Location (if delivered) | Gap Description (if outstanding)
Compile findings into three categories:
Category 1 — Structural gaps (missing or empty sections)
{ area, folder_path, status: "Missing"|"Empty", severity, note }
Category 2 — Sparse or incomplete sections
{ area, folder_path, status: "Sparse", detail, severity }
For example: "Board Minutes — only 1 document found; expect 3 years of minutes"
Category 3 — Contract gaps (from cross-referencing)
{ type: "Customer"|"Employee"|"Supplier", name, gap_detail, severity }
Severity:
Before generating any output, ask:
"I've completed the gap analysis. What would you like me to produce?
- HTML dashboard — interactive gap report with section cards, financial year grid, and Excel export button (uses additional credits to render)
- Plain text summary — gap findings listed in this conversation, no additional cost
- Both"
Only generate the HTML dashboard and/or Excel tracker if the user explicitly requests them. If they choose plain text, go directly to Step 9.
Generate a self-contained HTML artifact with the following structure. Include a "Download as Excel" button in the header that exports all gap data client-side using SheetJS (https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js). The exported file should match this structure:
Excel columns (exported on button click):
Excel formatting applied via SheetJS: header row dark blue (#1a2332) with white bold text, severity colour coding (High = red, Medium = amber, Low = grey), section separator rows per workstream.
The dashboard itself:
Header bar:
Section scorecard:
Year coverage matrix:
Contract completeness summary:
IRL tracker (if IRL was provided):
Detailed gap list:
Design: white background, dark headings, navy/amber/red/green palette, 12px border-radius cards, no external dependencies.
Present the dashboard and give a brief summary:
"I've analysed [N] folders across [M] sections and found [X] High, [Y] Medium, and [Z] Low gaps. The most critical areas are [list top 3]. [If contract cross-referencing ran:] I also cross-referenced [P] customers, [Q] employees, and [R] suppliers — [S] contracts are missing. Use the Download button in the dashboard to export the full gap register as Excel."
Then offer:
"Want me to prioritise the remediation list so the team knows what to tackle first before going live?"
Be specific, not vague. "The Legal section is sparse" is not useful. "Legal / Litigation Schedule — folder is empty; no pending claims schedule found" tells the team exactly what to upload.
Use filenames to infer content. Document names in the data room usually reveal what's inside (e.g. "FY2024 Audited Accounts.pdf"). Use them to determine year coverage and document type without needing to open every file.
Calibrate to deal type. Missing board minutes matter far more in a PE deal with a complex governance story than in a simple asset sale. Adjust severity accordingly.
Don't penalise intentional omissions. Some folders may be empty by design (e.g. a "Closing Documents" folder at the start of a process). If the folder name suggests it's a placeholder for future content, note it as "pending — expected later in process" rather than flagging it as a critical gap.
Cross-referencing is best-effort. Customer and employee lists may not always be present or clearly named. If you can't find a list to cross-reference against, say so rather than skipping the check silently.
getProjectOverview fails or returns the wrong project
Check that the Datasite MCP connector is connected (Settings → Extensions → Datasite should show "Connected"). If you have multiple projects open, confirm with the user which project to use.
listFolderContents returns no results
The fileroom may be empty or unpublished. Re-run listFolderContents without a metadataId to list all filerooms from the root. If a fileroom exists but shows 0 documents, the content may not yet be published — note this to the user and proceed with what is available.
searchDocuments returns an activation link instead of results
Blueflame AI search is not yet active on this project. Follow the Blueflame prompt in the skill instructions above. Do not attempt to answer using Claude's training knowledge.
MCP disconnects mid-workflow Reconnect via Settings → Extensions → Datasite. Resume from the last completed step — results already gathered do not need to be re-fetched.
updateContent or createContent returns a permissions error
The user's Datasite account may not have Editor permissions on this project. Ask them to check their role in Datasite project settings.
development
Use when the user wants to spin up / create / launch / provision a DigitalOcean droplet (or "a remote dev box on DO") and connect to it from Codex as a remote SSH workspace.
data-ai
Search through Microsoft Teams chats or channels, triage unread or recent activity, draft follow-ups, and manage Planner tasks through connected Teams data.
tools
Motion / animation context for the `use_figma` MCP tool — animating Figma nodes via manual keyframes, animation styles, easing, and timeline duration. Load alongside figma-use whenever a task involves adding, editing, or inspecting animation on a node.
development
SwiftUI ↔ Figma translation. Use whenever the user mentions Swift, SwiftUI, iOS, iPhone, or iPad — in EITHER direction — translating a Figma design into SwiftUI (design → code), or pushing SwiftUI views / screens / tokens back into a Figma file (code → design). Triggers on phrases like 'implement this Figma design in SwiftUI', 'build this screen in Swift', 'push this SwiftUI view to Figma', 'mirror my Swift code in a Figma file', or whenever a Figma URL appears alongside `.swift` files / an `.xcodeproj`. Routes to a direction-specific reference doc; loads alongside `figma-use` for the code → design path.