Skip to main content
Glama

SDLC Code Integrity

MCP server for enterprise SDLC code integrity. AI coding agents call its tools over the Model Context Protocol to scan a workspace for lifecycle teardown gaps, mock-theater tests, DRY violations, and language-specific safety issues in shell, JavaScript/HTML, and Python.

npm CI License: MIT

Quick start

Set SDLC_WORKSPACE to the absolute path of the repo to audit. If omitted, the server uses its process working directory. The server speaks MCP over stdio (no HTTP port).

Cursor

Add to ~/.cursor/mcp.json or the project .cursor/mcp.json:

{
  "mcpServers": {
    "sdlc-integrity": {
      "command": "npx",
      "args": ["-y", "@asobacloud/sdlc-integrity-mcp"],
      "env": {
        "SDLC_WORKSPACE": "/absolute/path/to/your/repo"
      }
    }
  }
}

Restart Cursor (or reload MCP servers), then ask the agent to run the integrity tools.

Claude Code

CLI (user scope):

claude mcp add --transport stdio --scope user \
  --env SDLC_WORKSPACE=/absolute/path/to/your/repo \
  sdlc-integrity -- npx -y @asobacloud/sdlc-integrity-mcp

Or put the same JSON under mcpServers in project .mcp.json (team-shared) or ~/.claude.json (user-wide):

{
  "mcpServers": {
    "sdlc-integrity": {
      "command": "npx",
      "args": ["-y", "@asobacloud/sdlc-integrity-mcp"],
      "env": {
        "SDLC_WORKSPACE": "/absolute/path/to/your/repo"
      }
    }
  }
}

Verify with claude mcp list. Project .mcp.json servers need approval the first time you open the repo in Claude Code.

Codex

CLI:

codex mcp add sdlc-integrity --env SDLC_WORKSPACE=/absolute/path/to/your/repo -- npx -y @asobacloud/sdlc-integrity-mcp

Or edit ~/.codex/config.toml (or project .codex/config.toml in a trusted project):

[mcp_servers.sdlc-integrity]
command = "npx"
args = ["-y", "@asobacloud/sdlc-integrity-mcp"]

[mcp_servers.sdlc-integrity.env]
SDLC_WORKSPACE = "/absolute/path/to/your/repo"

Codex CLI, the IDE extension, and the ChatGPT desktop Codex host share this config.

Run directly

npx -y @asobacloud/sdlc-integrity-mcp

Related MCP server: aegis

Tools

Tool

Runtime

What it checks

AuditCodeIntegrity

python3

Lifecycle teardown parity, mock-theater test detection, naming invariants, swallowed exceptions, DRY / duplicative functions. Returns structured JSON.

ShellSafetyChecker

bash

Missing set -euo pipefail, shebang issues, hardcoded credentials, background-job silent-failure risk; optionally shellcheck errors.

JsSafetyChecker

node

JS/HTML syntax errors, duplicate function definitions, duplicate HTML element IDs (AST-based via esprima).

PythonSafetyChecker

python3

bandit (High/Critical), ruff, AST checks for eval/exec, pickle loads, hardcoded credentials, mutable default args.

Each tool accepts:

  • target — file or directory to scan (relative paths resolve against SDLC_WORKSPACE)

  • timeout — optional timeout in ms (default 120000, max 600000)

Checker exit code 1 (findings) becomes isError: true on the MCP result. Unexpected crashes are reported as errors.

Requirements

Runtime

Required for

Node.js ≥ 22

MCP server + JsSafetyChecker

Python 3

AuditCodeIntegrity, PythonSafetyChecker

bash

ShellSafetyChecker

Optional (skipped with a warning if missing):

Tool

Improves

shellcheck

ShellSafetyChecker

bandit

PythonSafetyChecker

ruff

PythonSafetyChecker

Custom rules

Drop JSON tool configs into <workspace>/.sdlc-rules/. Local rules override bundled tools with the same name, or add new ones. Script paths resolve relative to .sdlc-rules/.

{
  "name": "MyCustomAudit",
  "description": "Project-specific integrity check",
  "input_schema": {
    "type": "object",
    "properties": {
      "target": { "type": "string", "description": "File or directory to scan" },
      "timeout": { "type": "integer", "description": "Timeout in ms (max 600000)" }
    }
  },
  "execution": {
    "runtime": "python3",
    "script": "./my-audit.py",
    "args": ["--target", "{{target}}"],
    "default_timeout": 120000,
    "max_timeout": 600000
  }
}

