Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

Run security checks against your own MCP server in CI, and see the findings in GitHub

Description and use

The protocolprobe-selftest tool runs your own MCP server, connects as a client, performs runtime checks, and outputs results that can be integrated into GitHub Actions via SARIF.

Problem

Most MCP security tooling only reads server tool descriptions and cannot observe actual runtime behavior of a server when a client calls it.

Outcome

The tool provides a runtime check of an MCP server, reporting passed, failed, and not-run checks, and can integrate findings into GitHub code scanning via SARIF.

Workflow

  • 1. Install the tool via npx protocolprobe-selftest.
  • 2. Run the tool with --i-own-this-server and --stdio followed by the server command (e.g., node ./dist/server.js).
  • 3. For mutating or fuzzing checks, add --allow-mutating and --allow-fuzzing and output to a JSON file.
  • 4. In CI, add --fail-on-finding and --sarif to generate a SARIF file and fail the job on vulnerabilities.
  • 5. Upload the SARIF file with github/codeql-action/upload-sarif@v3 using if: always() to ensure upload even on failures.
  • 6. For deployed servers, use --url to prove ownership, add the proof line to the server’s instructions, and re-run within 30 minutes.

Evidence

Most MCP security tooling reads a server's tool descriptions. That finds text that looks suspicious. It does not tell you what your server does when a client calls it.

Source

This post is about a small command-line tool that does the second thing, for a server you run: it starts your server, connects as an MCP client, calls it, and reports what it observed.

Source

npx protocolprobe-selftest --i-own-this-server --stdio node ./dist/server.js

Source

--fail-on-finding makes the job exit with code 5 when a check needs attention (VULNERABLE or FOUND). Without it the exit code is 0 whatever the result.

Source

I have not run this exact workflow end to end for this post; the command line and the exit-code behaviour are from the tool's tests and documentation.

Source

  • Record date: 2026-11-02T04:14:09.757Z