AttestWorkKey features

Assurance, AI-assisted

Bring an AI agent to the engagement. Keep every sign-off.

AttestWork is an assurance workspace and a remote MCP server: connect your own AI agent and it does the repetitive heavy lifting - reading and indexing evidence, tying out the trial balance, drafting testing tables and financial statements - while a licensed professional reviews, corrects, and signs off wherever judgement is required. The screens below are illustrative and use synthetic sample data only. Here is what it looks like, feature by feature.

AI bot

Does the repetitive heavy lifting — reading, extracting, drafting, matching.

You

Keep the judgement calls — review, correct, approve, and sign off.

Platform

Moves data between modules so nothing is re-typed or re-uploaded.

Connect an AI agent (MCP)

Bring your own AI agent and let it work on the engagement

AttestWork is a remote MCP server. Connect an AI agent - Google Antigravity, Claude Code, or any MCP client - to your WorkpaperOS account, and it can do real work on your engagement using the same tools your team uses.

The old way
AI help lived in a separate chat window. You copied numbers out of the file, pasted them into a chatbot, then copied the answer back in by hand - nothing the assistant did actually touched the workpapers.
What the bot does now
Over an OAuth-secured MCP connection, the agent calls real AttestWork tools: list and read engagement files, search indexed content, import the trial balance and GL, document procedures, draft financial-statement workpapers, and manage PBC requests - directly against your data.
Where you sign off
The connection is scoped by OAuth (read vs. write), every tool call is audit-logged, and anything that changes the file still waits on your review and sign-off. The agent proposes; you dispose.

Grounded in the AttestWork MCP server at /api/mcp (src/lib/mcp/server.ts, oauth-resource.ts) and its registered tools - list_files, search_files, read_file, document_procedure, upsert_fs_report_wpos, PBC tools, and more.

What it looks like

AI agent connected to WorkpaperOSMCP - OAuth

resource: attest.workpaperos.com/api/mcp

search_files{ query: "AR aging 12/31" }done
get_tb_gl_tieout{ year: 2026 }done
document_procedure{ procedure: "P7.2 cash disb." }awaiting your review

The agent calls real WorkpaperOS tools. Anything that changes the file waits for you to review and sign off. Synthetic arguments shown.

How it flows

Bring your own AI agent and let it work on the engagement: Open your AI agent then Connect via MCP then It calls real tools then Review in the appYouOpen your AI agentAntigravity, Claude...PlatformConnect via MCPOAuth, scopedAI botIt calls real toolson your engagementYouReview in the appbefore it is final

TB / GL tie-out

Tie the trial balance to the general ledger automatically

AttestWork imports the trial balance and general ledger, then compares them account by account so variances surface before anyone opens a workpaper.

The old way
A staff accountant exports the TB and GL to spreadsheets, lines them up by account, and eyeballs the differences - slow, and easy to miss a rounding error or a GL-only account.
What the bot does now
The engine builds GL account balances, runs a TB-vs-GL comparison per fiscal year, and returns just the exceptions: variances, accounts that exist only in the GL, and accounts that exist only in the TB.
Where you sign off
You decide what each exception means - a reclass, a missing entry, or an accepted difference - and record the resolution in the file. The tool flags; the auditor concludes.

Grounded in the AttestWork MCP get_tb_gl_tieout tool (summary / exceptions / all) over imported TB and GL data.

What it looks like

attest.workpaperos.com/engagements

Engagements

+ New engagement
ClientTypeYEPhaseProgress
Riverside Manufacturing LLCAudit12/31Fieldwork68%
Example Nonprofit, Inc.Review06/30Planning24%
Sample Advocacy GroupCompilation12/31Completion91%
Cedar Point Holdings LLCAudit09/30Fieldwork52%

Synthetic sample data - not a real client list.

How it flows

Tie the trial balance to the general ledger automatically: Import TB + GL then Match by account then Surface exceptions then Resolve + concludeYouImport TB + GLOne upload eachPlatformMatch by accountPer fiscal yearAI botSurface exceptionsVariances onlyYouResolve + concludeYou decide

OCR + document extraction

Turn scanned support into searchable, structured data

When you upload a scanned PDF, image, or a TB/GL export, AttestWork reads it - pulling out the text and structured fields so the document becomes usable evidence instead of a flat picture.

The old way
A scanned confirmation or invoice was just an image. Someone opened it, read it, and retyped the relevant figures into the workpaper.
What the bot does now
A tiered pipeline escalates only as far as it needs to: a fast local OCR pass first, then Google Document AI for tougher documents, then an LLM-vision fallback - each tier returns text plus a quality/confidence signal.
Where you sign off
Nothing extracted is trusted blindly. Low-confidence or blurry pages are surfaced for a person to check, and the original file always stays attached as the source of record. You correct before it counts.

Grounded in src/lib/file-indexing/ocr-escalate.ts (local -> Doc AI -> LLM vision) and ocr-docai.ts with its confidence handling.

How it flows

