Skip to main content
Glama

Omneum

Omneum is an open-source context control plane for AI agents, built to optimize the evidence entering an LLM's context window.

Agents accumulate context from retrieval, tools, memory, and previous sessions, but longer context windows don't guarantee better reasoning. Context rot can slowly degrade downstream answer accuracy even when the relevant information has already been retrieved.

Why Omneum?

  • Provenance-aware graph inference: Iteratively computes source reliability and claim support across a bipartite graph, accounting for shared evidence origins and dependencies between sources.

  • Context reconstruction: Selects original retrieved passages based on question relevance and incremental claim coverage within a token budget.

  • Text-blind evaluation: Evaluates structured observations without reading source text strings or invoking an LLM judge.

  • Local by default: Persists your agents' observations across sessions in a Context Graph, backed by SQLite or PostgreSQL.

Related MCP server: footnote

Quick Start

Install Omneum:

pip install omneum

Run the context reconstruction demo:

git clone https://github.com/cole-h06/omneum.git
cd omneum
python -m examples.context_quality_demo.before_after

Five retrieved chunks, four distinct claims, 80-unit context budget.

Compare retrieval-order packing with Omneum's claim-coverage selection under the same context budget.

Metric

Raw RAG

Omneum

Chunks retained

3

2

Claim coverage

2/4

4/4

Budget used

75/80

51/80

Packing chunks in retrieval order consumes 75 units while covering only two claims. Omneum retains two original chunks covering all four, using 32% less context capacity.

The demo measures its budget with the SDK's word/punctuation counter.

Example source →

Set up the MCP server →

How Omneum Works

Graph Inference & Context Selection

Omneum uses a graph-based mathematical analysis, calculated from Observation objects, to estimate the structural reliability of sources and the support for claims found in retrieved context.

Importantly, this analysis does not naively assume every source has derived its information independently. The same information often propagates across multiple sources. Without dependency tracking, five observations from different sources can be difficult to distinguish from five reports derived from the same upstream source.

For example, consider:

Source A:    Acme's 2025 annual report
Claim:       Acme reported $4.2 billion in revenue for 2025.

Source B:    Financial article reporting the same claim
Claim:       Acme reported $4.2 billion in revenue for 2025.
Upstream:    Acme's 2025 annual report

How much support should that claim receive? That depends partly on the reliability of the sources reporting it. But how do we determine the reliability of the sources? By looking at the claims they support.

This definition seems circular, and it is. Nonetheless, it provides a well-defined notion of reliability that helps distinguish strongly supported context from weakly supported context.

Of course claim-level scores are only useful for context selection if they can be mapped back to chunks. To bridge this gap, Omneum stores a claim-to-chunk mapping: each chunk retains its original text and chunk_id, while its associated claim_ids reference the claims evaluated in the graph. A chunk can contain multiple claims, and the same claim can appear across multiple chunks. This allows the algorithm to associate claim support with the actual passages competing for space in the context window.

But selecting context is not simply a matter of ranking chunks by their individual scores. Omneum derives chunk utility from the claims associated with each passage, then ranks chunks to fill the model's window under a limited token budget. When a nonempty question is supplied, finalized claim contributions are weighted by deterministic, local lexical relevance over the original passage text. Repeated evidence from the same inferred source cluster earns only an improvement over its best selected relevance. Without a question, Omneum keeps its question-blind claim-coverage selection. Selected passages are reconstructed from their original text.

The selected passages are then reconstructed from their original text into the context passed to the LLM. The analysis itself never needs to read that text because it operates exclusively on structured relationships between sources and claims.

Experiments and research →

Integration

Omneum runs between retrieval and generation. The Python SDK accepts retrieved chunks and relevance scores from the calling retrieval pipeline, or computes relevance locally using BM25 or MiniLM when explicitly enabled.

Retrieval / tools
        │
        ▼
┌───────────────────────────────────────────┐
│ ContextMapper / Observation input         │
│                                           │
│ Source, claim and provenance mapping      │
│ Structured Observation construction       │
└─────────────────────┬─────────────────────┘
                      │ Structured observations
                      ▼
┌───────────────────────────────────────────┐
│ Python SDK · prepare_context()            │
│                                           │
│ Retrieved chunks and relevance scores     │
│ Query conditioning / candidate discovery  │
│ Original text retained locally            │
└─────────────────────┬─────────────────────┘
                      │ Structured observations
                      ▼
┌───────────────────────────────────────────┐
│ Omneum evaluator                          │
│                                           │
│ Provenance-aware graph inference          │
│ Dependency-adjusted claim support         │
│ No original source text required          │
└─────────────────────┬─────────────────────┘
                      │ Graph evaluation
                      ▼
┌───────────────────────────────────────────┐
│ Python SDK                                │
│                                           │
│ Claim-to-chunk score mapping              │
│ Question-weighted claim support           │
│ Marginal claim coverage                   │
│ Token-budget enforcement                  │
│ Original text reconstruction              │
└─────────────────────┬─────────────────────┘
                      │ Reconstructed context
                      ▼
                  Agent / LLM

client.prepare_context() uses Omneum's provenance-aware graph inference to evaluate source reliability and claim support, accounting for dependencies between sources. The SDK uses those results to rank and select retrieved passages within the token budget, then reconstructs their original text for the model.

The prepared context is returned in result["context"], with selected passages in result["chunks"] and evaluation scores in result["evaluation"].

Architecture →

MCP Installation

Note: Omneum supports Python 3.11–3.14 on macOS and Ubuntu. The Python SDK is the currently supported client library.

Supported Platforms:

Platform

Supported

macOS (Apple Silicon / arm64)

✅

macOS (Intel / x86_64)

✅

