Atlas / MCP servers / eshanprakash / openhammer-api

openhammer-apiSAFE

mcp/eshanprakash/openhammer-api

Comprehensive Warhammer 40K API with 2,748 units across 35 factions and 2 game editions (10th and 11th). Built with FastAPI, featuring 29 endpoints. Also available as a live MCP server.

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
9 9r · 0w · 0d
Transport
streamable-http
License
MIT
Stars
13
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

REST API for Warhammer 40,000 unit data — also available as an MCP server, so Claude (or any MCP client) can query it directly instead of you making manual HTTP calls. Edition-namespaced — currently serving 10th Edition (1,380 units across 35 factions) and 11th Edition (1,368 units across 35 factions).

Live API: https://openhammer-api-production.up.railway.app

Interactive Docs: https://openhammer-api-production.up.railway.app/docs

Live MCP Server: https://openhammer-mcp-production.up.railway.app/mcp

Table of Contents

  • Usage
  • Quick Start (Local)
  • Testing
  • MCP Server
  • API Overview
  • Data Coverage
  • API Endpoints
  • JSON Structure

Usage

All endpoints are namespaced by edition: /v1/{edition}/resource. The root endpoint lists all available editions.

The API is live at https://openhammer-api-production.up.railway.app

Python

import requests

BASE = 'https://openhammer-api-production.up.railway.app'
edition = '10e'

# Get all factions
factions = requests.get(f'{BASE}/v1/{edition}/factions').json()

# Search for Space Marine units
units = requests.get(f'{BASE}/v1/{edition}/units?name=Marine&limit=10').json()

# Get a random unit
random_unit = requests.get(f'{BASE}/v1/{edition}/units/random').json()

JavaScript

const BASE = 'https://openhammer-api-production.up.railway.app';
const edition = '10e';

// Get API statistics
const stats = await fetch(`${BASE}/v1/${edition}/stats`).then(r => r.json());

// Search Necrons units
const units = await fetch(`${BASE}/v1/${edition}/units?faction=Necrons`).then(r => r.json());

curl

BASE="https://openhammer-api-production.up.railway.app"
EDITION="10e"

# Get all factions
curl "$BASE/v1/$EDITION/factions"

# Search for Terminator units
curl "$BASE/v1/$EDITION/units?name=Terminator"

# Get faction de
Read from source at commit 46b05bbb7163OBSERVED · 2026-10-10
02

Exposed tools (9)

9 read · 0 write · 0 destructive.

ToolRiskDescription
compare_unitsreadFetch multiple units by ID for side-by-side comparison. Unknown
faction_detailsreadGet a faction
get_unitreadGet a single unit
list_editionsreadList available Warhammer 40K rules editions (e.g.
list_factionsreadList factions for an edition, optionally filtered by faction_type
random_unitreadGet a random unit, optionally restricted to a faction_type
search_abilities_or_rulesreadSearch unit abilities or special rules by (partial, case-insensitive)
search_unitsreadSearch/filter units. name is a partial, case-insensitive match;
search_weaponsreadSearch for a weapon by (partial, case-insensitive) name and find
03

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
none-observed
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (3)

MEDIUMAuth / authz · mcp.remote_no_auth · CWE-287, CWE-862
streamable-http
Why it matters. a network transport with no auth environment variable found
Fix. require a token
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
requirements-dev.txt
pytest, httpx
Why it matters. 2 requirement(s) not pinned with ==
Fix. pin exact versions
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
requirements.txt
requests, lxml
Why it matters. 2 requirement(s) not pinned with ==
Fix. pin exact versions

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 46b05bbb7163full audit observations/trust-audit/mcp-server/eshanprakash__openhammer-api.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1046b05bbb7163SAFEB89first audit
05

Questions

What is the openhammer-api MCP server?

Comprehensive Warhammer 40K API with 2,748 units across 35 factions and 2 game editions (10th and 11th). Built with FastAPI, featuring 29 endpoints. Also available as a live MCP server.

What tools does openhammer-api expose?

9 in total: 9 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is openhammer-api safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does openhammer-api need?

No credential environment variables were found in its source, so it appears to need none.

How does openhammer-api run?

It speaks streamable-http, so it runs as a service you connect to over the network.

How current is this page?

The grade is for one exact copy of the source (46b05bbb7163), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement