Skip to main content
Glama

AI tools show when you sent a message. Chron logs when the AI responded too — and keeps a permanent, queryable, tamper-evident record of the AI work happening across your tools.

Works with Claude Desktop, Claude Code, Cursor, Windsurf, Codex, Gemini CLI, and any MCP-compatible AI tool.


Why

AI tools produce no audit trail by default. You cannot answer:

  • What did the AI say, and when exactly?

  • How long did the AI take to respond?

  • What was the full conversation that produced this output?

  • Which tool calls, command results, and code diffs happened during the session?

  • Did a secret or credential get pasted into an AI prompt?

  • Has this audit record been edited after the fact?

  • What did I ask Claude last week about this codebase?

Chron fixes that. Every exchange is logged with a precise local datetime (including timezone offset) to a SQLite file you own. It can hash-chain every event, sign sessions with Ed25519, detect secrets/PII, run deterministic compliance review across four frameworks, and stream metadata-only events to your SIEM. No cloud, no vendor lock-in, no message content leaving your machine.


Related MCP server: chron

What Chron captures

Chron stores a local audit trail of:

  • User and assistant messages

  • Tool calls and tool results

  • Code changes with file path, operation, and unified diff

  • Session start/resume metadata, including parent session and external refs

  • Secret/PII detections with masked values

  • Hash-chain integrity data

  • Optional Ed25519 session signatures

  • Optional NTP clock attestation metadata

Chron's SIEM integrations send only metadata: session starts, role-only message events, and masked secret detections. Message content and raw secret values stay local.

Need runtime policy enforcement for AI agents? CLAIIM adds agent identity, approval workflows, and ALLOW/DENY gates on top of Chron proof. Try the public preview: https://claiim.io/preview


Install

CLI + MCP server:

npm install -g chron-mcp
chron doctor --fix

npx chron-mcp starts the MCP server only — it does not put the chron CLI command in your PATH. You need a global install for the CLI.

chron doctor --fix adds Chron to supported AI clients automatically: Claude Desktop, Claude Code, Cursor, Gemini CLI, Windsurf, and Codex. Restart your AI client after it runs.

First run creates ~/.chron/chron.db automatically. No database setup, no env vars, no migrations.

Check your setup:

chron doctor

For CI or automation:

chron doctor --json

Manual MCP config, if you need it:

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"]
    }
  }
}

CLI

After npm install -g chron-mcp, the chron command is available globally:

Usage: chron <command> [options]

Commands:
  history         List sessions or show full log for a session
  report          Aggregate audit stats across sessions
  export          Export a session as markdown
  secrets         List detected secrets across sessions
  settings        View current configuration
  connect         Connect to a SIEM or AI tool (codex, cursor, gemini, crowdstrike, sentinel, splunk)
  summary         Structured summary of a session (timeline, mutations, secrets)
  sign            Sign a session with its Ed25519 key — produces a .chron.sig file
  verify          Verify a session's hash chain and Ed25519 signature
  prune           Delete sessions older than a retention cutoff
  doctor          Check your Chron setup — Node version, DB, MCP configs, SIEM
  import          Import conversations from external AI tools into Chron
  review          Review AI sessions against compliance control criteria
  update          Update chron to the latest version

Options (history):
  --limit=<n>       Max sessions to show (default: 20)
  --search=<query>  Full-text search across all sessions (FTS5: phrases, boolean, prefix*)
  --ref=<value>     Filter by external_ref prefix (e.g. --ref=jira:ENG-123)
  <id-prefix>       Show full log for the session with this ID prefix

Options (report):
  --since=<range>   Filter by date: 7d, 30d, or YYYY-MM-DD (default: all time)
  --format=soc2     Generate SOC 2 HTML evidence package
  --output=<file>   Output file for --format=soc2

Options (export):
  <id-prefix>       Markdown export for a single session
  --signed          Tamper-evident bundle (JSONL + manifest + Ed25519 sig)
  --session=<id>    Filter bundle to a single session
  --since=<range>   Filter bundle by date: 7d, 30d, or YYYY-MM-DD
  --output=<file>   Output path (default: bundle.chron.tar.gz)

Options (verify):
  <id-prefix>       Verify a session's hash chain + Ed25519 signature
  --bundle=<file>   Verify a signed bundle offline (no DB needed)

Options (prune):
  --older-than=<n>d  Cutoff in days (falls back to retention_days in config)
  --dry-run          Show what would be deleted without deleting
  --confirm          Required flag to actually delete

