Reported issues for World Monitor
Pod holds 13 of 13 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to World Monitor.
Most discussed
get_conflict_events: limit=0 returns nothing (docs say "no cap"), and large limit silently empties on output-budget overflow
Summary
get_conflict_events documents its limit parameter as:
limit: Cap each event list to at most this many items (default 30, pass 0 for no cap).
limit: 0 does not mean "no cap" — it returns zero events. And separately, a large limit
returns zero events too, silently, once _outputBudgetBytes is exceeded.
Both failure modes return a well-formed, successful-looking response with empty lists, so a caller cannot distinguish "no conflicts matched" from "your reques
Read the thread · 2026-07-29 · closed · outside contributor · 0 comments
/api/mcp is unauthenticatable in the Docker self-host: the sidecar forwards its own LOCAL_API_TOKEN as the caller's Authorization header
Summary
On a self-hosted Docker install, every request to /api/mcp is rejected with
-32001 Invalid or expired OAuth token, including requests carrying a valid
OAuth token minted seconds earlier by /api/oauth/token. The X-WorldMonitor-Key
fallback cannot be reached either. As far as I can tell the MCP endpoint has no
working authentication path in this deployment mode.
The MCP implementation itself is fine. The token never reaches it.
Environment
- `docker compose up -d --buil
Read the thread · 2026-07-23 · closed · external user · 0 comments
docs(agent): published MCP inventory alternates between 39, 40, and 41 tools
Summary
Published first-party surfaces simultaneously advertise 39, 40, and 41 MCP tools. The executable registry and its exact-count tests currently establish 41 as the source-of-truth value.
Evidence at 396efb905fadda74c4ae77080a1e72658c37aa0e
- 39:
pro-test/src/locales/en.json, [public/home.md](https://github.com/koala73/worldmonitor/bl
Read the thread · 2026-07-20 · closed · external user · 1 comment
Cloudflare "Block AI training bots" policy breaks core worldmonitor.app/mcp initialization
Variant
worldmonitor.app (Full / Geopolitical)
Affected area
Map / Globe
Bug description
The WorldMonitor MCP server is completely failing to run, initialize, or register tools generally because requests to https://worldmonitor.app/mcp are being intercepted by Cloudflare.
Instead of completing the standard MCP handshake, server capability exchan
Read the thread · 2026-06-19 · closed · external user · 2 comments
feat: dashboard tabs — named, persistent panel workspaces
Summary
This proposes adding a tab system to the dashboard, letting users maintain multiple named panel workspaces without losing their configurations when switching between them.
Motivation
Power users often want to monitor very different data sets simultaneously — for example, a macro economics view alongside a commodities view. Today, switching panel layouts means losing the previous one. Tabs solve this cleanly within the existing panel/storage model.
What it does
- **Multi
Read the thread · 2026-06-13 · closed · outside contributor · 2 comments
contributor-trust.yml uses pull_request_target with write permissions and an unvalidated outbound call to api.brin.sh
Summary
.github/workflows/contributor-trust.yml uses the pull_request_target trigger — which runs with write permissions to the repository — and makes an unauthenticated outbound HTTP call to api.brin.sh with the contributor's GitHub username interpolated into the URL path. The workflow's security posture depends on the availability, integrity, and continued trustworthiness of a third-party external API with no pinned endpoint, no SLA, and no response integrity verification.
Eviden
Read the thread · 2026-05-18 · closed · external user · 1 comment
MCP proxy forwards user-supplied Authorization headers to arbitrary external servers — credential relay via WorldMonitor infrastructure
Summary
The MCP proxy (api/mcp-proxy.ts) forwards user-supplied customHeaders — including arbitrary Authorization headers — to any external MCP server that passes SSRF validation. A Pro subscriber can use WorldMonitor's outbound IP reputation to make authenticated requests to third-party systems using credentials they supply, with no logging or restriction on which credential types are forwarded.
Evidence
api/mcp-proxy.ts:
let customHeaders = {};
if (rawHeaders
[Read the thread](https://github.com/koala73/worldmonitor/issues/3805) · 2026-05-18 · closed · external user · 1 comment
### Real-time streaming: SSE/WebSocket push for breaking news and alerts
## Summary
Upgrade from HTTP polling to Server-Sent Events (SSE) for real-time push of breaking news, alerts, and data updates to the browser.
## Current State
All browser-to-backend communication uses HTTP polling via SmartPollLoop:
- Telegram Intel: 60s polling
- OREF Alerts: 120s polling
- RSS News: 15min polling
- AIS Vessels: 5min polling (WebSocket upstream exists on Railway relay, but frontend polls HTTP)
## Proposed Architecture
Railway relay ──SSE──→ Browser
- Breaking news
Read the thread · 2026-03-07 · open · external user · 3 comments
Most recent
fix(local-api): get_world_brief's internal fetch to get-bootstrap-data lacks X-WorldMonitor-Local-Token and is rejected by the sidecar's own auth gate
Variant
worldmonitor.app (Full / Geopolitical)
Affected area
AI Insights / World Brief
Bug description
Summary
On a self-hosted install, the get_world_brief MCP tool fails with an auth error the operator cannot fix from outside. The tool makes an internal, in-process fetch to the sidecar's own bootstrap endpoint (/api/infrastructure/v1/get-bootstrap-data). That endpoint sits behind local-api-server.mjs's global auth gate, which expects X-WorldMonitor-Local-Token — a
Read the thread · 2026-08-13 · closed · external user · 0 comments
fix(compose): RELAY_SHARED_SECRET is never plumbed into the app or relay containers — fresh self-host installs crash-loop
Variant
worldmonitor.app (Full / Geopolitical)
Affected area
Other
Bug description
Summary
The self-host docs require RELAY_SHARED_SECRET in .env, but docker-compose.yml does not pass it into the environment of any service — not worldmonitor, not ais-relay. As of main HEAD, no environment: entry, env_file, or ${RELAY_SHARED_SECRET} reference exists anywhere in the compose file.
Before #3815 this failed open (the vulnerability that issue fixed). Since #381
Read the thread · 2026-08-13 · closed · external user · 0 comments
feat(economic): CII confidence scoring + anomaly detection panel
Feature area
AI / Intelligence analysis
Description
Add a CII Confidence & Anomaly Alert panel that surfaces two signals per country:
Confidence score (0–100) — based on data freshness, source diversity, and country-type variance — displayed as 🟢 High / 🟡 Medium / 🔴 Low badge.
Anomaly alerts — triggered when CII deviates beyond rolling 30-day statistical thresholds (±2σ):
- 🔥 Thermal Spike — CII up 15+ pts in 24h
- 📉 Rapid Cooling — CII down 10+ pts in 24h
- 📈
Read the thread · 2026-06-02 · open · external user · 0 comments
Unauthenticated /health endpoint exposes auth configuration, rate-limit parameters, and heap memory to any caller
Summary
The relay's /health endpoint is declared as a public route and returns auth configuration state, Telegram polling status, OREF alert history counts, WebSocket connection state, rate-limit parameters, and heap memory — without requiring any credential. This provides free reconnaissance to anyone probing the relay.
Evidence
scripts/ais-relay.cjs lines ~9041–9095:
const isPublicRoute = pathname === '/health' || pathname === '/' || isRssRoute || ...
// Respons
[Read the thread](https://github.com/koala73/worldmonitor/issues/3802) · 2026-05-18 · closed · external user · 0 comments
### security: MCP proxy endpoint has no authentication — CORS check passes on requests with no Origin header, allowing unauthenticated callers to proxy arbitrary external MCP servers with custom headers
## Location
`api/mcp-proxy.js`, handler entry point:
```javascript
export default async function handler(req) {
if (isDisallowedOrigin(req))
return new Response('Forbidden', { status: 403 });
// ... accepts GET/POST with no further auth check
api/_cors.js:
export function isDisallowedOrigin(req) {
const origin = req.headers.get('origin');
if (!origin) return false; // ← no Origin = not disallowed
return !isAllowedOrigin(origin);
}
Impact
A curl r
Read the thread · 2026-05-16 · closed · external user · 0 comments
The remaining reports are on the project's issue tracker.