FaxbotBLOCK
Self-hosted, open source, fax-sending API. HIPAA compliant. This fax API includes MCP (Model Context Protocol) support for AI assistant integration.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Faxbot is a proprietary, self-hosted fax platform with a web Admin Console, a REST API, cloud and SIP providers, and integrations for AI assistants. It helps organizations send and receive documents, choose delivery routes, track costs, and deliver incoming documents to the inboxes staff already use.
This README describes the current source checkout. Published packages and deployed installations may have fewer features; the roadmap distinguishes implemented capabilities from planned work and experiments.
License
New Faxbot-owned work requires prior written permission from David Montgomery for use, modification, distribution, resale, or hosting. Contact [email protected] for permission. The setup instructions below are for authorized users. See LICENSE for the terms.
Earlier MIT releases retain their existing permissions, including material already released on public development branches. LICENSE-MIT preserves that notice; it does not license new proprietary additions. Third-party components keep their own licenses.
What Faxbot does
- Send and receive faxes. Prepare PDF, TXT, and supported TIFF documents, track outbound jobs, and organize received faxes in mailboxes. Uncertain submissions wait for confirmation instead of being blindly se
3a8827d95331OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add faxbot-fax-decoder --env API_KEY=${API_KEY} --env FAXBOT_SMTP_PASSWORD=${FAXBOT_SMTP_PASSWORD} --env MCP_OAUTH_SUBJECT_KEYS_FILE=${MCP_OAUTH_SUBJECT_KEYS_FILE} --env OAUTH_AUDIENCE=${OAUTH_AUDIENCE} -- npx -y faxbot-fax-decoder{
"mcpServers": {
"faxbot-fax-decoder": {
"command": "npx",
"args": [
"-y",
"faxbot-fax-decoder"
],
"env": {
"API_KEY": "${API_KEY}",
"FAXBOT_SMTP_PASSWORD": "${FAXBOT_SMTP_PASSWORD}",
"MCP_OAUTH_SUBJECT_KEYS_FILE": "${MCP_OAUTH_SUBJECT_KEYS_FILE}",
"OAUTH_AUDIENCE": "${OAUTH_AUDIENCE}"
}
}
}
}Exposed tools (2)
1 read · 1 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
Owner | read | Everything |
send_fax | write | return await _submit(resolve(ctx), to, fileName, _decode(fileContent), fileType, operationId) |
Trust audit
BLOCKgrade F · trust 32/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (9 observation(s))
- Network
- declared (16 observation(s))
- Shell
- declared (7 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
or '-----BEGIN PRIVATE KEY-----' not in data['private_key']):
os.environ.copy() ... websocket
/.env" ... curl
METADATA_ADDRESS = ('169.254.169.254', 80)schema = importlib.import_module(package + ".schema")
legacy = importlib.import_module(package + ".schema_legacy")
config.attributes["schema_configuration"] = importlib.import_module(package + ".schema_configuration")
config.attributes["schema_outbound"] = importlib.import_module(package + ".schema_outbound")
config.attributes["schema_access"] = importlib.import_module(package + ".schema_access")
callback_url: string;
callback_url?: string;
value={config.callback_url || ''}os.environ.setdefault('FAXBOT_CONSOLE_ORIGINS', f'http://127.0.0.1:{arguments.port},http://localhost:{arguments.port}')text = data.lstrip('')text = text.lstrip('')text = text.lstrip('')first = str(text or '').lstrip('').splitlines()[0] if str(text or '').strip() else ''reader = csv.reader(io.StringIO(text.lstrip('')))'DATABASE_URL': 'postgresql://private-user:synthetic-password@private-host/private-database',
'DATABASE_URL': 'postgresql://synthetic:[email protected]/faxbot',
'DATABASE_URL': 'postgresql://operator:[email protected]/faxbot',
'DATABASE_URL': 'postgresql://synthetic-user:[email protected]/faxbot?token=synthetic-query-secret',
expect(backend.requestsTo('POST', '/auth/key-login')[0].body).toEqual({ api_key: 'fbk_live_scan_original' });['key_scan', { id: 'key_scan', token: 'fbk_live_scan_original', principal_id: 'p_scanner', name: 'Scanner', note: '',password = 'wrong-private-password'
Gates applied: critical_finding, no_behavioural_pass.
3a8827d95331full audit observations/trust-audit/mcp-server/dmontgomery40__faxbot.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 3a8827d95331 | BLOCK | F | 32 | first audit |
Questions
What is the Faxbot MCP server?
Self-hosted, open source, fax-sending API. HIPAA compliant. This fax API includes MCP (Model Context Protocol) support for AI assistant integration.
What tools does Faxbot expose?
2 in total: 1 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is Faxbot safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (32/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does Faxbot need?
It reads API_KEY, FAXBOT_SMTP_PASSWORD, MCP_OAUTH_SUBJECT_KEYS_FILE, OAUTH_AUDIENCE, OAUTH_ISSUER, OAUTH_JWKS_URL and OPENROUTER_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Faxbot run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as faxbot-fax-decoder.
How current is this page?
The grade is for one exact copy of the source (3a8827d95331), read on 2026-10-11. The repository is watched and re-audited when it changes.