Checkpoint
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Checkpoint
An MCP firewall for IT service-desk agents. Built for the Clocked Build Challenge (building period Oct 21 to Nov 10, 2026).
Checkpoint is an MCP server that sits between an MCP client (Claude Desktop, VS Code, Cursor, MCP Inspector, or a scripted client) and the tools an IT service-desk agent uses: reading inbox messages and tickets, proposing remediation scripts, sending replies. Every tool call passes through Clocked before the agent sees the result or the action happens:
Clocked endpoint | Product | What Checkpoint screens | What the verdict changes |
| Guard | Untrusted tool results (emails, tickets, KB pages) and the user's own request | allow clean content, cut the evidence spans of a high/critical injection, hold uncertain results for a human |
| Protect | Tool results and outbound replies | the agent only sees the anonymized text; originals never reach the model |
| Inspect | Remediation scripts the agent proposes | allow (simulated run, never executed), hold suspicious scripts for approval, deny malicious ones with evidence |
Guard and Inspect are detectors, not enforcement boundaries, and a benign verdict is not execution authorization. Checkpoint keeps least-privilege tool design and human approval in place; Clocked reduces risk, it does not replace those controls.
Status (Oct 21, 2026): all three paths are wired, and four tools work end to end against offline stubs only. No call to Clocked has been made yet because there is no Clocked account or key. The real clients are written against
clocked-sdk0.6.0 and tested against Clocked's recorded docs responses with a fake client, but they have not run against the live API. The hold queue, outbox and simulated run log are in memory. Convex and the dashboard are not started.
What works today
MCP Streamable HTTP server on a single endpoint,
POST/GET/DELETE /mcp, protocol revision2025-11-25.Originallowlist: a request whoseOriginis not onCHECKPOINT_ALLOWED_ORIGINSgets403before any MCP handling.Hostis checked against loopback names too (DNS rebinding).Stateful sessions:
initializereturns anMCP-Session-Id; other requests without it get400, unknown or terminated sessions get404; an unsupportedMCP-Protocol-Versiongets400.
Four tools, over synthetic fixtures (
fixtures/inbox.json,fixtures/changes.json; fictional people,example.com):
Tool | Screening | Outcomes | If screening fails |
| Guard ( | allow; cut high/critical injection evidence spans and quarantine the rest; hold uncertain results. Shown text is always Protect's anonymized copy ( | Guard error: fail open with an |
| Protect on the draft, then Guard on the anonymized draft | recorded to an in-memory outbox (anonymized body only; nothing is ever sent); hold anything Guard does not clearly allow (outbound text is never cut and sent) | Fail closed: refused, nothing recorded |
| Inspect, with the change ticket's approved scope from | allow = simulated run recorded in memory (the script is never executed); hold = approval queue; deny = refusal with the flagged lines and line numbers | Fail closed: refused, nothing run or queued |
| none (read-only) | Status of a hold: |
Holds are decided by people, not the agent. There is no approve or deny tool.
HoldQueue.resolve()exists for the reviewer side (planned: a dashboard) and a decided hold cannot be decided again. Approving a hold does not yet release or replay anything; that comes with the dashboard.Inspect policy: deny on verdict
maliciousormalicious >= threshold; hold on verdictsuspicious,suspicious >= 0.5, or high/critical severity; allow only an explicitbenignverdict. An unrecognized verdict label is held, never allowed.No execution path. Nothing under
src/importschild_process,worker_threads,clusterorvm, or callseval; a unit test enforces it.Offsets are Unicode code points. Clocked counts characters, not UTF-16 units, so Guard cuts, Protect placeholders and Inspect line numbers all go through
src/unicode.ts(Array.from), neverString.sliceon a Clocked offset. Tests cover emoji and astral characters, and rebuilding Protect's replace-style copy from the recorded/piioffsets reproduces Clocked'sanonymized_textexactly.
Related MCP server: MCP Warden
Real vs. stub
Guard, Protect and Inspect are each an interface with two implementations:
Component | Real ( | Offline stub (explicit flag, no key) |
Guard ( |
|
|
Protect ( |
|
|
Inspect ( |
|
|
The stubs are for local tests only. They are not Clocked and not real screening. Every result a stub touches is labeled engine: "offline-stub" and the tool text starts with an UNSCREENED ... OFFLINE STUB ... banner. When a component has neither a key nor its flag, the server refuses to start rather than run unscreened.
Not built yet: Convex audit log, holds table and dashboard; Guard on the user's own request (source: "user"); read_ticket and fetch_kb_page; upstream proxy mode; the evaluation table against live Clocked.
Quick start
Requires Node.js 20+ (developed on 26) and gitleaks for commits.
git config core.hooksPath .githooks # secret scan on every commit (see below)
npm ci
npm run check # typecheck + unit tests + smoke test (offline stub, no network)
# Run the server locally without Clocked (offline stubs, for development only):
CHECKPOINT_GUARD=offline-stub CHECKPOINT_PROTECT=offline-stub CHECKPOINT_INSPECT=offline-stub npm start
# With Clocked (once you have a key): copy .env.example to .env, set CLOCKED_API_KEY, then
node --env-file=.env --import tsx src/main.tsThe server listens on http://127.0.0.1:3333/mcp. Point any Streamable HTTP MCP client (for example MCP Inspector) at it.
Script | What it does |
|
|
| Unit tests ( |
| Starts the server process (offline stubs, no network) and checks Origin 403, initialize, sessions, |
| Records raw |
Pinned dependencies
Package | Version |
| 0.6.0 |
| 2.3.1 |
| 2.1.1 |
| 2.3.1 |
| 4.6.7 |
All versions are exact (save-exact), and package-lock.json is committed.
Fixtures
fixtures/docs/: request bodies and recorded responses from Clocked's public docs (Guard, Protect, Inspect examples).fixtures/recorded/: our own raw responses, written byscripts/record-clocked.mjs(empty until a key exists).fixtures/inbox.json: synthetic inbox. One message carries an obvious prompt-injection payload surrounded by emoji and astral letters; one carries personal data (email, employee id, IP, phone) for Protect.fixtures/changes.json: synthetic approved change tickets whose scope Inspect assesses scripts against.CHG-DEMO-204reuses the scope from Clocked's/scriptdocs example.
Secret scanning (do this first)
Commits are scanned by gitleaks through a versioned hook in .githooks/pre-commit. After cloning:
# 1. Install gitleaks >= 8.19 (see the gitleaks README), then:
git config core.hooksPath .githooksThe hook refuses to commit if gitleaks is missing. .gitleaks.toml extends the default rules with one for Clocked keys (clk_...). Keep keys in .env (gitignored); .env.example lists the variable names only.
License
MIT, see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Security & DLP proxy for MCP: tool-poisoning scans, PII redaction on tool args/results. Beta.
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Real-time MCP & A2A prompt-injection, jailbreak, and tool-schema poisoning firewall for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides prompt injection detection, PII/secrets redaction, and an audit trail for AI agents via MCP tools.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to reach upstream MCP tool servers through a central policy gateway that authenticates each agent, enforces least-privilege and default-deny rules, and applies response obligations such as redaction, inference stripping, PII masking, and truncation. It also records every decision in a tamper-evident, hash-chained audit log that can be verified later.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceSits between an agent and an upstream MCP server to enforce per-profile tool grants, deterministic allow/deny/handoff rules, field and PII masking, idempotent writes, and one-line audit logging from a single YAML config. Enables regulated deployments to add guardrails that fail closed without changing the customer's tools or the agent's prompt.MIT
- AlicenseNot gradedqualityBmaintenanceEnables secure runtime mediation of tool requests from MCP-connected AI agents, enforcing least-privilege policies, validating intent and inputs, detecting multi-step attacks and information leaks, and supporting explainable decisions, audit trails, and human approval for sensitive actions.MIT