Skip to content
HodeiShield®

API, CLI and MCP: your risk data, read-only.

A public, versioned REST API at api.hodeishield.com, an open-source CLI and a hosted MCP server that consumes it. No developer surface changes your tenant's data.

  • API keys with scopes, or OAuth 2.1 with PKCE.
  • Apache-2.0 CLI with Sigstore signatures and SLSA provenance.
One call, end to end
curl -H "Authorization: Bearer $HODEISHIELD_API_KEY" "https://api.hodeishield.com/v1/vendors?per_page=5"
Response shape (structure only, no data)
{
  "data": [ … ],
  "pagination": {
    "page": 1, "per_page": 5,
    "total": …, "total_pages": …
  }
}

Five surfaces, one contract

All of them read your tenant's data. None of them writes.

REST API /v1

GET operations over vendors, alerts, risks, compliance, evidence and endpoints. It is the base of the CLI and the MCP server.

  • 11 read-only operations and an OpenAPI document at /v1/openapi.json.
  • Any method other than GET returns 405.

Scope: It accepts no writes to the tenant.

hodeishield CLI

Linux x86_64 and arm64 · macOS universal · Windows x86_64

The official command-line client, for terminals and scripts.

  • Apache-2.0, version 0.3.1 (0.x: commands and output may still change).
  • Every release is signed with Sigstore and carries SLSA provenance.
  • Support for 5 years per major version, counted from 1.0.0; end of support is announced 12 months in advance.
  • The 0.x series gets security fixes in its latest release; security updates remain available after a subscription lapses.

Scope: Read-only. Install it with Homebrew (macOS and Linux), with Scoop (Windows) or from the release archive.

Hosted MCP server

https://mcp.hodeishield.com/mcp

Your AI assistant reads your data through the MCP protocol, with nothing to install.

  • 11 read-only tools, one per /v1 operation.
  • OAuth 2.1 with PKCE and single-tenant sessions.

Scope: It changes nothing. Results come wrapped in a prompt-injection envelope.

Outbound webhooks

Your HTTPS endpoint receives the tenant's events according to your routing rules, signed with HMAC-SHA256.

  • A timestamped signature lets you detect replays.
  • Up to six delivery attempts (five retries) if you do not answer with 2xx.

Scope: It is an alert destination: it notifies, and runs nothing in HodeiShield.

API: authentication, scopes and operations

Each key belongs to one tenant and carries only the read scopes it needs.

How it authenticates

An administrator creates the key in the console, with a name, an expiry and only the scopes needed. The token (hsk_…) is shown once. To act as a specific person, from the CLI or an assistant for example, you use OAuth 2.1 with PKCE.

supply_risk:read
Vendors, alerts and risks
compliance.<framework>:read
Controls and posture of one framework
evidence:read
Evidence
endpoints:read
Machines with the agent

Responses and errors

Collections accept page (from 1) and per_page (1 to 200, 50 by default) and return data and pagination. Errors always use the same envelope, with a request_id for support.

A first read

curl -H "Authorization: Bearer $HODEISHIELD_API_KEY" "https://api.hodeishield.com/v1/vendors?per_page=5"

OpenAPI document (no authentication)

curl https://api.hodeishield.com/v1/openapi.json

The document generated at /v1/openapi.json is the authoritative source; use it to generate typed clients.

Operations

OperationRequestScope
VendorsGET /v1/vendors · /v1/vendors/{id}supply_risk:read
AlertsGET /v1/alerts · /v1/alerts/{id}supply_risk:read
RisksGET /v1/risks · /v1/risks/{id}supply_risk:read
Compliance controlsGET /v1/compliance/controls?framework=…compliance.<framework>:read
Framework postureGET /v1/compliance/frameworks/{framework}compliance.<framework>:read
EvidenceGET /v1/evidence · /v1/evidence/{id}evidence:read
EndpointsGET /v1/endpointsendpoints:read
OpenAPI documentGET /v1/openapi.jsonnone

CLI: install, verify and read

Install it with Homebrew or Scoop, or download the archive for your platform from the published release, verify it and put it on your PATH.

Install

Homebrew (macOS and Linux) and Scoop (Windows x86_64) install version 0.3.1 from public Hodeitek repositories. The Windows executable is signed with Authenticode; the macOS one is not yet.

Homebrew (macOS and Linux)

brew install hodeitek/hodeishield/hodeishield

Homebrew, if you already added the tap

brew trust --formula hodeitek/hodeishield/hodeishield

Scoop (Windows)

scoop bucket add hodeishield https://github.com/Hodeitek/scoop-hodeishield; scoop install hodeishield

Verify the download

Every release publishes SHA256SUMS, a Sigstore bundle per archive and the SLSA provenance; from version 0.2.0 it also publishes a CycloneDX SBOM per archive. Archives are .tar.gz on Linux and macOS and .zip on Windows. A valid cosign signature proves the file was built by the repository's release.yml workflow, run by the exact tag you expect.

sha256sum --ignore-missing -c SHA256SUMS
cosign verify-blob hodeishield-0.3.1-x86_64-unknown-linux-musl.tar.gz --bundle hodeishield-0.3.1-x86_64-unknown-linux-musl.tar.gz.sigstore.json --certificate-identity https://github.com/Hodeitek/hodeishield-cli/.github/workflows/release.yml@refs/tags/v0.3.1 --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-github-workflow-trigger push

Platforms

  • Linux x86_64 (musl)
  • Linux arm64 (musl)
  • macOS, Apple silicon and Intel
  • Windows x86_64

