opsecforge-mcp
OpsecForge
OpsecForge is a Next.js site for privacy-first developer and security utilities. Its core product boundary is simple: values pasted into a tool are processed in the loaded browser page, not sent to an OpsecForge tool-processing backend.
MCP server for coding agents: opsecforge-mcp
This repository also contains a local Model Context Protocol (MCP) server in packages/opsecforge-mcp. It runs over stdio, is built with the official MCP TypeScript SDK (@modelcontextprotocol/sdk), and reuses the same tested code in lib/ that powers the browser tools. It makes no network requests.
The agent passes a file path or an environment variable name; the work happens on your machine and only redacted or derived results reach the model. MCP tools:
redact_file: read a local text file and return it with secrets replaced by[REDACTED], plus a findings summary.scan_secrets: pre-commit check of files, directories or staged changes; returnsfile:lineand the secret type, never the value.redact_text,verify_webhook,inspect_jwt,file_checksum.
Install from npm (opsecforge-mcp, MIT; official MCP Registry name io.github.cyberdroid2077/opsecforge):
claude mcp add opsecforge -- npx -y opsecforge-mcpRedaction is heuristic. Setup for Codex, Cursor and the Claude Code plugin (with a guard hook), plus the full limitations, is in the package README and at opsecforge.com/agents.
Related MCP server: ctxbleach
Privacy and analytics boundary
Tool inputs and generated outputs are not sent to OpsecForge analytics.
The public site uses aggregate Vercel Web Analytics for page-view measurement.
The site may load advertising resources.
Browser-local processing reduces an upload path; it does not make tool output correct, safe, or compliant by itself.
Each security-sensitive tool should state its limitations and require appropriate human review.
Never add logging, storage, analytics, error reporting, or network calls that can contain tool input, secrets, tokens, signatures, or generated credentials.
Tools
Try a real workflow
Compare a file checksum: select a file up to 32 MiB, calculate SHA-256 or SHA-512, and compare a trusted publisher's digest. No file upload. A match does not prove the file is safe or authenticate its publisher.
Sanitize a configuration before sharing: mask likely secrets in synthetic test data first. Detection is heuristic; review all output.
Check a webhook signature: compare supplied GitHub, Stripe, or generic HMAC fixtures. Matching supplied values does not replace a production receiver's replay controls.
For a reproducible checksum demo, create a text file containing exactly abc with no newline. Its SHA-256 is ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Change one byte and the digest changes. File names, bytes, and digests are not included in analytics. Campaign labels on the public README link describe the distribution channel only.
The /tools hub groups the current utilities into:
Encoding and formatting
Credentials and security
Debugging and validation
The catalog is defined in lib/tool-catalog.ts. Preserve existing public tool URLs unless a reviewed redirect or canonical migration is part of the change.
Development
Requirements: a current Node.js release compatible with the lockfile and npm.
npm install
npm run devBefore publishing:
npm run typecheck
npm test
npm run content:verify
npm run buildThe production build runs content-source verification through prebuild.
Content and security boundaries
Use primary or authoritative sources for incident details, vulnerability status, statistics, standards, and vendor behavior.
Do not invent incidents, identities, credentials, measurements, reviews, certifications, or compliance claims.
Use synthetic fixtures in tests and documentation. Never commit real secrets, production payloads, or customer data.
Keep defensive tools browser-local. Do not add remote scanners, proxy behavior, or requests to user-supplied URLs.
Do not weaken the visible limitations of heuristic tools such as secret redaction.
Governance
Product Charter: the authoritative, stable product and operating constitution.
Operations Log: the chronological record of verified facts, deployments, experiments, measurements, risks, and decisions.
Current growth plan: dated experiments, distribution work, measurable decisions, and outstanding access needs.
When documentation conflicts, follow the hierarchy in the Product Charter and verify behavior against current code and production.
Contributing
Keep changes focused and preserve unrelated work. For a proposed feature or material behavior change, start with an issue describing the user need, privacy boundary, evidence, and test plan. Security reports should use the contact method published on the live site and must not include active credentials or unnecessary sensitive data.
Deployment, analytics access, active experiments, and operating decisions are recorded in the Operations Log.
Available Tools
6 toolsfile_checksumCompute and compare a file checksumARead-onlyIdempotent
Computes the SHA-256 or SHA-512 digest of a local file (regular file, up to 32 MiB) and optionally compares it with an expected value. A match proves only that the file equals whatever the expected value was taken from, so it is only as trustworthy as the source of that value.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path of the file to hash (regular file, up to 32 MiB). | |
| expected | No | Optional expected digest (hex; "sha256:<hex>" and sha256sum-style "<hex> name" are accepted) to compare against. | |
| algorithm | Yes | Digest algorithm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description goes further by disclosing the input constraint (regular file, ≤32 MiB) and the important epistemic limitation of a successful match, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool does, and the second sentence is a substantive caveat rather than filler. No redundancy with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read-only tool with full schema coverage and complete annotations, the description supplies the needed behavioral context; there is no output schema, so return-value explanation is not owed. It could mention what is returned when expected is supplied (e.g., match/mismatch), but the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (path, expected, algorithm) are already documented in the schema, including the accepted expected-digest formats and the enum values. The description only restates the algorithm options and the size limit, adding no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Computes the SHA-256 or SHA-512 digest of a local file') plus the optional comparison behavior, and scopes the input (regular file, up to 32 MiB). Nothing about it could be confused with the redaction, secret-scanning, or webhook siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (hashing a file and optionally checking it against an expected digest) and adds a trust caveat about what a match proves, but it never states when to reach for this tool versus alternatives or what the prerequisites are. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_jwtDecode a JWT and flag risksARead-onlyIdempotent
Decodes a JWT locally and returns its header, claims (field values whose names look like secrets are masked), time-claim status (exp, nbf, iat) and risk notes such as alg none, HMAC algorithms that cannot be verified offline, missing exp, and jku/jwk/x5u key-injection headers. DECODING IS NOT VERIFICATION: this tool has no key, never checks the signature and cannot tell you the token is genuine. Prefer token_env (the NAME of an environment variable) so the raw token does not pass through the model; a token passed as token is already in the context. The claims returned are in the model context either way.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | The JWT itself. Passing it here puts it in the model context; use token_env when possible. | |
| token_env | No | NAME of an environment variable that holds the JWT. Preferred: the raw token then never passes through the model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the readOnly/idempotent annotations: it states the tool holds no key, never checks the signature, cannot confirm the token is genuine, masks secret-looking claim names, and flags specific risk classes (alg none, HMAC, missing exp, jku/jwk/x5u). It also discloses the side effect that claims end up in the model context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the capability, then the critical non-verification caveat, then the parameter guidance. Every sentence carries a distinct, actionable fact with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully describes the return shape (header, claims, time-claim status, risk notes) and the handling caveat. Nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the two schema descriptions already state the token-in-context tradeoff verbatim, so the description mostly restates structured data. It reinforces the token_env preference but adds no new syntax, format, or constraint beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Decodes a JWT locally') and enumerates the precise output: header, masked claims, time-claim status, and risk notes. An agent can distinguish it from scan_secrets or verify_webhook without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the decoding-vs-verification boundary and steers parameter choice ('Prefer token_env... a token passed as `token` is already in the context'). It stops short of naming a sibling to use instead when actual verification is needed, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redact_fileRedact a local fileARead-onlyIdempotent
Reads a local text file on this machine and returns its content with secrets (API keys, tokens, passwords, private keys, connection-string credentials, JWTs, cookies) replaced by [REDACTED], plus a findings summary (type, count, line numbers). The original values are read inside the local MCP server process only and are never returned, so use this instead of Read or cat for .env files, config files, logs, key files and similar. Pass a path, not file contents. Only regular files are accepted (no directories, pipes or devices), up to 1 MiB, and binary files are refused. The response starts with a notice that the original values did not leave the machine or reach the model. Redaction is heuristic and can miss custom formats.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path of the local text file to read (absolute, relative to the server working directory, or starting with ~/). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, yet the description adds genuinely new behavior: originals are read only inside the server process and never returned to the model, a notice is prepended to the response, size and file-type limits apply, and redaction is heuristic and may miss custom formats. These are exactly the traits annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool does and its safety guarantee before constraints and caveats. Every sentence carries distinct information (output shape, routing, limits, honesty about heuristic gaps); nothing is redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still describes the return value (redacted content plus findings summary and a leading notice), covers the input contract, failure modes (binary, oversized, non-regular files), and the security-relevant limitation of heuristic redaction. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single path parameter is already documented with accepted path forms, so the baseline is 3. The description adds real value by clarifying that a path (not file contents) must be passed and that only regular files within 1 MiB are accepted, tightening how the parameter is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (reads a local text file and returns content with secrets replaced by [REDACTED]) plus the secondary output (findings summary with type, count, line numbers). It also implicitly separates itself from the sibling redact_text by specifying 'Pass a path, not file contents' and from Read/cat by naming them directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('use this instead of Read or cat for .env files, config files, logs, key files') and enumerates when not to (directories, pipes, devices, binary files, files over 1 MiB). The 'pass a path, not file contents' clause routes the agent away from the text-based sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redact_textRedact text already in contextARead-onlyIdempotent
Redacts secrets in text you ALREADY HAVE (for example before pasting logs into an issue, ticket, chat message or commit message) and returns the redacted copy with a findings summary. Honest limitation: the text you pass as the argument is already in the model context, and calling this tool does not remove it from there; it only produces a safer copy to share outward. To avoid putting a secret into the context at all, use redact_file with a path instead. Heuristic: can miss custom formats.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to redact. NOTE: this text is already in your context; see the tool description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, read-only, idempotent operation, but the description adds critical behavioral context: the input text is already in model context and calling the tool does not remove it. It also candidly warns that the heuristic can miss custom formats, which is exactly the kind of limitation an agent needs before trusting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core action and return value, then adds the limitation, alternative, and heuristic in a tight sequence. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with no output schema, the description supplies everything an agent needs: what it does, what it returns, its key limitation, and the path-based alternative. No essential behavior or routing information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the single text parameter. The description and schema both note that the text is already in the model context, but the description does not add format or syntax details beyond what the structured field already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it redacts secrets in text already in context and returns a redacted copy with a findings summary. It clearly distinguishes itself from the sibling redact_file, which is the alternative for avoiding placing secrets into context at all.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases such as redacting before pasting logs into an issue, ticket, chat, or commit message. It also names the alternative and when to prefer it: use redact_file with a path to avoid putting a secret into context in the first place.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_secretsScan files or staged changes for secretsARead-onlyIdempotent
Pre-commit check. Scans files or directories (paths) and/or the lines added in the staged git diff (staged: true) for known secret patterns. Lists only file:line, the secret type and a masked preview (at most the first 4 characters of values of 20+ characters; short values are shown as an ellipsis), never the original value. Provide paths, staged, or both. Heuristic: a clean result is not proof that nothing sensitive is present.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | Files or directories to scan. Directories are walked recursively (skipping .git, node_modules, build output and symlinks; at most 2000 files). | |
| staged | No | When true, scan only the lines added in `git diff --cached` (the staged changes) in the server working directory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds substantive behavior: the output is limited to file:line, type and a masked preview, with exact masking rules (first 4 chars for 20+ char values, ellipsis for short ones). It also warns that a clean result is not proof of safety, which is a meaningful limitation the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the use case, then parameters, then output shape, then the caveat. Every sentence carries information and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the job of describing the return shape — which it does precisely (file:line, type, masked preview) — and it flags the false-negative heuristic limitation. An agent has everything it needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the schema already documents recursion, skips and the 2000-file cap. The description adds a small but real clarification beyond the schema: that paths and staged are combinable ('Provide paths, staged, or both'), removing ambiguity about whether the two parameters are mutually exclusive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Scans files or directories... for known secret patterns') with an explicit positional context ('Pre-commit check'). It is clearly distinguishable from the redact_* and inspect_jwt siblings, which transform or decode rather than detect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context (pre-commit check) and an explicit parameter-combination rule: 'Provide paths, staged, or both.' It does not, however, contrast itself with siblings such as redact_file, which would tell an agent when to scan versus when to redact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_webhookVerify a webhook signature offlineARead-onlyIdempotent
Verifies a GitHub, Stripe or generic HMAC webhook signature locally and explains why a mismatch happened. The signing secret is read ONLY from the environment variable named in secret_env; there is no parameter for a plaintext secret and one is rejected if supplied. The body is read as raw bytes from body_path. Returns match / no match plus diagnostics: whether the signature header is well-formed, whether the Stripe timestamp is outside the tolerance, whether the body looks reformatted (trailing newline, CRLF, re-serialized or pretty-printed JSON) and common secret mistakes (whitespace, wrong key type). It sends nothing over the network and never returns the secret or a computed signature.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | github: X-Hub-Signature-256 (sha256=<hex>). stripe: Stripe-Signature header (t=...,v1=...). generic: plain HMAC over the body, hex (or base64) signature. | |
| algorithm | No | HMAC hash for provider "generic" (default sha256). Not used by github or stripe. | |
| body_path | Yes | Path to a file holding the RAW request body exactly as received (not re-serialized). Read as bytes, up to 10 MiB. | |
| signature | Yes | The signature header value as received. It is not a secret. | |
| secret_env | Yes | NAME of the environment variable that holds the signing secret (for example GITHUB_WEBHOOK_SECRET). Never the secret itself. | |
| tolerance_seconds | No | Stripe only: maximum allowed age of the signed timestamp in seconds (default 300). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-open-world, idempotent and non-destructive, and the description adds substantial context on top: secret sourced only from an env var, plaintext secrets rejected, body read as raw bytes, no network traffic, and neither the secret nor a computed signature is returned. This is exactly the kind of behavior an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by the input contract and then the returned diagnostics. Every sentence carries distinct information with no restatement of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes responsibility for return values and does so explicitly (match/no-match plus well-formedness, Stripe tolerance, body-reformatting and secret-mistake diagnostics). All 6 parameters are documented at 100% coverage and the offline constraint is stated, leaving no material gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by clarifying the non-obvious secret_env indirection (a variable NAME, never the secret, with rejection of plaintext) and the raw-bytes contract for body_path. It adds the environmental/permission constraint that the schema alone cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Verifies a GitHub, Stripe or generic HMAC webhook signature') plus the mode of operation ('locally'). This is clearly distinguishable from siblings like inspect_jwt, file_checksum and scan_secrets without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: offline verification of webhook signatures, with an emphasis on diagnosing why a mismatch happened. It does not name alternative tools or explicit when-not conditions, but the usage scenario is unambiguous.
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.
6 tool updates
v0.1.1- First observed
file_checksum - First observed
inspect_jwt - First observed
redact_file - First observed
redact_text - First observed
scan_secrets - First observed
verify_webhook
TDQS
Scored across 6 tools
Each tool has a distinct action+target (redact text vs. file, verify webhook, inspect JWT, checksum, scan secrets). The only mild overlap is redact_file vs. scan_secrets, both reading local files for secrets, but descriptions clearly separate returning redacted content from reporting findings, so an agent can choose correctly.
Five tools follow a clean verb_noun pattern (redact_text, verify_webhook, inspect_jwt, redact_file, scan_secrets), with only file_checksum deviating into a noun_noun form. Minor inconsistency but overall predictable and readable.
Six focused tools is well-scoped for a security/opsec server, with each tool earning its place across redaction, verification, integrity, and scanning. No bloat or thinness.
The set covers the core opsec lifecycle: scanning, redacting (text and file), verifying webhooks/JWTs, and checksums. Minor gaps remain (e.g., no secret-detection over arbitrary in-context text without redaction, or config-driven allowlist management), but core workflows are complete.
Maintenance
Related MCP Connectors
Ovanek MCP: Model Context Protocol server for Ovanek platform tools; writes are dry-run by default.
MCP server (stdio): lint OpenAPI specs with Spectral via the AgentForge API
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that scans code for security issues (secrets, dependencies, configurations, risky patterns) and integrates with GitHub Copilot in VS Code for automated pre-commit reviews.-
- AlicenseNot gradedqualityCmaintenanceLocal CLI and MCP server that redacts secrets from logs, files, and diffs before sending them to AI agents, with stable placeholders and token-budgeted truncation.MIT
- AlicenseNot gradedqualityFmaintenanceLocal stdio MCP server for working on Intern-hosted sites through guarded Git checkouts. It enables authentication, site preparation, testing, validation, and publishing via coding harnesses like Codex and Claude Code.4 npmMIT
- AlicenseAqualityBmaintenanceLocal MCP server for AI agents and vibe coding safety: deterministic risk checks (payments, auth, database, secrets, infrastructure), sessions, checkpoints, policy inspection, and fix prompts. Runs over stdio against a local git repository; no language model judges risk.8Apache 2.0