Linux (Ubuntu 22.04+ / x86_64)

✅

1. Install the evaluator

Run the installer to configure the local evaluator:

omneum install

Run omneum install from your normal login account. Don't run the command with sudo.

The installer runs unprivileged while it downloads and verifies the evaluator release. The daemon version is pinned to the installed Python package version. For example, Omneum 1.0.3 only accepts daemon assets from v1.0.3; it doesn't resolve latest or fall back to another release.

The archive is verified against the release SHA256SUMS before installation. A missing checksum, mismatched digest, unexpected archive entry, link, or path traversal stops the install before anything from the archive runs.

Administrator access is requested only when installing machine-level service files. On Ubuntu, this includes the managed runtime under:

/opt/omneum

and public client configuration at:

/etc/omneum/config.toml

The evaluator runs under a dedicated service identity, isolating its VOPRF private key from the login account and MCP server process. macOS uses launchd; Ubuntu uses systemd.

omneum-server exposes Omneum's MCP tools over stdio and communicates with the locally installed evaluator service. The installer finishes by sending a VOPRF request through that path and verifying the response against the configured public key. A running service alone does not count as a successful installation.

See docs/guides/installation.md for service accounts, sockets, installed paths, custom endpoints, and failure handling.

2. Connect your MCP client

Add Omneum to your MCP configuration:

{
  "mcpServers": {
    "omneum": {
      "command": "omneum-server"
    }
  }
}

Restart the MCP client. It launches omneum-server over stdio and exposes Omneum's tools to your agent.

If the executable isn't found, locate it with command -v omneum-server and use the returned absolute path as command.

3. Verify

Ask your agent to call Omneum's ping tool. A successful connection returns:

{
  "status": "ok"
}

Context Preparation

Omneum evaluates structured observations, selects retrieved chunks under a token budget, and reconstructs the selected text for the downstream LLM. The evaluator computes dependency-adjusted claim support, while the Python SDK handles chunk selection and reconstruction.

1. Map retrieved context

In this example, the FAQ derives its audit retention claim from the security policy. The upstream dependency is recorded through upstream_sources.

from datetime import datetime, timezone

from omneum import ContextMapper, Source
from omneum.information import SourceReference
from omneum.context_selection import claim_id

now = datetime.now(timezone.utc)
policy_url = "https://example.com/security-policy"

records = [
    {
        "id": "obs-policy",
        "url": policy_url,
        "attribute": "audit_retention_days",
        "value": 90,
        "upstream": [],
        "text": "Audit logs are retained for 90 days.",
    },
    {
        "id": "obs-faq",
        "url": "https://example.com/faq",
        "attribute": "audit_retention_days",
        "value": 90,
        "upstream": [
            SourceReference(kind="web_document", identifier=policy_url)
        ],
        "text": "Audit logs are retained for 90 days.",
    },
    {
        "id": "obs-incident",
        "url": "https://example.com/incident-report",
        "attribute": "incident_notification_hours",
        "value": 24,
        "upstream": [],
        "text": "Security incidents are reported within 24 hours.",
    },
]

mapper = ContextMapper(
    source=lambda r: Source(kind="web_document", identifier=r["url"]),
    entity_namespace=lambda r: "security",
    entity=lambda r: "acme",
    attribute="attribute",
    value="value",
    observation_id="id",
    observed_at=lambda r: now,
    upstream_sources="upstream",
)

observations = [mapper.map(record) for record in records]

chunks = [
    {
        "chunk_id": record["id"],
        "claim_ids": [claim_id(observation.claim)],
        "raw_text": record["text"],
    }
    for record, observation in zip(records, observations)
]

ContextMapper maps the records into assertion observations. The original text stays in the chunk mapping, accessible through the associated claim IDs. Only the structured observations are sent to the MCP evaluator.

2. Reconstruct context

Pass the mapped observations and chunks to prepare_context(). The dependency estimator is configured to use upstream lineage.

import asyncio

from omneum import DependencyEstimatorConfig, OmneumClientConfig, open_stdio_client
from omneum.mcp import StdioServerParameters

estimator = DependencyEstimatorConfig(
    upstream_weight=1.0,
    citation_weight=0.0,
    assertion_lineage_weight=0.0,
    ownership_weight=0.0,
    temporal_weight=0.0,
    graph_weight=0.0,
    temporal_window_seconds=7200.0,
)

async def main():
    config = OmneumClientConfig.from_local_deployment()
    server = StdioServerParameters(command="omneum-server")

    async with open_stdio_client(config, server) as client:
        result = await client.prepare_context(
            observations,
            chunks,
            estimator=estimator,
            token_budget=100,
        )

    print(result["context"])
    print(result["selection"]["claim_coverage"])

if __name__ == "__main__":
    asyncio.run(main())

Save as prepare_context.py and run:

python prepare_context.py

The returned JSON contains the reconstructed context at result["context"]. Graph scores are available in result["evaluation"], so your agent can inspect the result before invoking the model.

See examples/context_quality_demo/ for a comparison with retrieval-order packing.

3. Agent Control Flow

An agent orchestrator can use Omneum's claim support scores to control execution after retrieval. In LangGraph, a conditional edge can send the workflow back to a retrieval node when the evidence falls below a configured threshold.

def route_context(result):
    evaluation = result["evaluation"]

    if (
        not evaluation["converged"]
        or evaluation["max_claim_support"] is None
        or evaluation["max_claim_support"] < 0.30
    ):
        return "retrieve"

    return "generate"

The retrieve branch can run another search before the agent attempts generation. Once the routing condition passes, the model receives result["context"].

The threshold is an example. A workflow that needs support for particular claims can inspect their individual scores in evaluation["claim_support"].

Python SDK →

Integrations

Use the Python SDK and ContextMapper to add Omneum to your agent.

Framework examples:

For a complete framework-independent workflow, see the enterprise policy example.

Optional: Omneum Network (Closed Beta)

Omneum runs locally by default. Network contribution is opt-in and allows participating deployments to contribute observations to the shared Omneum Context Graph without uploading raw context.

Contributions use privacy-preserving linkage through an RFC 9497 VOPRF. The shared graph can accumulate source and claim relationships across deployments while keeping the underlying text local.

Network contribution is disabled by default and is not required for local evaluation. Hosted Network enrollment is currently limited to approved beta participants.

See Enable Network contribution (MCP) for setup instructions or How Network contribution works for the protocol details.

Data Model & Context Preparation

Omneum evaluates retrieved context through a source–claim graph. Claims identify factual assertions within the retrieved passages, while observations preserve where those assertions originated. The graph's evaluation scores inform which original chunks are selected for the LLM's context window.

Observations

Observations record information encountered during retrieval. The first supported type, an assertion observation, connects a claim to its source and preserves the provenance available at the time it was encountered.

Observation(
    observation_id="obs-1",
    source=source,
    claim=claim,
    observed_at=datetime.now(timezone.utc),
)

An assertion can appear across multiple retrieved passages without being treated as independent evidence each time. Observations preserve these source relationships for graph inference. Conflicting assertions also remain distinct, retaining the evidence originally reported by each source.

Observations docs →

Sources

Sources identify where retrieved evidence originated. Each source has a kind and canonical identifier, allowing Omneum to recognize the same source across observations.

Source(
    kind="web_document",
    identifier="https://example.com/acme-filing",
)

Source identity matters when multiple passages reference the same fact. Omneum uses these relationships during dependency estimation so repeated evidence does not receive the same weight as independent support.

Sources docs →

Claims

Claims represent factual assertions identified within retrieved context. Omneum maps claims across source passages to evaluate their support and determine which chunks contribute useful evidence to the model's context.

Each claim is represented by an entity_namespace, entity, attribute, and value.

Claim(
    entity_namespace="company",
    entity="acme",
    attribute="fy2025_gross_revenue",
    value=4_200_000_000,
)

Multiple passages can reference the same claim. Their source relationships are accounted for during graph inference, allowing context selection to prioritize additional claim coverage within the token budget.

Claims docs →

Source Dependence

Retrieved passages may repeat assertions from the same underlying source. Omneum estimates source dependence using available provenance signals, including upstream references and assertion lineage.

These dependencies affect how much support each source contributes to a claim. A passage repeating an earlier report can still be selected when it adds useful context, but the repeated assertion does not receive the weight of independent evidence.

Source dependence docs →

Context Mapping

ContextMapper maps structured retrieval records into Omneum's observation model. Claim fields and source metadata are extracted from the records supplied by the integrating pipeline.

The SDK maintains a claim-to-chunk mapping. Each chunk retains its chunk_id and raw_text, while claim_ids reference the claims represented in that passage.

This mapping allows graph inference to operate on structured observations while keeping the original text available for context reconstruction.

ContextMapper docs →

Context Selection & Reconstruction

After graph inference, Omneum uses claim support to select retrieved chunks within a context budget.

Selection accounts for claim coverage across the candidate passages. A chunk's utility depends on the additional evidence it contributes to the selected context, including claims already covered by other chunks.

prepare_context() reconstructs the selected passages from their original text. The returned context string is ready to be included in the next LLM request.

The selection budget applies to the retrieved evidence. The consuming agent remains responsible for accounting for the rest of the model's input.

Evaluation Results

prepare_context() returns a dictionary containing reconstructed context, selected chunks, graph evaluation results, and selection metadata.

result = await client.prepare_context(
    observations,
    chunks,
    estimator=estimator,
    token_budget=2048,
)

context = result["context"]
claim_scores = result["evaluation"]["claim_support"]
selected_chunks = result["chunks"]

The evaluation object exposes source reliability and claim support scores from graph inference. The selection object records token-budget usage, while packed_chunk_ids identifies the chunks included in the reconstructed context.

An agent orchestrator can inspect the evaluation before invoking the LLM. Conditional routing can trigger another retrieval pass when the available evidence does not meet the workflow's requirements.

Python SDK and response schema →

Performance & Accuracy

The Cross-Domain Context Curation Benchmark evaluates 13 context-selection configurations on 24 synthetic cases across six agentic domains, using six Qwen-token budgets from 64 to 256. Each configuration receives the same candidate passages within a case. Results are macro-averaged across cases and budgets.

Retrieval & Reranking

Omneum improved selection precision across all four evaluated integrations—BM25, MiniLM embeddings, BGE Reranker v2-m3, and Cohere Rerank v4.0 Pro, while reducing the number of tokens used.

Retrieval and Reranking Selection Precision

Configuration

Precision ↑

Recall ↑

Evidence ↑

Claims ↑

Origins ↑

Qwen Tokens ↓

Original-Order RAG

43.33%

42.75%

43.08%

58.51%

60.32%

136.87

BM25

59.15%

55.76%

55.79%

66.15%

71.05%

136.18

BM25 + Omneum

63.12%

46.86%

46.90%

66.22%

69.16%

111.60

MiniLM Embeddings

63.80%

59.13%

58.86%

68.47%

70.94%

136.31

MiniLM + Omneum

66.83%

49.08%

50.14%

69.74%

68.50%

111.08

BGE Reranker v2-m3

63.29%

59.19%

58.84%

68.75%

71.42%

136.47

BGE + Omneum

71.74%

54.76%

55.26%

75.36%

75.21%

116.74

Cohere Rerank v4.0 Pro

71.11%

64.43%

64.39%

