Federal Audit Clearinghouse (FAC) MCP — US single-audit data.
git clone https://github.com/pipeworx-io/mcp-fac{
"mcpServers": {
"mcp-fac": {
"command": "node",
"args": ["/path/to/mcp-fac/dist/index.js"]
}
}
}MCP Servers overview
# @pipeworx/fac
Federal Audit Clearinghouse MCP — US single-audit filings (Uniform Guidance, formerly OMB A-133): who spends federal grant money, under which Assistance Listing program, and what the auditors found. api.data.gov key.
## Tools
- `fac_search_audits(auditee_name|uei|ein|state|audit_year|min_total_expended, ...)` — find audits; returns report_id, organization identity, total federal awards expended, oversight agency, FAC acceptance date.
- `fac_get_audit(report_id, ...)` — one audit plus every federal program row on its Schedule of Expenditures of Federal Awards (Assistance Listing number, program name, dollars expended, major-program flag, opinion type), auditee/auditor contact detail, and findings when FAC carries them.
- `fac_audit_findings(report_id | auditee_name | uei, ...)` — findings recorded against an audit, or swept across every audit one recipient filed, rolled up into a severity summary (material weaknesses, significant deficiencies, questioned costs, repeat findings, modified opinions). `include_text` attaches the narrative finding text.
- `fac_federal_awards_by_program(cfda | federal_agency_prefix + federal_award_extension, ...)` — who expended money under a CFDA number (e.g. `93.224`), ranked by dollars, joined to recipient name/state/year.
- `fac_recipient_audit_history(uei | auditee_name | ein, ...)` — one recipient's audits year by year with total expended per year and a percent-change read on the trend.
Forgiving aliases throughout: `query` / `q` / `name` for `auditee_name`; `cfda` / `program_number` / `assistance_listing` / `program` all accept `"93.224"`, `"93-224"`, `"93224"`, or a bare `"93"` for every program at that agency.
## Auth
Platform key (`PLATFORM_DATAGOV_KEY`) with BYO fallback via `?_apiKey=<key>`.
This is an **api.data.gov umbrella key** — the same key works across every federal API behind the umbrella. Register free at https://api.data.gov/signup. Sent as the `X-Api-Key` header. A registered key gets 1,000 requests/hour; `DEMO_KEY` works for smoke tests but caps around 30/hour and 50/day **per source IP**.
## Data sources
- `https://api.fac.gov/general` — one row per accepted audit submission (auditee identity, audit year, total federal awards expended, oversight agency, acceptance date)
- `https://api.fac.gov/federal_awards` — one row per federal program inside an audit (agency prefix + award extension, program name, amount expended, major-program flag, report type)
- `https://api.fac.gov/findings` — audit findings per report; carries `auditee_uei` and `audit_year` alongside `report_id`, plus the `is_material_weakness` / `is_repeat_finding` / `is_questioned_costs` Y-N flags and `type_requirement`
- `https://api.fac.gov/findings_text` — narrative finding text, keyed `report_id` + `finding_ref_number` (attached only when `include_text: true`)
- API docs: https://www.fac.gov/developers/ · Assistance Listing lookup: https://sam.gov/content/assistance-listings
Gotchas. **The umbrella lies about status codes:** api.data.gov reports throttling as a body carrying `OVER_RATE_LIMIT` that arrives with **HTTP 200 as often as HTTP 429**, so every response body is inspected before it is treated as data — a status-only check silently hands an error object back to the caller as if it were rows. That body is usually JSON (`{"error":{"code":"OVER_RATE_LIMIT",...}}`) but the umbrella **also serves an HTML error page with the same code**, so the raw text is scanned for the known umbrella codes too; without that, an HTML 200 reads as a malformed response instead of the plain "you are throttled" it actually is. Relatedly, **a 2xx whose body is not a JSON array is treated as an upstream failure, never as an empty table** — returning "no rows" for a broken response is the worst possible answer to a diligence question, and it is exactly what a naive `Array.isArray(body) ? body : []` does. **api.fac.gov also emits HTTP 408** ("Oops... Request Timeout") under load rather than queueing, which is called out as a retry rather than a client error. **It is a PostgREST API**, so filters are operator-prefixed (`?auditee_name=ilike.*stanford*`, `?audit_year=eq.2023`, `?total_amount_expended=gte.1000000`) and an unknown column produces a 400, not an ignored parameter; that is why the supplementary lookups (`/findings`, `/findings_text` — both verified live) degrade to an `available: false` note rather than throwing: a renamed table must not take the primary answer down with it. **`federal_agency_prefix` and `federal_award_extension` are stored separately** and only mean something concatenated: prefix `93` + extension `224` is Assistance Listing `93.224`, so callers who pass the dotted number get it split for them and every response echoes `assistance_listing` back. The extension is stored **zero-padded to three characters** (`47.076`, never `47.76`), so a numeric extension is padded before it is sent — an unpadded one matches nothing rather than erroring. **Every numeric-looking column is text:** `audit_year` comes back as `"2023"`, and the Y/N flags are single-character strings, so values are coerced on the way out and `eq.` filters are written against the text form. **`/federal_awards` carries no auditee columns** — recipient name, state and audit year live on `/general`, so `fac_federal_awards_by_program` joins the two by `report_id`; when a `state` or `audit_year` filter is set it over-fetches the top rows by dollar amount and filters after the join, and reports `rows_scanned` so a caller can tell a deeper scan is needed. Finally, **zero findings is an answer, not a gap**: a clean single audit legitimately has no rows in `/findings`, which is returned as `found: false, reason: 'no_findings'` with the audits that were checked, distinct from `reason: 'findings_table_unavailable'`. Entities spending under the ~$750k/yr federal threshold never file at all, so an absent organization is usually below threshold rather than missing.
## Quick Start
Add to your MCP client (Claude Desktop, Cursor, Windsurf, etc.):
```json
{
"mcpServers": {
"fac": {
"url": "https://gateway.pipeworx.io/fac/mcp"
}
}
}
```
Or connect to the full Pipeworx gateway for access to all 1375+ data sources:
```json
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
```
## Using with ask_pipeworx
Instead of calling tools directly, you can ask questions in plain English:
```
ask_pipeworx({ question: "your question about Fac data" })
```
The gateway picks the right tool and fills the arguments automatically.
## More
- [All tools and guides](https://github.com/pipeworx-io/examples)
- [pipeworx.io](https://pipeworx.io)
## License
MIT
What people ask about mcp-fac
What is pipeworx-io/mcp-fac?
+
pipeworx-io/mcp-fac is mcp servers for the Claude AI ecosystem. Federal Audit Clearinghouse (FAC) MCP — US single-audit data. It has 0 GitHub stars and was last updated today.
How do I install mcp-fac?
+
You can install mcp-fac by cloning the repository (https://github.com/pipeworx-io/mcp-fac) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is pipeworx-io/mcp-fac safe to use?
+
pipeworx-io/mcp-fac has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains pipeworx-io/mcp-fac?
+
pipeworx-io/mcp-fac is maintained by pipeworx-io. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to mcp-fac?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy mcp-fac to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/pipeworx-io-mcp-fac)<a href="https://claudewave.com/repo/pipeworx-io-mcp-fac"><img src="https://claudewave.com/api/badge/pipeworx-io-mcp-fac" alt="Featured on ClaudeWave: pipeworx-io/mcp-fac" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!