You can also build from source with cargo install --locked, pinning the release tag.

Use it

--json prints the API body unchanged; --csv prints lists as CSV; --all walks every page. Exit codes run from 0 to 8 and tell apart, for example, a missing credential, a missing scope, a rate limit and a tenant licence not in force.

With an API key (scripts, CI)

export HODEISHIELD_API_KEY=hsk_...

As a person (browser, 2FA, passkey or SSO)

hodeishield login
hodeishield whoami
hodeishield vendors list --criticality critical
hodeishield compliance posture nis2
hodeishield alerts list --status open --all --json | jq -r '.[] | [.severity, .title] | @tsv'

MCP: connect your assistant

A hosted server, nothing to install. The assistant sees what you would see in the tenant you choose, and only with the scopes you grant.

How it connects

In an MCP client that supports remote servers with OAuth, add a connector with this URL. The client discovers the authorization server on its own; you sign in at app.hodeishield.com with your usual factors and choose a single tenant.

MCP server URL

https://mcp.hodeishield.com/mcp

Eleven read-only tools

  • list_vendors
  • get_vendor
  • list_alerts
  • get_alert
  • list_risks
  • get_risk
  • list_compliance_controls
  • get_framework_posture
  • list_evidence
  • get_evidence
  • list_endpoints

None accepts a tenant identifier as a parameter: there is no way to ask for another tenant's data.

Security model

  • Every result comes in an envelope that marks it as tenant data, never as an instruction for the assistant.
  • The text in a vendor record, a piece of evidence or a note was written by a person or a third party. A language model can treat it as a command: review, with other tools, any action the assistant proposes from it.
  • The log records which tool was called and its technical outcome, never the arguments, the results or your token.
  • The server applies its own per-user rate limit.

HMAC-signed webhooks

Always verify the signature before processing the body, and reject old timestamps.

Headers on every delivery

X-HodeiShield-Timestamp
Timestamp in seconds; different on every attempt.
X-HodeiShield-Signature-256
sha256= plus the HMAC-SHA256 of "{timestamp}.{body}" with the secret.
X-HodeiShield-Delivery
Identical across every retry of one delivery; use it to deduplicate.
X-HodeiShield-Event
Event type.

The secret (whsec_…) is shown once when you create the webhook; if you lose it, rotate it. If your endpoint does not answer 2xx, delivery is attempted up to six times in all (five retries, from 5 minutes up to 24 hours apart); once attempts are exhausted the delivery is marked failed in the console and you can requeue it.

Verification (Python)

import hashlib
import hmac

def is_valid(secret: str, timestamp: str, body: bytes, received_signature: str) -> bool:
    message = f"{timestamp}.".encode() + body
    expected = "sha256=" + hmac.new(secret.encode(), message, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, received_signature)

Verify an attestation offline

The verifier is a bash and Python script you can read in full. It makes no call to HodeiShield at verification time.

Scope: It proves the integrity, origin and time of what was signed. It does not prove the claims are true, it does not replace an audit, and there is no transparency log. Always pass --expect-slug and --expect-issuer: without them a valid attestation of a different organisation verifies just as well. The exit code is 0 if it verifies, 1 if it fails and 2 if it could not be checked. A genuine but expired document exits 1 and its last line starts with "EXPIRED — the signature is valid".

Requirements: bash 4, OpenSSL 3.5 or later, and python3. If your machine lacks them (macOS, Windows or Ubuntu 24.04), the verifier repository documents how to run the same script in a container with Docker or Podman; that route installs OpenSSL and python3 on start, so it needs network access.

curl -s https://app.hodeishield.com/api/public/attest/keys -o keys.json
./verify-attestation.sh --attestation attestation.json --jwks keys.json --expect-slug SLUG --expect-issuer https://app.hodeishield.com

What these surfaces do not do

So you do not find out while integrating them.

  1. They do not write

    The API, CLI and MCP are read-only. To act on the tenant you use the console, and ACT always goes through a person.

  2. The CLI is 0.x

    Commands and output may change before 1.0. Pin the version in your scripts.

  3. MCP depends on your client

    The server cannot control what your client does with the results. Treat third-party text inside them as untrusted.

  4. Access depends on licence and tenant

    Availability of the API and MCP depends on your licence and is confirmed per tenant; we cover it in the demo.

  5. No performance figures

    We publish no SLA, response times or API availability on this site.

  6. The data is not real time

    The API returns what the platform has already collected: the agent reports per cycle and scans are periodic.

Integration questions

What a technical team usually asks before starting.

Can I write data with the API?

No. The /v1 API is read-only: any method other than GET returns 405. The CLI and the MCP server use it, so they do not write either.

How do I authenticate a script or a CI pipeline?

With a tenant API key (hsk_…) created by an administrator with only the read scopes needed. In the CLI, exporting HODEISHIELD_API_KEY is enough.

How do I know the CLI I download is the official one?

Every release publishes SHA256SUMS, Sigstore bundles and SLSA provenance. Use cosign to check that the archive was built by the repository's release.yml workflow for the exact tag.

What does my assistant see through the MCP server?

What you would see in the single tenant you choose when you grant access, and only with the scopes you grant. No tool accepts a tenant identifier.

Can I verify an attestation without an account?

Yes. Download the public key from /api/public/attest/keys and run the open-source verifier. It works offline with bash 4, OpenSSL 3.5 and python3, or in a container with Docker or Podman.

Plug HodeiShield into what you already run

In the demo we look at what to read through the API, CLI or MCP, and how it fits your alerts and pipelines.

A working conversation, no commitment.