72.29%

75.20%

136.72

Cohere + Omneum

74.88%

54.91%

56.20%

72.99%

72.86%

112.68

Omneum Standalone

61.55%

52.65%

53.42%

75.85%

75.52%

129.27

Across the four integrations, Omneum increased aggregate selection precision by 3.02–8.44 percentage points and reduced mean reconstructed-context token usage by 14.46–18.51%.

BGE + Omneum delivered the largest precision gain, improving from 63.29% to 71.74%, alongside an increase in claim coverage from 68.75% to 75.36%. Its precision improvement was +8.44 percentage points (95% paired bootstrap CI: +2.19 to +15.37 pp), based on 50,000 whole-case resamples.

Cohere + Omneum achieved the highest precision among the evaluated Omneum integrations at 74.88%, using 17.58% fewer context tokens than standalone Cohere.

The integrations prioritize a smaller set of supporting passages, increasing precision at the expense of aggregate recall and evidence retention. The full leaderboard includes the paired comparisons and confidence intervals.

Frontier LLM Judges

The benchmark also evaluates Claude Sonnet 5.5, GPT-6 Astra, and Gemini 3.8 Flash as passage-ranking judges. Each judge ranks the fixed candidate pool before token-budgeted packing. Omneum performs selection locally through prepare_context() without an additional frontier-model judge call.

Configuration

Precision ↑

Recall ↑

Evidence ↑

Claims ↑

Origins ↑

Qwen Tokens ↓

Claude Sonnet 5.5

85.69%

75.85%

76.49%

81.05%

82.89%

136.41

GPT-6 Astra

85.14%

75.33%

76.18%

81.48%

83.50%

136.49

Gemini 3.8 Flash

83.81%

74.81%

75.33%

80.12%

81.27%

136.52

Omneum Standalone

61.55%

52.65%

53.42%

75.85%

75.52%

129.27

BGE + Omneum

71.74%

54.76%

55.26%

75.36%

75.21%

116.74

Cohere + Omneum

74.88%

54.91%

56.20%

72.99%

72.86%

112.68

Frontier judges achieved higher aggregate selection quality. Claude Sonnet 5.5 led selection precision at 85.69%, while GPT-6 Astra achieved the highest claim coverage (81.48%) and root-origin coverage (83.50%).

Omneum's integrations operate without frontier judge inference, with smaller reconstructed contexts in the recorded comparisons.

Selection Latency & Cost

Omneum's median local selection latency ranged from 194.86 ms to 207.79 ms across standalone and hybrid configurations.

Configuration

Local Selection p50 ↓

Local Selection p95 ↓

Omneum Standalone

194.86 ms

451.87 ms

BM25 + Omneum

207.79 ms

461.25 ms

MiniLM + Omneum

203.84 ms

465.36 ms

BGE + Omneum

200.63 ms

430.51 ms

Cohere + Omneum

206.89 ms

480.37 ms

Timing begins with relevance scores and structured observations already available. External ranking inference and observation preparation are excluded.

The recorded frontier-judge response medians were 1.844 s for Claude Sonnet 5.5, 2.034 s for GPT-6 Astra, and 2.033 s for Gemini 3.8 Flash. Provider response time and Omneum's local selection time have different measurement boundaries.

Frontier LLM Judge Selection Latency

Frontier Judge

Estimated Ranking Inference Cost

Claude Sonnet 5.5

$0.113996

GPT-6 Astra

$0.281080

Gemini 3.8 Flash

$0.025231

Total

$0.420307

These are aggregate estimates from the saved frontier-ranking calls, using recorded token counts and pricing assumptions. They exclude Cohere API charges and local computation. No downstream answer generation was executed in this benchmark.

Detailed evaluations: Methodology · Full Leaderboard · Coding Agents · Enterprise RAG · Research & Analysis · Multi-Agent Systems · Data Analytics · Support & Operations

Production

Omneum uses SQLite as its default local storage backend. PostgreSQL is supported for deployments that use an external database.

Component

Implementation

MCP server

Local omneum-server process

Evaluator

Managed local daemon

Local database

SQLite

Graph model

Relational source, claim, observation, and dependency tables

External database

PostgreSQL

Graph extension

Apache AGE

Service manager

launchd on macOS; systemd on Ubuntu

Cryptography

RFC 9497 VOPRF, Ristretto255-SHA512

Local installations create omneum.db automatically:

macOS
~/Library/Application Support/Omneum/omneum.db

Linux
~/.local/share/omneum/omneum.db

For a new default graph with unsafe data-directory ancestors, Omneum uses ~/.omneum/data/omneum.db. Existing graphs and explicit paths are never silently relocated; shared directory permissions are preserved.

PostgreSQL can be configured for deployments that use an external database. Apache AGE provides the graph projection for PostgreSQL deployments.

See docs/storage.md for the storage schema and deployment options.

Security & Privacy

The Python SDK retains original text chunks locally for context selection and reconstruction. The evaluator processes structured observations and provenance metadata without accessing source text. The MCP server, evaluator daemon, and SQLite database run locally.

Component

Boundary

Context

Original chunks remain available to the SDK for selection and reconstruction

Context graph

Stored in local omneum.db

VOPRF private key

Held by the evaluator daemon

MCP process

Cannot read the evaluator's private key

Source payloads

Not required in the graph

Omneum Network

Optional contribution through the ingestion API

Omneum persists the local context graph across MCP sessions.

Local persistence and Omneum Network contribution are configured independently.

Option

Behavior

Local persistence

Writes observations to omneum.db

Network contribution

Sends pseudonymous observations to the Omneum Network through the ingestion API

See Omneum Network for Network contribution and Local Persistence for Context Graph storage.

Documentation

Contributing

