prompto × plumbline
Connect your own LLM app to a dataset through Plumbline. Every figure in an answer is checked against SQL facts before you see it; a question the data cannot support gets a refusal that states why, never a guess. Setup is one URL, below.
Five people sit well above their department's median pay. Florian Grady leads at 6.0× the Electronics median, $518,878 against $86,590.
Mockup of an LLM chat with Plumbline connected: you type the question, the verdict panel renders in the conversation. Every figure and name shown is real output against the demo snapshot (annualized pay). Hosts without panel support get the same content as text.
Serves MCP servers into Claude, ChatGPT, VS Code, and other MCP hosts: the in-chat panel, confirm gates, and a plain-text fallback where panels are unavailable.
Every figure in an answer is checked against SQL-computed facts and labeled with how it was checked; a question the evidence cannot support is refused with the reason. Workforce data is the first domain; the mechanics are domain-agnostic.
A shared demo endpoint is open. No account; it is rate-limited per address and per day. Pick your client:
terminal, then restart the session
claude mcp add --transport http plumbline-demo https://plumbline.lattice-sys.com/mcp/demo
Settings → Connectors → Add custom connector → paste as URL
https://plumbline.lattice-sys.com/mcp/demo
Desktop then runs its connect step and approves the demo automatically (no account, no password). The URL must be publicly reachable over https, which is what this address is.
Settings → Connectors → Advanced → Developer mode → Add connector → MCP server URL
https://plumbline.lattice-sys.com/mcp/demo
ChatGPT connects from its own servers, so the URL must be https and publicly reachable; a private/tailnet address will not work from ChatGPT.
.vscode/mcp.json in your workspace
{ "servers": { "plumbline-demo": { "type": "http", "url": "https://plumbline.lattice-sys.com/mcp/demo" } } }
~/.cursor/mcp.json
{ "mcpServers": { "plumbline-demo": { "url": "https://plumbline.lattice-sys.com/mcp/demo" } } }
~/.gemini/settings.json
{ "mcpServers": { "plumbline-demo": { "httpUrl": "https://plumbline.lattice-sys.com/mcp/demo" } } }
any MCP client speaking streamable HTTP
{"url": "https://plumbline.lattice-sys.com/mcp/demo"}
Paste these prompts one at a time. Each shows a different part of the pipeline. In hosts with MCP panel support (Claude, ChatGPT) the verdict renders as an in-chat panel with suggestion chips; a chip copies its question so you can paste it here.
1 · a question the data cannot answer
Using the plumbline tools, answer exactly this question: What will compensation look like next year?
Expected: a refusal naming the gap (no future compensation data in the snapshot), not a guess.
2 · a question it can answer
Using the plumbline tools, answer exactly this question: How many people and departments are in this company?
Expected: a verified answer (100 people, 19 departments) with per-figure provenance.
3 · analysis with per-figure provenance
Using the plumbline tools: which roles are unusually paid, and which employees are compensation outliers?
Expected: named outliers with each figure carrying its own provenance tier (store-verified, derived, or unverified).
4 · a refusal on policy, not on data
Using the plumbline tools, answer exactly this question: Which employee most deserves a raise this year, based on their performance?
Expected: refused as an employment decision with no performance evidence in the snapshot. The data could produce a name; the pipeline declines to.
5 · org topology and anomalies
Which managers look like routing hot spots? Then find anomalies in benefits deduction patterns compared to peers.
Expected: grounded org-topology and anomaly findings, each tied to snapshot facts; partial evidence stays visible instead of becoming a guess.
6 · change over time
Using the plumbline tools: what changed most between the last two snapshots?
Expected: a diff grounded in the two pinned snapshots, not a narrative about "trends".
7 · sandboxed code, then earn the figure back
Get the total headcount and the three largest department counts from Plumbline's verified tools, use run_code to compute each department's share of the total in the isolated sandbox (show the arithmetic), then corroborate the total with cross_check (value_key 'people').
Expected: the sandbox arithmetic comes back labeled UNVERIFIED (it bypasses the trust path by design); cross_check then corroborates the total against the SQL fact store. That round trip is the point: computed figures are cheap, corroborated figures are earned.
8 · raw SQL from inside the sandbox (demo opt-in)
In run_code, read plumbline://sandbox-api.d.ts, then run: const rows = await plumb.queryRows("SELECT department, count(*) AS people FROM snapshot_employees GROUP BY department ORDER BY people DESC LIMIT 5"); console.log(JSON.stringify(rows)). Report the rows, then corroborate the total headcount with cross_check.
Expected: raw rows, loudly labeled UNVERIFIED. This read-only, snapshot-scoped SQL reach is a server-side opt-in enabled on this shared demo so you can probe the boundary; it is not on by default in production, where the sandbox has no data access and SQL runs only as the server's own registered, replayable queries.
9 · the audit trail
Show the explanation record for that last answer.
Expected: which facts were used, what was checked, what was refused or disclosed.