AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified Apache-2.0 Self-run

Core Graph

mcp-rmednitzer-core-graph · by rmednitzer

Converged graph + vector knowledge platform on PostgreSQL (Apache AGE + pgvector) for security, threat intel, and AI memory

No reviews yet
0 installs
26 views
0.0% view→install

Install

$ agentstack add mcp-rmednitzer-core-graph

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-rmednitzer-core-graph)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Core Graph? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Core-Graph

A converged graph-vector knowledge platform built on PostgreSQL with Apache AGE and pgvector. Designed for EU-sovereign deployment with security, compliance, and operational assurance as structural properties.

[](https://deepwiki.com/rmednitzer/core-graph)

What it does

core-graph is a canonical convergence point for heterogeneous security and infrastructure data. Satellite systems publish structured entities through NATS JetStream into a PostgreSQL hub where they are stored as a graph (Apache AGE), enriched with vector embeddings (pgvector), and exposed through multiple interfaces.

Data domains (eight ontology layers)

| Layer | Description | Standards | |---|---|---| | Threat intelligence | TTPs, indicators, campaigns, threat actors, malware, vulnerabilities | STIX 2.1, MITRE ATT&CK | | Security events | Normalised alerts and detections from Wazuh, EDR, IDS/IPS | OCSF 1.1 | | OSINT | Feed aggregation, entity extraction, deduplication | STIX 2.1 | | Audit and compliance | Evidence chains, control mapping (NIS2, BSI Grundschutz) | OSCAL | | AI memory | Agent conversation context, reasoning traces, semantic embeddings | MCP-aligned | | Forensic timelines | Bitemporal facts, chain of custody, immutable evidence | CASE/UCO, STIX 2.1 | | Infrastructure and assets | CMDB, network inventory, monitoring alerts | Netbox/Prometheus aligned | | Identity and access management | IAM vertices with TLP:AMBER floor, Keycloak sync | Keycloak/Cerbos aligned |

Interfaces

  • MCP server -- primary AI agent interface (tool-based graph queries, semantic search)
  • REST API -- FastAPI-based CRUD and query endpoints for human consumers
  • TAXII 2.1 -- federated threat intelligence sharing with partner organisations

Status

Alpha: local development stack operational, schema stable, ingest pipeline functional, Helm chart and ArgoCD manifests ready.

Prerequisites

  • Python 3.13+
  • Docker and Docker Compose (for the local dev stack)
  • PostgreSQL 18+ with Apache AGE and

pgvector (provided by the dev stack)

  • NATS Server 2.10+ (provided by the dev stack)

Quick start

git clone https://github.com/rmednitzer/core-graph.git
cd core-graph

# Install Python dependencies
pip install -e ".[dev,test]"

# Start the full dev stack (includes API on :8000)
make up

# Run migrations and load reference data
make migrate
make seed

The dev stack (make up) starts all services including the REST API on :8000. To run services locally instead (e.g. for hot-reload development), stop the stack first and start only infrastructure, then run the API outside Docker:

make down
docker compose -f deploy/docker/docker-compose.yml up -d postgres nats valkey spicedb cerbos minio

make serve          # REST API on :8000 (uvicorn --reload)
make mcp            # MCP server
make graph-writer   # Ingest graph writer

Deployment

Docker Compose (development)

make up       # start
make down     # stop
make reset    # drop + recreate database, re-run migrations and seeds

Helm chart (Kubernetes)

The Helm chart in deploy/k8s/helm/ bundles the API, graph writer, PostgreSQL, NATS JetStream, and Valkey. Each dependency can be disabled to point at external services.

# Lab (bundled dependencies, 2 API replicas)
helm install cg deploy/k8s/helm/

# Production (HA replicas, autoscaling, resource limits)
helm install cg deploy/k8s/helm/ -f deploy/k8s/helm/values-prod.yaml

# External PostgreSQL
helm install cg deploy/k8s/helm/ \
  --set postgres.enabled=false \
  --set postgres.external.host=my-pg.example.com \
  --set postgres.external.password=secret

See deploy/k8s/helm/values.yaml for the full configuration reference.

ArgoCD

Pre-built Application manifests are provided for both environments:

# Lab -- auto-sync, self-heal, CreateNamespace=true
kubectl apply -f deploy/k8s/helm/argocd/application-lab.yaml

# Production -- manual sync, change-control compliant
kubectl apply -f deploy/k8s/helm/argocd/application-prod.yaml

Air-gapped install (Zarf)

Zarf packages the Helm chart and all container images into a single signed tarball for disconnected clusters.

# Build (internet-connected machine)
zarf package create --confirm

# Deploy (air-gapped cluster)
zarf package deploy zarf-package-core-graph-amd64-0.1.0.tar.zst --confirm

# Deploy with production profile
zarf package deploy zarf-package-core-graph-amd64-0.1.0.tar.zst \
  --components="core-graph,prod-profile" --confirm

Architecture

  Satellites             NATS JetStream          Ingest Pipeline
  ----------             --------------          ---------------

  Wazuh (SIEM)    ──┐
  OpenCTI (TIP)   ──┤                        ┌─────────────────┐
  MISP (IOC DB)   ──┼──►  NATS JetStream  ──►│  NER + Entity   │
  OSINT Feeds     ──┤     (at-least-once)     │  Resolution +   │
  Netbox (CMDB)   ──┤                         │  Graph Writer   │
  Prometheus      ──┤                         └────────┬────────┘
  Keycloak (IdP)  ──┘                                  │
                                                       ▼
                                          ┌────────────────────────┐
                                          │    PostgreSQL 18+      │
                                          │  ┌────────┐ ┌────────┐ │
                                          │  │  AGE   │ │pgvector│ │
                                          │  │(graph) │ │(embed.)│ │
                                          │  └────────┘ └────────┘ │
                                          │  RLS · pgAudit · cron  │
                                          │  Bitemporal model      │
                                          └────────────┬───────────┘
                                                       │
                    ┌──────────────────────────────────┼──────────┐
                    │             API Layer            │          │
                    │   Cerbos (ABAC) + SpiceDB (ReBAC)          │
                    ├──────────┬───────────┬─────────────────────┤
                    │ MCP Server│ REST API │ TAXII 2.1           │
                    │(AI agents)│ (humans) │ (sharing)           │
                    └──────────┴───────────┴─────────────────────┘

  Evidence chain: audit_log ──► hash chain ──► MinIO WORM ──► cosign ──► Rekor

Key design decisions

  • PostgreSQL is the core. No Neo4j, no ArangoDB. Apache AGE for graph

(openCypher), pgvector for embeddings (HNSW).

  • NATS JetStream as the message bus. At-least-once delivery, dead-letter

queue with retry and archive.

  • Three-layer authorization: Cerbos (ABAC) evaluates TLP clearance and role

policies, SpiceDB (ReBAC) evaluates compartment membership, PostgreSQL RLS enforces at the engine level. Even buggy application code cannot leak data.

  • Bitemporal model: four timestamps per fact (t_valid, t_invalid,

t_recorded, t_superseded). Facts are invalidated, never deleted.

  • Evidence integrity: append-only audit log, SHA-256 hash chains, Merkle

roots with RFC 3161 timestamps, MinIO WORM storage, cosign signing, Rekor transparency log.

  • EU-sovereign: all infrastructure runs on EU providers (Hetzner, self-hosted

registries). No US cloud dependencies in production.

Development

Make targets

| Target | Description | |---|---| | make up | Start Docker Compose dev stack | | make down | Stop dev stack | | make reset | Drop, recreate, migrate, and seed database | | make migrate | Run numbered SQL migrations | | make seed | Load reference data (MITRE ATT&CK, STIX, roles) | | make serve | REST API on :8000 (uvicorn --reload) | | make mcp | Run MCP server | | make graph-writer | Run graph writer worker | | make psql | Connect to dev database interactively | | make test | Run all tests (pytest + RLS enforcement) | | make integration-test | Run integration tests only | | make lint | Lint Python (ruff) and YAML policies | | make bench | Run performance benchmarks (NER, traversal, throughput) | | make verify-chain | Verify audit log hash chain | | make verify-merkle | Verify Merkle root chain | | make stamp-merkle | Request RFC 3161 timestamps for Merkle roots | | make helm-validate | Lint and template Helm charts | | make deploy-lint | Validate all deployment artifacts |

Running tests

# All tests (unit + RLS enforcement)
make test

# Integration tests (requires running Docker stack)
make integration-test

# Specific test file
pytest tests/skills/test_asset_skills.py -v

# Linting
make lint

Repository layout

core-graph/
├── api/                 API layer
│   ├── rest/            FastAPI REST endpoints + middleware (OIDC, metrics, logging)
│   ├── mcp/             MCP server, skill registry, query templates
│   │   ├── skills/      Skill implementations (asset, compliance, identity, threat)
│   │   └── tools/       MCP tools (cypher query, entity resolve, vector search, ...)
│   ├── taxii/           TAXII 2.1 server for threat intel sharing
│   ├── authz/           SpiceDB (ReBAC) and Cerbos (ABAC) client modules
│   ├── utils/           AGE query guard, Cypher safety validation
│   └── db.py            Shared connection pool (psycopg-pool)
├── ingest/              Ingest pipeline
│   ├── connectors/      Satellite adapters (Wazuh, OpenCTI, MISP, OSINT, Netbox,
│   │                    Prometheus, Keycloak) -- all extend AdapterBase
│   ├── ner/             Named entity recognition (tier 1: regex + STIX patterns)
│   ├── resolver/        Entity resolution and deduplication
│   ├── dlq/             Dead-letter queue processor
│   ├── enrichment.py    ingest.* → enriched.* normalisation (+ enrichment_worker.py)
│   └── graph_writer.py  Batch graph writer with bitemporal versioning
├── schema/
│   ├── migrations/      Numbered SQL files (001_ through 027_), idempotent
│   └── seed/            Reference data (MITRE ATT&CK, STIX vocabularies, roles)
├── policies/            Cerbos YAML policies (threat entities, evidence, incidents, IAM)
├── evidence/            Evidence integrity
│   ├── chain/           Merkle root computation and hash chain verification
│   └── signing/         cosign signing, MinIO WORM storage, RFC 3161 timestamps
├── deploy/
│   ├── docker/          Docker Compose dev stack + hardened PostgreSQL config
│   ├── k8s/             Helm chart, ArgoCD manifests
│   ├── nats/            NATS server config (dev + prod)
│   └── grafana/         Dashboards and provisioning
├── tests/               Schema, RLS, ingest, integration, skills, TAXII tests
├── scripts/             Bootstrap, validation, benchmarks, MinIO init
├── docs/                Architecture, compliance, ontology, operations, runbooks
└── zarf.yaml            Air-gapped deployment package definition

Documentation

Detailed documentation lives in [docs/](docs/):

| Area | Documents | |---|---| | Architecture | [Overview](docs/architecture/overview.md), [Authorization model](docs/architecture/authorization-model.md), [RLS + AGE integration](docs/architecture/rls-age-integration.md), [IAM layer](docs/architecture/iam-layer.md), [Data residency](docs/architecture/data-residency.md) | | ADRs | [0001 Establish ADR practice](docs/architecture/adr/ADR-0001-establish-adr-practice.md), [0002 Hybrid retrieval](docs/architecture/adr/ADR-0002-hybrid-retrieval.md), [0003 Edge TLP denormalisation](docs/architecture/adr/ADR-0003-edge-tlp-denormalization.md), [0004 Salience formula](docs/architecture/adr/ADR-0004-salience-formula.md), [0005 Memory supersession](docs/architecture/adr/ADR-0005-memory-supersession.md), [0006 Code-base validation 2026-05](docs/architecture/adr/ADR-0006-codebase-validation-2026-05.md), [0007 Modernization audit 2026-05](docs/architecture/adr/ADR-0007-modernization-audit-2026-05.md), [0008 Authorization layering](docs/architecture/adr/ADR-0008-authorization-layering.md) | | Ontology | [Schema design](docs/ontology/schema-design.md), [STIX mapping](docs/ontology/stix-mapping.md), [OCSF normalization](docs/ontology/ocsf-normalization.md) | | Compliance | [NIS2 controls](docs/compliance/nis2-controls.md), [BSI IT-Grundschutz](docs/compliance/bsi-grundschutz-map.md) | | Operations | [Backup and restore](docs/operations/backup-restore.md), [PostgreSQL hardening](docs/operations/postgresql-hardening.md), [Break-glass procedure](docs/operations/break-glass.md), [PG major upgrade](docs/operations/pg-major-upgrade.md), [Database migration runbook](docs/operations/database-migration-runbook.md) | | Runbooks | [Audit chain broken](docs/operations/runbooks/audit-chain-broken.md), [Ingest pipeline stalled](docs/operations/runbooks/ingest-pipeline-stalled.md), [DLQ overflow](docs/operations/runbooks/dlq-overflow.md), [RLS misconfiguration](docs/operations/runbooks/rls-misconfiguration.md) | | Skills | [MCP skill registry](docs/skills/README.md) |

Conventions

with scopes: feat:, fix:, docs:, schema:, policy:, deploy:, test:, skill:

  • Migrations: Numbered SQL files (001_, 002_, ...). No ORM.
  • Security: Parameterised SQL, AGE query templates (no string concatenation),

RLS enforcement, Cerbos/SpiceDB authorization on every request.

  • Format: SI units, ISO 8601 dates (YYYY-MM-DD), 24h time, UTC unless

explicitly local.

Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for development workflow, code style, and PR guidelines.

Security

See [SECURITY.md](SECURITY.md) for vulnerability reporting and security design overview.

Licence

Apache-2.0. See [LICENSE](LICENSE).

The core path (PostgreSQL + AGE + pgvector + NATS + Cerbos + cosign) is entirely Apache 2.0 / MIT / BSD / PostgreSQL Licence. Satellite components carry their own licences (GPL, AGPL) and operate as external services, not embedded in redistributable code.

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.