Turn scanned support into searchable, structured data: Upload scan / export then OCR, escalate if hard then Flag low quality then Check + acceptYouUpload scan / exportPDF, image, TB/GLAI botOCR, escalate ifhardlocal -> Doc AI -> LLMAI botFlag low qualityconfidence signalYouCheck + acceptoriginal kept

File indexing + search

Find any file across the engagement in seconds

Once files are indexed, both your team and a connected AI agent can search the full text of every document in the engagement - including OCR'd PDFs - instead of clicking through folders.

The old way
You remembered roughly which folder held the reconciliation and opened files one by one until you found the right version.
What the bot does now
Indexing extracts and chunks the text of engagement files into a searchable index; search returns the matching chunks with the file name, a relevance score, and a snippet, so the AI agent can locate the right support for a procedure on its own.
Where you sign off
Search finds candidates; you (or your reviewer) decide which file is the right evidence and map it to the procedure. Indexing surfaces; humans judge relevance.

Grounded in the AttestWork MCP index_engagement_files and search_files tools over the file_index_chunks store (src/lib/mcp/tools/file-lifecycle.ts, search-files.ts).

How it flows

Find any file across the engagement in seconds: Index engagement files then Search full text then Suggest the file then Map the evidencePlatformIndex engagementfilestext + OCR chunksAI botSearch full textscored snippetsAI botSuggest the filefor a procedureYouMap the evidenceyou confirm

AI-drafted workpaper tables

Draft the testing table from the source, tick-marks and all

For a fieldwork procedure, AttestWork can draft the working table - a testing schedule with 'per support' and 'per TB/GL' columns, variances, tick-marks, and references - grounded in the engagement's own evidence.

The old way
You built each testing schedule by hand in a spreadsheet: type the sample items, key the amounts off the support, compute the variances, add the tick-mark legend, cross-reference everything.
What the bot does now
AI drafts the table in the WorkpaperOS style - real file names, period ends, amounts, variances, and AJEs from the engagement, formatted as a schedule with tick-marks - and is explicitly instructed to state what is missing rather than invent support.
Where you sign off
The draft is marked as AI-prepared and awaits review. You adjust the table, then a preparer and a reviewer sign it off; editing the table afterwards resets the sign-off so review is never skipped.

Grounded in the workpaper-tables/ai routes, src/lib/audit-ai/workpaper-style.ts (testing-schedule style, 'never invent support'), and src/lib/workpaper-tables/signoff.ts.

What it looks like

attest.workpaperos.com - Cash disbursements testing

P7.2 - Cash disbursements - substantive testing

Riverside Manufacturing LLC - YE 12/31

Drafted by AI - awaiting review
Testing itemPer supportPer TB / GLVarianceTickResult
Invoice #4471 - Delta Supply Co.12,480.0012,480.00-aAgreed
Invoice #4472 - Harbor Freight Ltd.8,150.008,150.00-aAgreed
Invoice #4478 - Meridian Parts Inc.3,905.003,950.00(45.00)bException
Invoice #4483 - Delta Supply Co.6,220.006,220.00-aAgreed

a - Agreed to vendor invoice and cancelled check without exception.

b - Variance noted; proposed passed-adjustment entry, referred for reviewer conclusion.

Tick-marks and references illustrate the AICPA-style documentation format. Synthetic figures - not a real entity.

How it flows

Draft the testing table from the source, tick-marks and all: Draft the schedule then Add tick-marks + refs then Adjust the table then Prepare + reviewAI botDraft the schedulefrom real evidenceAI botAdd tick-marks +refsflag any gapsYouAdjust the tableyou own itYouPrepare + reviewsign-off resets on edit

Evidence agent

Gather the right support for each audit area

For a given procedure or audit area, an evidence agent searches the engagement's indexed and tagged files and pulls the excerpts that actually support the work - instead of you hunting through a shared drive.

The old way
You remember which PBC file had the reconciliation, dig it out of a folder tree, open it, and copy the relevant numbers into the workpaper by hand.
What the bot does now
The agent looks first at files tagged and mapped to the area, then indexed engagement files, extracts the relevant text, and assembles an evidence summary for the procedure.
Where you sign off
When support is thin, the agent reports a status of 'needs documents' or 'completed with gaps' and lists what is missing - it does not fabricate evidence. You upload or map the missing schedule, then review what it found.

Grounded in src/lib/audit-ai/evidence.ts and its evidence-stage / agent-status types (tagged_indexed, insufficient, needs_documents, completed_with_gaps).

How it flows

Gather the right support for each audit area: Pick a procedure then Search + rank files then Flag any gaps then Fill gaps + reviewYouPick a procedureor audit areaAI botSearch + rank filestagged, then indexedAI botFlag any gapsno invented factsYouFill gaps + reviewyou stay in control

Procedure drafting + sign-off

Draft procedure results, then sign them off

An AI agent connected over the WorkpaperOS MCP can write procedure results - narrative plus tidy result tables - straight into the file, using the same tools and templates a preparer would.

