# OpenWatch Nigeria

> Security incidents across Nigeria, such as kidnapping and banditry, with sources and confidence.

- name: ng.openwatch/openwatch
- version: 1.0.0
- connection class: R2 (oauth_consent_once)
- trust: 83/100 flags: no-repository
- quality: 76/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ng.openwatch%2Fopenwatch
- tools: https://api.protogrid.dev/v1/servers/ng.openwatch%2Fopenwatch/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "openwatch": {
      "type": "http",
      "url": "https://api.openwatch.ng/mcp",
      "headers": {
        "Authorization": "Bearer ${api_key}"
      }
    }
  }
}
```

Placeholders to fill: `${api_key}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-10d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 76/100 (good)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 83 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- warn `auth.cimd`: only Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 7 of 7 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_trends (destructiveHint, idempotentHint); get_incident (destructiveHint, idempotentHint); get_case (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 1,210 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 50 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 1,210 tokens to load them all
- tool set hash: 569610f9d97fd73cd279fe10c454f11c
- tools last changed: 2026-10-12T07:15:27.350Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ng.openwatch/openwatch.svg)](https://protogrid.dev/servers/ng.openwatch/openwatch)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-12 `get_case` changed (description) **meaning changed**
  - before: One case timeline: summary, totals (abducted, rescued, killed), and the dated developments with sources.
  - after: One case. Without a paid key: its status, how it ended, dates and a short summary. With one: the full file, with totals (abducted, rescued, killed), places, who was responsible, and the dated developments with sources.
- 2026-10-11 `search_incidents` changed (description, inputSchema)
  - before: Search security incidents in Nigeria, newest first. Filter by state, type code, status, confidence and date range. Bandit attacks are coded by what happened (KDN, MUR, CTR, TER), with the group in perpetrator_group. Results keep to the caller's archive window; archive.clamped says when an older date_from was cut.
  - after: Search security incidents in Nigeria, newest first. Filter by state, LGA, type code, status, confidence and date range. Bandit attacks are coded by what happened (KDN, MUR, CTR, TER), with the group in perpetrator_group. Results keep to the caller's archive window; archive.clamped says when an older date_from was cut.

Full history: https://api.protogrid.dev/v1/servers/ng.openwatch%2Fopenwatch/changes

## Remotes

- https://api.openwatch.ng/mcp (streamable-http, auth oauth2, reachable true, uptime30d 1)
- https://api.openwatch.ng/mcp/connect (streamable-http, auth oauth2, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `get_case`: One case. Without a paid key: its status, how it ended, dates and a short summary. With one: the full file, with totals (abducted, rescued, killed), places, who was responsible, and the dated developments with sources.
- `get_daily_brief`: The daily Nigeria security brief: headline, threat level, the day's key incidents and hotspots.
- `get_incident`: One incident in full: location, casualties, confidence and the news sources that reported it.
- `get_state_risk`: A state's security risk tier, national rank, incident and fatality totals, most reported threats and most affected LGAs.
- `get_trends`: Incident counts over time with a per-type breakdown, daily, weekly or monthly, optionally for one state or incident type. Included with API plans; held to the plan's archive window.
- `list_cases`: Published case timelines: ongoing or resolved stories such as mass abductions, followed from first report to outcome.
- `search_incidents`: Search security incidents in Nigeria, newest first. Filter by state, LGA, type code, status, confidence and date range. Bandit attacks are coded by what happened (KDN, MUR, CTR, TER), with the group in perpetrator_group. Results keep to the caller's archive window; archive.clamped says when an older date_from was cut.