Options (doctor):
  --json             Machine-readable JSON output

Options (import):
  chatgpt <file>     Import from ChatGPT export (.zip or conversations.json)

Options (review):
  --framework=<name>  Framework to review against: soc2, iso27001, euaiact, nist-ai-rmf
  --since=<range>     Limit to sessions since: 7d, 30d, or YYYY-MM-DD
  --all               Include accepted, dismissed, and resolved findings
  --output=<file>     Write HTML report to file (printable to PDF from browser)
  accept <id>         Mark a finding as accepted; supports --note=<text>
  dismiss <id>        Mark a finding as dismissed; supports --note=<text>
  resolve <id>        Mark a finding as resolved; supports --note=<text>

Chron Intelligence — compliance review

chron review scans your session history and flags findings against a compliance framework. No model inference. No API calls. Pure deterministic pattern matching on structured events Chron already captured.

chron review --framework=soc2
chron review --framework=iso27001
chron review --framework=euaiact
chron review --framework=nist-ai-rmf

Add --since=30d to scope to recent sessions, and --output=report.html to generate a printable HTML evidence report.

Four frameworks supported:

Framework

Rules

Controls covered

SOC 2

5

CC6.1, CC6.6, CC6.7, CC7.2, CC8.1

ISO 27001:2022

6

A.8.2, A.8.3, A.8.12, A.8.20, A.8.24, A.8.31

EU AI Act

6

Art. 9, Art. 10, Art. 12, Art. 13, Art. 14

NIST AI RMF 1.0

7

GOVERN, MAP, MEASURE, MANAGE

Finding workflow:

Every finding has a stable SHA-256 ID. Act on findings as you review:

chron review accept <id> --note="approved by security team, PR #512"
chron review dismiss <id> --note="test fixture, not production code"
chron review resolve <id> --note="credential rotated, no commit exposure"
chron review --framework=soc2 --all   # show accepted/dismissed/resolved too

Reviewed findings do not reappear as noise on the next run. New findings — from sessions since your last review — surface cleanly.

Important: Chron covers the subset of controls evaluable from AI coding session evidence. A full framework assessment requires policy documentation, board records, and auditor judgement that session logs cannot replace. Each HTML report includes a framework-specific disclaimer on the cover page.

chron doctor

chron doctor validates the pieces that make Chron useful in real life:

  • Node.js version (v18+ required)

  • Local Chron version vs npm latest

  • npx chron-mcp --version

  • DB directory and key directory write access

  • Claude Desktop, Claude Code, Cursor, Gemini CLI, Windsurf, and Codex MCP config presence

  • Whether Chron is configured in each MCP client

  • Optional HTTP mode health check on /health

  • Splunk, Sentinel, and LogScale configuration via env vars or ~/.chron/config.json

Run chron doctor --fix to add the Chron MCP server to supported clients automatically. Warnings for optional integrations do not fail the command. Real failures exit with code 1.


What it logs

Every exchange is recorded with precise local timestamps — user message when received, assistant response when sent:

[user: 2026-05-08 14:32:11 +02:00 | assistant: 2026-05-08 14:32:43 +02:00]

The main risks of deploying this contract are...

The gap between user and assistant timestamps is real generation time. Both are stored in your local SQLite DB with full timezone offset.


Config by tool

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"]
    }
  }
}

Claude Code

claude mcp add chron -- npx -y chron-mcp

Then add the skill hook to ~/.claude/settings.json:

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "cat ~/.chron/chron.skill.md"
          }
        ]
      }
    ]
  }
}

Cursor

Run:

chron connect cursor
chron doctor --verify-logging cursor

This writes both global and project workspace files:

  • ~/.cursor/mcp.json

  • .cursor/mcp.json

  • ~/.cursor/rules/chron.mdc

  • .cursor/rules/chron.mdc

Cursor must be restarted after setup. Use Cursor Agent mode, then run the verify command above to confirm a real Chron session appears in the local database.

Manual MCP config:

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"]
    }
  }
}

Gemini CLI

Run:

chron connect gemini

Or edit ~/.gemini/settings.json:

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"]
    }
  }
}

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"]
    }
  }
}

Companion skill file

