Backroom

io.github.pardhuparimiPublished by GitHub account pardhuparimiv0.1.1Updated Nov 3, 2026

Invoice extraction for agents: submit a PDF, get verified structured data — never a guess.

VerifiedSTDIODesktop onlyFinanceData & Analytics

Overview

AI-generated overview

Backroom extracts verified structured data from invoice PDFs: an assistant submits a PDF, polls the job, and fetches a one-time extraction proposal.

What you can do
  • Submit invoice PDFs from a local path for extraction, either fire-and-forget or waiting for the job to finish
  • Check an extraction job's state and terminal outcome, including reasons such as unreadable scans
  • Fetch the extraction proposal for a job, with unverifiable values marked unclear rather than guessed
  • Check the caller's monthly usage meter and remaining document allowance
  • Check the API's health and model-provider availability without a key
When to use it
Useful when an assistant needs to turn invoice PDFs into structured data for bookkeeping, expense or accounts-payable workflows, and you want unverifiable fields flagged instead of invented. Also handy for checking remaining monthly document quota before a batch.
Requirements
Runs locally as a Python package via uvx over stdio. Requires a Backroom API key in BACKROOM_API_KEY; a free test key can be minted from the service. Network access to the Backroom API, whose base URL can be overridden with BACKROOM_API_BASE. Desktop only.
Before you install
The API key is a secret sent to a third-party service, and usage is metered against a monthly document cap. Submitted PDFs are uploaded to Backroom, so invoice contents leave your machine. get_proposal is fetch-exactly-once: the result is purged after the first successful fetch and a second fetch returns 404, so the returned data must be kept.

Installation

In SourceWeft

  1. Open Backroom in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

This repository has no README.

Tools

6

submit_invoice

Submit an invoice PDF for extraction. Reads the local file at pdf_path and uploads it to Backroom. Returns the intake receipt: job_id (null when the submission was deduplicated against an earlier identical document), invoice_id, the deduped flag, and the caller's updated usage meter. Poll the job with get_job, then read the result with get_proposal.

Parameterspdf_pathrequired

submit_invoice_and_wait

Submit an invoice PDF and wait for the job to finish. Submits the PDF, then polls the job with backoff until it reaches a terminal state (done or failed) or timeout_seconds elapse. Returns {"status", "intake", "job"}: on "completed", job carries the terminal payload — its outcome ("proposal", "needs_human", "failed", "duplicate"), its reason_code when the job ended without a proposal, and proposal_id when one was issued. This tool deliberately does NOT fetch the proposal itself: proposal fetches are exactly-once, so the fetch is left as an explicit get_proposal call whose result the caller keeps. On "timed_out", job holds the last seen state; keep polling with get_job.

Parameterspdf_pathrequiredtimeout_secondspoll_interval_seconds

get_job

Get an extraction job's state and terminal payload. While running, returns the job's state. When done, includes the outcome ("proposal", "needs_human", "failed", "duplicate"), the reason_code when the job ended without a proposal (for example NO_EXTRACTABLE_TEXT for a scan with no readable text), and the proposal_id when a proposal was issued.

Parametersjob_idrequired

get_proposal

Fetch an extraction proposal by id. FETCH EXACTLY ONCE. WARNING: the API purges the result on the first successful fetch (zero retention) — a second fetch of the same id returns 404. Keep everything this call returns; you cannot fetch it again. The proposal is returned exactly as the API serves it: every field is an object {value, status, confidence, provenance, reason} where status is "verified", "extracted", or "unclear". An unclear field has a null value — it was not guessed.

Parametersproposal_idrequired

get_usage

Get the caller's usage meter for the current calendar month. Returns documents_used, the monthly cap, remaining documents, and the period covered, for the API key in BACKROOM_API_KEY.

Takes no parameters.

check_health

Check the Backroom API's health (no API key required). Returns the service status object, including model-provider availability, exactly as the API reports it.

Takes no parameters.

Version history

1
  1. v0.1.1LatestOct 29, 2026

Score

65% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • License10 pts

    Declare a license in the repository or the registry entry.