FileForge
Deterministic file processing for chat users, exposed as a remote MCP
server (Streamable HTTP). Built for directory distribution (Claude
Connectors Directory, Smithery, official MCP Registry, ChatGPT Apps):
the host platforms bring the users; FileForge sells credit packs.
Positioning: "File tools for your AI chat" - see landing/index.html.
Architecture
Two layers, deliberately separated:
Dependencies (mature OSS only): mcp (official Python SDK, pinned
>=1.2,<2 - 2.x renamed FastMCP), pymupdf, pdfplumber, openpyxl,
Pillow.
Tools
All tool names are ≤ 64 characters (Claude directory requirement) and
carry a human title plus a plain-language description.
Run
Self tests
Results (2026-11-02, v0.2 remote layer)
tests/run_selftest.py - 5/5 passed (unchanged tool layer).
tests/run_remote_tests.py - 26/26 passed: base64 ingest
(happy path + wrong-type/garbage/invalid/empty rejected), signed
download tokens (round-trip, tamper, expiry, path traversal), janitor
24h sweep, billing (key auth, free quota exhaustion, paid-first
spending, exactly-once refund, anon buckets), Creem webhook
(signature verify, +100 credits, duplicate event ignored, unknown
product reported not guessed).
tests/smoke_http.py - passed (new base64 tool signature).
tests/smoke_billing_http.py - 12/12 passed with billing on.
Results (2026-11-02, this machine)
tests/run_selftest.py - 5/5 passed:
tests/smoke_http.py - passed:
Notes on the smoke test: this dev sandbox intercepts loopback TCP
between processes, so the smoke test drives the server's real ASGI app
(the same Starlette app uvicorn serves) via httpx's ASGI transport -
the full MCP protocol path is exercised, only raw TCP is bypassed.
Standalone boot was verified separately: python -m fileforge.server
starts uvicorn with "StreamableHTTP session manager started /
Application startup complete".
Landing page
landing/index.html - static draft, no framework: one-line pitch, tool
list, credit-pack pricing (Free 5/mo; $6 = 100 credits; $15 = 300
credits; credits never expire), contact email, and full Privacy Policy /
Terms of Service sections (payment-processor review, e.g. Creem, requires
a visible contact email and legal pages on the site).
TODO (next steps, in order)
- Deployment - public HTTPS endpoint, isolated from other
workloads on the target host (dedicated user/systemd service/port/
subdomain, CPU/memory limits). Plan first, deploy after owner
confirmation.
- Directory submission assets - reviewer test account, listing
copy, icon,
server.json. Claude directory additionally requires:
HTTPS endpoint, tool annotations (done), and a paid Claude plan on
the submitting account. Free registries first (Smithery, official
MCP Registry, Glama).
- Known MVP trade-offs to revisit - (a) buyers claim their API
key by email after purchase; add email verification before real
volume. (b) Anonymous free quota is bucketed by client-IP hash;
shared NATs share a bucket. (c) Claude/ChatGPT connector UIs may
not let users set a Bearer header - paid users on those surfaces
need OAuth later; the free tier works there today.
Done in v0.2: file ingress (base64 + limits), signed expiring download
links + 24h janitor, credit/billing layer with Creem webhook, and the
launch hardening set (payload caps, per-account rate limit 30/min,
120s per-call timeout, sanitised file names, page/pixel caps).
Layout