The old way
A preparer writes each procedure narrative from scratch, formats the tables, and cross-references the evidence manually across dozens of procedures.
What the bot does now
The document_procedure tool writes structured Results tabs (with template tables and tickmark suggestions), links supporting files, and keeps a consistent trail across the whole program.
Where you sign off
Nothing is 'done' until a person signs off. Preparer and reviewer sign-offs are explicit actions (mark prepared / mark reviewed), and any later change to the results resets the affected tier's sign-off so review is never silently bypassed.

Grounded in the AttestWork MCP document_procedure and manage_procedure_signoff tools and src/lib/procedure-signoff-reset.ts.

What it looks like

attest.workpaperos.com - Independence & ethics

A2 - Independence & ethical requirements

Example Nonprofit, Inc. - YE 06/30

The engagement team has evaluated compliance with independence and relevant ethical requirements for this engagement. No threats to independence were identified that could not be reduced to an acceptable level. The firm remains independent with respect to the entity.

Prepared

A. Preparer - synthetic

Mar 14, 2026

Reviewed

R. Reviewer, Partner - synthetic

Mar 18, 2026

Sign-off is a human action. Editing the results resets the affected tier. Synthetic names shown.

How it flows

Draft procedure results, then sign them off: Draft results + tables then Suggest tickmarks then Mark prepared then Mark reviewedAI botDraft results +tablesover MCPAI botSuggest tickmarks+ link evidenceYouMark preparedpreparer sign-offYouMark reviewedreviewer sign-off

Google Drive sync

Keep the Engagement Files folder in sync with Google Drive

AttestWork can mirror a firm's Engagement Files folder to and from Google Drive, so the team can work in Drive and the file stays consistent inside WorkpaperOS - by stable file identity, not by fragile paths.

The old way
Files lived in a Drive folder and a separate audit tool, and someone re-uploaded or re-downloaded to keep the two in step, breaking links whenever a folder was renamed.
What the bot does now
Sync follows only the configured Engagement Files folder and its descendants by stable provider identity: renames refresh the display name, moves and trashes reconcile both ways, and conflicts never silently overwrite either side.
Where you sign off
The team decides what belongs in the sync boundary - files outside it are never adopted automatically - and a person moves a document in before it becomes engagement evidence. You set the boundary; sync respects it.

Grounded in src/lib/cloud-sync/ and the engagement-files sync contract (src/lib/mcp/engagement-files-contract.ts).

How it flows

Keep the Engagement Files folder in sync with Google Drive: Set the sync folder then Mirror by identity then Index the contents then Decide what belongsYouSet the sync folderEngagement FilesPlatformMirror by identityrenames, moves, trashAI botIndex the contentssearchable evidenceYouDecide what belongsboundary is yours

Financial statements

Assemble the financial statements from the mapped trial balance

Once accounts are mapped to statement lines, AttestWork can generate the financial-statement report workpaper - so the statements come from the numbers in the file, not a separately maintained Word document.

The old way
Someone rekeys the trial balance into a financial-statement template, re-maps every account, and hopes the two stay in sync through every adjustment.
What the bot does now
The FS mapping join ties each imported account to a statement line (SFP, SOA, SFE), and the report tool builds the CPA report workpaper from that mapping and the adjusted balances.
Where you sign off
The engagement partner reviews the drafted statements and disclosures against the checklist and signs off the FS section. The mapping is auditable and the auditor owns the final presentation.

Grounded in the AttestWork MCP upsert_fs_mapping and upsert_fs_report_wpos tools and the FS disclosure review checklist.

How it flows

Assemble the financial statements from the mapped trial balance: Map accounts then Build FS workpaper then Run disclosure checklist then Partner sign-offYouMap accountsto statement linesAI botBuild FS workpaperfrom mapped TBAI botRun disclosurechecklistflag omissionsYouPartner sign-offfinal presentation

PBC requests

Chase the client list without doing the chasing

AttestWork seeds a standard prepared-by-client request list, tracks what has and has not arrived, and attaches each response to the procedure it supports - so 'what are we still waiting on?' has a live answer.

The old way
You keep a PBC tracker in a spreadsheet, email the client, and manually reconcile which attachments answered which request.
What the bot does now
The PBC tools seed default requests per cycle, let an agent add and update requests, and attach client files to the right request and procedure automatically.
Where you sign off
You confirm a response actually satisfies the request before it clears, and you own the client relationship and the follow-ups. The bot tracks; you decide what is sufficient.

Grounded in the AttestWork MCP seed_default_pbc_requests, add_pbc_request, and attach_file_to_pbc_request tools.

How it flows

Chase the client list without doing the chasing: Seed request list then Track responses then Attach to procedure then Confirm sufficientAI botSeed request liststandard PBC setPlatformTrack responseslive statusAI botAttach to procedureright evidence, right placeYouConfirm sufficientyou clear it

Run your next engagement with a bot on the boring parts.

Start a 5-day trial of AttestWork. Connect your AI agent, let it draft, and review and sign off yourself. Your integrated WorkpaperOS account opens the door.

Start AttestWork free