Chron ships with skills/chron.skill.md — a plain-text instruction file that tells the AI how to use the MCP tools automatically. Load it into your AI tool once. After that, the AI:

  1. Creates or resumes a named session at the start of every conversation

  2. Logs your message before it starts responding (captures the real user timestamp)

  3. Logs its response after composing it (captures the real assistant timestamp)

  4. Shows [user: YYYY-MM-DD HH:MM:SS ±HH:MM | assistant: YYYY-MM-DD HH:MM:SS ±HH:MM] at the top of every response

  5. Retrieves prior session history so context is never lost across conversations


MCP Tools

Tool

Description

init_session

Initialize or resume a session — returns session_id, message count, and recent messages in one call

start_session

Create a new named audit session (legacy — prefer init_session)

log_message

Record a single message with the current local datetime

log_tool_call

Record an AI tool invocation as an audit event

log_tool_result

Record tool output and link it to a tool call

log_code_change

Record a file edit with operation and unified diff

log_exchange

Log a user/assistant pair atomically (for batch imports)

list_sessions

List all sessions ordered by most recently active

get_session_history

Retrieve the full timestamped log for a session

verify_session

Verify the tamper-evident hash chain — detects any post-log edits

scan_prompt

Scan text for secrets (API keys, credentials) before logging — returns masked detections

rehydrate_response

Restore redacted placeholders in an assistant response back to their original values

delete_session

Delete a session and cascade its messages/secrets

summarize_session

Return a timeline summary with latency, mutations, secrets, and prod references


Integrity and signing

Every new audit event is linked to the previous one via a SHA-256 chain:

content_hash = SHA256(session_id | role | content | created_at | prev_hash | event_type)

verify_session walks the chain and returns:

  • valid: true — no messages were modified after logging

  • valid: false, first_break: <id> — exact row ID of the first tampered message

This turns your local log into a verifiable audit artifact. Any edit to a stored message — content, timestamp, or role — breaks the chain and is detected immediately.

Chron also generates an Ed25519 keypair per new session when possible. The private key stays under ~/.chron/keys. Use:

chron sign <session-id-prefix>
chron verify <session-id-prefix>

For portable evidence:

chron export --signed --session=<session-id-prefix> --output=evidence.chron.tar.gz
chron verify --bundle=evidence.chron.tar.gz

chron verify also reports NTP clock attestation metadata for sessions created with clock-check support.


Secrets and PII detection

Chron can detect and mask:

  • API keys: OpenAI, Anthropic, AWS, Google, GitHub, Slack, Stripe, SendGrid, HuggingFace

  • Private keys, JWTs, URL credentials, password assignments, env-style secrets

  • Credit cards, IBANs, SSNs, DOBs, passports

  • Email addresses, US/E.164 phone numbers, internal RFC-1918 IPs

Use:

chron secrets
chron secrets <session-id-prefix>

MCP tools can also call scan_prompt before sending content to an AI tool. Redaction uses $CHRON_* placeholders and rehydrate_response can restore values from the returned token map.


Reports and evidence

chron history
chron summary <session-id-prefix>
chron report --since=30d
chron report --format=soc2 --output=soc2-report.html
chron export <session-id-prefix>
chron export --signed --since=30d --output=bundle.chron.tar.gz
chron prune --older-than=90d --dry-run

The SOC 2 report and signed bundles are designed for audit review, legal hold, and incident reconstruction without sending conversation content to Chron infrastructure.


CrowdStrike LogScale integration

Stream AI session telemetry directly from developer machines into your CrowdStrike LogScale repository. No relay service — events go straight to your own LogScale instance.

What gets sent: session starts, message counts (role only), and masked credential detections. Message content never leaves the machine.

Setup

1. Create a LogScale repository and ingest token

In Falcon console → Log ManagementRepositoriesNew repository (name it ChronAIEvents).
Then SettingsAPI TokensAdd token → select Ingest permission → copy the token.

Your ingest URL follows this pattern:

https://<your-cluster>.humio.com/api/v1/ingest/humio-structured

2. Install the CLI and run the onboarding wizard

npm install -g chron-mcp
chron connect crowdstrike
# Paste your ingest URL and token when prompted
# The wizard sends a test event and confirms before saving

3. Add env vars to your MCP client config

The wizard prints the exact block to paste. For Claude Code, add to the chron entry in ~/.claude.json:

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"],
      "env": {
        "CHRON_LOGSCALE_URL": "https://<your-cluster>.humio.com/api/v1/ingest/humio-structured",
        "CHRON_LOGSCALE_TOKEN": "<your-ingest-token>"
      }
    }
  }
}

