FreshContext scores candidate context for freshness, confidence and provenance, and adds read-only adapters that pull timestamped data from public sources.
What you can do
Evaluate caller-supplied candidate context and return a decision, freshness, confidence, rank score, utility and warnings, with signed verdicts in a ledger (evaluate_context). Fetch timestamped data from public sources: GitHub repositories and repo search, Hacker News, arXiv, Google Scholar, Reddit, Product Hunt, npm and PyPI package metadata, Stooq stock quotes, job listings, changelogs, GDELT news, US federal contracts, SEC 8-K filings and Singapore GeBIZ tenders. Run composite reports that combine several sources in one call: landscape, idea validation, government, finance and company intelligence.
When to use it
Use it when an assistant retrieves web or research material and needs to know whether it is still current and how far to trust it, or when you want quick timestamped snapshots of repositories, packages, papers, launches, filings or contracts without wiring each source yourself.
Requirements
Runs as a remote endpoint at api.freshcontext.dev, reachable through an MCP remote bridge, or as a local npm package (freshcontext-mcp) over stdio. Local full setup needs Node.js 20+ and a Playwright Chromium install. No API keys or environment variables are declared. Adapter tools need network access.
Before you install
The README states the package is no longer developed and 0.5.3 is the last release. Adapter tools fetch from third-party public sources, so queries and requests leave your machine. The hosted endpoint is a separate deployment and may not match the package's tool set. FreshContext judges freshness and citation readiness, not truth. The YC adapter is withdrawn and returns an error.
Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.PrinceGabriel-lgtm%2Ffreshcontext/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.
This package is no longer developed. 0.5.3 is the last release of freshcontext-mcp.
It and every earlier release stay available under the MIT License, as is; there will be no
further feature releases. For FreshContext services, see https://freshcontext.dev.
Security reports: see SECURITY.md.
I asked Claude to help me find a job. It gave me a list of openings. I applied to three of them. Two didn't exist anymore. One had been closed for two years.
Claude had no idea. It presented everything with the same confidence.
That's the problem freshcontext fixes.
This repository is the integrated FreshContext Core/MCP package.
Category: context integrity infrastructure. FreshContext sits between context acquisition and agent action. Its job is to decide whether information entering an AI workflow is still fresh, attributable and coherent enough for the system to rely on. Core is the reusable engine that scores, ranks, explains and turns candidate context into decision-ready context, with signed verdicts recorded in a verifiable ledger. MCP is the first live host interface over that engine — one interface over the methodology, not the product itself.
Live demo:api.freshcontext.dev/demo — same model, same query, two completely different answers. Only the temporal layer changed.
Integrate it into an existing stack:freshcontext.dev/integration — start with one bounded RAG, agent, retrieval, or governance workflow and objective acceptance criteria.
The problem
Large language models retrieve web data semantically. Cosine similarity finds the documents that match a query best — but cosine doesn't know when a document was written.
So a 2022 blog post and a 2026 paper can score nearly identically. The model gets a context window full of stale documents and faithfully summarizes 2022 advice for a 2026 question.
That's not hallucination. That's correct summarization of corrupted retrieval.
Most RAG pipelines rank context correctly semantically but incorrectly temporally.
The layer
FreshContext is context integrity infrastructure for AI agents and retrieval systems. It sits between retrieval and reasoning:
That's the core correction. No model swap. No re-embedding. No re-indexing. The layer drops onto whatever retrieval pipeline you already have.
The layer is the product. The named adapters shipped with this repo demonstrate compatibility across different source classes. The DAR engine, the freshness envelope, Source Profiles, and the FreshContext Specification are the moat.
The standard
Every FreshContext-compatible response wraps content in a structured envelope:
When it was retrieved. Where it came from. How confident we are the date is accurate.
The FreshContext Specification v1.2 is published as an open standard under MIT licence. Any tool, agent, or system that wraps retrieved data in this envelope is FreshContext-compatible. → Read the spec · Read the methodology
Architecture boundary
FreshContext Core is the reusable center of the current integrated package. It owns signal normalization, freshness scoring, Source Profiles, decision output, envelope formatting, failure guards, shared types, rank/explain primitives, and the context-conditioned utility primitive.
MCP is the primary reference/interface implementation over Core. Claude Desktop is supported, but not required. The MCP tool surface exposes named reference adapters and a live interface for using the system.
The production Cloudflare Worker now uses Core-backed envelope generation. Worker-specific concerns remain outside Core: MCP transport, runtime guards, KV cache policy, cache metadata injection, JSON parse/replace cache helpers, D1 feeds, cron, rate limiting, and Store/feed scoring/provenance.
See Architecture for the layer boundaries, the package surface, and what is not yet separated.
Core import path
FreshContext Core is also available directly from the current MCP package:
ts
import { evaluateSignals, interpretEvaluations, getSourceProfile, normalizeSignal, calculateHaPriV2,} from "freshcontext-mcp/core";
This is a Core subpath export inside freshcontext-mcp, not a standalone freshcontext-core package yet. The root package and freshcontext-mcp binary remain the MCP reference host.
Primary MCP interface
The clearest MCP path is evaluate_context.
It accepts candidate context from any retriever, agent, database, local script, note parser, or adapter output:
Structured results also include a readable object for humans:
json
{ "decision": "cite_as_primary", "label": "Cite as primary", "readable": { "label": "Primary source", "summary": "This source is strong enough to use as main evidence.", "why": [ "Strong semantic match and current freshness for arxiv.", "source profile academic_research uses lenient date policy", "intent profile citation_check selected" ], "action": "Use this as main evidence while preserving citation and provenance.", "warnings": [ "FreshContext judges citation readiness and context usefulness; it does not certify truth." ] }}
The readable object translates Core decisions into user-facing language. It does not change ranking, decision labels, utility scoring, or source intake. Utility helps explain usefulness for the current question; it remains explanatory and does not control default decision labels or ranking.
FreshContext does not certify truth. It records why context was used, supported, questioned, refreshed, watched, or excluded before it reaches a model.
evaluate_context does not fetch URLs, crawl, scrape, browse, read folders, or call adapters. It only evaluates candidate context the caller provides.
Current boundary: evaluate_context ships in the npm/local stdio MCP server. The hosted Cloudflare Worker MCP endpoint is a separate deployment surface and is verified independently — check /v1/health for its live version and tool count rather than assuming parity with the package. The Worker remains a separate deployment surface, so future package interfaces should be re-verified remotely before being claimed live.
Network Boundary
FreshContext's primary evaluate_context path does not fetch, crawl, scrape, browse, read folders, or call adapters. The MCP package also includes read-only reference adapters that use network access only when those adapter tools are invoked. Supply-chain scanners may therefore report package network access; that applies to the optional adapter surface, not to caller-provided context evaluation.
Advanced Worker/feed surface
Beyond the per-call Core/MCP paths, the production Worker deployment exposes a continuous, decay-scored, deduplicated feed. This is an advanced deployment surface, not the required way to use FreshContext Core:
GET /v1/intel/feed/:profile_id?limit=20&min_rt=0
Every signal is stamped with base_score, rt_score, entropy_level (low / stable / high), ha_pri_sig (Ha-Pri v1 SHA-256 provenance reference), semantic_fingerprint (cross-adapter dedup), and published_at. Ready for direct LLM or agent consumption — no synthesis required.
Production endpoint: https://api.freshcontext.dev
Reference adapters
The repo ships named reference adapters that demonstrate how different source classes can become FreshContext-compatible. Each adapter keeps its own name because it represents a source boundary; the adapter count is operational proof, not the product headline.
Intelligence
Adapter
What it returns
extract_github
README, stars, forks, language, topics, last commit
extract_hackernews
Top stories or search results with scores and timestamps
extract_scholar
Research papers — titles, authors, years, snippets
extract_arxiv
arXiv papers via official API
extract_reddit
Posts and community sentiment from any subreddit
Competitive research
Adapter
What it returns
extract_yc
YC company listings by keyword
extract_producthunt
Recent launches by topic
search_repos
GitHub repos ranked by stars with activity signals
package_trends
npm and PyPI metadata — version history, release cadence
Market data
Adapter
What it returns
extract_finance
No-key Stooq quote data — close, OHLC, volume, quote timestamp, source. Up to 5 tickers.
search_jobs
Remote job listings from Remotive, RemoteOK, HN "Who is Hiring"
The npm run demo:* commands below are source-checkout workflows for contributors and evaluators using a cloned repository. The published npm package is the MCP server/runtime package and does not include repo-only source examples or tests.
From an installed npm package, the supported runtime entrypoints are npm start and the freshcontext-mcp binary. Repo-only scripts such as tests, demos, smoke checks, and trust scans print a source-checkout notice when their source files are not present.
The Apify Actor entrypoint remains available in the source checkout for separate actor packaging, but it is intentionally not part of the published MCP npm runtime package.
Release trust gate
Run the local release gate before a release, package review, demo, or PR review:
bash
npm run trust:gate
The gate runs the Trust Scanner with repo-map reporting, npm package-boundary inspection, deterministic claim checks, and --fail-on fail. It is local-only, does not publish or deploy, does not send telemetry, and does not replace dedicated security scanners.
Generate review reports when you need a shareable summary:
bash
npm run trust:reportnpm run trust:report:json
To write a Markdown report file explicitly:
bash
npm run trust:report -- --output TRUST_SCAN_REPORT.md
Bring your own source list
FreshContext can evaluate candidate context you provide as a local JSON file:
bash
npm run demo:evaluate:file
To pass a different file:
bash
npm run demo:evaluate:file -- path/to/sources.json
Included examples:
bash
npm run demo:evaluate:file -- examples/sources.academic.example.jsonnpm run demo:evaluate:file -- examples/sources.jobs.example.json
This local demo does not fetch URLs, crawl, or read folders. It evaluates candidate context you provide and returns decision-first output: Decision, Meaning, Action, Warnings, and supporting metrics.
In an MCP client, use evaluate_context when you already have candidate context from another retriever, database, agent, or script:
text
Use evaluate_context with profile "academic_research", intent "citation_check", and these candidate signals: [...]
Use the named reference adapters when you want FreshContext's current MCP package to fetch public source examples for you.
Should I build this idea?
Use extract_idea_landscape with idea "procurement intelligence saas"
Returns funding signal, pain signal, crowding signal, market signal, ecosystem signal, and launch signal — all timestamped.
Full company intelligence in one call:
Use extract_company_landscape with company "Palantir" and ticker "PLTR"
SEC filings + federal contracts + global news + changelog + market data.
Did that company just disclose something material?
Use extract_sec_filings with url "Palantir Technologies"
8-K filings are legally mandated within 4 business days of any material event — CEO change, acquisition, breach, major contract.
Is this dependency still actively maintained?
Use extract_changelog with url "https://github.com/org/repo"
Returns the last 8 releases with exact dates. If the last release was 18 months ago, you'll know before you pin the version.
Deployment & infrastructure
The reference implementation runs on Cloudflare's global edge:
Endpoint
Method
Purpose
/
GET
Service info + endpoint list
/health
GET
Liveness check
/mcp
POST
MCP JSON-RPC transport
/demo
GET
Live before/after demo (no auth token required)
/briefing
GET
Latest stored briefing
/v1/intel/feed/:profile_id
GET
DAR-scored intelligence feed
/watched-queries
GET
List all watched queries
/.well-known/freshcontext-signing-keys.json
GET
Published Ed25519 verification keys (active + retired)
D1 database — 18 watched queries running on 6-hour cron with relevancy scoring
KV-backed rate limiting — 60 req/min per IP across all edge nodes
Defensive valves — clock-skew rejection (5min tolerance), hard floor at R_t<5, lazy decay at read time
Provenance — feed signals still carry legacy Ha-Pri v1 SHA-256 provenance references; separately, ledger-backed context verdicts are signed with Ed25519 V4 and independently verifiable
Schema migrations — promise-gated, idempotent, run on first request after deploy
Production: https://api.freshcontext.dev
Deployment modes
The engine is deliberately separable from the interface it is reached through. The same Core runs in each of these without a rewrite:
Mode
What it means
Standalone
FreshContext runs as its own context-integrity service, as it does today.
Embedded subsystem
Core runs inside an existing AI, data or security platform, invisible to that platform's users.
SDK / API
Integrity primitives are consumed programmatically; no MCP involved.
MCP infrastructure layer
FreshContext evaluates and governs context around MCP-enabled workflows — the live path in this repo.
Gateway / control-plane component
Core operates at the policy boundary, before context is admitted into agent execution.
White-label
The engine is surfaced under another product's branding and API.
Only the MCP and standalone modes are exercised in production today. The others are integration seams the architecture already supports, not shipped configurations.
Roadmap
Split three ways so that genuine engineering risk is never filed as optionality. Nothing outside Production core is a live product claim.
Production core — built, running, testable
FreshContext Specification v1.2 published (MIT, open standard)
DAR engine with source-specific lambda constants
Ha-Pri v1 provenance signatures on stored signals
Ha-Pri v2 Core helper and deterministic golden vectors
Public /v1/verify endpoint — ledger-backed verdict verification, answering for both the legacy HMAC path and Ed25519, and reporting which was used via verification_method
Generic MCP evaluate_context tool for caller-provided candidate context
Core-backed envelope generation shared by npm/MCP and the Cloudflare Worker
Semantic deduplication via fingerprinting
Named reference adapters across intelligence, competitive research, market data, and composites
METHODOLOGY.md — methodology and engineering documentation
Published on npm and listed for MCP usage; Apify/feed assets separated from the MCP runtime package
Trusted release publishing workflow — manual workflow_dispatch only, OIDC-backed, provenance-enabled, and gated by version/verification checks. One explicit run publishes npm first, verifies it, then publishes the matching manifest to the official MCP Registry with GitHub OIDC
Independently verifiable Ed25519 attestation (E-2). Every new verdict row in the
ledger is signed FRESHCONTEXT_HA_PRI_V4 with Ed25519. A third party can verify a verdict
with no FreshContext account, no API key and no call to FreshContext — using the key
document the Worker publishes at /.well-known/freshcontext-signing-keys.json and either
verifier shipped in the npm tarball: scripts/verify-offline.mjs (Node, standard library)
or scripts/verify_offline.py (Python, no dependencies at all). Written up for the
sceptic rather than the maintainer in VERIFYING.md.
Signing key fc-2026-09-ceced1ab published and active. Keys are append-only, so a
rotation never invalidates a verdict signed under a key that has since been retired.
attestation-proof.yml — obtains a live verdict, verifies it with both shipped
verifiers, runs tampered-payload and tampered-signature negative controls, and confirms
the stored ledger row is V4 rather than only the emitted response block. On demand and
daily; every input it uses is public, so it needs no credentials to run.
In flight on the core, not an expansion surface:
Ha-Pri v2 Worker/D1 production enforcement for stored signals — the feed rows,
which still carry Ha-Pri v1 SHA-256 stamps. This is a separate path from the verdict
ledger above: verdicts are V4/Ed25519 today, signals are not. Design document complete;
hard tamper enforcement on the signals path is not live.
Expansion surfaces — deliberately open, not built
These are integration seams the architecture supports and the engine does not yet implement. Stated in future tense on purpose.
Context safety harness. Policy enforcement before context reaches an agent: pass / warn / refresh / quarantine / block, with evidence attached to each decision. Today evaluate_context emits decisions and warnings; the enforcement state machine does not exist — quarantine and block are not implemented anywhere in the codebase.
Enterprise control plane. Dashboard over source health, trust score, context drift and provenance lineage. The verdict ledger is the data contract this would read from; the UI is unbuilt.
Observability telemetry. Historical integrity state, incidents, upstream degradation and remediation history.
Autonomous remediation. Automatic refresh, source substitution and re-evaluation — closed-loop rather than detection-only.
Vertical policy packs. Domain-specific integrity thresholds for regulated workflows.
Webhook triggers — push high-entropy signals on threshold
Research frontier — exploration, not commitment
GKG upgrade for extract_gdelt — tone scores, goldstein scale, event codes
Contradiction detection across concurrent sources
Future work is organized in FreshContext Future Lanes. Roadmap items are not live product claims until implemented and validated.
Contributing
PRs welcome. The highest-value contributions improve the caller-provided context path, decision output, host integrations, and FreshContext-compatible signal quality. New reference adapters are useful when they preserve source boundaries and emit timestamped, failure-honest context — see src/adapters/ for examples and FRESHCONTEXT_SPEC.md for the compatibility contract.
If you're building something FreshContext-compatible, open an issue and we'll add you to the ecosystem list.
Evaluate caller-provided candidate context and return decision-ready output. This is the primary FreshContext judgment path: it does not fetch, crawl, scrape, browse, read folders, or call adapters.
Extract real-time data from a GitHub repository — README, stars, forks, last commit, topics. Returns timestamped freshcontext.
Parametersurlrequired
extract_hackernews
Extract top stories or search results from Hacker News. The url field accepts an HN/Algolia URL or a plain search query.
Parametersurlrequired
extract_scholar
Extract research results (title, authors, year, snippet) from a Google Scholar search URL. Scholar exposes only the publication year, not an exact date, so freshness confidence is capped at medium.
Parametersurlrequired
extract_yc
Withdrawn in 0.5.3 pending review of source terms. Returns an error; kept so existing clients get a clear answer.
Parametersurlrequired
search_repos
Search GitHub for repositories matching a keyword. Returns top results by stars.
Parametersqueryrequired
package_trends
npm and PyPI package metadata — version history, release cadence, last updated.
Parameterspackagesrequired
extract_reddit
Extract recent posts from a subreddit (e.g. 'r/MachineLearning') or a Reddit search/listing URL. Returns title, subreddit, author, score, comment count, and post date per result.
Parametersurlrequired
extract_producthunt
Extract recent Product Hunt launches by keyword/topic search or a PH URL. Returns name, tagline, votes, comment count, topics, and launch date per result.
Parametersurlrequired
extract_finance
No-key stock quote data via Stooq. Accepts comma-separated ticker symbols and returns quote/OHLC/volume observations with timestamps.
Parametersurlrequired
search_jobs
Search for real-time job listings with freshness badges on every result. Sources: Remotive + HN Who is Hiring.
Parametersqueryrequiredmax_length
extract_landscape
Composite tool. Queries GitHub + HN + npm simultaneously. Returns a unified landscape report with each source's own freshness.
Parameterstopicrequired
extract_arxiv
Search arXiv for research papers via the official API. Pass a topic or full arXiv API URL. Returns titles, authors, dates, abstracts.
Parametersurlrequired
extract_changelog
Update history for any product. Accepts a GitHub repo URL or an npm package name. Returns version numbers, release dates, and entries.
Parametersurlrequired
extract_gdelt
Global news intelligence from GDELT. Monitors news from every country in 100+ languages, updated every 15 minutes. Returns articles with source country, language, date.
Parametersurlrequired
extract_gebiz
Singapore Government procurement opportunities (GeBIZ via data.gov.sg). Search by keyword, agency name, or empty for all recent tenders.
Parametersurlrequired
extract_govcontracts
US federal contract awards from USASpending.gov. Search by company name (e.g. 'Palantir'), keyword, or NAICS code. Returns amounts, dates, agencies.
Parametersurlrequired
extract_sec_filings
SEC 8-K filings via EDGAR full-text search. 8-K = legally mandated material event disclosures (CEO changes, M&A, breaches). Pass company name, ticker, or keyword.
Parametersurlrequired
extract_gov_landscape
Composite government intelligence: federal contract awards (USASpending) + dev community awareness (HN) + GitHub repo activity + product release velocity (changelog). 4-source unified report.
Most complete single-call company intelligence: SEC 8-K filings + USASpending federal contracts + GDELT global news + product changelog + Stooq quote data. 5 unique sources.
Parameterstickercompanyrequiredgithub_url
extract_idea_landscape
Idea validation composite: HN pain signals + YC funded competitors + GitHub crowding + jobs market signal + npm/PyPI ecosystem + Product Hunt launches. 6 sources.
Parametersidearequired
Version history
3
v0.5.3LatestSep 27, 2026
v0.5.2Sep 21, 2026
v0.3.17Sep 16, 2026
Score
100%
100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
{ "decision": "cite_as_primary", "label": "Cite as primary", "readable": { "label": "Primary source", "summary": "This source is strong enough to use as main evidence.", "why": [ "Strong semantic match and current freshness for arxiv.", "source profile academic_research uses lenient date policy", "intent profile citation_check selected" ], "action": "Use this as main evidence while preserving citation and provenance.", "warnings": [ "FreshContext judges citation readiness and context usefulness; it does not certify truth." ] }}