World Monitor
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
Beschreibung vom Entwickler (englisches Original)
MCP server for SecObserve: triage findings, import scan reports and SBOMs, generate VEX.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
SECOBSERVE_BASE_URL, SECOBSERVE_API_TOKEN, SECOBSERVE_READ_ONLY, SECOBSERVE_ALLOW_DELETEAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"secobserve": {
"command": "uvx",
"args": [
"secobserve-mcp"
],
"env": {
"SECOBSERVE_BASE_URL": "your-value",
"SECOBSERVE_API_TOKEN": "your-value",
"SECOBSERVE_READ_ONLY": "your-value",
"SECOBSERVE_ALLOW_DELETE": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add secobserve --env SECOBSERVE_BASE_URL=your-value --env SECOBSERVE_API_TOKEN=your-value --env SECOBSERVE_READ_ONLY=your-value --env SECOBSERVE_ALLOW_DELETE=your-value -- uvx secobserve-mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"secobserve": {
"command": "uvx",
"args": [
"secobserve-mcp"
],
"env": {
"SECOBSERVE_BASE_URL": "your-value",
"SECOBSERVE_API_TOKEN": "your-value",
"SECOBSERVE_READ_ONLY": "your-value",
"SECOBSERVE_ALLOW_DELETE": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"secobserve": {
"type": "stdio",
"command": "uvx",
"args": [
"secobserve-mcp"
],
"env": {
"SECOBSERVE_BASE_URL": "your-value",
"SECOBSERVE_API_TOKEN": "your-value",
"SECOBSERVE_READ_ONLY": "your-value",
"SECOBSERVE_ALLOW_DELETE": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
SECOBSERVE_READ_ONLY envSECOBSERVE_ALLOW_DELETE envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Basierend darauf, wie sich dieser Server verbindet, und auf der eigenen Doku jeder App, geprüft am 10. Nov. 2026.
Laufen auf deinem Computer in
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 11. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto nh4ttruong bestätigt, dem das Repo gehört
Code zuletzt geändert: vor 2 Monaten
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 2 von 2 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: SECOBSERVE_BASE_URL, SECOBSERVE_API_TOKEN
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt vor 2 Monaten geändert, und die neueste Version (1.0.0) kam vor 2 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv), Docker auf deinem Computer.
In derselben Kategorie: World Monitor, Claude Flow, Tldraw
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:↓ Downloads pro Wochei★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
*MCP server for SecObserve — Triage, import and administration from an agent*
Tools • Install • Configure • Register with a client • Design
secobserve-mcp exposes the SecObserve REST API to an LLM agent over the Model Context Protocol: browse and triage observations, manage products, branches and rules, import scan reports and SBOMs, run scans and background jobs, generate VEX documents. Transport is stdio by default. Listed in the official MCP Registry as io.github.nh4ttruong/secobserve-mcp.
18 tools, not one per endpoint. SecObserve has ~50 REST resources and ~40 named actions; registering a tool for each would cost more context than the data ever returns, so the API is modelled as data and the tools are the interface to it.
| Tool | Purpose |
|---|---|
secobserve_list_resources | The catalogue: every resource, its verbs, its actions. Makes no API call, so it is free to call first. |
secobserve_describe_resource | Exact filters, fields and enums, read from the running instance's OpenAPI schema. |
secobserve_list / _get | Read, with filters, sorting, pagination and projection. |
secobserve_create / _update / _delete | CRUD over any resource in the catalogue. |
secobserve_call_action | The long tail: apply_rules, copy, simulate, license_overview, exports. |
secobserve_assess_observation | Triage one finding. Writes an observation log, honours the approval workflow. |
secobserve_bulk_assess_observations | The same assessment across up to 250 findings. |
secobserve_approve_observation_log | Approve or reject pending assessments (four-eyes). |
secobserve_product_metrics | Pre-aggregated counts: current, timeline, the delta between two dates, and how stale they are. |
secobserve_upload_file | Import a scan report, SBOM or VEX document from disk. |
secobserve_api_import | Pull findings through a stored API configuration. Blocks; a timeout reports the work as still running and where to watch it land. |
secobserve_trigger_scan | Run SecObserve's built-in OSV or VulnerableCode scan. Same blocking behaviour. |
secobserve_run_periodic_task | Trigger a background job, or list the registered ones. |
secobserve_status | Version, health, public settings, queue statistics, PURL types. |
secobserve_vex_document | Generate or revise a CSAF / OpenVEX / CycloneDX document. |
Six prompts, for the work that is a sequence of calls rather than one. A prompt is fetched by name when someone picks it, so it costs nothing per session — unlike a tool schema, which is sent on every connection.
| Prompt | Purpose |
|---|---|
triage-product | Work one product's open findings, highest severity and fix_available first, assessing each with evidence. |
daily-changes | What changed since local midnight: new, parser-changed, resolved, human-assessed. |
weekly-changes | The same feed over the past 7 days, broken down by day. |
daily-report | Today's counts per product, what moved today, what is still open. |
weekly-report | The same three parts over the past 7 days, for the report someone sends on. |
monthly-report | A month's closing numbers and the month-over-month delta. |
Each one carries the caveats that decide whether the report is right: metrics cover the default branch only and answer 200 with every count at zero when the job has not run, no filter expresses a calendar month, and nothing in SecObserve is a due date or an SLA.
uvx secobserve-mcp --help
uvx downloads and runs it without installing anything permanently. In VS Code: one-click install.
To put it on your PATH instead:
uv tool install secobserve-mcp
Once you have done that, uv tool owns the name: a bare uvx secobserve-mcp runs that pinned copy forever and never notices a newer release, so keep it current with uv tool upgrade secobserve-mcp. The client configurations below therefore say uvx secobserve-mcp@latest, which revalidates against PyPI on each launch — once per client session, not once per command. --check deliberately stays on the bare name, because its job is to report on the copy your clients are actually running.
From a checkout, for development:
uv venv && uv pip install -e ".[dev]"
| Variable | Default | Notes |
|---|---|---|
SECOBSERVE_BASE_URL | http://localhost:8000 | Base URL without /api. |
SECOBSERVE_API_TOKEN | — | User or product API token. Recommended. |
SECOBSERVE_JWT | — | Alternative to an API token. |
SECOBSERVE_TIMEOUT | 60 | Seconds. SecObserve imports and scans inside the request, and a timeout does not cancel one; raise it to get the counts back from the call itself. |
SECOBSERVE_VERIFY_SSL | true | Set false only for a self-signed dev certificate. |
SECOBSERVE_READ_ONLY | false | true refuses every non-GET call. |
SECOBSERVE_ALLOW_DELETE | false | secobserve_delete is off until this is set. |
SECOBSERVE_IMPORT_DIR | working directory | Uploads may only be read from this tree. |
SECOBSERVE_EXPORT_DIR | ./secobserve-exports | Exports and VEX documents are written here. |
SECOBSERVE_AUDIT_LOG | true | One JSON line per tool call on stderr. false switches it off. |
Create a user API token:
curl -X POST "$SECOBSERVE_BASE_URL/api/authentication/create_user_api_token/" \
-H "Content-Type: application/json" \ -d '{"username": "you", "password": "...", "name": "mcp"}'
Check the wiring before handing it to a client:
uvx secobserve-mcp --check
It prints the instance version, the authenticated user, whether read-only and delete are enabled, and how this install compares to the newest release on PyPI. That last part is the only place this server calls pypi.org, it needs one short-lived request, and it degrades to a single line when the index is unreachable.
docker run --rm -p 8931:8931 \
-e SECOBSERVE_BASE_URL=https://secobserve.example.com \ -e SECOBSERVE_API_TOKEN=... \ ghcr.io/nh4ttruong/secobserve-mcp \ --transport http --host 0.0.0.0 --shared-identity
The image is built for linux/amd64 and linux/arm64, runs as a non-root user, and answers GET /healthz with its version. /healthz is liveness only and never calls SecObserve, so a backend outage does not get this server restarted.
--shared-identity is required and not in the image's default command: the token is baked into the environment, so every caller of the port acts as that one SecObserve identity, and the server refuses to start over HTTP until someone says that is intended. It then refuses every write, because an assessment made under a shared token records the wrong actor in the observation log and in four-eyes approval. Arguments to docker run replace CMD rather than extend it, which is why the transport flags are repeated above.
Keep it behind a gateway that authenticates the caller, and off any public port. For a single user, uvx over stdio is the better fit: one process, one token, writes included.
The server prints its own registration snippet, so none of the blocks below have to be copied by hand:
uvx secobserve-mcp --print-config claude # or: codex, vscode, json
It reads SECOBSERVE_BASE_URL from the environment and always leaves the token as a placeholder — the snippet is meant to be pasted somewhere, and a token should not travel with it. The hint goes to stderr, so --print-config json > mcp.json writes a clean file.
claude mcp add secobserve --env SECOBSERVE_BASE_URL=http://localhost:8000 --env SECOBSERVE_API_TOKEN=... -- uvx secobserve-mcp@latest
In ~/.codex/config.toml:
[mcp_servers.secobserve]
command = "uvx" args = ["secobserve-mcp@latest"] env = { SECOBSERVE_BASE_URL = "http://localhost:8000", SECOBSERVE_API_TOKEN = "..." }
Most clients take the same JSON shape:
{
"mcpServers": { "secobserve": { "command": "uvx", "args": ["secobserve-mcp@latest"], "env": { "SECOBSERVE_BASE_URL": "http://localhost:8000", "SECOBSERVE_API_TOKEN": "..." } } } }
For a shared deployment, run streamable HTTP with stateless JSON behind a gateway that authenticates the caller:
uvx secobserve-mcp --transport http --host 127.0.0.1 --port 8931 --shared-identity
--shared-identity is what makes this start: the transport has no authentication of its own, so every caller acts as the one identity in SECOBSERVE_API_TOKEN, and the flag accepts that and forces read-only for the process.
Three decisions worth knowing before reading the code:
Responses are projected. SecObserve's serializers return every model column; an Observation has around 100. Each resource carries a default field set, and every list result says what it dropped. Pass fields=["*"] to opt out.
Resource help comes from the instance, not from this repo. secobserve_describe_resource reads /api/oa3/schema/ on the running backend, so filter names and enums cannot drift from the deployed version. The same schema is used to reject unknown filter names before a request is sent: django-filter silently ignores parameters it does not recognise, so filters={"vulnerability_id": "CVE-2021-44228"} would otherwise return the *entire* unfiltered list and the agent would report a confident wrong answer. It now fails with the list of filters that do exist.
Validation lives in the schema wherever a rule exists. An assessment with no comment, a rejection with no remark, a bulk call over 250 ids, or a create with neither product_id nor product_name is refused by the input model before any HTTP request. Everything else is passed through, and the API's 400 body — which names the offending field — is returned verbatim.
Expected failures come back as tool *text*, not as a raised exception: MCP reports a raised exception to the client as a bare Error executing tool , which would throw away exactly the guidance the agent needs to retry correctly.
Every tool call writes one JSON line to stderr. SecObserve's own observation log records writes only, so without this a read — which is how data leaves — leaves no trace anywhere.
{"ts":"2026-09-20T19:01:06.474+00:00","tool":"secobserve_list","caller":"apitoken:82fd9d5b1ae9","claimed_username":null,"resource":"observations","outcome":"returned","ms":37.0}
{"ts":"2026-09-20T19:01:06.518+00:00","tool":"secobserve_list","caller":"jwt:09f002a0