Restart your AI tool to pick up the new env vars.

4. Import the pre-built dashboard

In Falcon → Log ManagementDashboardsImport:

node_modules/chron-mcp/dashboards/logscale/chron-ai-activity.yaml

Full guide with SOC alert setup: dashboards/logscale/README.md

Env vars

Env var

Description

CHRON_LOGSCALE_URL

LogScale ingest endpoint

CHRON_LOGSCALE_TOKEN

LogScale ingest token

Both must be set for events to flow. If unset, the integration is silently disabled.


Splunk integration

Stream AI session telemetry into Splunk via HTTP Event Collector (HEC). Works with Splunk Enterprise, Splunk Cloud, and a local Docker instance.

What gets sent: session starts, message counts (role only), and masked credential detections. Message content never leaves the machine.

Setup

Option A — Local Docker (fastest, no account needed)

# Start a local Splunk instance (Apple Silicon: --platform linux/amd64 is required)
docker run -d --name splunk-chron \
  --platform linux/amd64 \
  -p 8000:8000 -p 8088:8088 \
  -e SPLUNK_START_ARGS=--accept-license \
  -e SPLUNK_GENERAL_TERMS=--accept-sgt-current-at-splunk-com \
  -e SPLUNK_PASSWORD=Admin1234! \
  -e SPLUNK_HEC_TOKEN=chron-test-token \
  splunk/splunk:latest

# Wait ~2 minutes, then watch until ready:
docker logs -f splunk-chron 2>&1 | grep -i "Ansible playbook complete"

Option B — Splunk Enterprise or Cloud

Settings → Data InputsHTTP Event CollectorNew Token → name it chron-ingest → source type chron:event → copy the token.

2. Install the CLI and run the onboarding wizard

npm install -g chron-mcp
chron connect splunk
# For local Docker: URL = https://localhost:8088, Token = chron-test-token
# TLS verification is skipped automatically for localhost (self-signed cert)

3. Add env vars to your MCP client config

The wizard prints the exact block to paste. For Claude Code, add to ~/.claude.json:

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"],
      "env": {
        "CHRON_SPLUNK_URL": "https://localhost:8088",
        "CHRON_SPLUNK_TOKEN": "chron-test-token",
        "CHRON_SPLUNK_INSECURE": "1"
      }
    }
  }
}

Remove CHRON_SPLUNK_INSECURE for production Splunk instances with valid TLS certificates.

Restart your AI tool to pick up the new env vars.

4. Search in Splunk

Open http://localhost:8000Search & Reporting → run:

sourcetype="chron:event"

Events appear in real time as you have AI conversations.

Full guide with dashboard templates and alert setup: dashboards/splunk/README.md

Env vars

Env var

Description

CHRON_SPLUNK_URL

Splunk HEC base URL, e.g. https://localhost:8088 or https://your-host:8088

CHRON_SPLUNK_TOKEN

HEC ingest token

CHRON_SPLUNK_INSECURE

Set to 1 to skip TLS verification (local Docker with self-signed cert)

CHRON_SPLUNK_URL and CHRON_SPLUNK_TOKEN must both be set for events to flow.


Microsoft Sentinel integration

Stream AI session telemetry into your Microsoft Sentinel workspace via the Azure Monitor Logs Ingestion API. Events go directly from developer machines to your own Log Analytics workspace — no relay service.

What gets sent: session starts, message counts (role only), and masked credential detections. Message content never leaves the machine.

Setup

1. Register an Azure App

Azure Portal → Azure Active DirectoryApp registrationsNew registration → name it chron-ingest.
Note the Application (client) ID and Directory (tenant) ID.
Go to Certificates & secretsNew client secret → copy the value immediately.

2. Create a custom table in Log Analytics

Open your Log Analytics workspace → TablesCreateNew custom log (DCR-based) → name it ChronEvents_CL.

Add these columns (in addition to the auto-added TimeGenerated):

Column

Type

EventType

string

SessionIdPrefix

string

AiTool

string

OS

string

ChronVersion

string

Computer

string

Role

string

DetectionType

string

MaskedValue

string

The wizard creates a Data Collection Endpoint (DCE) and Data Collection Rule (DCR) — note both.

3. Grant the App ingest permission

Open the DCR → Access control (IAM)Add role assignment → Role: Monitoring Metrics Publisher → Member: the chron-ingest app.

4. Get the DCR Immutable ID

