Universal Research MCP
Universal Research MCP turns research retrieval into a verifiable evidence workflow. Search results remain candidates until the server re-reads the exact registered source range and confirms its current SHA-256 revision.
candidate retrieval
-> exact source fetch
-> revision integrity check
-> evidence eligibility check
-> relevance/conflict review by the host
-> supported claim or explicit abstention
It is a read-mostly MCP. Canonical writes exist only behind a two-step, hash-bound ingest transaction with an external one-time human approval receipt.
Five-minute local demo
python -m pip install universal-research-mcp
universal-research init ./my-research
universal-research serve --root ./my-research
Register the server in Codex:
[mcp_servers.universal_research]
command = "universal-research"
args = ["serve", "--auto-index"]
cwd = "/absolute/path/to/my-research"
The empty project is intentional: the MCP does not crawl arbitrary files. Follow the input tutorial to register immutable sources, create an approved record, and make it searchable.
Why this is not ordinary RAG
| Ordinary retrieval | Universal Research |
|---|---|
| Search result may be quoted directly | Search result is candidate_only |
| Index content may silently become stale | Current source hash is compared with the registered revision |
| Similarity is treated as support | Similarity cannot establish truth or causality |
| Corrections may overwrite history | Canonical JSONL is append-only |
| Writes depend on agent intent | Ingest requires immutable draft + external receipt + recoverable transaction |
The evidence eligibility check proves only that submitted evidence is current, registered, range-valid, and sufficient in count for the declared claim type. It does not prove that the evidence supports the claim, reconcile conflicts, or establish that a source is true. Those are separate host review stages.
Supported surface
- lexical, local semantic, hybrid, and adaptive candidate retrieval
- exact source-range fetch with fail-closed revision checks
- deterministic evidence eligibility receipts
- append-only canonical records and recoverable, journaled ingest
- fixed-role Codex governance contracts
- a default-deny agent-creation disclosure and one-time approval binding for governed provider/secure-harness execution
- a Docker secure harness for sealed benchmark/final-review execution
- a reviewed, unauthenticated public-demo transport for static corpora
The PyPI wheel intentionally excludes the repository's experimental OpenAI, Anthropic, agent-runtime, and provider-harness packages. Codex remains the only supported host integration. Optional local SentenceTransformer embeddings use an already-present pinned snapshot and never imply generation-provider support.
See semantic retrieval, secure harness, and host integration.
Public read-only demo
Publishing a corpus is a separate explicit action. The manifest binds every canonical JSONL file, registered source, and derived index used by the server.
universal-research public-demo prepare \
--root ./my-research \
--corpus-id reviewed-demo \
--display-name "Reviewed Demo" \
--confirm-public-data I_UNDERSTAND_THIS_DATA_WILL_BE_PUBLIC
universal-research public-demo verify --root ./my-research
universal-research serve \
--root ./my-research \
--transport streamable-http \
--public-demo \
--host 127.0.0.1 \
--port 8765
The bundled server is not a multi-tenant service. Internet deployment still needs TLS termination, authentication where applicable, rate limits, tenant isolation, monitoring, and a separately reviewed deployment boundary. See the public demo guide and security model.
Measured development evidence
The public synthetic development run contains 24 tasks × 4 conditions. The MCP + historical “Claim Gate” condition made 2/18 unsafe material assertions on fault tasks versus 4/18 for direct filesystem retrieval, while using 1.55× mean execution tokens and 1.61× mean latency. The paired 95% interval includes zero. This is a development signal and measured cost, not proof of general hallucination reduction or research-quality improvement.
See the complete development result and benchmark disclosure. Historical artifact names retain “claim gate” for provenance; the current product contract is “evidence eligibility.”
The completed-results index also collects the earlier directional and safety pilots, including their negative findings and measured overhead. The latest completed A/B/C integration diagnostic (2026-08-26) retains one public synthetic task per condition, all seven preceding startup diagnostics, an input-budget stop, and unknown usage. Its strict automatic scores were 0/1, 0/1, and 1/1, with unequal input budgets and no repetitions. This is source-checkout integration evidence, not a released-package efficacy measurement or proof that one condition is better. No in-progress experiment results are included in these completed-result summaries.
Authority model
data/events/is the canonical append-only ledger.data/index/contains rebuildable derived views.- Registered original sources are stronger than either index.
- Candidate retrieval never grants claim eligibility.
- Evidence eligibility never proves semantic support or truth.
- Host approval remains separate from MCP validation.
- Governed agent creation requires the user-visible reason, tasks, count, direct alternative, token/time ranges, and scope to be hash-bound before a one-time approval is consumed.
Canonical ingest uses a write-ahead transaction journal. Each target file is
bound to exact before/after hashes; a failure after a partial append leaves the
draft in recovery_required and the same one-time receipt can resume only that
exact transaction. The draft is marked consumed after all canonical operations
are verified.
Architecture decisions:
- ADR-0001: canonical authority and derived views
- ADR-0002: recoverable multi-file ingest
- ADR-0003: supported wheel versus experimental source
Non-goals
Universal Research is not:
- a truth oracle or automated scientific peer reviewer
- an authenticated private remote MCP or multi-tenant SaaS
- a replacement for Codex, Claude Code, or another agent host
- a hidden provider router or credential store
- evidence that a model, method, or research result is correct
For medical, legal, regulated, or safety-critical decisions, use it only as an audit and evidence-handling aid with qualified human review.
Development
python -m pip install ".[test]"
python -m pytest -q
ruff check universal_research_mcp
mypy --no-incremental --cache-dir=/dev/null universal_research_mcp
python -m build
python scripts/validate_distribution_artifact.py dist/*.whl
python scripts/ci_smoke.py dist/*.whl
Release workflows pin third-party actions to exact commits. A release wheel is built once, validated on Linux/macOS/Windows, and the same artifact is published through PyPI Trusted Publishing only after every release gate succeeds.
License: MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file universal_research_mcp-0.8.3.tar.gz.
File metadata
- Download URL: universal_research_mcp-0.8.3.tar.gz
- Upload date:
- Size: 317.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ab11f89cbf4e916dd34f9a266015cfcb006c845250e0abb4a7f0e05d0844494
|
|
| MD5 |
17c14260d6db2bf492fe359975ca05dd
|
|
| BLAKE2b-256 |
618c66cc4644a731b0ac70ec896de464a8f7318ce7a63c74b0535be7c5b9b948
|
Provenance
The following attestation bundles were made for universal_research_mcp-0.8.3.tar.gz:
Publisher:
publish.yml on mp-juns/universal-research-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
universal_research_mcp-0.8.3.tar.gz -
Subject digest:
6ab11f89cbf4e916dd34f9a266015cfcb006c845250e0abb4a7f0e05d0844494 - Sigstore transparency entry: 2597240772
- Sigstore integration time:
-
Permalink:
mp-juns/universal-research-mcp@4b3564f3755ecd31d28f7a14bfd5291cc70357b0 -
Branch / Tag:
refs/tags/v0.8.3 - Owner: https://github.com/mp-juns
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b3564f3755ecd31d28f7a14bfd5291cc70357b0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file universal_research_mcp-0.8.3-py3-none-any.whl.
File metadata
- Download URL: universal_research_mcp-0.8.3-py3-none-any.whl
- Upload date:
- Size: 293.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a33a8f19e9592d5fa0ab94efcbd251ebea480256f68b6f692e73e13b7dc0539
|
|
| MD5 |
63ef7d35ed21232bfda6bdbaf9c46caf
|
|
| BLAKE2b-256 |
d5ffccfa1d3d34ab2a0e537404f534ffcb0a865de6258faadac836e3f5ad3bd6
|
Provenance
The following attestation bundles were made for universal_research_mcp-0.8.3-py3-none-any.whl:
Publisher:
publish.yml on mp-juns/universal-research-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
universal_research_mcp-0.8.3-py3-none-any.whl -
Subject digest:
8a33a8f19e9592d5fa0ab94efcbd251ebea480256f68b6f692e73e13b7dc0539 - Sigstore transparency entry: 2597241023
- Sigstore integration time:
-
Permalink:
mp-juns/universal-research-mcp@4b3564f3755ecd31d28f7a14bfd5291cc70357b0 -
Branch / Tag:
refs/tags/v0.8.3 - Owner: https://github.com/mp-juns
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b3564f3755ecd31d28f7a14bfd5291cc70357b0 -
Trigger Event:
push
-
Statement type: