CIP Kernel MCP Server
Enables querying CIP git repositories to locate kernel branches, fixing commits, and patches across mainline, stable, and CIP branches for security patch implementation.
Provides tools for collecting read-only inventory from a local Linux system, including kernel version, kernel config, loaded modules, and distribution details, to support dependency discovery and CVE triage.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CIP Kernel MCP ServerIs CVE-2024-1234 applicable to my CIP 5.10 kernel?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CIP Kernel MCP Server
An open-source MCP (Model Context Protocol) server engine for Linux system administrators managing systems on CIP super-long-term-support (SLTS) kernels (5.10.x) — built to accelerate dependency discovery and security patch implementation.
1. Motivation
The Civil Infrastructure Platform (CIP) maintains SLTS Linux kernels (currently 5.10.x, supported 10+ years) that power bridges, tunnels, railways, power plants, and other industrial systems. Administrators of these systems face a specific set of hard problems:
Dependency opacity. A production CIP image combines a pinned kernel, distro packages, out-of-tree drivers, firmware blobs, and custom daemons. Answering "what depends on this kernel symbol / library / driver version?" currently requires slow, manual cross-referencing.
Slow CVE triage. A CVE arrives in
kernel-5.10.x. The admin must determine whether the affected subsystem is even enabled in the deployed kernel config, whether a fix is already in a CIP branch, and what backport a custom kernel requires.Fragmented tooling.
cve-trackerdata, NVD, kernel configs,modinfo, SBOM scanners, and patch sets live in disconnected silos.10-year maintenance windows. Long-lived deployments mean patches must be backported, not upgraded — which makes every change riskier and every dependency fact more valuable.
CIP Kernel MCP Server closes this gap by exposing these silos as structured, queryable MCP tools so that any MCP-capable LLM agent (Claude Code, IDE assistants, chat agents) can assist the admin with accurate, machine-verified facts.
Related MCP server: cve-mcp
2. Goals
Give LLM agents fast, structured access to dependency information for systems running CIP 5.10.x kernels.
Help administrators triage CVEs and implement security patches faster and more safely.
Remain fully open source (MIT), community-driven, and vendor-neutral.
Be read-only by default — analysis first; any mutating action is explicit, audited, and gated.
Non-goals
Replacing a package manager, build system, or patch pipeline.
Auto-applying patches to production without human approval.
Supporting non-LTS or non-CIP kernel branches (initially; other SLTS kernels may follow).
3. Core Capabilities (MCP Tools)
Tool | Purpose | Phase |
| Collect a read-only machine inventory: kernel version, config ( | P0 |
| Look up a CVE: kernel.org cve records first (commit-keyed), NVD fallback. Normalized record with affected files, version ranges, and fixing commits. | P0 |
| Two gates: version range (fix already present / not introduced) and config mapping → applicable / not applicable / unknown, always with an evidence chain. | P0 |
| Locate existing fixes: mainline → stable → CIP branches; live linux-cip mirror queries resolve the CIP backports (commit, first tagged CIP release). | P0 |
| Build and query a dependency graph: kernel symbols ↔ modules ↔ drivers ↔ packages ↔ services. | P1 |
| Draft a kernel-rule-compliant backport into a staging directory; conflict report. | P1 |
| Per installed CIP release: fixed vs outstanding CVEs, update recommendation. | P1 |
| Audit kernel config against hardening baselines (CIP hardening guide / IEC 62443). | P2 |
| Emit a CycloneDX/SPDX SBOM of the scanned system, including kernel and module inventory. | P2 |
4. Architecture
Modular engine in five layers, from the MCP runtime to the product surface. Full module catalog, governing rules (R1–R8), and implementation priorities: docs/ARCHITECTURE.md.
flowchart LR
A["MCP Client<br/>Claude Code / IDE / Chat"] -->|MCP stdio / HTTP| B["CIP Kernel MCP Server"]
B --> C["Tool Layer<br/>scan · graph · CVE · patch"]
C --> D[("Local Sysfs / Procfs<br/>Kernel Info & Config")]
C --> E[("Local Cache + Integrity<br/>CVE DB, vulns.git mirror")]
C --> F[("Remote Sources<br/>kernel.org vulns.git,<br/>NVD, cip-kernel git")]
H["Administrator<br/>approves mutating actions"] --> BTransport: stdio (local admin workstation); streamable HTTP team server in P3.
Safety model: tools are read-only by default; no tool touches a running system.
Safety & security model: docs/THREAT-MODEL.md.
5. Security Principles
Read-only by default — inventory and analysis require no privileges beyond reading.
Least privilege — no root requirement for scanning; agents run as a dedicated user.
Explicit approval — every state-changing operation requires a human confirmation step.
Full audit trail — every tool invocation is logged with hash-chained digests of inputs and outputs.
Deterministic outputs — verdicts never guess and always include their evidence chain.
6. Status
Phase P0 (MCP Foundation) — engine implemented:
Engine core: MCP runtime (stdio), hash-chained audit trail, offline-first cache, source-integrity hooks, tool registry.
System inventory: kernel-config fallback chain —
/proc/config.gz→ distro/boot/config-<release>→ IKCONFIG blob extracted from the kernel image (CONFIG_IKCONFIG); disabled options (# CONFIG_X is not set) are normalized to=nso the applicability config gate can rule subsystems out; the resolved source is reported asconfigSource(limitation: compressed bzImage payloads are not unwrapped — such hosts should ship/boot/config-*or enableCONFIG_IKCONFIG_PROC).CVE chain: kernel.org cve records via vulns.git (CVE JSON 5.0: affected files, per-series version ranges from
cpeApplicability, commit-keyed fixing commits) with NVD fallback; a provider that is unavailable (no git CLI, air-gapped host) is skipped.Patch provenance: live linux-cip mirror queries — metadata-only cached clone of the CIP kernel repo; backports matched via the upstream fixing sha (
commit <sha> upstream./Fixes:lines, Rule R4), each reported with the first tagged CIP release containing it (e.g.v5.10.163-cip35) and a browsable commit URL; branches without a backport get an explicit negative signal; degrades to record-derived candidates when offline.Analysis: CVE applicability engine with two evidence-backed gates — version range (fix already present / not introduced) and config/module mapping; patch locator per stable series with CIP backport resolution.
MCP tools:
scan_system,query_cve,find_patches,cve_applicability.CI (Node 20/22: type-check, tests, build), vitest coverage for engine and analysis modules; reproducible installs via package-lock.json,
npm auditclean.
Phase P1 (Security Workflow) — partially implemented:
Dependency Graph (Module A3, Rule R6): New tools
build_dependency_graphandquery_dependency_graphenable impact analysis and dependency chain discovery. The graph is built from kernel config, loaded modules, and known subsystem mappings, with nodes for subsystems, modules, drivers, and symbols. Query types include:impact-analysis(what depends on these nodes?),dependency-chain(what do these nodes depend on?),subgraph(extract subgraph), andpath(find paths between nodes). All results include evidence chains for auditability.Patch Builder (Module W1, Rules R1/R4/R5): New tool
draft_backportcreates kernel-rule-compliant backports into a staging directory. Generates draft patches with proper backport headers (commit <sha> upstream, Rule R4), detects conflicts (version mismatches, refactoring, API changes), and produces conflict reports. Never applies to running system (Rule R1/R5).
Requires the git CLI on the host (for the vulns.git and linux-cip mirrors); the NVD fallback needs no git.
7. Tech Stack
Language: TypeScript (Node.js ≥ 20) — chosen at kickoff; the official MCP SDK is TypeScript-first, giving a single-language engine + provider SDK. Python provider examples may follow in P3.
MCP SDK: official Model Context Protocol SDK (server side, stdio transport).
Data: kernel.org vulns.git mirror + linux-cip mirror (git CLI) + NVD API, behind the offline-first JSON cache.
CI: GitHub Actions on Node 20/22 with vitest.
8. Development
git clone https://github.com/0x00000109/cip-kernel-mcp-server.git
cd cip-kernel-mcp-server
npm install
npm run lint # type-check (tsc --noEmit)
npm test # vitest
npm run build # compile to dist/
npm start # run the MCP server over stdioEnvironment overrides:
CIP_MCP_CACHE_DIR— cache directory (default.cip-mcp-cache)CIP_MCP_AUDIT_LOG— audit log path (default.cip-mcp-audit.log)CIP_MCP_VULNS_DIR— kernel.org vulns.git mirror location (default<cache>/vulns)CIP_MCP_MIRROR_DIR— linux-cip mirror location (default<cache>/linux-cip)CIP_MCP_MIRROR_URL— linux-cip mirror URL override (defaultgit.kernel.org)
8.1 Connecting an MCP client
Build once, then point any MCP-capable client at the server:
npm run build
npx @modelcontextprotocol/inspector node dist/index.jsThe MCP Inspector gives an interactive test harness: connect, list tools, and call scan_system, query_cve, find_patches, cve_applicability directly.
Claude Desktop — add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"cip-kernel": {
"command": "node",
"args": ["/home/admin/cip-kernel-mcp-server/dist/index.js"],
"env": {
"CIP_MCP_CACHE_DIR": "/var/cache/cip-mcp"
}
}
}
}Cursor / other stdio clients — the same mcpServers shape goes in .cursor/mcp.json (project scope) or your client's equivalent.
First queries to try:
scan_system— read-only inventory of the host (kernel, config with resolved source, modules, distro)query_cvewith e.g.CVE-2024-26581— normalized record: affected files, version ranges, fixing commitscve_applicabilitywith the same CVE — verdict + evidence chain against this hostfind_patches— provenance chain: stable fix → CIP backport commit + first tagged CIP release
Note: the server is read-only; cache and audit files are the only things it writes. First calls that hit kernel.org sources clone the mirrors (a few hundred MB of metadata, once) — see the env overrides above to relocate the cache.
Contribution rules: CONTRIBUTING.md.
9. License & Contribution
MIT licensed. Contributions welcome: kernel triage expertise, MCP tool ideas, CVE data quality, and docs for industrial deployment scenarios are the most valuable first contributions.
10. Repository Layout
.
├── README.md
├── CONTRIBUTING.md
├── docs/
│ ├── ARCHITECTURE.md # modular architecture, rules R1-R8, priorities P0-P3
│ └── THREAT-MODEL.md # safety & security model
├── src/
│ ├── index.ts # MCP server entry (stdio)
│ ├── engine/ # L0: types, runtime, audit, cache, integrity, registry
│ ├── providers/ # L1: system inventory, kernel.org cve, NVD, CIP git, cve-service
│ ├── analysis/ # L2: CVE applicability, version ranges, patch locator
│ └── tools/ # L3: MCP tool wiring
├── tests/
└── .github/ # CI workflow, issue templatesAvailable Tools
7 toolsbuild_dependency_graphBuild dependency graphB
Build a dependency graph from the system inventory: kernel config, loaded modules, and known subsystem mappings. Nodes include subsystems, modules, drivers, symbols. Edges represent dependencies, hierarchy, and usage relationships (Module A3, Rule R6).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses what the graph contains (subsystems, modules, drivers, symbols as nodes; dependency, hierarchy, usage as edges), but is silent on operational traits such as whether the build is idempotent, how expensive it is, what it requires as prior state, or where the result is stored.
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 the action and sources, with no filler. The parenthetical '(Module A3, Rule R6)' is cryptic and references undefined labels, costing it a perfect score but not enough to be wasteful.
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?
There is no output schema and no annotations, so the description should ideally cover prerequisites and the shape of the result. It partially compensates by describing node and edge types, but omits whether the graph is persisted, how it is consumed, and what must exist beforehand for the build to succeed.
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?
The schema has zero parameters and 100% coverage, so there is nothing for the description to clarify. The baseline for a no-parameter tool 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 specific verb ('Build') and resource ('dependency graph') and names the data sources (kernel config, loaded modules, subsystem mappings), so the agent knows what it produces. It does not explicitly distinguish itself from the sibling query_dependency_graph, which reads a graph that this tool presumably constructs, leaving the build-vs-query split to inference.
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?
No when-to-use guidance, no prerequisites, and no mention of alternatives. The agent is not told whether scan_system must run first or whether this should be invoked before query_dependency_graph, which is the most natural sibling relationship in this toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cve_applicabilityAssess CVE applicabilityB
Cross-reference a CVE against this system version + config + modules. Two gates: version range (fix already present / not introduced) and config mapping. Verdict always carries an evidence chain (R3).
| Name | Required | Description | Default |
|---|---|---|---|
| cveId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose meaningful behavior: two evaluation gates (fix already present / not introduced, config mapping) and a guaranteed evidence chain on every verdict. It omits auth/permission needs, behavior when the CVE is unknown or the config mapping is absent, and any cost or latency characteristics.
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?
Three tight sentences with the core action front-loaded, followed by the evaluation gates and the output guarantee. The only friction is the unexplained shorthand '(R3)', which costs a little clarity for an agent with no key to the notation.
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 tool with no annotations and no output schema, the description covers the mechanism and one output property (evidence chain) but leaves the verdict shape, possible verdict values, and failure modes undefined. Adequate to call correctly, thin on what comes back.
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 0%, but the single parameter is a self-evident 'cveId' whose format is already pinned by the schema's regex pattern. The description says only 'a CVE', adding no syntax, sourcing, or format guidance beyond the schema, so it neither compensates nor misleads.
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 (cross-reference) and resource (a CVE) and scopes the operation to this system's version, config and modules, which separates it from a plain lookup like query_cve. It does not explicitly name a sibling tool to differentiate against, but the assessment semantics are unambiguous.
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?
Usage is only implied: the two-gate framing (version range, config mapping) tells the agent this is the 'does this CVE affect me' step, presumably after query_cve and before find_patches, but no when-to-use, when-not, or named alternative is given. Nothing is misleading, but nothing routes the agent either.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_backportDraft backport patchA
Draft a kernel-rule-compliant backport into a staging directory. Creates draft patches with proper backport headers (commit upstream, Rule R4). Never applies to running system (Rule R1/R5). Returns conflict report and evidence chain.
| Name | Required | Description | Default |
|---|---|---|---|
| cveId | Yes | ||
| outputDir | No | Output directory for draft patches (default: .cip-mcp-staging) | |
| upstreamSha | Yes | ||
| targetBranch | No | Target CIP branch (e.g., linux-5.10.y-cip) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly does: it discloses it writes only into a staging directory, explicitly never mutates the running system, and returns a conflict report plus evidence chain. Missing are prerequisites, overwrite behavior for an existing staging dir, and any permission requirements, keeping it from a 5.
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?
Three short, front-loaded sentences with no padding: purpose, behavior, return values in that order. The opaque rule identifiers (R4, R1/R5) cost a little clarity without adding length, but the structure is sound.
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 mutation tool with no annotations and no output schema, the description usefully names the return artifacts, which compensates for the absent output schema. It still omits prerequisites (e.g., whether find_patches/scan_system must run first) and what happens with unresolved conflicts, leaving gaps for a write-capable tool.
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 50%: outputDir and targetBranch are documented in the schema, while cveId and upstreamSha are bare. The description's "commit <sha> upstream" hints at what upstreamSha means and the staging wording reinforces outputDir, but cveId and targetBranch semantics are untouched, so it adds only marginal meaning.
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 (draft) plus resource (kernel-rule-compliant backport) and the destination (staging directory), with concrete outputs named (conflict report, evidence chain). It is unmistakably distinct from the query/dependency siblings, but never names or contrasts any sibling explicitly, so it stops short of a 5.
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?
"Never applies to running system (Rule R1/R5)" is a genuine exclusion, telling the agent this cannot be used to activate changes. However there is no positive when-to-use guidance and no routing relative to find_patches or scan_system, which an agent would need to know whether to run this first or after patch discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_patchesFind patches for a CVEB
Locate existing fixes along the provenance chain: mainline -> stable -> CIP branches. Live linux-cip mirror queries resolve the CIP backports (backport commit, first tagged CIP release, e.g. v5.10.163-cip35); degrades to record-derived candidates when the mirror is unavailable (R1/R2/R4).
| Name | Required | Description | Default |
|---|---|---|---|
| cveId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses live linux-cip mirror queries, backport commit and first tagged CIP release resolution, and graceful degradation to record-derived candidates (R1/R2/R4). It omits permissions and rate limits but is otherwise unusually transparent.
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 dense sentences are front-loaded with the action and provenance chain, then the mirror/fallback behavior. The R1/R2/R4 jargon may require external context, but there is little wasted text.
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 finder tool with no annotations or output schema, the description explains provenance and fallback behavior and hints at return fields (backport commit, first tagged CIP release). However, it leaves cveId format and the full return shape implicit, which are meaningful gaps.
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 0% for the single required cveId parameter, and the description only says 'for a CVE' without adding format, constraints, or examples beyond the schema pattern. It does not compensate for the missing schema documentation.
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 uses a specific verb (Locate) and resource (existing fixes/patch commits) for a CVE, and adds the provenance chain from mainline through stable to CIP branches. It does not explicitly differentiate from siblings like draft_backport, but the purpose is clear.
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 gives no when-to-use guidance, prerequisites, or alternatives. Its fallback statement describes behavior, not when to choose this tool over query_cve or cve_applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_cveQuery CVE recordB
Look up a CVE by id (kernel.org cve records first, NVD fallback). Returns a normalized record with affected files, version ranges, and fixing commits (R1/R3).
| Name | Required | Description | Default |
|---|---|---|---|
| cveId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden. It discloses the source fallback behavior and the shape of the returned record (affected files, version ranges, fixing commits), which is real added context. It does not cover not-found behavior, rate limits, or auth needs, leaving a noticeable gap for a tool with zero annotation coverage.
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 compact sentences, front-loaded with the lookup action and following immediately with the return contract. The trailing '(R1/R3)' is an opaque internal reference that spends tokens without conveying meaning to the agent.
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 correctly fills the gap by enumerating the returned record's contents, and it explains the source resolution strategy. Missing error/not-found semantics and any indication of auth or limits keep it from being fully complete.
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 0%, so the description should compensate. It only says 'by id', and while the schema pattern reveals the expected CVE-YYYY-NNNN format, the description adds no meaning about the identifier beyond that. This is minimum-viable rather than enriching.
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?
Specific verb (look up) plus resource (a CVE by id) with an explicit data-source strategy, so the agent knows exactly what it returns. It does not name or contrast with any sibling (e.g. find_patches, cve_applicability), so it falls short of the 5 bar for sibling differentiation.
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 states a resolution order (kernel.org first, NVD fallback), which is helpful, but that is behavioral rather than usage guidance. There is no statement of when to reach for this tool versus its siblings, nor any prerequisite or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_dependency_graphQuery dependency graphA
Query a dependency graph for impact analysis, dependency chains, or paths. Query types: impact-analysis (what depends on these nodes?), dependency-chain (what do these nodes depend on?), subgraph, path (find paths between nodes). Built from system inventory (Module A3, Rule R6).
| Name | Required | Description | Default |
|---|---|---|---|
| endId | No | End node ID for path queries | |
| nodeIds | No | Node IDs to start from (for impact-analysis, dependency-chain, subgraph) | |
| startId | No | Start node ID for path queries | |
| maxDepth | No | Maximum depth for traversal (default: 10) | |
| queryType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short: it never says the tool is read-only, whether the graph must first be created via build_dependency_graph, or anything about result size, depth limits, or latency. The only extra context is the cryptic provenance note 'Built from system inventory (Module A3, Rule R6)', which does not help an agent invoke it correctly.
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?
Three short sentences, front-loaded with the purpose and followed by the mode enumeration; nothing is padded. The trailing provenance sentence ('Module A3, Rule R6') is of dubious value to an agent and is the one part that does not clearly earn its place.
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 5-parameter tool with no annotations and no output schema, the description should explain the read-only nature, whether the graph must be pre-built, and roughly what comes back. It covers query selection well but leaves these operational questions open, making it only adequate.
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 already 80%, establishing a baseline of 3, and the description adds real meaning by explaining what each queryType value computes and, implicitly, which node parameters pair with which mode. It does not clarify maxDepth behavior or the startId/endId pairing beyond what the schema already states, so it is above baseline but not complete.
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 ('Query a dependency graph') and enumerates the four query modes with parenthetical explanations, so an agent immediately knows what the tool does. It does not explicitly contrast itself with the sibling build_dependency_graph, so the build-vs-query distinction is only implied by the verb.
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 parentheticals ('what depends on these nodes?', 'what do these nodes depend on?', 'find paths between nodes') effectively tell the agent which query type maps to which question. However, there is no statement about when to use this tool at all versus scan_system or build_dependency_graph, and no prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_systemScan system inventoryB
Collect a read-only kernel inventory: version, config, loaded modules, distro. Read-only, least privilege (R2/R3).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose that the operation is read-only and least-privilege (R2/R3), which tells the agent nothing destructive happens. However, it omits execution cost/duration, required permissions or elevation, host scope (local vs remote), and why R2/R3 matters — and 'read-only' is stated twice without added detail.
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 short sentences, front-loaded with the core action before the safety qualifier. Slight redundancy in restating 'read-only' and unexplained jargon '(R2/R3)' cost it a point.
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?
There is no output schema and no annotations, so the description must carry the whole load. It does enumerate what the inventory returns, but leaves the response structure, scope of the scan, runtime, and privilege model (R2/R3 is never explained) unspecified — adequate but with clear gaps for a scan tool.
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?
The tool takes zero parameters, so the baseline is 4; there is no argument syntax to clarify. The enumerated inventory contents describe output rather than inputs, so no further parameter credit is available or needed.
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 concrete verb+resource ('Collect a read-only kernel inventory') and enumerates the collected artifacts (version, config, loaded modules, distro), which is far more specific than the sibling tools like query_cve or find_patches. It does not explicitly name or contrast itself with any sibling, so it falls short of a 5.
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?
There is no when-to-use guidance, no prerequisites, and no routing to alternatives. 'Read-only, least privilege' describes a safety property, not usage context, so the agent must infer that this scan should precede cve_applicability or find_patches on its own.
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.
7 tool updates
v0.1.0- First observed
build_dependency_graph - First observed
cve_applicability - First observed
draft_backport - First observed
find_patches - First observed
query_cve - First observed
query_dependency_graph - First observed
scan_system
TDQS
Scored across 7 tools
Each tool maps to a distinct step or resource: inventory (scan_system), CVE lookup (query_cve), fix discovery (find_patches), applicability assessment (cve_applicability), graph build vs. graph query, and drafting (draft_backport). The build/query dependency graph pair is cleanly split by verb, and find_patches vs. cve_applicability are separated by purpose (locate fixes vs. decide applicability). No meaningful overlap remains.
Six of seven tools use a consistent verb_noun pattern (scan_system, query_cve, find_patches, build_dependency_graph, query_dependency_graph, draft_backport). The lone exception, cve_applicability, is noun-only and breaks the verb-first convention, but it is still readable and unambiguous.
Seven tools is well-scoped for a CVE assessment and backport drafting workflow, with each tool earning its place. Nothing feels padded or missing at the count level.
The surface covers the core lifecycle: scan inventory, look up a CVE, find fixes, assess applicability, explore dependencies, and draft a backport. Minor gaps exist around CVE discovery (no way to list/enumerate CVEs affecting a version) and post-draft verification of the staged patches, but agents can work around these.
Maintenance
Related MCP Connectors
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables LLM agents to query Patchwork kernel patches, series, CI checks, and comments via natural language through a read-only MCP server.8MIT
- AlicenseAqualityCmaintenanceUnifies NVD, EPSS, CISA KEV, GitHub Advisory, and OSV into a single MCP server, enabling AI agents to query vulnerability intelligence conversationally with 23 tools for incident response, prioritization, dependency audits, and threat monitoring.41292 npm30MIT
- AlicenseAqualityCmaintenanceEnables MCP-capable LLM clients to perform read-only Linux system observation and OS algorithm experiments by exposing typed tools for memory, filesystem, process, and CPU scheduling data with controlled, safe boundaries.12MIT
- FlicenseBqualityBmaintenanceEnables AI agents to query an air-gapped enterprise knowledge vault via seven MCP tools for deterministic and hybrid retrieval, entity graph traversal, context compression, archive inspection, onboarding scans, and node status.7-