ChronoVerify

Use ChronoVerify with CrewAI

Give a CrewAI agent the ChronoVerify tools with MCPServerAdapter pointed at the published MCP server. The agent gets verify_image and get_signed_report with no custom tool code.

When your agent should call ChronoVerify

Call it before you trust or act on any user-submitted or sourced image. Strong triggers:

Branch on the verdict and confidence it returns; treat anything below your bar as needing human review.

Install

pip install 'crewai-tools[mcp]'

Give an agent the ChronoVerify tools

StdioServerParameters comes from the mcp package; use the context manager so the server subprocess is cleanly started and stopped.

from crewai import Agent
from crewai_tools import MCPServerAdapter
from mcp import StdioServerParameters

params = StdioServerParameters(
    command="npx",
    args=["-y", "chronoverify-mcp"],
    # env={"CHRONOVERIFY_API_KEY": "cv_live_..."},  # optional
)

with MCPServerAdapter(params) as mcp_tools:
    verifier = Agent(
        role="Image Provenance Verifier",
        goal="Verify image capture-time and provenance with ChronoVerify",
        backstory="I check C2PA, EXIF, and pixel forensics.",
        tools=mcp_tools,
    )

What comes back

One JSON object, the same in the browser and the API. The verdict is one of provenance_confirmed, consistent, inconclusive, metadata_anomaly, or manipulation_indicated.

{
  "schema_version": "v1",
  "verdict": "consistent",
  "confidence": 61,
  "headline": "Metadata is internally consistent. No manipulation signals fired.",
  "capture_time": {
    "value": "2026-05-18T14:32:10",
    "source": "exif",
    "consistent": null
  },
  "capture_device": {
    "make": "Canon",
    "model": "EOS R6",
    "software": "Firmware 1.8.1"
  },
  "c2pa": {
    "present": false,
    "validated": null,
    "validation_state": null,
    "signer": null
  },
  "integrity": {
    "sha256": "1313339a...",
    "sha512": "93a81e4a...",
    "format": "JPEG"
  }
}

Full field reference, including the C2PA validation state and signer, is on the method and API page and in /openapi.json.

What it does and does not tell you

ChronoVerify validates provenance and metadata and flags possible editing for human review. It is not a deepfake or AI-generation detector, and a verdict is investigative triage, not proof. A clean result means a file's saved data is internally consistent, not that the scene it shows is real. Never use a verdict as the sole basis for an automated decision about a person.

Common questions

Where does StdioServerParameters come from?

From the mcp package (the official MCP Python SDK), not from crewai_tools.

Why the context manager?

The with MCPServerAdapter(...) as mcp_tools: form cleanly starts and stops the server subprocess.

Is it a deepfake detector?

No. Provenance-first triage, not AI-generation detection.

The fastest way to see it is to run a photo through it.

Try the free verifier