Contributions are welcome. See CONTRIBUTING.md.

If you find a security issue, please follow the private reporting process in SECURITY.md instead of opening a public issue.

License

Omneum is open source under the MIT License.

Available Tools

3 tools
evaluate_contextA

Evaluate relative source reliability and claim support from a caller-prepared graph of opaque linkage tokens and pairwise evidence dependencies. Use the Omneum SDK to prepare canonically ordered inputs and map returned tokens back to local context. Returns source reliability, claim support, conflicting claims, and estimated independent support for context selection. The server does not inspect source text, fetch sources, or independently determine factual truth or freshness. Graphs are evaluated without persistence; failures return isError=true with message and omneum_code.

NameRequiredDescriptionDefault
assertionsYes1-4096 unique assertion triples, sorted lexicographically by (source_id, attribute_id, claim_id). Each source may assert at most one claim per attribute; each claim belongs to exactly one attribute. At most 64 distinct sources, 2048 attributes, and 4096 claims. The sum of k*(k-1) across attributes, where k is the attribute's distinct claim count, must not exceed 16384 conflicting-claim entries.
voprf_modeYesVOPRF mode. Must be voprf.
source_pairsYesComplete unordered source-pair matrix: exactly n*(n-1)/2 entries for the n distinct sources in assertions, at most 2016 entries. Sort lexicographically by (source_a_id, source_b_id); use an empty array for one source. No duplicate, diagonal, reversed, or unknown-source pairs.
deployment_idYesDeployment identifier from the initialized client configuration or ping. Must be a canonical lowercase urn:uuid:… value matching this server.
protocol_versionYesOmneum protocol version. Must be v1.
voprf_ciphersuiteYesVOPRF ciphersuite. Must be ristretto255-SHA512.
voprf_key_versionYesVOPRF key version matching this deployment's configured key version.
linkage_encoding_versionYesOmneum linkage encoding version. Must be 1.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discharges it well: it discloses that graphs are evaluated without persistence, that the server performs no source fetching or truth determination, and that failures return isError=true with a message and omneum_code. This is meaningful behavioral context an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with purpose followed by setup guidance, return values, and limitations. Every sentence carries information, though it is tightly packed and could be marginally streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex cryptographic graph-evaluation tool, the description covers purpose, caller responsibilities, return contents, failure behavior, and explicit non-capabilities. With an output schema present, return values need not be detailed further, and nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains every parameter in depth (token format, ordering, dependency semantics, limits). The description adds only high-level framing about canonical ordering and opaque tokens, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (evaluate) and resource (relative source reliability and claim support) over a precisely characterized input (a caller-prepared graph of opaque linkage tokens and pairwise evidence dependencies). This is clearly distinguishable from siblings like ping and evaluate_voprf, which operate on different inputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: use the Omneum SDK to prepare canonically ordered inputs and map returned tokens back to local context, and states explicit exclusions (server does not inspect source text, fetch sources, or determine truth/freshness). It does not explicitly name the alternative sibling or the condition selecting it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evaluate_voprfA

Evaluate one RFC 9497 blinded element using this deployment’s VOPRF key. Use the Omneum SDK for blinding, proof verification, and local finalization. Supply matching deployment metadata and a canonical base64url-encoded 32-byte blinded element. Returns a 32-byte evaluated element and 64-byte proof, both encoded as unpadded base64url. Evaluation uses the initialized local daemon and does not receive the original plaintext. Capacity or deadline failures return isError=true with message and omneum_code.

NameRequiredDescriptionDefault
voprf_modeYesVOPRF mode. Must be voprf.
deployment_idYesDeployment identifier from the initialized client configuration or ping. Must be a canonical lowercase urn:uuid:… value matching this server.
blinded_elementYesOne serialized 32-byte RFC 9497 blinded Ristretto255 element, encoded as canonical unpadded base64url: 43 characters using A-Z, a-z, 0-9, _, and -. Generate it with the Omneum client's blinding operation; do not submit plaintext.
protocol_versionYesOmneum protocol version. Must be v1.
voprf_ciphersuiteYesVOPRF ciphersuite. Must be ristretto255-SHA512.
voprf_key_versionYesVOPRF key version matching this deployment's configured key version.
linkage_encoding_versionYesOmneum linkage encoding version. Must be 1.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that evaluation runs against the initialized local daemon, that the server never receives plaintext, and that capacity/deadline failures surface as isError=true with a message and omneum_code. It stops short of stating permission/auth requirements or whether evaluation is side-effect-free.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five dense sentences, each carrying real information, with the core action front-loaded. It is technically heavy but not padded; no sentence is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a cryptographic mutation tool with seven required parameters and no annotations, it covers the input contract, encoding of both output values, plaintext non-disclosure, and error signaling. With an output schema present, return-value detail is not required, though auth/idempotency context would have closed the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter, and the baseline is 3. The description reinforces the blinded_element format (32-byte, canonical unpadded base64url) and the need for matching deployment metadata, but adds little syntax beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: evaluate one RFC 9497 blinded element using this deployment's VOPRF key. This is clearly distinct from the siblings ping (liveness) and evaluate_context (context evaluation), and the cryptographic scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the caller to use the Omneum SDK for blinding and to supply matching deployment metadata, which implies the prerequisite workflow. However, it never states when to choose this tool over evaluate_context or what the preconditions are (e.g., daemon must be initialized with a key version).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pingA