{{placeholder}} values are filled from the tool call. If a value is omitted, that flag and its placeholder are skipped.

Architecture

rules/*.json   → tool schemas + execution specs
scripts/*      → checker subprocesses
src/loader.ts  → bundled rules + .sdlc-rules/ overlay
src/runner.ts  → spawn, timeouts, exit-code → isError
src/index.ts   → MCP stdio server
bin/cli.js     → npx / bin entrypoint

Development

git clone https://github.com/AsobaCloud/sdlc-integrity-mcp.git
cd sdlc-integrity-mcp
npm install
npm run build
npm test

Script

Purpose

npm run build

Compile TypeScript → dist/

npm test

E2E via real MCP Client + fixture assertions for all tools

npm start

Run the server on stdio

npm run dev

node --watch on dist/

Local MCP config (instead of npx):

{
  "mcpServers": {
    "sdlc-integrity": {
      "command": "node",
      "args": ["/absolute/path/to/sdlc-integrity-mcp/dist/index.js"],
      "env": {
        "SDLC_WORKSPACE": "/absolute/path/to/your/repo"
      }
    }
  }
}

Releasing

CI runs build + E2E on every push/PR. To publish a new version:

  1. Bump version in package.json

  2. Commit, push, and create a GitHub Release (gh release create vX.Y.Z --generate-notes)

  3. .github/workflows/publish.yml publishes to npm (Trusted Publisher / OIDC, or NPM_TOKEN if configured)

License

MIT © Asoba

Available Tools

4 tools
AuditCodeIntegrityA

Run the code integrity auditor (lifecycle teardown parity, mock-theater test detection, naming invariants, swallowed exceptions) against a file or directory. Returns structured JSON findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoFile or directory to audit (default: cwd)
timeoutNoTimeout in ms (max 600000)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are present, so the description must disclose safety and side effects. It mentions returning structured JSON findings and lists checks, but does not state whether the tool is read-only, whether it modifies files, or any permission requirements. Behavioral details beyond the basic function are absent.

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, front-loaded sentence with the verb and resource first, followed by a compact parenthetical list of checks. It provides all essential information without wasted words.

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?

With no output schema or annotations, the description should compensate by explaining the return structure or behavioral constraints. It only says 'structured JSON findings', which is vague. The check list adds context but does not fully prepare the agent for expected outputs or side effects.

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 for the two parameters is 100%, so the description adds no significant meaning beyond the schema. The 'file or directory' phrase mirrors the target description, and no additional syntax or parameter-specific guidance is provided.

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 uses a specific verb 'Run' and identifies the resource as 'code integrity auditor', listing concrete check categories (lifecycle teardown parity, mock-theater test detection, naming invariants, swallowed exceptions) and targets (file or directory). This clearly distinguishes it from the sibling safety checkers.

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 usage for auditing code integrity but provides no explicit when-to-use guidance, alternatives, or exclusions relative to sibling tools like JsSafetyChecker. It only states the input target, not when to choose this tool over others.

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

JsSafetyCheckerA

Run the JavaScript safety checker (AST-based duplicate function, duplicate HTML ID, syntax errors) against a file or directory. Returns findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoTarget directory or file to scan (default: cwd)
timeoutNoTimeout in ms (max 600000)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior. It mentions the type of analysis (AST-based) and that it returns findings, which suggests a non-mutating, read-only check. However, it does not explicitly state that it does not modify files, nor does it describe any side effects, rate limits, or other behavioral nuances.

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, front-loaded sentence that conveys the tool's purpose, method, target, and output in a compact form. Every word is informative and there is no redundancy.

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?

The tool is simple, with two well-documented parameters and no output schema. The description says 'Returns findings' but does not specify the structure or format of the findings, which is a minor gap given no output schema exists. Otherwise, it is complete for the tool's complexity.

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 100% coverage with descriptions for both parameters (target and timeout). The description only repeats the 'file or directory' target scope, adding no significant meaning beyond the schema. This meets the baseline but does not elevate it.

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 uses a specific verb ('Run') and clearly identifies the resource (JavaScript safety checker) and its specific AST-based checks (duplicate function, duplicate HTML ID, syntax errors). This distinguishes it from sibling tools like PythonSafetyChecker and ShellSafetyChecker.

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 clearly implies that this tool is for scanning JavaScript files/directories, which gives clear context. However, it does not explicitly mention when not to use it or point to alternatives (e.g., 'use PythonSafetyChecker for Python'), so it lacks explicit exclusion guidance.

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

PythonSafetyCheckerA

Run the Python safety checker (bandit security issues, ruff style/lint issues, AST mutable default arg checks) against Python files. Returns findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoTarget directory or file to scan (default: cwd)
timeoutNoTimeout in ms (max 600000)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that it 'runs' the checker and 'returns findings', which implies a read-only analysis, but it does not explicitly say it does not modify files. It also does not describe the output format or potential error conditions. It does add useful context about the specific checks performed, but leaves ambiguity about non-destructive behavior.

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 concise, consisting of two sentences that are front-loaded with the tool's purpose. Every piece of information (the types of checks and the fact that findings are returned) earns its place. There is no redundant or filler content, making it highly efficient.

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 the tool's simplicity (two optional params, no required params, no output schema), the description is sufficiently complete for an agent to understand what it does and what to expect. It covers the purpose and the high-level result ('Returns findings'), though it does not detail the findings' structure. Annotations are absent, but the description compensates with specifics about the checks performed. It is adequate for selection and invocation.

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 covers both parameters (target, timeout) with descriptions, achieving 100% coverage. The tool description does not add any additional meaning beyond the schema; it only mentions the target implicitly through 'against Python files'. Since the schema already explains the parameters, the description provides no extra semantic value, aligning with the baseline score of 3.

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 runs a Python safety checker, specifying the exact checks (Bandit security, Ruff style/lint, AST mutable default args) and that it targets Python files. The verb 'Run' specifies the action, and the resource is the Python checker. This effectively distinguishes it from sibling tools that target other languages.

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 implies usage for Python files, which is the clear context. It does not explicitly state when not to use it or name alternatives, but the sibling tools (JsSafetyChecker, ShellSafetyChecker) and the direct mention of 'Python files' provide enough situational guidance. There are no exclusions or prerequisites, making it a clear context without full when/when-not articulation.

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

ShellSafetyCheckerA

Run the shell safety checker (missing set -euo pipefail, background job silent failure risk, hardcoded credentials) against shell scripts. Returns findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoTarget directory or file to scan (default: cwd)
timeoutNoTimeout in ms (max 600000)

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It discloses the specific checks and states 'Returns findings,' which implies a read-only analysis. However, it does not explicitly state non-destructive behavior, permission requirements, or failure modes, which is a gap given zero annotation support.

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 that front-loads the action, packs the key checks into a parenthetical, and concludes with the outcome. No wasted words or redundant content.

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 the tool's scope and checks, but since there is no output schema, the vague 'Returns findings' fails to explain the return format or structure. For a checker tool with zero annotations and output schema, this leaves a notable gap in completeness.

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 descriptions for both parameters (target and timeout), and the description adds no extra parameter semantics. Baseline 3 is appropriate because the schema does the heavy lifting.

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 ('Run the shell safety checker'), the resource ('shell scripts'), and enumerates the specific checks performed. The mention of shell scripts distinguishes it from sibling JS/Python safety checkers.

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 'against shell scripts,' which clearly implies when to use this tool over the JS/Python siblings. However, it does not explicitly name alternatives or provide exclusion criteria, so it stops short of full guidance.

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.

  1. 4 tool updatesv1.0.0
    • First observedAuditCodeIntegrity
    • First observedJsSafetyChecker
    • First observedPythonSafetyChecker
    • First observedShellSafetyChecker

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct file type or aspect: general code integrity, JavaScript, Python, and shell. No overlap in purpose or input scope.

Naming Consistency5/5

All four tool names follow a consistent CamelCase pattern with a clear suffix 'Checker' or 'Audit' indicating the tool's function. Consistent across the set.

Tool Count5/5

Four tools is well-scoped for a code integrity/safety server: one general auditor and three language-specific checkers. No redundancy or bloat.

Completeness4/5

Covers the core languages likely targeted (JavaScript, Python, Shell) plus a general audit. Minor gaps like HTML/CSS checkers exist but the set is coherent for a focused integrity auditor.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP security server for AI coding agents. 12 tools: pre-install guardian, vulnerability audit, supply-chain attack detection via static code analysis, and CycloneDX 1.6 SBOM generation. Zero runtime dependencies.
    14
    39 npm
    15
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enforces repository governance rules for AI coding agents, providing tools to validate plans, diffs, and scan for architectural and safety violations.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server that enables AI coding assistants to audit repositories against engineering rules, generating self-contained HTML reports with citations and optional GitHub issue filing.
    10
    1
    Apache 2.0