KernelScan
REMOTE · KERNELSCAN.IO · SCANNED AUG 3
Linux kernel CVE analyzer: upload a .config, get a CycloneDX VEX report of affecting CVEs.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 10 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability62
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 1676 tokens (~167/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (10% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · kernelscan.io
claude mcp add --transport http io-kernelscan-kernelscan https://kernelscan.io/mcp/
[mcp_servers.io-kernelscan-kernelscan] url = "https://kernelscan.io/mcp/"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"io-kernelscan-kernelscan": {
"type": "remote",
"url": "https://kernelscan.io/mcp/",
"enabled": true
}
}
} openclaw mcp add io-kernelscan-kernelscan --url https://kernelscan.io/mcp/ --transport streamable-http
mcp_servers:
io-kernelscan-kernelscan:
url: "https://kernelscan.io/mcp/" {
"mcpServers": {
"io-kernelscan-kernelscan": {
"type": "http",
"url": "https://kernelscan.io/mcp/"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +2
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 57
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://kernelscan.io/mcp/
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=kernelscan.io | CN=YE2,O=Let's Encrypt,C=US | 13 Jul 2026 | 11 Oct 2026 | ECDSA 256 | ECDSA-SHA384 | 5358f9ceb19e218e25d2664b7cd1e730d02 |
| SANs: kernelscan.io, www.kernelscan.io | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
DNSSEC insecure
Validation of kernelscan.io. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| io. | present | 57355 | 8 | Verified |
| kernelscan.io. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=2592000 |
| content-security-policy | default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://kernelscan.io/mcp/ | Verified | 200 | |
| http (plaintext) | http://kernelscan.io/mcp/ | HTTPS enforced | 301 | https://kernelscan.io/mcp/ |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
create_product ~301
Create a new product, run analysis, and return its initial stats. ``config_upload_id`` references a previously-staged .config that the caller POSTed to ``/api/configs/uploads`` over plain HTTP — the LLM does NOT emit the config text itself (a real kernel .config is ~100–200 KB and exceeds a single tool-call output budget). Workflow: 1. Caller / wrapper script: ``curl -H "Authorization: Bearer ks_live_..." \ -F "[email protected]" \ https://kernelscan.io/api/configs/uploads`` returns ``{config_upload_id, sha256, size_bytes, expires_at}``. 2. Pass that ``config_upload_id`` into this tool. Uploads are per-user, single-use, and expire 30 minutes after upload. Same tier gates as POST /api/products: free can't create products at all, basic is capped at 3 products, pro at 10. ``factor_ids`` are silently ignored unless the tier allows security factors (``pro``/``enterprise``). Re-using a product name returns 409.
| Name | Type | Req | Description |
|---|---|---|---|
| arch | string | yes | — |
| config_upload_id | string | yes | — |
| description | — | — | — |
| factor_ids | — | — | — |
| kernel_version | string | yes | — |
| name | string | yes | — |
No output schema declared.
No examples provided.
get_cve ~146
Fetch a single Linux kernel CVE by ID (e.g. ``CVE-2024-12345``). No API key required: keyless callers get the public representation of a CVE, but only for CVEs in the public set (recent high-severity); any other id returns ``not found``. Free *keyed* callers get a 404 for CVEs published more than 60 days ago. AI risk-summary / analysis fields are included for any keyed user on CVEs in the public set, and for pro / enterprise on every assessed CVE.
| Name | Type | Req | Description |
|---|---|---|---|
| cve_id | string | yes | — |
No output schema declared.
No examples provided.
get_product ~58
Fetch one product owned by the caller, including the CVE breakdown. Returns 404 (not 403) if the product belongs to another user, so product existence isn't leaked across accounts.
| Name | Type | Req | Description |
|---|---|---|---|
| product_id | string | yes | — |
No output schema declared.
No examples provided.
get_product_vex ~78
Return the CycloneDX 1.6 VEX document for one of the caller's products. Reads from the 24h ProductVexCache; if the cache is empty/expired the next call to ``get_product`` (or the REST endpoint) will regenerate it.
| Name | Type | Req | Description |
|---|---|---|---|
| product_id | string | yes | — |
No output schema declared.
No examples provided.
list_products ~42
List the calling user's products with denormalized analysis stats. Paid plans only (basic / pro / enterprise). Free callers get a clear upgrade message.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | — |
No examples provided.
request_access ~161
Request an invitation to KernelScan from inside MCP (no API key needed). Use this when a keyless caller wants the full service. It records an invitation request and emails a confirmation; an admin reviews it and, if approved, sends an invitation code. This tool does NOT create an account or mint an API key — you finish signup (including accepting the terms) on the website after you receive the invitation. ``email`` is required. ``name`` and ``reason`` are optional context for the reviewer. The response is identical whether or not the email is already known, so it never reveals account state.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | — | |
| name | — | — | — |
| reason | — | — | — |
No output schema declared.
No examples provided.
search_cves ~201
Search Linux kernel CVEs. No API key required: keyless callers get the free public tier — recent high-severity Linux kernel CVEs (capped at 25 results). Free *keyed* callers see only CVEs published in the last 60 days; basic+ keyed callers get the full corpus. ``query`` matches against CVE id and description (case-insensitive). ``severity`` filters by effective severity (``critical``/``high``/``medium``/``low``). ``cvss_min`` filters by effective CVSS score. ``published_after`` (ISO 8601) returns only CVEs newer than that date. Returns up to ``limit`` (max 100) CVEs, newest first.
| Name | Type | Req | Description |
|---|---|---|---|
| cvss_min | — | — | — |
| limit | integer | — | — |
| published_after | — | — | — |
| query | — | — | — |
| severity | — | — | — |
No output schema declared.
No examples provided.
submit_support_report ~220
Send a support / dispute report to KernelScan staff. Use this when an automated CVE or factor assessment looks wrong, or when you need to hand human-needed context back to the team. The caller's API-key user is attached automatically (id, email, plan) so support can look the account up. ``category`` should be one of: - ``cve_assessment`` — wrong AI verdict / CVSS / CWE on a CVE - ``factor_assessment`` — wrong factor verdict for a product - ``bug`` — broken behavior in the API or UI - ``other`` — anything else ``cve_id`` / ``product_id`` / ``assessment_id`` are optional but recommended — they let support jump straight to the relevant row.
| Name | Type | Req | Description |
|---|---|---|---|
| assessment_id | — | — | — |
| category | string | yes | — |
| cve_id | — | — | — |
| message | string | yes | — |
| product_id | — | — | — |
| subject | string | yes | — |
No output schema declared.
No examples provided.
update_product ~172
Update a product owned by the caller. Re-runs analysis if the kernel_version, arch, or referenced .config changed. To change the .config, first POST the new file to ``/api/configs/uploads`` (see ``create_product`` for the curl recipe) and pass the returned ``config_upload_id`` here. Leave ``config_upload_id`` as ``None`` to keep the existing .config. ``factor_ids=None`` leaves factor selections untouched; an empty list clears them. Same tier gates as PUT /api/products/{id}.
| Name | Type | Req | Description |
|---|---|---|---|
| arch | — | — | — |
| config_upload_id | — | — | — |
| description | — | — | — |
| factor_ids | — | — | — |
| kernel_version | — | — | — |
| name | — | — | — |
| product_id | string | yes | — |
No output schema declared.
No examples provided.
whoami ~49
Return the caller's identity, plan, and quota state. Works without an API key: keyless callers get a lightweight public-tier payload (no account) describing how to request access.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.