Open the DCR → OverviewJSON view → copy the immutableId field (starts with dcr-).

5. Install the CLI and run the onboarding wizard

npm install -g chron-mcp
chron connect sentinel
# Enter tenant ID, client ID, client secret, DCE URL, DCR immutable ID, and stream name
# The wizard authenticates with Azure AD and sends a test event before saving

6. Add env vars to your MCP client config

The wizard prints the exact block to paste. For Claude Code, add to ~/.claude.json:

{
  "mcpServers": {
    "chron": {
      "command": "npx",
      "args": ["-y", "chron-mcp"],
      "env": {
        "CHRON_SENTINEL_TENANT_ID": "<your-tenant-id>",
        "CHRON_SENTINEL_CLIENT_ID": "<your-client-id>",
        "CHRON_SENTINEL_CLIENT_SECRET": "<your-client-secret>",
        "CHRON_SENTINEL_DCE": "https://<your-dce>.ingest.monitor.azure.com",
        "CHRON_SENTINEL_DCR_ID": "dcr-<your-immutable-id>",
        "CHRON_SENTINEL_STREAM": "Custom-ChronEvents_CL"
      }
    }
  }
}

Restart your AI tool to pick up the new env vars.

7. Query in Sentinel

Sentinel → Logs → paste any query from dashboards/sentinel/:

ChronEvents_CL
| where TimeGenerated > ago(24h)
| summarize count() by EventType, AiTool

Full guide with KQL queries and alert rule setup: dashboards/sentinel/README.md

Env vars

Env var

Description

CHRON_SENTINEL_TENANT_ID

Azure AD tenant ID

CHRON_SENTINEL_CLIENT_ID

App Registration client ID

CHRON_SENTINEL_CLIENT_SECRET

App Registration client secret

CHRON_SENTINEL_DCE

Data Collection Endpoint URL

CHRON_SENTINEL_DCR_ID

DCR Immutable ID (starts with dcr-)

CHRON_SENTINEL_STREAM

Stream name, e.g. Custom-ChronEvents_CL

All six must be set for events to flow. Token refresh is automatic (1-hour Azure AD tokens, refreshed 60s before expiry).


Configuration

Env var

Default

Description

CHRON_DB_PATH

~/.chron/chron.db

Path to SQLite database file

CHRON_TRANSPORT

stdio

Set to http to enable HTTP+SSE mode

CHRON_API_KEY

(none)

Bearer token for HTTP mode

PORT

3001

Port for HTTP mode

CHRON_LOGSCALE_URL

(none)

LogScale ingest endpoint (enables CrowdStrike integration)

CHRON_LOGSCALE_TOKEN

(none)

LogScale ingest token

CHRON_SENTINEL_TENANT_ID

(none)

Azure AD tenant ID (enables Sentinel integration)

CHRON_SENTINEL_CLIENT_ID

(none)

App Registration client ID

CHRON_SENTINEL_CLIENT_SECRET

(none)

App Registration client secret

CHRON_SENTINEL_DCE

(none)

Data Collection Endpoint URL

CHRON_SENTINEL_DCR_ID

(none)

DCR Immutable ID

CHRON_SENTINEL_STREAM

(none)

Stream name (e.g. Custom-ChronEvents_CL)

CHRON_SPLUNK_URL

(none)

Splunk HEC base URL (enables Splunk integration)

CHRON_SPLUNK_TOKEN

(none)

Splunk HEC ingest token

CHRON_SPLUNK_INSECURE

(none)

Set to 1 to skip TLS verification for local Splunk/self-signed certs

CHRON_RELAY_URL

(none)

Generic relay endpoint (any SIEM or webhook)

CHRON_RELAY_TOKEN

(none)

Bearer token for generic relay


HTTP+SSE mode (team / self-hosted)

For teams or remote use, run Chron as an HTTP server:

CHRON_TRANSPORT=http CHRON_API_KEY=your-key PORT=3001 npx chron-mcp

Point your MCP config at the URL:

{
  "mcpServers": {
    "chron": {
      "url": "https://your-server/sse",
      "headers": {
        "Authorization": "Bearer your-key"
      }
    }
  }
}

ChatGPT import

Bring your existing ChatGPT history into Chron's tamper-evident audit trail.

# From a ChatGPT data export ZIP
chron import chatgpt ~/Downloads/chatgpt-export.zip

# Or from an extracted conversations.json
chron import chatgpt ~/Downloads/conversations.json

