This article lists Level Access reporting data that you can reach through Level Access MCP. It provides the basic vocabulary for describing how the pieces connect.
Note: This is a logical model, not the physical Mongo schema.
On this page:
Tool inventory
The following table lists 12 MCP tools available in an organization, with their inputs and output shapes.
| Tool | Purpose | Input parameters | Output structure |
|---|---|---|---|
| lap_get_workspaces | List workspaces the user can access and the digital assets within each | (none) | workspaces[]: id, name, digitalAssets[] (id, name, propertyKey, type, authorizedDomains[], noDomainRestrictions) |
| lap_get_scans | List automated scans for a digital asset | digitalAssetId (req); createdAtFrom/To (opt); status (opt); title/url (opt); page/limit (opt, default 5) | total; scans[]: _id, createdAt, title, url, status, scanningType, scanOrigin, scheduledAt, customLinks[], viewport, completedAt |
| lap_get_scan_summary | Score + findings-by-rule for one scan/tool | digitalAssetId (req); scanId (req); tool (opt, default access-engine) | scanSummary: scanId, toolName, score, scoringAlgorithm, findingsByRule[] (ruleDescription, successCriteria*, severity, count, scoreImpact); total; totalBySeverity |
| lap_get_scan_findings | Paginated flaw detail for one scan, grouped by rule | digitalAssetId (req); scanId (req); severities[], standards[], statuses[], tools[], identifiers[] (opt); page/limit (opt, default 20) | flawsByRule[]: ruleId, ruleTitle, ruleDescription, severity, successCriteria[], flaws[] (flawId, issueId, status, element, elementReference, pageUrl, auditRuleId, platformLink), toolName; _total |
| lap_get_digital_asset_issues | Issues across all scans for one digital asset | digitalAssetId (req); severity (opt); status (opt); page/limit (opt) | Indexed map of sampled issues (issueId, issueTitle, severity) + summary (totalIssues, returnedIssues, filters, showing) |
| lap_get_digital_asset_issue_details | Full detail for one automated issue | issueId (req); digitalAssetId (opt — auto-resolved from issueId prefix) | issueId, issueTitle, scanId, ruleDetails (severity, ruleId), tool, element, elementReference, platformLink |
| lap_get_digital_asset_monitoring_overview | Monitoring configuration / status for a digital asset | digitalAssetId (req) | monitoringSettings (enabled, occurrence, conformanceLevel, viewport, startAt, scanAuthenticationType, crawler, runFirstScanImmediately, nextScheduledAt); recentMonitoringScans (latestScan, previousScan) |
| lap_get_evaluations | List manual evaluations for a digital asset | digitalAssetId (req); createdAtFrom/To (opt); status (opt, default completed); title (opt); page/limit (opt) | total; evaluations[]: id, title, status, createdAt, updatedAt, origin, lastUploadDate, conformanceLevel, conformanceScores[] |
| lap_get_evaluation_findings | Rich per-finding detail for one specific evaluation | digitalAssetId (req); evaluationId (req); severity[], status[] (opt); page/limit (opt) | total; findings[]: id, evaluationId, title, severity, disabilitiesAffected[], status, effort, stepsToReproduce, actualResult, recommendation, url, issueId, xpath, rule (description, category, successCriteria[]) |
| lap_get_all_evaluation_findings | Consolidated findings across all evaluations for a digital asset | digitalAssetId (req); evaluationStatus[] (opt, default completed); findingStatus[] (opt); severity[] (opt); page/limit (opt) | findings[]: id, evaluationId, issueId, title, severity, disabilitiesAffected[], status, effort, url, rule (successCriteria[]) — no narrative fields; summary (totalFindings, returnedFindings, filters) |
| lap_get_platform_metrics | Severity-bucketed findings metrics over time at digitalProperty / workspace / tenant level | entityType (opt, default digitalPropertyId); entityIds[] (req unless tenantId); dataSource[] (opt); frequency (opt, default month); timeframe or startDate/endDate; severity[] (opt); standards[] (opt); tool (opt) | Array of snapshots: timestamp, findingsCounts.countsBySeverity.{auto,manual}.{severity} (new, resolved, unresolved, cumulativeNew, cumulativeResolved, cumulativeUnresolved) |
| lap_get_rules | Rule metadata: description, severity, success criteria | ruleIds[] (req, max 25); tool (opt, default access-engine) | Array of: id, ruleId, title, description, severity, toolName, whatToDo, whyItMatters |
How the entities connect
The reporting domain follows a clear hierarchy (with the Metrics layer rolling up across all levels):
Workspace → Digital Asset → Scans & Evaluations → Findings → Rules
In plain terms:
A workspace owns digital assets.
Each asset runs automated scans (which produce flaws, scored by a scan summary) and manual evaluations (which produce manual findings).
- Flaws are issues returned by the lap_get_digital_asset_issues and lap_get_digital_asset_issue_details APIs. Based on the ScanId, flaws are identified across all scans for the digital asset.
Both flaws and findings violate rules.
Note: Metrics snapshots aggregate findings by severity at the asset, workspace, or organization level.
The following diagram illustrates the relationship among the entities.
Note: In this diagram, PK indicates a primary key and FK indicates a foreign key.
Data dictionary
Review the field-by-field reference for each entity.
Workspace
| Field | Type | Description | Example | Source MCP tool | Notes |
| id | string (24-hex) | Workspace identifier | 650bd31c00677367c9907d05 | lap_get_workspaces | Primary key; joins to Digital Asset only via nesting (no reverse lookup tool) |
| name | string | Workspace display name | Gov&Rep 3 | lap_get_workspaces | — |
| digitalAssets[] | array | Digital assets owned by this workspace | — | lap_get_workspaces | Embedded, not a separate call |
Digital asset
Note: Digital assets might also be referred to as digital properties.
| Field | Type | Description | Example | Source MCP tool | Notes |
| id | string (24-hex) | Digital asset identifier | 650bd31c006773848c907d0c | lap_get_workspaces | Primary key; used as digitalAssetId everywhere downstream |
| name | string | Display name | ME+Monitoring | lap_get_workspaces | — |
| propertyKey | string | Short prefix used in human-readable issue IDs | ASW | lap_get_workspaces | Prefixes issueId (e.g. ASW-70866); lets issue_details auto-resolve digitalAssetId |
| type | string | Asset type | Website, Android app, iOS app | lap_get_workspaces | — |
| authorizedDomains[] | array<string> | Domains this asset is scoped to | ["abcweb.com","*.abcweb.com"] | lap_get_workspaces | Empty for native apps |
| noDomainRestrictions | boolean | Whether domain scoping is disabled | false | lap_get_workspaces | — |
Scan (automated)
| Field | Type | Description | Example | Source MCP tool | Notes |
| _id | string (24-hex) | Scan identifier | 6a4da1aa96a4ebe66e5ed09a | lap_get_scans | Primary key; used as scanId downstream |
| title / url | string | Scanned page/site title and URL | abcweb.com | lap_get_scans | — |
| status | enum | Scan lifecycle status | completed_with_errors | lap_get_scans | cancelled, completed, completed_with_errors, error, failed, pending, processing, removed, scheduled |
| scanningType | enum | Scope of the scan. Values: singlePage, entireSite, customLinks, sitemap, manualAudit, ciTool, automatedUserFlow, mobile | entireSite | lap_get_scans | — |
| scanOrigin | enum | What triggered the scan. Values: quick_scan, advanced, monitoring, rerun, public_api, developer_tools, browser_extension, pages. For mobile scans: mobile_sdk, mobile_emulator, mobile_xml, mobile_engine_desktop, mobile_engine_sdk, mobile_engine_crawling | monitoring | lap_get_scans | — |
| scheduledAt / completedAt | ISO date | Schedule and completion timestamps | 2026-07-22T01:02:31.846Z | lap_get_scans | — |
| viewport | object | Viewport used for the scan | {type: desktop, height:1080, width:1920} | lap_get_scans | — |
| customLinks | array | Contains the links scanned when scanningType is customLinks (i.e. not crawl, single page, or Automated User Flow) | — | lap_get_scans | Only populated for customLinks scan type |
Scan summary
| Field | Type | Description | Example | Source MCP tool | Notes |
| scanId | string | Scan this summary belongs to | 6a4da1aa96a4ebe66e5ed09a | lap_get_scan_summary | FK → Scan |
| toolName | enum | Testing tool used | access-engine | lap_get_scan_summary | access-engine, axe, ibm, wave |
| score | number (float) | Overall accessibility score for the scan | 80.77 | lap_get_scan_summary | 0–100 scale (algorithm-dependent) |
| scoringAlgorithm | string | How the score was computed | average | lap_get_scan_summary | — |
| findingsByRule[].severity | enum | Severity of the rule's findings | high | lap_get_scan_summary | critical, high, low, custom1, custom2, info |
| findingsByRule[].count | number | Count of findings for that rule | 875 | lap_get_scan_summary | — |
| findingsByRule[].scoreImpact | number | Points deducted per-occurrence for this rule | 0.7 | lap_get_scan_summary | — |
| total | number | Total findings in the scan | 2391 | lap_get_scan_summary | — |
| totalBySeverity | object | Findings broken out by severity | {critical:26, high:397, low:995, info:973} | lap_get_scan_summary | — |
Flaw (automated finding, scan-scoped)
| Field | Type | Description | Example | Source MCP tool | Notes |
| flawId | string (24-hex) | Unique flaw identifier | 69f158d271e9bd8e99e13035 | lap_get_scan_findings | — |
| issueId | string | Human-readable issue key ({propertyKey}-{n}) | ASW-62593 | lap_get_scan_findings | FK → Issue; links flaw occurrences across scans to a persistent issue |
| status | enum | QA status of the flaw | reOpen | lap_get_scan_findings | closed, dismissed, open, reOpen |
| element / elementReference | string | Offending DOM snippet / CSS-like path | <button …> / body>section:nth-of-type(1)>… | lap_get_scan_findings | — |
| pageUrl | string | Page the flaw was found on | https://abcweb.com/online | lap_get_scan_findings | — |
| auditRuleId | string | Numeric rule ID (matches lap_get_rules ruleId) | 205 | lap_get_scan_findings | FK → Rule |
| platformLink | string (URL) | Deep link into the LA platform UI | — | lap_get_scan_findings | — |
| (grouping) ruleId, ruleTitle, ruleDescription, severity, successCriteria[] | — | Rule metadata inlined at the group level | — | lap_get_scan_findings | Duplicates a subset of lap_get_rules output |
Issue (persistent automated-issue record, digital-asset-scoped)
| Field | Type | Description | Example | Source MCP tool | Notes |
| issueId | string | {propertyKey}-{n} key | ASW-70866 | lap_get_digital_asset_issues / _issue_details | Primary key; stable across scans (unlike flawId) |
| issueTitle | string | Human-readable title (= rule title) | A elements without an href or tabindex >=0 are not in the focus order | lap_get_digital_asset_issues | — |
| severity | enum | Severity | high | lap_get_digital_asset_issues | — |
| scanId | string | Scan the detail record resolves to (latest occurrence) | 6a4da1aa96a4ebe66e5ed09a | lap_get_digital_asset_issue_details | FK → Scan |
| ruleDetails.ruleId | string | Rule violated | 1119 | lap_get_digital_asset_issue_details | FK → Rule |
| element / elementReference | string | Offending element / path | — | lap_get_digital_asset_issue_details | — |
| platformLink | string (URL) | Deep link into the LA platform UI | — | lap_get_digital_asset_issue_details | — |
| summary.totalIssues | number | Total issue count for the asset | 9021 | lap_get_digital_asset_issues | — |
Monitoring overview (per digital asset)
| Field | Type | Description | Example | Source MCP tool | Notes |
| monitoringSettings.enabled | boolean | Whether monitoring is active | true | lap_get_..._monitoring_overview | — |
| monitoringSettings.occurrence | string | Scan cadence | Week | lap_get_..._monitoring_overview | — |
| monitoringSettings.conformanceLevel | string | WCAG target level | WCAG_v22_AA | lap_get_..._monitoring_overview | — |
| monitoringSettings.crawler | object | Crawl configuration | {discoveryMethod: crawl, limitCrawlingPagesTo: 50, crawlDeepLevel: 3, …} | lap_get_..._monitoring_overview | — |
| monitoringSettings.nextScheduledAt | ISO date | Next scheduled scan | 2026-07-29T01:00:00.000Z | lap_get_..._monitoring_overview | — |
| recentMonitoringScans.latestScan / .previousScan | object | Pointers to recent scans | {scanId, totalScannedPages: 50} | lap_get_..._monitoring_overview | FK → Scan |
Manual evaluation
| Field | Type | Description | Example | Source MCP tool | Notes |
| id | string (24-hex) | Evaluation identifier | 650bd46d946a5a09ebc9ffb7 | lap_get_evaluations | Primary key; used as evaluationId downstream |
| title | string | Evaluation name | G&R 3 | lap_get_evaluations | — |
| status | enum | Lifecycle status | completed | lap_get_evaluations | completed, inProgress, onHold, pendingReview, readyToStart |
| origin | string | Who/what created it | staff | lap_get_evaluations | — |
| createdAt / updatedAt / lastUploadDate | ISO date | Timestamps | 2023-09-21T05:28:13.846Z | lap_get_evaluations | — |
| conformanceLevel | string | Target WCAG level | WCAG_v21_AA | lap_get_evaluations | — |
| conformanceScores[] | array | Score per standard | {standard: WCAG_v21_AA, score: 86} | lap_get_evaluations | — |
Manual finding
| Field | Type | Description | Example | Source MCP tool | Notes |
| id | string (24-hex) | Finding identifier | 650bd46d946a5a7a2cca0007 | lap_get_evaluation_findings / _all_ | — |
| evaluationId | string | Parent evaluation | 650bd46d946a5a09ebc9ffb7 | both | FK → Evaluation |
| issueId | string | Persistent issue key | ASW-11 | both | Same propertyKey-prefixed pattern as automated Issues; namespace appears shared across auto/manual |
| title | string | Finding title | Missing information for the image | both | — |
| severity | enum | Severity | high | both | critical, high, low, custom1, custom2, info |
| disabilitiesAffected[] | array<string> | Disability categories impacted | ["visual","auditory"] | both | — |
| status | enum | QA workflow status | notFixed | both | open, partiallyFixed, notFixed, cannotBeFixed, fixed, toReview, notReproducible, dismissed, validationRequested |
| effort | string | Estimated remediation effort | low | both | — |
| url | string | Page evaluated | https://abcweb.xyz.com/... | both | — |
| xpath (misnomer — usually a cssSelector) | string | Element locator | 11 | lap_get_evaluation_findings only | Not present in the _all_ variant |
| stepsToReproduce / actualResult / recommendation | string | Narrative detail | — | lap_get_evaluation_findings only | Not present in the _all_ variant |
| rule.description / .category / .successCriteria[] | object | Inlined rule metadata | {description: "Missing image description", category: "Alternative text"} | both (category only in per-eval call) | — |
Rule
| Field | Type | Description | Example | Source MCP tool | Notes |
| id | string (24-hex) | Internal rule document ID | 63f02c0916bc4a66ee5bfff3 | lap_get_rules | — |
| ruleId | string | Human-facing rule number (matches auditRuleId / ruleDetails.ruleId elsewhere) | 1119 | lap_get_rules | Join key back to Flaw / Issue |
| title | string | Rule name | A elements without an href or tabindex >=0 are not in the focus order | lap_get_rules | — |
| description | string | What the rule checks | — | lap_get_rules | — |
| severity | enum | Default severity | high | lap_get_rules | — |
| toolName | enum | Owning tool | access-engine | lap_get_rules | access-engine, wave, ace, axe-core |
| whatToDo / whyItMatters | string (HTML) | Remediation guidance and rationale | — | lap_get_rules | Contains inline HTML tags (e.g. <code>) |
Metrics snapshot
| Field | Type | Description | Example | Source MCP tool | Notes |
| timestamp | ISO date | Start of the bucket (week / month / quarter) | 2026-07-01T00:00:00.000Z | lap_get_platform_metrics | — |
| ...countsBySeverity.{auto|manual}.{severity}.new | number | New findings opened in this bucket | 234 | lap_get_platform_metrics | Data source split: auto vs manual |
| ...resolved | number | Findings resolved in this bucket | 141 | lap_get_platform_metrics | — |
| ...unresolved | number | Net open findings from this bucket's cohort | 93 | lap_get_platform_metrics | — |
| ...cumulativeNew | number | All findings ever created, to date | 13408 | lap_get_platform_metrics | Per tool docstring |
| ...cumulativeResolved | number | Current resolved backlog, to date | 10168 | lap_get_platform_metrics | — |
| ...cumulativeUnresolved | number | Current open backlog, to date | 3240 | lap_get_platform_metrics | NOT cumulativeNew − cumulativeResolved in general (verify before arithmetic) |
| (request-level) entityType / entityIds | enum / array | Roll-up level requested | digitalPropertyId / ["650bd31c006773848c907d0c"] | lap_get_platform_metrics | Also supports workspaceId, tenantId (tenantId omits entityIds) |
Relationships and roll-up logic
This section descrtibes how records link, and what is explicit in a tool output versus inferred.
Workspace → Digital Asset: Explicit, embedded 1:many in lap_get_workspaces. No reverse “get workspace by digital asset” tool exists.
Digital Asset → Scan / Evaluation: Explicit — both lap_get_scans and lap_get_evaluations require digitalAssetId and return records scoped to it.
Scan → Flaw: Explicit, via lap_get_scan_findings(digitalAssetId, scanId), grouped by Rule.
-
Flaw → Issue:
Explicit. Every flaw carries an issueId; issue_details returns the persistent record whose scanId points to the most recent originating scan.
Inferred: How repeated occurrences across scans consolidate into one persistent issueId is not shown; only the resulting joined record is observable.
Flaw / Issue → Rule: Explicit — auditRuleId and ruleDetails.ruleId match the ruleId from lap_get_rules.
Evaluation → Manual Finding: Explicit, via lap_get_evaluation_findings. The _all_ variant denormalizes this across all evaluations, trading narrative detail for breadth.
Manual Finding → Rule: Only success-criteria / category metadata is inlined — there is no numeric ruleId, so manual findings cannot be joined to lap_get_rules in the way that automated flaws can. Inferred gap, not explicit.
Asset / Workspace / Tenant → Metrics Snapshot: Explicit roll-up via entityType + entityIds. Same shape at every level; the aggregation itself is inferred to be pre-computed (based on response speed and the dedicated tenantId type).
Monitoring Overview → Scan: Explicit — latestScan / previousScan.scanId point to real Scan records.