This documentation describes a mock MCP server. It does not file with the IRS and does not connect to any IRS system.
Quickstart: mcp-efile-mock
MOCK SERVER. It does not file with the IRS, does not connect to any IRS system, and makes no network calls. Nothing here is IRS-approved. Use fake data only (EINs starting
00, SSNs like000-00-0000). Rule codes are illustrative unless the result'sbasisnames Pub 4164. Generated XML is illustrative and is not schema-valid.
Documented against mcp-efile-mock 0.2.0 (verified 2026-10-23).
1. Install and build
Requires Node 22 or newer. The mock server source is not distributed from this site; these steps assume you already have a copy of its server/ folder.
cd path/to/mcp-efile-mock/server
npm install
npm run build # compiles src/ to dist/
npm test # optional: builds, then runs vitest incl. a stdio smoke test
2. Register with Claude Code
Use the absolute path to your built dist/index.js (the package is private, so there is no npm install of it):
claude mcp add efile-mock -- node /absolute/path/to/mcp-efile-mock/server/dist/index.js
claude mcp list # confirm efile-mock is connected
claude mcp remove efile-mock # to uninstall
The server speaks MCP over stdio. It logs one line to stderr on start (mcp-efile-mock running on stdio (MOCK ONLY ...)); stdout is reserved for the protocol. State (submissions) lives in memory only and is lost when the process exits, so each new Claude session starts empty and the "duplicate" rule only sees submissions from the current process.
3. First calls
Tools are exposed as mcp__efile-mock__<tool> in Claude Code.
list_supported_formswith{}. Returns the form list and each form's top-level field names with required flags. Modeled by the mock: 941, 944, 4868, 7004, 941-X. Planned: 943. Not available: 940, 945, 1120-S, 8868.validate_returnwith a fake Form 941 (this exact input was run against the built server and returnedvalid: true, no errors, no warnings):
{
"formType": "941",
"data": {
"filer": { "ein": "00-0000000", "businessName": "Test Co Mock" },
"taxYear": 2025, "quarter": 1, "numberOfEmployees": 5,
"wages": 100000, "fitWithheld": 10000,
"ssWages": 100000, "medicareWages": 100000,
"totalDeposits": 25300, "depositSchedule": "monthly",
"monthlyLiability": { "month1": 8433.33, "month2": 8433.33, "month3": 8433.34 }
}
}
build_return_xmlwith the same arguments: returns illustrative XML.xsd.statuswill benot_available(the official IRS schemas are not installed), which means the XML was not schema-validated.mock_submit_returnwith the same arguments: returns a 20-digitsubmissionIdandstatus: "Received".get_acknowledgementwith{ "submissionId": "<id>" }: returnsstatus: "Accepted"andkind: "Acknowledgement"for the fixture above. "Accepted" here is a mock result only.
Try breaking it: change month1 to 8000 (error F941-032), use EIN 12-3456789 (error R0000-148), or submit the same return twice (second gets R0000-902-01). See the error catalog.
Where to go next
- Tools reference: every tool with real example output.
- Agent playbook: calling sequence, retries, and what to ask a human.
- Error catalog: every code the mock emits.
forms/: per-form notes (941, 944, 4868, 7004).