# Plumbline — a trust layer for LLM answers (remote · plumbline.lattice-sys.com)

Every figure re-checked against SQL-computed facts; unsupported questions refused with the reason.

- Trust score: 79/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-24

## Components

- remote · `plumbline.lattice-sys.com`: 79/100 (this document), [markdown](https://verifymcp.io/servers/com-lattice-sys-plumbline-mcp/mcp-demo.md), [page](https://verifymcp.io/servers/com-lattice-sys-plumbline-mcp/mcp-demo)

## Channel facts

- Endpoint: `https://plumbline.lattice-sys.com/mcp/demo`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-24.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 16 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 85/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3251 tokens (~130/item across 25 items; 18 tools + 7 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "query_fact" implies "execute" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### How do I install the Plumbline — a trust layer for LLM answers MCP server?

Plumbline — a trust layer for LLM answers is a hosted endpoint at https://plumbline.lattice-sys.com/mcp/demo, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-lattice-sys-plumbline-mcp 'https://plumbline.lattice-sys.com/mcp/demo'
```

### Cursor

```json
{
  "mcpServers": {
    "com-lattice-sys-plumbline-mcp": {
      "url": "https://plumbline.lattice-sys.com/mcp/demo"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-lattice-sys-plumbline-mcp": {
      "type": "http",
      "url": "https://plumbline.lattice-sys.com/mcp/demo"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-lattice-sys-plumbline-mcp]
url = "https://plumbline.lattice-sys.com/mcp/demo"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-lattice-sys-plumbline-mcp": {
      "type": "remote",
      "url": "https://plumbline.lattice-sys.com/mcp/demo",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-lattice-sys-plumbline-mcp --url 'https://plumbline.lattice-sys.com/mcp/demo' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-lattice-sys-plumbline-mcp:
    url: "https://plumbline.lattice-sys.com/mcp/demo"
```

### Netclaw

```json
{
  "McpServers": {
    "com-lattice-sys-plumbline-mcp": {
      "Transport": "http",
      "Url": "https://plumbline.lattice-sys.com/mcp/demo"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-lattice-sys-plumbline-mcp -t streamable-http -u 'https://plumbline.lattice-sys.com/mcp/demo'
```

### Other

```json
{
  "mcpServers": {
    "com-lattice-sys-plumbline-mcp": {
      "type": "http",
      "url": "https://plumbline.lattice-sys.com/mcp/demo"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-22 (score 79, +1)

- [security] Stability: 0.97 → pass

### 2026-09-20 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-18 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-16 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-14 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-12 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-09 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-07 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (18)

### `ask_prepare` (~415 tokens)

BYO: Prepare Grounded Prompt

BYO step 1 of 2: run the server-side trust plane for a business question (plan, SQL-verified facts, evidence retrieval, answerability gate, prompt composition) and return the composed prompt plus a single-use prepare_key (a signed handoff token; echo it back VERBATIM and in full, or use the short ask_id alias; in prose always say the ask_id, never the token). Read-only: prepare holds no server state and is safe to run without confirmation — the receipt is minted only at ask_submit_draft. Pass the user's question VERBATIM: do not expand, narrow, or reword it — the server plans coverage itself, and an unrequested rewrite misleads the user about what was asked. If you must revise it (e.g. to fold in essential conversation context), you MUST also pass the user's exact wording in original_question so the panel can disclose the revision. YOU (the connected model) then write the draft answer from that prompt and submit it with ask_submit_draft — generation happens on your side, so no LLM credential ever reaches this server. An unanswerable question still receives a prompt for reference; its draft is force-refused at submit and can never earn a verified verdict. Only a policy refusal stops at prepare. Recommended drafting path on this deployment.

Input parameters:

- `history` (null|array): optional prior conversation turns (role user|assistant) to thread into the composed prompt for follow-up questions
- `original_question` (string): REQUIRED IF question is not the user's exact wording: the user's original question, verbatim, so the panel can display your revision as a revision. Omit when question is verbatim
- `question` (string, required): the business question to ground, in the USER'S OWN WORDS, verbatim; do not expand, narrow, or reword it — the server plans coverage itself. The server plans, computes SQL facts, retrieves evidence, g…

Output parameters:

- `ask_id` (string)
- `expires_in_seconds` (integer)
- `instructions` (string)
- `max_output_tokens` (integer)
- `messages` (null|array)
- `original_question` (string)
- `prepare_key` (string)
- `question` (string)
- `refusal` (null|object)
- `session_id` (string)

### `ask_result` (~173 tokens)

BYO: Fetch Published Verdict

Fetch the published verdict for an ask_prepare session (status: pending, published, or unknown). This is the app panel's polling surface, so the verified answer renders inside the panel that prepared the question. As the connected model you normally never need it: write your draft and call ask_submit_draft. Exception: if you are asked to submit for a session whose composed prompt is no longer in your context, call this with include_prompt true to receive that session's exact prompt again, then draft and submit.

Input parameters:

- `include_prompt` (boolean): set true to receive the pending session's composed prompt messages again, e.g. when the ask_prepare result is no longer in your context; the same caller already received this prompt at prepare time
- `prepare_key` (string, required): the session_id value returned by the prepare tool

Output parameters:

- `decline_reason` (string)
- `expires_in_seconds` (integer)
- `instructions` (string)
- `max_output_tokens` (integer)
- `messages` (null|array)
- `override` (string)
- `pending` (boolean)
- `result` (null|object)
- `status` (string)

### `ask_submit_draft` (~250 tokens)

BYO: Verify Client Draft

BYO step 2 of 2: verify the draft you wrote for an ask_prepare prompt. The server runs the SAME post-answer guards the strict path uses (facts presence, tagged claims, concept binding, earner-name grounding) against its own SQL facts and publishes the trust envelope; a draft that fails any guard is refused. Pass the prepare_key token back VERBATIM and in full. Handoffs are single-use per verdict and expire.

Input parameters:

- `decline_reason` (string): use INSTEAD of raw_answer when you are choosing not to submit a draft: state plainly why, in one or two sentences addressed to the user. The reason is shown to them in the panel, the handoff stays op…
- `model` (string): optional: the model that wrote the draft, recorded in the trace
- `prepare_key` (string, required): the session_id value returned by the prepare tool
- `raw_answer` (string): your COMPLETE raw draft answer to the composed prompt (including any structured answer/claims JSON the prompt's contract asked for). Omit ONLY when you are declining, in which case decline_reason is…

Output parameters:

- `answer` (string)
- `answer_id` (string)
- `attribution` (null|object)
- `claims` (null|array)
- `composed_prompt` (null|array)
- `confidence` (null|object)
- `correlation_id` (string)
- `coverage` (null|object)
- `data_as_of` (string)
- `disclosures` (null|array)
- `drafted_by` (string)
- `drafted_by_source` (string)
- `evidence_documents` (null|array)
- `facts_used` (null|array)
- `figure_origins` (null|array)
- `grounding` (null|object)
- `model_observations` (null|array)
- `model_reported_evidence` (null|array)
- `permalink_url` (string): Public URL of the full evidence receipt for this answer.
- `question` (string)
- `reconciliation` (null|object)
- `recovery` (null|array)
- `refusal_reason` (string)
- `refused` (boolean)
- `result_sets` (null|array)
- `snapshot_id` (integer)
- `snapshot_name` (string)
- `stage_timings` (null|array)
- `suggested_questions` (null|array)
- `unverified` (boolean)
- `unverified_disclaimer` (string)

### `compare_departments` (~96 tokens)

Compare Departments (Verified)

Compare two departments by headcount and compensation. NOTE: internal drafting is disabled on this deployment. If your client supports MCP sampling, this tool asks YOUR model to draft in the same call (verified server-side); otherwise it returns an explicit refusal, and you should use ask_prepare then ask_submit_draft to draft with your own model.

Input parameters:

- `a` (string, required): the first department
- `b` (string, required): the second department

Output parameters:

- `answer` (string)
- `answer_id` (string)
- `attribution` (null|object)
- `claims` (null|array)
- `composed_prompt` (null|array)
- `confidence` (null|object)
- `correlation_id` (string)
- `coverage` (null|object)
- `data_as_of` (string)
- `disclosures` (null|array)
- `drafted_by` (string)
- `drafted_by_source` (string)
- `evidence_documents` (null|array)
- `facts_used` (null|array)
- `figure_origins` (null|array)
- `grounding` (null|object)
- `model_observations` (null|array)
- `model_reported_evidence` (null|array)
- `question` (string)
- `reconciliation` (null|object)
- `recovery` (null|array)
- `refusal_reason` (string)
- `refused` (boolean)
- `result_sets` (null|array)
- `snapshot_id` (integer)
- `snapshot_name` (string)
- `stage_timings` (null|array)
- `suggested_questions` (null|array)
- `unverified` (boolean)
- `unverified_disclaimer` (string)

### `cross_check` (~242 tokens)

Cross-Check a Figure

Corroborate a figure you obtained (e.g. from run_sql) against the verified fact store: it re-derives the named value_key from the same SQL the verified pipeline uses and compares. AGREE lifts an otherwise-unverified session to 'corroborated'; DISAGREE marks a CONFLICT (worse than unverified). This is the only way a raw figure earns trust back, and it can only ever agree with a number the fact store itself computed. Resolvable keys cover the single-snapshot fact concepts plus temporal and per-department growth keys (e.g. indexed_people.<dept>); per-question keys (a named department's median, one person's direct-report count) return unmapped.

Input parameters:

- `value` (string, required): the figure you obtained (e.g. from run_sql) to corroborate against the verified fact store
- `value_key` (string, required): the claimable fact key naming the verified concept to re-derive, e.g. people, indexed_active_people, median_income_cents, or a per-department growth key like indexed_people.engineering (the keys a ve…

Output parameters:

- `prompto` (object)
- `value`

### `describe_fact_capabilities` (~67 tokens)

Discover Fact Capabilities

List safe metadata for the registered fact queries available on the server-pinned dataset: IDs, labels, parameters, and result shapes, never SQL. Use this when a question appears relevant but a selected route produced no facts; a route miss is not evidence that the underlying records are absent.

Output parameters:

- `contract_version` (string)
- `dataset_namespace` (string)
- `guidance` (string)
- `queries` (null|array)
- `snapshot_id` (integer)

### `find_payroll_anomalies` (~80 tokens)

Payroll Anomalies (Verified)

Surface payroll and deduction anomalies in the latest snapshot. NOTE: internal drafting is disabled on this deployment. If your client supports MCP sampling, this tool asks YOUR model to draft in the same call (verified server-side); otherwise it returns an explicit refusal, and you should use ask_prepare then ask_submit_draft to draft with your own model.

Output parameters:

- `answer` (string)
- `answer_id` (string)
- `attribution` (null|object)
- `claims` (null|array)
- `composed_prompt` (null|array)
- `confidence` (null|object)
- `correlation_id` (string)
- `coverage` (null|object)
- `data_as_of` (string)
- `disclosures` (null|array)
- `drafted_by` (string)
- `drafted_by_source` (string)
- `evidence_documents` (null|array)
- `facts_used` (null|array)
- `figure_origins` (null|array)
- `grounding` (null|object)
- `model_observations` (null|array)
- `model_reported_evidence` (null|array)
- `question` (string)
- `reconciliation` (null|object)
- `recovery` (null|array)
- `refusal_reason` (string)
- `refused` (boolean)
- `result_sets` (null|array)
- `snapshot_id` (integer)
- `snapshot_name` (string)
- `stage_timings` (null|array)
- `suggested_questions` (null|array)
- `unverified` (boolean)
- `unverified_disclaimer` (string)

### `get_ai_act_transparency` (~37 tokens)

EU AI Act Transparency Descriptor

Return the Art. 13 transparency descriptor: intended purpose, capabilities, limitations, human oversight, logging mechanism, and article mapping.

Output parameters:

- `accuracy_posture` (null|array)
- `article_13_mapping` (null|array)
- `capabilities` (null|array)
- `human_oversight` (null|array)
- `intended_purpose` (string)
- `limitations` (null|array)
- `logging_mechanism` (null|array)
- `operator_configured` (boolean)
- `provider_identity` (string)
- `retention` (object)
- `system_name` (string)

### `get_answer_queries` (~161 tokens)

Show the SQL Behind an Answer

Show the SQL behind one answer you already received, addressed by its correlation_id. Returns only the recorded fact queries (id, version, label, SQL, parameters, result schema, dataset version) for that answer: no rows, no evidence text, no answer text, no envelope, and no way to list the catalog. Recorded SQL has its arguments inlined as literals, so a query that filters on a specific value discloses that value; the built-in workforce queries inline only snapshot ids. Requires the persisted compliance log and the same session that produced the answer. Absent from the no-auth public demo.

Input parameters:

- `correlation_id` (string, required): the correlation_id published on the answer whose queries you want to see; obtained from that answer, never guessed

Output parameters:

- `correlation_id` (string)
- `queries` (null|array)
- `snapshot_id` (integer)

### `get_evidence_document` (~168 tokens)

Show an Evidence Document Behind an Answer

Show ONE retrieved evidence document behind an answer you already received, addressed by that answer's correlation_id plus a document_id from its evidence_documents references. Returns the full stored document (title, body, metadata, embedding_text) with the retrieval rank and scores the answer recorded; never the raw embedding vector. Only documents the addressed answer actually recorded resolve: there is no fetch-by-id in general and no way to browse the store. Requires the persisted compliance log and the same session that produced the answer. Absent from the no-auth public demo.

Input parameters:

- `correlation_id` (string, required): the correlation_id published on the answer whose evidence you want to inspect; obtained from that answer, never guessed
- `document_id` (integer, required): the document_id of one entry in that answer's evidence_documents references

Output parameters:

- `correlation_id` (string)
- `document` (object)
- `note` (string)

### `get_manager_chain` (~91 tokens)

Manager & Reporting Chain (Verified)

Return the management/reporting chain for an employee. NOTE: internal drafting is disabled on this deployment. If your client supports MCP sampling, this tool asks YOUR model to draft in the same call (verified server-side); otherwise it returns an explicit refusal, and you should use ask_prepare then ask_submit_draft to draft with your own model.

Input parameters:

- `employee` (string, required): the employee whose management chain to return

Output parameters:

- `answer` (string)
- `answer_id` (string)
- `attribution` (null|object)
- `claims` (null|array)
- `composed_prompt` (null|array)
- `confidence` (null|object)
- `correlation_id` (string)
- `coverage` (null|object)
- `data_as_of` (string)
- `disclosures` (null|array)
- `drafted_by` (string)
- `drafted_by_source` (string)
- `evidence_documents` (null|array)
- `facts_used` (null|array)
- `figure_origins` (null|array)
- `grounding` (null|object)
- `model_observations` (null|array)
- `model_reported_evidence` (null|array)
- `question` (string)
- `reconciliation` (null|object)
- `recovery` (null|array)
- `refusal_reason` (string)
- `refused` (boolean)
- `result_sets` (null|array)
- `snapshot_id` (integer)
- `snapshot_name` (string)
- `stage_timings` (null|array)
- `suggested_questions` (null|array)
- `unverified` (boolean)
- `unverified_disclaimer` (string)

### `query_fact` (~115 tokens)

Run Registered Fact Query

Execute a registered, versioned read-only fact query against the server-pinned dataset. Provide query_id and version only: SQL is approved by the domain pack, never caller-supplied. Returns normalized rows plus a reproducible trust receipt containing the dataset and query versions.

Input parameters:

- `parameters` (object): optional typed values for parameters declared by the registered query
- `query_id` (string, required): registered fact-query id; SQL is resolved by the server and must not be supplied here
- `version` (string, required): immutable registered query version

Output parameters:

- `prompto` (object)
- `value`

### `run_code` (~323 tokens)

Run Sandboxed JavaScript (Unverified)

Run YOUR OWN JavaScript in the in-tenant coderunner sandbox with the read-only, snapshot-scoped plumb.query() SDK. No filesystem, environment, or general network access. Read plumbline://sandbox-api.d.ts before writing code. The raw-SQL server opt-in is enabled, but results still bypass the trust path and are UNVERIFIED. Returns stdout/stderr plus metadata-only host-call trace evidence.

Input parameters:

- `acknowledge_unverified` (boolean): set true to confirm you understand results BYPASS the trust plane and are UNVERIFIED, and that you will label them so to the user. On deployments with the acknowledgment gate the FIRST raw call of a…
- `code` (string, required): JavaScript source to execute in the in-tenant coderunner sandbox. No filesystem, environment, or general network access. When the server explicitly enables raw SQL and uses the local grant-capable ru…
- `concepts` (null|array): optional: the fact concepts this code computes, as claimable fact keys (e.g. median_income_cents) or free-form names. The server reports per concept whether a registered seed exists (cross_check can…

Output parameters:

- `prompto` (object)
- `value`

### `run_sql` (~309 tokens)

Run Read-Only SQL (Unverified)

Run YOUR OWN single read-only SELECT/WITH over the virtual snapshot_* relations. The query is statically verified against an allowlist, rewritten to the active snapshot, and run read-only. This BYPASSES the planner, grounding gate, and answer-facts reconciliation, so results are UNVERIFIED and labelled as such. Deployments may refuse the FIRST raw call of a session pending acknowledge_unverified: true (the refusal says how to proceed). Optionally declare `concepts` to learn which figures the fact store could corroborate via cross_check.

Input parameters:

- `acknowledge_unverified` (boolean): set true to confirm you understand results BYPASS the trust plane and are UNVERIFIED, and that you will label them so to the user. On deployments with the acknowledgment gate the FIRST raw call of a…
- `concepts` (null|array): optional: the fact concepts this query computes, as claimable fact keys (e.g. median_income_cents) or free-form names. The server reports per concept whether a registered seed exists (cross_check can…
- `sql` (string, required): a single read-only SELECT/WITH over the VIRTUAL snapshot_* relations (e.g. snapshot_employees, snapshot_pay_statements, snapshot_departments). Bare physical table names are rejected. Discover the col…

Output parameters:

- `prompto` (object)
- `value`

### `search_docs` (~113 tokens)

Search Plumbline Docs

Search Plumbline's own product and architecture documentation (how the verification, refusal, and trust layer itself works). Returns ranked, citable doc passages; does NOT touch employment data, and returns an empty result set honestly when nothing matches.

Input parameters:

- `limit` (integer): max passages to return (default 5, capped at 10)
- `query` (string, required): a how-does-this-work question about Plumbline itself, e.g. the verification gate, snapshots and temporal drift, or the cross-provider corpus

Output parameters:

- `hits` (null|array)
- `note` (string)
- `query` (string)

### `search_employee` (~95 tokens)

Search Employee (Verified)

Search the employment fact store for a person and return a grounded, verified answer. NOTE: internal drafting is disabled on this deployment. If your client supports MCP sampling, this tool asks YOUR model to draft in the same call (verified server-side); otherwise it returns an explicit refusal, and you should use ask_prepare then ask_submit_draft to draft with your own model.

Input parameters:

- `query` (string, required): the employee name or search terms

Output parameters:

- `answer` (string)
- `answer_id` (string)
- `attribution` (null|object)
- `claims` (null|array)
- `composed_prompt` (null|array)
- `confidence` (null|object)
- `correlation_id` (string)
- `coverage` (null|object)
- `data_as_of` (string)
- `disclosures` (null|array)
- `drafted_by` (string)
- `drafted_by_source` (string)
- `evidence_documents` (null|array)
- `facts_used` (null|array)
- `figure_origins` (null|array)
- `grounding` (null|object)
- `model_observations` (null|array)
- `model_reported_evidence` (null|array)
- `question` (string)
- `reconciliation` (null|object)
- `recovery` (null|array)
- `refusal_reason` (string)
- `refused` (boolean)
- `result_sets` (null|array)
- `snapshot_id` (integer)
- `snapshot_name` (string)
- `stage_timings` (null|array)
- `suggested_questions` (null|array)
- `unverified` (boolean)
- `unverified_disclaimer` (string)

### `summarize_benefits` (~102 tokens)

Benefits Summary (Verified)

Summarize benefit enrollments, optionally scoped (e.g. a department or plan). NOTE: internal drafting is disabled on this deployment. If your client supports MCP sampling, this tool asks YOUR model to draft in the same call (verified server-side); otherwise it returns an explicit refusal, and you should use ask_prepare then ask_submit_draft to draft with your own model.

Input parameters:

- `scope` (string): optional scope such as a department or benefit plan

Output parameters:

- `answer` (string)
- `answer_id` (string)
- `attribution` (null|object)
- `claims` (null|array)
- `composed_prompt` (null|array)
- `confidence` (null|object)
- `correlation_id` (string)
- `coverage` (null|object)
- `data_as_of` (string)
- `disclosures` (null|array)
- `drafted_by` (string)
- `drafted_by_source` (string)
- `evidence_documents` (null|array)
- `facts_used` (null|array)
- `figure_origins` (null|array)
- `grounding` (null|object)
- `model_observations` (null|array)
- `model_reported_evidence` (null|array)
- `question` (string)
- `reconciliation` (null|object)
- `recovery` (null|array)
- `refusal_reason` (string)
- `refused` (boolean)
- `result_sets` (null|array)
- `snapshot_id` (integer)
- `snapshot_name` (string)
- `stage_timings` (null|array)
- `suggested_questions` (null|array)
- `unverified` (boolean)
- `unverified_disclaimer` (string)

### `trust_finalize` (~84 tokens)

Finalize Trust Verdict

Return the session's graded trust verdict: the tier (verified / registered-query / generated-sql / corroborated / unverified / conflict / refused), which trusted steps were skipped across the session, the deterministic confidence (k of n figures store-verified, weakest figure tier, conflicts), the per-figure provenance, the per-call ledger, and the at-your-own-risk disclaimer.

Output parameters:

- `prompto` (object)
- `value`

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-lattice-sys-plumbline-mcp/mcp-demo#diagnostics

## Score history

- 2026-09-24: 79
- 2026-09-23: 79
- 2026-09-22: 79
- 2026-09-21: 78
- 2026-09-20: 78
- 2026-09-19: 77
- 2026-09-18: 77
- 2026-09-17: 76
- 2026-09-16: 76
- 2026-09-15: 75
- 2026-09-14: 75
- 2026-09-13: 74
- 2026-09-12: 74
- 2026-09-11: 73
- 2026-09-10: 73
- 2026-09-09: 73
- 2026-09-08: 72
- 2026-09-07: 72
- 2026-09-06: 71
- 2026-09-05: 71
- 2026-09-04: 70
- 2026-09-03: 70
- 2026-09-02: 69
- 2026-09-01: 69
- 2026-08-31: 68
- 2026-08-30: 68
- 2026-08-29: 67
- 2026-08-28: 67
- 2026-08-27: 66
- 2026-08-26: 66

## Common questions

### What is the Plumbline — a trust layer for LLM answers MCP server?

Plumbline — a trust layer for LLM answers is an MCP server listed in the public MCP registry as com.lattice-sys.plumbline/mcp. Every figure re-checked against SQL-computed facts; unsupported questions refused with the reason. This page covers its hosted endpoint (https://plumbline.lattice-sys.com/mcp/demo).

### Is the Plumbline — a trust layer for LLM answers MCP server safe to use?

Plumbline — a trust layer for LLM answers scores 79 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Plumbline — a trust layer for LLM answers MCP server expose?

Plumbline — a trust layer for LLM answers exposes 18 tools: ask_prepare, ask_result, ask_submit_draft, compare_departments, cross_check, and 13 more. Their descriptions and schemas cost roughly 2,921 tokens of context every time the server is loaded.

### Does the Plumbline — a trust layer for LLM answers MCP server require authentication?

No. We connected to Plumbline — a trust layer for LLM answers without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Plumbline — a trust layer for LLM answers MCP server still maintained?

Plumbline — a trust layer for LLM answers is still listed as active in the MCP registry. We last reached this channel on 24 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://plumbline.lattice-sys.com/mcp/demo
- Website: https://plumbline.lattice-sys.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-lattice-sys-plumbline-mcp/mcp-demo.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-lattice-sys-plumbline-mcp/mcp-demo.json
- HTML version of this page: https://verifymcp.io/servers/com-lattice-sys-plumbline-mcp/mcp-demo