How to get your ChatGPT export: ChatGPT → Settings → Data Controls → Export data → wait for email → download the ZIP.

What gets imported:

  • One Chron session per conversation, with ai_tool=chatgpt

  • Original message timestamps from the export

  • external_ref=chatgpt:<conversation_id> on every session (visible in chron history)

  • Full SHA-256 hash chain across all imported messages

  • Secret detection runs on all user messages

Re-running is safe — already-imported conversations are skipped by external_ref match.

After import, sessions appear in chron history and chron verify works on them the same as any natively-logged session.


Your data

Your audit log lives at ~/.chron/chron.db — a single SQLite file on your machine. Query it directly with any SQLite tool:

sqlite3 ~/.chron/chron.db \
  "SELECT s.title, m.role, m.content, m.created_at
   FROM messages m JOIN sessions s ON s.id = m.session_id
   ORDER BY m.created_at"

No cloud, no telemetry, no data leaving your machine. Change the location with CHRON_DB_PATH.


License

Copyright (c) 2026 Nivaya. All rights reserved.

Source code is public for transparency only. Cloning, forking, modification, and redistribution are not permitted without explicit written permission. See LICENSE for full terms.

Available Tools

6 tools
get_session_historyA

Retrieve the full timestamped audit log for a session, oldest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
limitNoReturn only the most recent N messages

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description must disclose behaviors. The description implies read-only but does not mention authentication, error handling, or side effects. Inconsistency arises with the limit parameter's description ('most recent N') contradicting the main description's 'full' and 'oldest first'.

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?

The description is a single sentence of 12 words, front-loading the core action and resource. No unnecessary information.

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

Completeness3/5

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

The description is adequate given low complexity, but lacks details on return format (structure of audit log entries), behavior when limit is used (order), error handling, and pagination. No output schema further heightens the need for these details.

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

Parameters2/5

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

Schema description coverage is 50% (only limit has a description). The main description does not clarify the session_id parameter beyond its type, and the limit parameter's description ('most recent N') contradicts the main description's 'full' and 'oldest first', causing confusion.

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 clearly states the verb 'Retrieve' and the resource 'full timestamped audit log for a session', with ordering 'oldest first'. It distinguishes from sibling tools like log_exchange (logging) or list_sessions (listing sessions).

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?

The description provides clear context for when to use this tool (to retrieve history of a session). However, it does not explicitly exclude alternative uses or mention when not to use it, such as if a more filtered query is needed.

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

list_sessionsA

List all audit sessions ordered by most recently active. Returns id, title, ai_tool, message_count, created_at, updated_at.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoReturn only the most recent N sessions

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses ordering and returned fields, but omits if the operation is read-only, if there are pagination limits, or if destructive actions occur. Adequate for a simple list, but not exhaustive.

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?

Two clear sentences with front-loaded information, no redundant words, efficiently conveys purpose and output.

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?

Despite no output schema, the description lists return fields and ordering. However, it lacks details on default limit behavior or pagination, leaving minor gaps for an agent.

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 coverage is 100% and the description does not add meaning beyond the schema's description of the 'limit' parameter. Baseline score of 3 is appropriate.

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 clearly states the action ('List all audit sessions'), the ordering ('most recently active'), and the returned fields, distinguishing it from sibling tools like get_session_history which likely retrieves a single session.

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?

The description implies listing all sessions but does not explicitly guide when to use this tool over siblings like get_session_history or start_session. No 'when not to use' or alternative mentions.

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

log_exchangeA

Record a user+assistant exchange from historical or batch imports only. Do NOT use for live conversations — both timestamps are captured at the same instant with no real gap. For live sessions always call log_message twice: once for the user message, once for the assistant response.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID returned by start_session
user_contentYesThe exact user message
assistant_contentYesThe exact assistant response

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, but description discloses that both timestamps are captured at the same instant, a key behavioral trait. Does not cover permissions or error handling, but adequate for this simple tool.

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?

Two sentences, zero wasted words. Front-loaded with purpose and restriction, then provides alternative. Perfect conciseness.

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?

Given 3 params and no output schema, the description covers the use case, behavioral nuance, and sibling contrast. Could mention return value, but still fairly complete for a simple logging tool.

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 each parameter. The description adds no new per-parameter details, only overall context. Baseline score of 3 is appropriate.

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?

Clearly states it records a user+assistant exchange, specifying it's for historical or batch imports only. Distinguishes from sibling tool log_message with explicit scope.

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

