Splenta Procurement - module SCM
One procurement record
your people and your
agents both act on.
SCM is the single record of truth for requisitions, purchase orders, goods receipts, invoices and vendors. People work it through a workbench; software agents drive it too. Both go through the same checks and the same audit trail - no hidden side door for either.
PO-DEMO-001
Acme Fasteners
$48,200.00
Approved once, recorded once - whether a person clicked it or an agent called it.

What it keeps
One record, from requisition to invoice.
Everything a purchase touches lives on the same record - and every change is written down. One short line each, no jargon.
Intake
Requisitions
Raise and route purchase requisitions, then turn an approved one into an order.
Orders
Purchase orders
The core record - draft, submit, approve or reject, through to fully received.
Receiving
Goods receipts
Record a full or partial receipt against an order, or dispute what turned up.
Payables
Invoices
Match purchase invoices to orders, with spend summaries and top-vendor rollups.
Master data
Vendors
One supplier list that every order, receipt and invoice points back to.
Master data
Items
A catalog of what you buy, with categories, reused across every document.
Trust
Immutable audit
Every change on every record, kept before and after, and never overwritten.
The procure-to-invoice loop
One ordered flow, requisition to paid.
Each step writes to the same record and carries its own status, so an order moves forward only through the checks it has passed - the same whether a person or an agent drives it.
01
Requisition
PENDING to APPROVED
02
Purchase order
PENDING to APPROVED
03
Goods receipt
PARTIALLY_RECEIVED to RECEIVED
04
Invoice
Matched to the order
05
Paid
COMPLETED
People and agents
People and agents, one audited record.
- One supplier, one order, one receipt, one invoice - shared by everyone
- The same approval rules apply to a person and to an agent
- No hidden service account acting where no one can see
SupplyFull history
Every change, kept before and after.
- Who acted - a named person or the agent client
- What changed - the exact before and after snapshot
- A permanent trail you read back, not a log you hope was on
OperationsWhere it fits
Where SCM fits.
SCM is an agent-native procurement system of record, not a full procure-to-pay suite. The neighbours keep their real strengths - the enterprise P2P suites, the ERP modules and the lightweight tools each cover more breadth. SCM trades that for one thing done well: a single record that people and agents drive through the same checks and the same audit.
The mature suites - SAP Ariba, Coupa, Oracle, Ivalua - and the lightweight tools - Precoro, Procurify, Airbase - keep their real strengths. SCM does not compete on procure-to-pay breadth. It is the trustworthy, agent-drivable record underneath - single-tenant by design, one stack per customer, and not an ERP.
Under the hood
One core, two front doors.
The story above is the plain version. For evaluators, here is how it actually holds together - a people workbench and an agent tool surface arriving at the same service, the same scope checks and the same audit.
No privileged path
When a person clicks Approve and when an agent calls po.approve over MCP, both land on the same service method - one scope check, one status guard, one before/after audit row. The agent has no faster lane and no wider reach than the person, only a different door.
people / REST workbench
PO-DEMO-001
Acme Fasteners - $48,200.00
status PENDING
agents / MCP
POST /mcp
tools/call
"name": "po.approve"
"args": { "id": 42 }one core
approvePurchaseOrder(id)
one scope guard - one immutable audit
The machine contract
The agent surface is a first-class MCP server on the official MCP Java SDK Streamable HTTP transport (protocol 2025-11-25), served at one /mcp endpoint. Every tool wires to the same real service the workbench calls, and is gated by one scope.
- po.*7list, get, create, update, submit, approve, reject
- requisition.*7list, get, create, update, approve, reject, convert_to_po
- invoice.*8CRUD, approve, reject, spendSummary, topVendors
- gr.*8CRUD, receive, partial_receive, reject, dispute
- vendor.*4list, get, create, update
- item.*5list, get, create, update, deactivate
- audit.*1list
Scope-gated by construction
Every REST mutation and every MCP tool requires one explicit scm:resource:action scope, and the token must carry an audience of scm-api. The default agent client holds read and non-approval write scopes only; every approve scope, plus vendor, item and item-category writes, is withheld unless explicitly granted.
Every call leaves a record
Each state change writes an append-only audit record: the resolved actor (a real person or the agent client), the tool or endpoint, the scope it used, and - on a mutation - the exact before and after. A denied scope is an audit row too, not a silent rejection. The shape is identical whether the door was REST or MCP.
PO-DEMO-001 - status timeline
audit.listDRAFT
demo.requesterREST
PENDING
demo.opsREST
APPROVED
arin-scm-client (AGENT)MCP
One record walked by three actors across two doors, read back from the same audit rows the API returns.
The people side
The same core people reach through a React 19 + Vite workbench - list, detail, create and edit for every record, plus a live dashboard reading real counts and spend. Illustrative demo data below (PO-DEMO series).
18
open purchase orders
4
pending approval
11
received this week
POStatus - DRAFT / PENDING / APPROVED / REJECTED / PARTIALLY_RECEIVED / RECEIVED / COMPLETED / CANCELLED
Private - early access
One record people and agents can both trust.
SCM is pre-1.0 and private - no public download, no self-serve sign-up. It is part of the Splenta family and we open it up by request. Tell us about your procurement stack and we will walk you through the workbench, the agent surface and the audit trail on the real system.