Borrowing it
Nothing to install: this file belongs to psluja/change-detection-store-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/psluja/change-detection-store-mcp/main/CLAUDE.mdgit clone --depth 1 https://github.com/psluja/change-detection-store-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/psluja/change-detection-store-mcp/claude-md)<a href="https://agentmods.dev/instructions/psluja/change-detection-store-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/psluja/change-detection-store-mcp/claude-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/psluja/change-detection-store-mcp/claude-md"><img src="https://agentmods.dev/badge/instructions/psluja/change-detection-store-mcp/claude-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.02661 | $0.02661 |
| Opus 5 | $0.01331 | $0.01331 |
| Sonnet 5 | $0.00532 | $0.00532 |
| Haiku 4.5 | $0.00266 | $0.00266 |
Grade A, and why
change-detection-store-mcp CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 78 lines — stays where its author put it; the contents beside it link to each section on GitHub.
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Status
Deployed and working (stack ChangeDetectionStore in eu-central-1; end-to-end verified through the Claude connector). All design decisions below are settled — do not re-litigate them without the user.
The repository is not yet a git repository (deliberately, for now).
What This Project Is
An open-source change-detection store exposed as an MCP server on AWS: it stores small JSON objects only when their content hash has changed. A client writes a value under a key in a named store; the service hashes the value and creates a new record only when the hash differs from the last stored one, producing a per-key timeline of real changes.
Approved Design Decisions
- Interface: MCP only (stateless streamable HTTP + OAuth endpoints on one Lambda Function URL). No parallel REST API. Tools:
create_store,list_stores,delete_store,patch_item,patch_items,get_item,list_items,get_item_history,delete_item. Agent-friendly semantics (settled):create_storeis an idempotent upsert returning{ name, createdAt, created: bool };get_itemon a missing key returns{ found: false }(a missing key is a normal state — only a missing STORE is an error);patch_itemreturns{ changed, hash, date };patch_itemsbatches 1-50 writes with per-key results{ key, changed, hash, date } | { key, error }(a bad item never fails the batch; a missing store does). - Sidecar
meta(settled): optional JSON field onpatch_item/patch_items, persisted on EVERY call — includingchanged: false(viaupdateLatestMetaport method: condition on hash + liveness, no date bump, no history entry) — but NEVER hashed; replaced whole, ≤ 64 KB. Returned byget_itemand snapshotted into each history entry. Purpose: often-changing info outside change detection (e.g.lastSeenAt). - Auth: OAuth 2.0 with Cognito as the authorization server: hosted UI, app client secret in Secrets Manager, authorization via
cognito:groupsclaim (groupcds-allowed), no self-signup, manual Client ID entry in the Claude connector settings (no DCR). Implemented inapp/src/interface/oauth/: RFC 9728 + RFC 8414 discovery metadata (base URL derived from the invocation host, never from env),/auth/authorize(PKCE S256 required; relay state carries the client's state + redirect_uri; redirect_uri allowlist enforced on BOTH authorize and callback — that closes the open redirect),/auth/tokenproxy (injects the client secret as Basic auth, pins redirect_uri), JWT gate viaaws-jwt-verify(401 withWWW-Authenticate: ... resource_metadata=...vs 403 for missing group). Env:CDS_USER_POOL_ID,CDS_COGNITO_DOMAIN,CDS_CLIENT_SECRET_ID(the secret NAME — a partial ARN as SecretId FAILS IAM evaluation on GetSecretValue, verified in production; clientId+clientSecret live inside this secret), optionalCDS_REQUIRED_GROUP,CDS_ALLOWED_REDIRECT_URIS;CDS_AUTH_DISABLED=trueonly for local dev. Known Function URL quirk: the 401WWW-Authenticateheader arrives remapped asx-amzn-Remapped-www-authenticate(fixed AWS behavior) — MCP clients rely on the/.well-known/oauth-protected-resourcefallback, which we serve. - Hashing: SHA-256 over RFC 8785 (JCS) canonical JSON via the
canonicalizenpm package. Object key order and number format never affect the hash; array order does — that is the client's responsibility (server never normalizes arrays). - Data model (DynamoDB, PK + SK only, no GSI/LSI): single table.
- Store registry: PK
STORE, SK<name> - Latest state: PK
S#<store>#LATEST, SK<key> - History entry: PK
S#<store>#HIST#<key>, SK<ULID>, TTL always set to date + 30 days
- Store registry: PK
- Deletes are soft:
delete_store/delete_itemsetdeletedAtandttl = min(existing, now + 7 days)on all affected records; DynamoDB TTL does physical deletion (lag up to ~48 h), so every read filters out soft-deleted and expired-but-not-purged records.create_storeon a soft-deleted name reactivates it;patch_itemon a soft-deleted key starts a fresh life (changed: true). - Validation (settled, security-relevant): store name
^[a-z0-9_-]{3,12}$(lowercase only); item key^[a-zA-Z0-9_|-]{3,32}$(CASE-SENSITIVE — external IDs likesource|ID6HfGmamust not be lowercased); value ≤ 64 KB serialized. The#composite-key separator is excluded from both alphabets by design — do not widen these regexes further. - Region: eu-central-1. Resource prefix:
cds. License: MIT. - Concurrency:
patch_itemusesTransactWriteItemswith a condition on the previous hash PLUS aConditionCheckthat the owning store is still live (closes the patch × delete_store race; port resultstore-missingmaps toSTORE_NOT_FOUND). - MCP layer: stateless — one
McpServer+WebStandardStreamableHTTPServerTransport(enableJsonResponse: true) per request; the Lambda handler converts Function URL events to fetchRequest/Response. Domain errors map to tool errors asCODE: message; unexpected errors are masked asINTERNAL_ERRORand logged without item values. - Telemetry: domain metrics via CloudWatch EMF (
EmfTelemetry, namespaceChangeDetectionStore— keep in sync withAPP_METRICS_NAMESPACEin the api construct):ToolCalls/ToolErrors/InternalErrors(Tool dimension + dimensionless rollup),ChangesDetected/UnchangedCalls,AuthUnauthorized/AuthForbidden. No extra Lambdas — the app Lambda emits EMF log lines. Thecds-healthdashboard (monitoring construct) consumes ONLY constructs'metrics()and carries English how-to-read text per section + a holistic header; 6 alarms (incl.InternalErrors ≥ 1). Per-store granularity would be one addedStoredimension; per-item analysis belongs in Logs Insights over EMF lines, NOT metric dimensions (cardinality cost).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 78 lines · 2,661 tokens per session scan A 2a9c23c164af
change-detection-store-mcp CLAUDE.md is an instructions file published in the GitHub repository psluja/change-detection-store-mcp (0 stars, last pushed 1mo ago), licensed MIT. It adds 2,661 tokens to every session, about $0.0133 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other instructions, from other repositories
next.js AGENTS.md
AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.
codex AGENTS.md
AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
vscode oss-third-party-notices.instructions.md
Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, applying the notice (cutover) and fallback chain (never fail the build).
langchain AGENTS.md
AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.
deepseek-harness AGENTS.md
AGENTS.md instructions for deepseek-ai/deepseek-harness, covering agents.md, pre-stable apis and released session data, repository layout, commands and host sandbox failures.