AttestWorkKey features

Assurance, AI-assisted

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

AttestWork is an assurance workspace with the assistant built in - and a remote MCP server for the AI your firm already licenses. Either way, the AI 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.

Built-in AttestWork Assistant

An assistant already inside every engagement

Every engagement carries the AttestWork Assistant - a chat panel with multi-chat history, like the assistant your team already knows, standing inside the file. It detects where you are: open a procedure on Planning and it already has that section's procedures, what's documented in other areas, the risk assessment, and the engagement's indexed files. Pick Gemini, Claude, GPT, or an open model - every plan can use every model.

The old way
AI lived in another tab. You described the engagement from memory, pasted context in, and copied drafts back out - the assistant never actually saw the file.
What the bot does now
It discusses the approach when you want to talk it through, or documents straight into the procedure when you ask - tables first, drawn from the WPOS Template Library, with a clean table of its own when no template fits. It searches the engagement's indexed files or reads the files you attach. On WPOS Esign it can study a signed engagement letter, file the PDF into the right engagement, or create a new engagement from the letter's own terms.
Where you sign off
Sensitive actions - sign-offs, deletions, file moves, creating an engagement - always stop at an in-chat approval card. Drafts stay drafts, edits reopen sign-offs for review, and every tool call goes through the same audited, firm-scoped tool layer as the MCP connector.

Grounded in the in-app assistant panel over the same registered tool layer the MCP connector uses - document_procedure, search_files, manage_procedure_signoff - with every call recorded in the engagement's tool log.

How it flows

An assistant already inside every engagement: Open a procedure then Discuss or document then Approval card then Approve + sign offYouOpen a procedureit knows where you areAI botDiscuss or documenttables first, from the Template LibraryPlatformApproval cardfor anything sensitiveYouApprove + sign offyour click, recorded

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, ChatGPT, or Gemini Spark (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

Google Antigravityattestwork.workpaperos.com/api/mcp
Where are we on the Riverbend audit? Draft P7.2 if the support is in.
The AR aging and cash support are indexed, and the TB ties to the GL. I've drafted P7.2 cash disbursements - it's in the app waiting for your review.
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

Your own assistant - Antigravity, Claude, ChatGPT, or Gemini Spark - calling real WorkpaperOS tools over MCP. Anything that changes the file waits for your review and sign-off in the app. Synthetic data 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 agentGemini Spark, 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.

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

AttestWork Files

Exchange original engagement files with your AI

Works with ChatGPT, Claude, and Google Antigravity, with the original-file exchange workflow validated across all three. Download original Excel, PDF, Word, and image files into your AI's permitted analysis environment and return generated files through the same authorized MCP connection.

The old way
Files lived in a separate folder mirror and audit tool, leaving the team to reconcile delayed copies and move completed work between systems.
What the bot does now
The assistant requests a short-lived original-file download, analyzes the actual document where its environment permits, and returns the result through a reserved HTTPS upload. Large uploads can use resumable transfer, and completion validates integrity before the file enters indexing. MCP coordinates permissions and metadata; it does not carry heavy binary payloads.
Where you sign off
You authorize the companies each AI product may access and retain its execution and network approval controls. ChatGPT, Claude, and Google Antigravity use client-appropriate transfer instructions; file handling depends on the host environment. Review returned work before relying on it as evidence, and revoke connector access whenever needed.

Grounded in the MCP file-transfer tools, signed HTTPS storage transfers, and the revision-bound document indexing pipeline.

How it flows

Exchange original engagement files with your AI: Authorize your AI then Analyze original files then Validate returned files then Review the resultYouAuthorize your AIscoped MCP connectionAI botAnalyze originalfilessigned HTTPS downloadPlatformValidate returnedfilesresumable upload + indexYouReview the resultevidence and sign-off

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