workpapers-mcp
An MCP server over my itgc-audit-workpapers pack: an IT General Controls audit of my own AWS environment, written up as five markdown workpapers. This server exposes that pack as tools any MCP-capable AI client can call.
Audit workpapers are cross-referenced by design. A risk points to a control, the control points to a test, the test points to a finding. Following those links by hand means flipping between files. With this server a model can trace a control from risk to result in one call, or answer "whats still open?" straight from the files.
Tools
| Tool | What it does |
|---|---|
get_workpaper(number) |
Full text of workpaper 1 to 5 |
list_findings(rating) |
Findings with rating and status, optional rating filter |
control_lookup(control_id) |
One control traced end to end: matrix row, test procedure and result, findings that cite the test |
open_items() |
Findings not remediated, tests without a plain Pass, and unfinished drafting placeholders |
Setup
pipx install workpapers-mcp
uvx workpapers-mcp works too if you prefer no install. Hacking on a clone instead:
python3 -m venv .venv
.venv/bin/pip install mcp
Wire it into Claude Code:
claude mcp add workpapers -- workpapers-mcp
Running from a clone, point it at the venv instead:
claude mcp add workpapers -- /path/to/workpapers-mcp/.venv/bin/python /path/to/workpapers-mcp/workpapers_mcp.py
The server reads the pack from ~/aiProjects/aminWork/automation-portfolio/itgc-audit-workpapers. Point WORKPAPERS_DATA_DIR at your own data folder to read it from somewhere else.
Demo
What it looks like from Claude Code:
> trace control A3 in the workpapers
⏺ workpapers · control_lookup("A3")
A3 (Domain 1: Access)
Risk: Password-only sign-in is phishable
Control: MFA enforced on every human identity
Where it lives: IAM MFA config
Criteria: CIS 1.10
**T-A3 MFA enforcement.**
ToD/ToE: MFA device listing inspected for all 12 demo users.
Result: Exception, see F-2.
Findings citing T-A3: F-2 Two users without MFA
> anything still open?
⏺ workpapers · open_items()
2 open item(s):
- Finding F-2 Two users without MFA: Open
- Test T-A3: Exception, see F-2.
⏺ One real gap. Two users have no MFA, raised as F-2 and still open.
The T-A3 exception is the same issue seen from the test side.
The controls and findings above are demo data. The format is exactly what the server returns.
Design notes
- Read-only by construction. Every tool reads markdown files. Nothing writes, deletes or touches the network.
- Parses the pack as written. Matrix rows, bold test headings and
## F-N.finding sections are the real structure of the workpapers, so the tools follow the same cross-references a reviewer would. - Drafting notes stay private. Square bracket
[REVIEW NOTE ...]placeholders are replaced with a neutral marker before any text leaves the server, andopen_itemscounts them so unfinished work still shows up.
Honest notes
- The parsing is tied to this pack's markdown conventions. A workpaper written in a different layout wont parse without changes to the regexes.
- The pack is a self-audit of one small personal AWS account. The tools make it easier to navigate. They dont add assurance the workpapers dont already carry.
open_itemstreats any finding whose status doesnt start with "Remediated" as open, so accepted and disclosed limitations show up there on purpose.- The test lives in
test_server.pyand runs against a synthetic pack in a temp dir. Run it withpython test_server.pyor pytest.
About
Al Amin Bashir Afara, Dubai · github.com/aminafara123 · linkedin.com/in/aminafara
Release files for workpapers-mcp 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| workpapers_mcp-1.0.1.tar.gz | 6.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| workpapers_mcp-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.7 kB
Release files / workpapers_mcp-1.0.1.tar.gz
| Download URL | workpapers_mcp-1.0.1.tar.gz |
|---|---|
| Size | 6.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0512c67ffcea0a22ae688c9d8b50139727a068ed335e5668c00e9f69cf644d49
|
|
BLAKE2b-256 checksum How to use checksums |
100b2588ed6c33f2f87fcad306bd2ead4d6aff0409933411b2d64beae94acaa6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / workpapers_mcp-1.0.1-py3-none-any.whl
| Download URL | workpapers_mcp-1.0.1-py3-none-any.whl |
|---|---|
| Size | 6.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f3d3672465aebd1d6b574b4128d0738a2298bf8f7af532adbe0523a32af731af
|
|
BLAKE2b-256 checksum How to use checksums |
3faa7876ff52016d9a73e5bd89b72fb8156e4cf473f5bc0b2c272370ee3ef076
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|