---
name: "xpay-quakelive-search-demos"
description: "Search and filter .dm_91 demo files in DEMO_PATH (local directory or s3:// URI). Returns up to N matching demos sorted by the chosen criterion. Supports filtering by recency, gametype, map, player, win/loss, minimum kills, and duration. Use deep_scan=true (or filters like pov_won/min_kills) to decode demos and get full rosters and scoreboards. NOTE: deep_scan is NOT supported when DEMO_PATH is an s3:// URI; only shallow (filename-based) filters work over S3. WARNING: deep_scan opens and fully reads every candidate demo file — it is expensive on large libraries. Avoid it when gametype, map, and player are your only filters: standard filenames already encode these fields. deep_scan is only necessary for roster-based player matching, pov_won, min_kills, min_duration_secs, or sort=longest."
version: "1.0.0"
price: "$0.02/call"
provider: "Mcps"
---

# Search Demos

Search and filter .dm_91 demo files in DEMO_PATH (local directory or s3:// URI). Returns up to N matching demos sorted by the chosen criterion. Supports filtering by recency, gametype, map, player, win/loss, minimum kills, and duration. Use deep_scan=true (or filters like pov_won/min_kills) to decode demos and get full rosters and scoreboards. NOTE: deep_scan is NOT supported when DEMO_PATH is an s3:// URI; only shallow (filename-based) filters work over S3. WARNING: deep_scan opens and fully reads every candidate demo file — it is expensive on large libraries. Avoid it when gametype, map, and player are your only filters: standard filenames already encode these fields. deep_scan is only necessary for roster-based player matching, pov_won, min_kills, min_duration_secs, or sort=longest.

**Provider:** Mcps
**Price:** $0.02/call
**Pricing model:** Flat rate per call

## When to Use

Use this tool when you need to search and filter .dm_91 demo files in demo_path (local directory or s3:// uri). returns up to n matching demos sorted by the chosen criterion. supports filtering by recency, gametype, map, player, win/loss, minimum kills, and duration. use deep_scan=true (or filters like pov_won/min_kills) to decode demos and get full rosters and scoreboards. note: deep_scan is not supported when demo_path is an s3:// uri; only shallow (filename-based) filters work over s3. warning: deep_scan opens and fully reads every candidate demo file — it is expensive on large libraries. avoid it when gametype, map, and player are your only filters: standard filenames already encode these fields. deep_scan is only necessary for roster-based player matching, pov_won, min_kills, min_duration_secs, or sort=longest.. This is part of the Mcps provider on xpay✦.

## MCP Connection

Connect to xpay✦ to access this tool (and 87+ others):

```json
{
  "mcpServers": {
    "xpay": {
      "url": "https://mcp.xpay.sh/mcp?key=YOUR_API_KEY"
    }
  }
}
```

For Claude Code:
```bash
claude mcp add --transport http xpay "https://mcp.xpay.sh/mcp?key=YOUR_API_KEY"
```

## How to Execute

Use the xpay✦ meta-tools to run this tool:

1. **`xpay_details`** — Get full input schema: `xpay_details("quakelive/search_demos")`
2. **`xpay_run`** — Execute: `xpay_run("quakelive/search_demos", { ...inputs })`

## Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `pov_won` | boolean,null | No | Filter for POV-player wins (true) or losses (false). Enables deep scan automatically. |
| `offset` | integer,null | No | Number of results to skip before returning (for pagination) |
| `before` | string,null | No | Only include demos recorded before this date (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS) |
| `deep_scan` | boolean,null | No | Force deep scanning of every candidate demo to populate full player roster, scoreboard, win/loss, and duration. Auto-enabled when using pov_won, min_kills, or min_duration_secs filters. |
| `max_age_days` | number,null | No | Only include demos from the last N days (e.g. 7 for one week) |
| `sort` | string,null | No | Sort order: 'recent' (default), 'oldest', 'largest', 'smallest', 'longest' |
| `min_size_bytes` | integer,null | No | Minimum file size in bytes |
| `min_kills` | integer,null | No | Minimum kill count for the POV player. Enables deep scan automatically. |
| `gametype` | string,null | No | Filter by gametype short name: FFA, DUEL, TDM, CTF, CA, FT, etc. (case-insensitive) |
| `limit` | integer,null | No | Maximum number of results to return (default 20) |
| `after` | string,null | No | Only include demos recorded after this date (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS) |
| `map` | string,null | No | Filter by map name (case-insensitive substring match, e.g. 'campgrounds' or 'blood') |
| `min_duration_secs` | integer,null | No | Minimum demo duration in seconds. Enables deep scan automatically. |
| `player` | string,null | No | Filter by player name (case-insensitive substring). Matches POV player from filename; with deep_scan also matches any player in the roster. |

## Pricing

- **Cost:** $0.02/call
- **Balance check:** Use `xpay_balance` to check remaining credits
- Get your API key at [xpay.tools](https://xpay.tools/account/settings/api-keys/) — $5 free credits included

## Related Skills

- [Mcps (all tools)](https://xpay.tools/skills/quakelive/SKILL.md) — 88 tools
- [Add Player](https://xpay.tools/skills/quakelive/add-player/SKILL.md) — $0.00/call
- [Add Raw Snapshot](https://xpay.tools/skills/quakelive/add-raw-snapshot/SKILL.md) — $0.00/call
- [Add Server Command](https://xpay.tools/skills/quakelive/add-server-command/SKILL.md) — $0.00/call
- [Analyze Demo](https://xpay.tools/skills/quakelive/analyze-demo/SKILL.md) — $0.02/call
- [Award Medal](https://xpay.tools/skills/quakelive/award-medal/SKILL.md) — $0.02/call

## Links

- Tool page: https://xpay.tools/quakelive/search-demos/
- Provider: https://xpay.tools/quakelive/
- All tools: https://xpay.tools/explore