Usage Guidelines5/5

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

Explicitly says 'Do NOT use for live conversations' and provides the alternative: use log_message twice for live sessions. Excellent guidance.

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

log_messageA

Record a single message (user or assistant) with the current local datetime and timezone offset. Call before responding for user messages, and before sending for assistant messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID returned by start_session
roleYes
contentYesFull message text

TDQS

A4.5/5.0
Behavior4/5

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

Discloses that the tool records the current local datetime and timezone offset. No annotations exist, so description carries the burden. Could mention return value, but core behavior is 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?

Two concise sentences: first states purpose, second gives usage guidance. No unnecessary words, well-structured.

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

Completeness3/5

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

Lacks information about the return value (e.g., does it return a message ID or just success?). Also does not explicitly mention prerequisite of a valid session (though schema covers session_id). For a simple logging tool, mostly adequate but missing response details.

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?

Schema covers session_id and content descriptions (67% coverage). Description adds value by explaining how to use the role parameter in context of when to call.

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 clearly states 'Record a single message (user or assistant)' with a specific verb and resource. It distinguishes from the sibling tool 'log_exchange' by focusing on individual messages.

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

Usage Guidelines5/5

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

Explicit instructions: 'Call before responding for user messages, and before sending for assistant messages.' This provides clear context on when to invoke the tool.

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

start_sessionA

Create a new audit session or resume an existing one by title. Call this at the start of every conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesDescriptive session title, e.g. "Contract review — 2026-05-08"
ai_toolNoAI tool name: "claude", "cursor", "windsurf", etc.

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It lacks details on whether resuming a session overwrites data, requires authentication, or has any side effects. The agent gets no insight into what happens beyond the basic create/resume action.

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?

Two sentences, front-loaded with the core action and usage instruction. Every word earns its place without redundancy or verbosity.

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

Completeness3/5

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

The description covers purpose and when to use, but given no output schema or annotations, it omits what the tool returns or any behavioral nuances like session ID or error conditions. It is adequate but not fully comprehensive.

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 coverage is 100% and the description only adds 'by title' context, which echoes the schema's title description. No additional meaning is provided for the ai_tool parameter, so the description adds minimal value 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?

The description clearly states the tool creates or resumes an audit session by title, which distinguishes it from siblings like get_session_history or list_sessions. The verb 'Create' and 'resume' along with resource 'audit session' are specific and unambiguous.

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?

The description explicitly says 'Call this at the start of every conversation,' providing clear usage context. It does not explicitly exclude alternatives, but the sibling tools serve different purposes, so an agent can infer when to use this tool.

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

verify_sessionA

Verify the tamper-evident hash chain for a session. Returns valid=true if no rows were edited after logging, or the first broken link if tampering is detected.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesSession ID to verify

TDQS

A4.1/5.0
Behavior4/5

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

The description adequately explains the verification outcome (valid=true or broken link) but does not mention potential side effects or behavior on non-existent sessions. Since there are no annotations, it covers the essential behavioral traits.

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?

The description is two clear sentences, each adding value. No redundant or missing information.

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?

Given the simple tool (one parameter, no output schema), the description fully covers what an agent needs to know to use it correctly.

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?

The input schema already provides full description for the only parameter ('Session ID to verify'). The tool description adds no extra meaning 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?

The description explicitly states the tool's action ('verify') and resource ('session'), and explains the output conditions. This clearly distinguishes it from sibling tools like list_sessions or log_exchange.

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?

The description does not explicitly state when to use this tool over alternatives or mention any prerequisites. Usage context is implied but not guided.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observedget_session_history
    • First observedlist_sessions
    • First observedlog_exchange
    • First observedlog_message
    • First observedstart_session
    • First observedverify_session

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct role: starting/resuming sessions, logging messages individually or in batch, listing sessions, retrieving full history, and verifying integrity. No overlaps in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., start_session, list_sessions, verify_session), making the API predictable and easy to navigate.

Tool Count5/5

Six tools cover the essential operations for an audit session manager without redundancy. The count is well-scoped for the server's purpose.

Completeness5/5

The tool set covers the full lifecycle: session creation, message logging (individual and batch), session listing, history retrieval, and integrity verification. No obvious gaps given the immutability requirement for audit logs.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SirinivasK/chron'

If you have feedback or need assistance with the MCP directory API, please join our Discord server