MCP server for investigating activity on the AT Protocol / Bluesky network. Exposes 20 tools across five domains: ClickHouse queries, network investigation, content similarity, co-sharing analysis, and Ozone moderation.
Draws heavily on Phoebe by haileyok
- Python 3.12+
- uv
uv syncuv run skywatch-mcpThe server communicates over stdio using the MCP JSON-RPC protocol. Connect it to any MCP-compatible client (Claude Desktop, claude-code, mcp-inspector, etc.).
Add to your MCP server config:
{
"mcpServers": {
"skywatch-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/skywatch-mcp", "skywatch-mcp"]
}
}
}| Variable | Default | Description |
|---|---|---|
CLICKHOUSE_HOST |
http://localhost |
ClickHouse server host |
CLICKHOUSE_PORT |
8123 |
ClickHouse HTTP port |
CLICKHOUSE_USER |
default |
ClickHouse username |
CLICKHOUSE_PASSWORD |
(empty) | ClickHouse password |
CLICKHOUSE_DATABASE |
default |
ClickHouse database |
CLICKHOUSE_TAILNET_IP |
(none) | Overrides host when set (for Tailscale access) |
| Variable | Default | Description |
|---|---|---|
OZONE_HANDLE |
(none) | AT Protocol handle for Ozone auth |
OZONE_ADMIN_PASSWORD |
(none) | Admin password for Ozone auth |
OZONE_DID |
(none) | DID of the Ozone labeller service |
OZONE_PDS |
(none) | PDS hostname for Ozone XRPC calls |
All four Ozone variables must be set for Ozone tools to function.
clickhouse_query— Execute read-only SQL queries (SELECT/WITH, requires LIMIT)clickhouse_schema— Get column definitions for all queryable tables
domain_check— DNS records (A, AAAA, NS, MX, TXT, CNAME, SOA) and HTTP statusip_lookup— Geographic location and network info via ip-api.comurl_expand— Follow redirect chains, detect URL shortenerswhois_lookup— WHOIS registration data with parsed fields
content_similarity— Find similar posts using ClickHouse ngramDistance
cosharing_clusters— URL co-sharing cluster analysiscosharing_pairs— Raw co-sharing pairs with edge weightscosharing_evolution— Cluster evolution timeline
ozone_label— Apply/remove moderation labelsozone_comment— Add comments to moderation recordsozone_acknowledge— Acknowledge subjectsozone_escalate— Escalate for reviewozone_tag— Add/remove tagsozone_mute/ozone_unmute— Mute/unmute subjectsozone_resolve_appeal— Resolve appealsozone_query_statuses— Query moderation queueozone_query_events— Query moderation events
# Run tests
uv run pytest
# Lint
uv run ruff check src/ tests/
# Type check
uv run mypy src/
# Format
uv run ruff format src/ tests/