Verify that the Omneum MCP server is reachable.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, but for a zero-parameter health check there is little behavior to disclose. 'Verify ... is reachable' implies a read-only, side-effect-free probe, yet it does not confirm that (e.g. no auth required, no state change), so it is only minimally transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every word earns its place and the purpose is stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters and an output schema already defining the return shape, the description need not explain results. It is essentially complete for such a simple tool, with only the when-to-use context left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there are no parameter semantics to explain; the baseline of 4 applies. Nothing in the schema is left ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (verify) and resource (the Omneum MCP server's reachability), which is unambiguous and clearly distinct from the sibling evaluation tools evaluate_voprf and evaluate_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is a connectivity/health check to run before other calls, but the description never says when to use it, when not to, or that it is the natural first call. Adequate but leaves the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.1.5
    • Changedevaluate_context17 fields changed
      • addedInput schema / $defs / Assertion / properties / attribute_id / description
        Added value: +"Opaque linkage token identifying the entity-attribute being asserted: canonical unpadded base64url encoding of 64 bytes, exactly 86 characters."
      • addedInput schema / $defs / Assertion / properties / claim_id / description
        Added value: +"Opaque linkage token identifying a claim value for its attribute: canonical unpadded base64url encoding of 64 bytes, exactly 86 characters."
      • addedInput schema / $defs / Assertion / properties / source_id / description
        Added value: +"Opaque source linkage token: canonical unpadded base64url encoding of 64 bytes, exactly 86 characters. Use the Omneum SDK to generate and retain its local mapping."
      • addedInput schema / $defs / SourcePair / properties / dependency / description
        Added value: +"Caller-supplied pairwise evidence-dependency score, finite and within [0,1]: zero represents no modeled dependency; one represents maximal dependency. This does not certify exact equivalence."
      • changedInput schema / $defs / SourcePair / properties / exact_equivalence / description
        Previous value: -"Explicit certification of identical evidence; not ordinary derivation."New value: +"Explicit certification of identical evidence; not ordinary derivation. True links form transitive equivalence groups. Group members must have identical claim profiles and uniform dependencies to other groups."
      • addedInput schema / $defs / SourcePair / properties / source_a_id / description
        Added value: +"Source linkage token present in assertions, lexicographically smaller than source_b_id. Canonical unpadded base64url encoding of 64 bytes (86 characters)."
      • addedInput schema / $defs / SourcePair / properties / source_b_id / description
        Added value: +"Distinct source linkage token present in assertions, lexicographically larger than source_a_id. Canonical unpadded base64url encoding of 64 bytes (86 characters)."
      • addedInput schema / $defs / SourcePair / properties / weighted_signal_coverage / description
        Added value: +"Caller-supplied weighted coverage of observable dependency signals, finite and within [0,1]. Used for coverage diagnostics, not as an additional inference weight."
      • addedInput schema / properties / assertions / description
        Added value: +"1-4096 unique assertion triples, sorted lexicographically by (source_id, attribute_id, claim_id). Each source may assert at most one claim per attribute; each claim belongs to exactly one attribute. At most 64 distinct sources, 2048 attributes, and 4096 claims. The sum of k*(k-1) across attributes, where k is the attribute's distinct claim count, must not exceed 16384 conflicting-claim entries."
      • addedInput schema / properties / deployment_id / description
        Added value: +"Deployment identifier from the initialized client configuration or ping. Must be a canonical lowercase urn:uuid:… value matching this server."
      • addedInput schema / properties / linkage_encoding_version / description
        Added value: +"Omneum linkage encoding version. Must be 1."
      • addedInput schema / properties / protocol_version / description
        Added value: +"Omneum protocol version. Must be v1."
      • addedInput schema / properties / source_pairs / description
        Added value: +"Complete unordered source-pair matrix: exactly n*(n-1)/2 entries for the n distinct sources in assertions, at most 2016 entries. Sort lexicographically by (source_a_id, source_b_id); use an empty array for one source. No duplicate, diagonal, reversed, or unknown-source pairs."
      • addedInput schema / properties / voprf_ciphersuite / description
        Added value: +"VOPRF ciphersuite. Must be ristretto255-SHA512."
      • addedInput schema / properties / voprf_key_version / description
        Added value: +"VOPRF key version matching this deployment's configured key version."
      • addedInput schema / properties / voprf_mode / description
        Added value: +"VOPRF mode. Must be voprf."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ClaimSupport": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "agreement_weight": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "title": "Agreement Weight",
        +          "type": "number"
        +        },
        +        "attribute_id": {
        +          "title": "Attribute Id",
        +          "type": "string"
        +        },
        +        "claim_id": {
        +          "title": "Claim Id",
        +          "type": "string"
        +        },
        +        "conflicting_claims": {
        +          "items": {
        +            "$ref": "#/$defs/ConflictingClaim"
        +          },
        +          "title": "Conflicting Claims",
        +          "type": "array"
        +        },
        +        "dependency_signal_coverage": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "title": "Dependency Signal Coverage"
        +        },
        +        "estimated_independent_support_count": {
        +          "minimum": 1,
        +          "title": "Estimated Independent Support Count",
        +          "type": "number"
        +        },
        +        "is_attribute_max_support": {
        +          "title": "Is Attribute Max Support",
        +          "type": "boolean"
        +        },
        +        "support": {
        +          "minimum": 0,
        +          "title": "Support",
        +          "type": "number"
        +        },
        +        "supporting_source_count": {
        +          "minimum": 1,
        +          "title": "Supporting Source Count",
        +          "type": "integer"
        +        },
        +        "supporting_sources": {
        +          "items": {
        +            "$ref": "#/$defs/SupportingSource"
        +          },
        +          "title": "Supporting Sources",
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "attribute_id",
        +        "claim_id",
        +        "support",
        +        "agreement_weight",
        +        "is_attribute_max_support",
        +        "supporting_source_count",
        +        "estimated_independent_support_count",
        +        "dependency_signal_coverage",
        +        "supporting_sources",
        +        "conflicting_claims"
        +      ],
        +      "title": "ClaimSupport",
        +      "type": "object"
        +    },
        +    "ConflictingClaim": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "claim_id": {
        +          "title": "Claim Id",
        +          "type": "string"
        +        },
        +        "support": {
        +          "minimum": 0,
        +          "title": "Support",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "claim_id",
        +        "support"
        +      ],
        +      "title": "ConflictingClaim",
        +      "type": "object"
        +    },
        +    "EvaluateAssertionResponse": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "claim_support": {
        +          "items": {
        +            "$ref": "#/$defs/ClaimSupport"
        +          },
        +          "title": "Claim Support",
        +          "type": "array"
        +        },
        +        "deployment_id": {
        +          "title": "Deployment Id",
        +          "type": "string"
        +        },
        +        "linkage_encoding_version": {
        +          "title": "Linkage Encoding Version",
        +          "type": "integer"
        +        },
        +        "metadata": {
        +          "$ref": "#/$defs/Metadata"
        +        },
        +        "protocol_version": {
        +          "title": "Protocol Version",
        +          "type": "string"
        +        },
        +        "source_reliability": {
        +          "items": {
        +            "$ref": "#/$defs/SourceReliability"
        +          },
        +          "title": "Source Reliability",
        +          "type": "array"
        +        },
        +        "summary": {
        +          "$ref": "#/$defs/Summary"
        +        },
        +        "voprf_ciphersuite": {
        +          "title": "Voprf Ciphersuite",
        +          "type": "string"
        +        },
        +        "voprf_key_version": {
        +          "maximum": 4294967295,
        +          "minimum": 1,
        +          "title": "Voprf Key Version",
        +          "type": "integer"
        +        },
        +        "voprf_mode": {
        +          "title": "Voprf Mode",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "protocol_version",
        +        "deployment_id",
        +        "voprf_key_version",
        +        "voprf_mode",
        +        "voprf_ciphersuite",
        +        "linkage_encoding_version",
        +        "summary",
        +        "source_reliability",
        +        "claim_support",
        +        "metadata"
        +      ],
        +      "title": "EvaluateAssertionResponse",
        +      "type": "object"
        +    },
        +    "Metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "algorithm_version": {
        +          "title": "Algorithm Version",
        +          "type": "string"
        +        },
        +        "converged": {
        +          "title": "Converged",
        +          "type": "boolean"
        +        },
        +        "convergence_delta": {
        +          "minimum": 0,
        +          "title": "Convergence Delta",
        +          "type": "number"
        +        },
        +        "convergence_tolerance": {
        +          "minimum": 0,
        +          "title": "Convergence Tolerance",
        +          "type": "number"
        +        },
        +        "iterations": {
        +          "maximum": 1000,
        +          "minimum": 1,
        +          "title": "Iterations",
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "algorithm_version",
        +        "iterations",
        +        "converged",
        +        "convergence_tolerance",
        +        "convergence_delta"
        +      ],
        +      "title": "Metadata",
        +      "type": "object"
        +    },
        +    "OmneumErrorResponse": {
        +      "additionalProperties": false,
        +      "description": "Stable structured tool failure.",
        +      "properties": {
        +        "message": {
        +          "title": "Message",
        +          "type": "string"
        +        },
        +        "omneum_code": {
        +          "enum": [
        +            "request_too_large",
        +            "invalid_request",
        +            "authentication_required",
        +            "permission_denied",
        +            "unsupported_protocol_version",
        +            "deployment_mismatch",
        +            "voprf_key_version_mismatch",
        +            "unsupported_voprf_mode",
        +            "unsupported_voprf_ciphersuite",
        +            "unsupported_linkage_encoding_version",
        +            "invalid_blinded_element",
        +            "invalid_graph",
        +            "rate_limited",
        +            "server_busy",
        +            "request_timeout",
        +            "evaluation_failed",
        +            "assertion_evaluation_failed",
        +            "internal_error"
        +          ],
        +          "title": "Omneum Code",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "message",
        +        "omneum_code"
        +      ],
        +      "title": "OmneumErrorResponse",
        +      "type": "object"
        +    },
        +    "SourceReliability": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "reliability": {
        +          "minimum": 0,
        +          "title": "Reliability",
        +          "type": "number"
        +        },
        +        "source_id": {
        +          "title": "Source Id",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "source_id",
        +        "reliability"
        +      ],
        +      "title": "SourceReliability",
        +      "type": "object"
        +    },
        +    "Summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "assertion_count": {
        +          "maximum": 4096,
        +          "minimum": 1,
        +          "title": "Assertion Count",
        +          "type": "integer"
        +        },
        +        "claim_count": {
        +          "maximum": 4096,
        +          "minimum": 1,
        +          "title": "Claim Count",
        +          "type": "integer"
        +        },
        +        "source_count": {
        +          "maximum": 64,
        +          "minimum": 1,
        +          "title": "Source Count",
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "source_count",
        +        "claim_count",
        +        "assertion_count"
        +      ],
        +      "title": "Summary",
        +      "type": "object"
        +    },
        +    "SupportingSource": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "contribution": {
        +          "minimum": 0,
        +          "title": "Contribution",
        +          "type": "number"
        +        },
        +        "independence": {
        +          "maximum": 1,
        +          "minimum": 0,
        +          "title": "Independence",
        +          "type": "number"
        +        },
        +        "source_id": {
        +          "title": "Source Id",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "source_id",
        +        "independence",
        +        "contribution"
        +      ],
        +      "title": "SupportingSource",
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvaluateAssertionResponse"
        +    },
        +    {
        +      "$ref": "#/$defs/OmneumErrorResponse"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedevaluate_voprf8 fields changed
      • addedInput schema / properties / blinded_element / description
        Added value: +"One serialized 32-byte RFC 9497 blinded Ristretto255 element, encoded as canonical unpadded base64url: 43 characters using A-Z, a-z, 0-9, _, and -. Generate it with the Omneum client's blinding operation; do not submit plaintext."
      • addedInput schema / properties / deployment_id / description
        Added value: +"Deployment identifier from the initialized client configuration or ping. Must be a canonical lowercase urn:uuid:… value matching this server."
      • addedInput schema / properties / linkage_encoding_version / description
        Added value: +"Omneum linkage encoding version. Must be 1."
      • addedInput schema / properties / protocol_version / description
        Added value: +"Omneum protocol version. Must be v1."
      • addedInput schema / properties / voprf_ciphersuite / description
        Added value: +"VOPRF ciphersuite. Must be ristretto255-SHA512."
      • addedInput schema / properties / voprf_key_version / description
        Added value: +"VOPRF key version matching this deployment's configured key version."
      • addedInput schema / properties / voprf_mode / description
        Added value: +"VOPRF mode. Must be voprf."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "EvaluateVOPRFResponse": {
        +      "additionalProperties": false,
        +      "description": "Single-element RFC 9497 VOPRF evaluation response.",
        +      "properties": {
        +        "deployment_id": {
        +          "title": "Deployment Id",
        +          "type": "string"
        +        },
        +        "evaluated_element": {
        +          "title": "Evaluated Element",
        +          "type": "string"
        +        },
        +        "linkage_encoding_version": {
        +          "title": "Linkage Encoding Version",
        +          "type": "integer"
        +        },
        +        "proof": {
        +          "title": "Proof",
        +          "type": "string"
        +        },
        +        "protocol_version": {
        +          "title": "Protocol Version",
        +          "type": "string"
        +        },
        +        "voprf_ciphersuite": {
        +          "title": "Voprf Ciphersuite",
        +          "type": "string"
        +        },
        +        "voprf_key_version": {
        +          "maximum": 4294967295,
        +          "minimum": 1,
        +          "title": "Voprf Key Version",
        +          "type": "integer"
        +        },
        +        "voprf_mode": {
        +          "title": "Voprf Mode",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "protocol_version",
        +        "deployment_id",
        +        "voprf_key_version",
        +        "voprf_mode",
        +        "voprf_ciphersuite",
        +        "linkage_encoding_version",
        +        "evaluated_element",
        +        "proof"
        +      ],
        +      "title": "EvaluateVOPRFResponse",
        +      "type": "object"
        +    },
        +    "OmneumErrorResponse": {
        +      "additionalProperties": false,
        +      "description": "Stable structured tool failure.",
        +      "properties": {
        +        "message": {
        +          "title": "Message",
        +          "type": "string"
        +        },
        +        "omneum_code": {
        +          "enum": [
        +            "request_too_large",
        +            "invalid_request",
        +            "authentication_required",
        +            "permission_denied",
        +            "unsupported_protocol_version",
        +            "deployment_mismatch",
        +            "voprf_key_version_mismatch",
        +            "unsupported_voprf_mode",
        +            "unsupported_voprf_ciphersuite",
        +            "unsupported_linkage_encoding_version",
        +            "invalid_blinded_element",
        +            "invalid_graph",
        +            "rate_limited",
        +            "server_busy",
        +            "request_timeout",
        +            "evaluation_failed",
        +            "assertion_evaluation_failed",
        +            "internal_error"
        +          ],
        +          "title": "Omneum Code",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "message",
        +        "omneum_code"
        +      ],
        +      "title": "OmneumErrorResponse",
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/EvaluateVOPRFResponse"
        +    },
        +    {
        +      "$ref": "#/$defs/OmneumErrorResponse"
        +    }
        +  ],
        +  "type": "object"
        +}
  2. 3 tool updatesv0.1.0
    • First observedevaluate_context
    • First observedevaluate_voprf
    • First observedping

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation4/5

ping is a clearly distinct health check, and evaluate_voprf vs evaluate_context target very different domains (cryptographic blinding vs. graph-based reliability scoring). The shared 'evaluate_' prefix creates only mild surface similarity, and the descriptions resolve it well.

Naming Consistency4/5

evaluate_voprf and evaluate_context follow a clean verb_noun snake_case pattern. 'ping' is a bare verb with no noun, a minor deviation from the otherwise consistent scheme.

Tool Count4/5

Three tools is at the thin end but reasonable for a narrow, focused cryptographic evaluation service. Each tool (health, VOPRF evaluation, context evaluation) earns its place without redundancy.

Completeness3/5

The core evaluation operations are present, but there is no key/deployment metadata retrieval, batch evaluation, or status/introspection beyond ping. Agents can work around this via the SDK but the surface has notable gaps for a full lifecycle.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Universal Search-First Knowledge Acquisition Plugin for LLMs. Enables real-time web search and deep page browsing via MCP or CLI. Zero-cost, privacy-first, supports DuckDuckGo, Bing, Google, Brave, Wikipedia, Arxiv, YouTube, Reddit and more.
    2
    15 npm
    21 PyPI
    19
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to verify their own output mid-task by checking every claim against provided sources, returning supported, partial, unsupported, or contradicted verdicts with exact citations.
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI agents to verify technical claims against supplied evidence, identify unsupported assumptions and contradictions, and recommend the smallest next check before acting.
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables agents to search and reference trusted, out-of-band ingested source state, run claim-bound document reviews, validate evidence-status proposals against admissibility guards, and build evidence matrices. It keeps proposal, evidence, admissibility, and adjudication separate so agents can propose epistemic statuses without creating the source facts, page locators, provenance, or missingness records that support them.
    5
    MIT