xpay tools logo
  • Tools
  • Collections
  • Skills
  • Docs
  • xpay.sh
  1. Home
  2. ›
  3. Providers
  4. ›
  5. Mcps

M

Mcps

Community
88 tools

$0.00 – $0.02/call

​
​
Add Player
add_player

Add a player to the demo. Must be called before generating ticks.


flat

$0.00/call

Add Raw Snapshot
add_raw_snapshot

Add a raw snapshot tick with full protocol-level control.


time-based

$0.00/call

Add Server Command
add_server_command

Inject a raw server command string.


time-based

$0.00/call

Analyze Demo
analyze_demo

Run ALL analysis functions at once and return a comprehensive report.


time-based

$0.02/call

Award Medal
award_medal

Award a medal to a player.


time-based

$0.02/call

Check Pvs
check_pvs

Check PVS (Potentially Visible Set) visibility between two world positions in a BSP map. Returns whether the BSP considers the two points mutually visible — i.e. whether the engine would have sent entity updates between them. Also returns the PVS cluster indices for both points. PVS is a conservative over-approximation: visible=true means updates were sent, not guaranteed line-of-sight. Accepts a bare map name, 'maps/<name>.bsp', or a direct path — see get_bsp_info for lookup rules.


time-based

$0.02/call

Classify Player Roles
classify_player_roles

Classify each team player's positional role based on where they spent time during the demo: defender / 2nd_defender / middle / 2nd_attacker / attacker (scaled to actual team size). For CTF, provide the 'map' argument so flag positions can be read from the BSP entity lump — this yields an accurate forward axis. Without a map, the tool falls back to ranking players by their centroid distance toward the enemy team spawn cluster. Only the POV player's trace is always complete; other players have sparse traces (see generate_player_heatmap notes). Call open_demo first to get a session_id.


time-based

$0.02/call

Close Demo
close_demo

Close an analysis session and free its memory.


time-based

$0.02/call

Create Demo
create_demo

Create a new demo-building session. Returns a session_id.


time-based

$0.02/call

Cut Demo
cut_demo

Cut a time range from an open demo into a new .dm_91 file. Use seek_demo or seek_thresholds first to find interesting moments, then cut_demo to extract them. Returns the output path and metadata about the cut.


time-based

$0.02/call

Describe Map
describe_map

Analyse a BSP map (from a pk3 or direct .bsp file) and return a JSON MapSpec that describes its geometry and entities. What is extracted: • worldspawn settings: sky, gravity, ambient, music, name • All game entities verbatim (weapons, spawns, flags, teleporters, …) • Rooms: detected by pairing floor surfaces (normal ≈ +Z) with ceiling surfaces (normal ≈ −Z) that share the same XY footprint. Each matched pair becomes one RoomSpec with mins/maxs, floor_texture, ceil_texture, and wall_texture. The returned spec can be fed directly to generate_map to produce a geometrically similar BSP (roundtrip is lossless for simple axis-aligned maps; complex maps are approximated as rectangular rooms). Typical workflow: 1. describe_map("cpma1") → inspect / tweak the spec JSON 2. generate_map(spec) → new .bsp that resembles cpma1 3. Use new .bsp in demos


time-based

$0.02/call

Edit Map Entities
edit_map_entities

Edit entities in an existing BSP map. Full CRUD operations: add (classname + key/value pairs), remove (by index or classname), move (change origin), set_key, remove_key. Custom 'info_ql_protocol' entities are ignored by the QL client but readable by our tools. Light entities (classname 'light') can be added for path tracing support. Output: modified .bsp and optionally .pk3 (ready for QL client use).


time-based

$0.02/call

Export Frames To Json
export_frames_to_json

Export frames from an open demo as JSON Lines (one frame per line) to a file in DEMO_PATH. Each line is a raw DecodedServerMessage: sequence number, server_time, operations (snapshots, configstrings, server commands, etc.). Use from_frame/from_server_time to set the start, to_frame/to_server_time to set the end, and limit to cap the output. Returns the output path and the number of frames written.


time-based

$0.02/call

Extract Map Lights
extract_map_lights

Extract light sources from a BSP map. Returns lights from two sources: (1) entity lights — 'light' entities in the BSP entity lump with position, intensity, color, radius. (2) lightgrid-mined lights — inferred from the baked radiosity lightgrid by finding bright spots and clustering nearby samples. Useful for path tracing setup: pass extracted lights to the renderer's point light buffer. Parameters: include_lightgrid (default true), lightgrid_threshold (0-255, default 180), cluster_radius (Quake units, default 128).


time-based

$0.02/call

Finalize Demo
finalize_demo

Write the demo to a .dm_91 file and finalize.


time-based

$0.02/call

Fly Map
fly_map

Generate a fly-through demo that tours all rooms of a map, then render it into a video so the user can see what the map looks like. Supply EITHER: • map — an existing map name (same lookup as get_bsp_info), OR • spec — a MapSpec JSON (same schema as generate_map) The camera visits every room in connectivity order (BFS from the first room, following corridor links). In each room it hovers at fly_height above the floor and performs a slow 360° pan, then flies to the next room at fly_speed_ups units/second. Typical workflow after generate_map: 1. fly_map(spec=<the spec you just generated>) → demo .dm_91 + optional video 2. Or: fly_map(map='mymapname') to tour an existing BSP 3. Optionally call render_demo_preview / render_demo_hq on the output demo for a higher-quality video render. Returns the demo path/URL and a human-readable camera-path log.


time-based

$0.02/call

Generate Demo
generate_demo

Generate a complete demo from a JSON description. Format: {map, gametype, players: [{client_num, name, x, y, z, weapon, model}], pov, timeline: [{action, ...params}], output_path}. Actions: move, kill, chat, idle, look_at, shoot, teleport, respawn, switch_weapon, die.


time-based

$0.02/call

Generate Map
generate_map

Generate a playable Quake III / QuakeLive BSP map file from a high-level JSON specification. The spec describes rectangular rooms, optional corridors connecting them, and game entities (spawn points, weapons, pickups). The output is a valid IBSP v47 binary that wolfcamql can load for demo playback. The spec JSON has these top-level fields (all optional except rooms): • name: map display name • sky: sky shader, e.g. "textures/skies/qlsky" • gravity: integer (default 800) • ambient: float 0.0–1.0 (default 0.15) • rooms: array of room objects (see below) • corridors: array of corridor objects • items: array of entity objects Room object fields: • id: string (required for corridor references) • mins + maxs: [x,y,z] absolute corners, OR • position [x,y,z] + size [w,d,h]: centre + dimensions (default size 512×512×256) • floor_texture, wall_texture, ceil_texture: shader names (optional) Corridor object fields: • from, to: room IDs to connect • width: corridor opening width (default 128) • height: corridor opening height (default: min room height) Item object fields: • classname: e.g. "info_player_deathmatch", "weapon_rocketlauncher" • origin: [x, y, z] • angle: yaw in degrees • any extra Q3 entity key-value pairs Common classnames: info_player_deathmatch, info_player_start, weapon_rocketlauncher, weapon_railgun, weapon_shotgun, weapon_lightning, weapon_plasma, item_health, item_health_large, item_armor_body, item_quad, item_haste, item_regen, item_flight, team_CTF_redspawn, team_CTF_bluespawn, team_CTF_redflag, team_CTF_blueflag


time-based

$0.02/call

Generate Map Minimap
generate_map_minimap

Generate a top-down SVG minimap from the BSP draw geometry. Every visible (non-sky, non-nodraw) triangle is projected onto the XY plane and rendered as a filled polygon. Item spawn positions are overlaid as coloured markers with a colour-coded legend. The SVG is written to a file; the tool returns the output path and statistics. Use z_min/z_max to isolate a single floor in multi-level maps.


time-based

$0.02/call

Generate Player Heatmap
generate_player_heatmap

Generate a top-down SVG heatmap showing where a player spent time during a demo. The POV player's trace is always complete. For other players only the frames where they were visible to the recording client are included — the resulting map is sparser and biased toward areas visible from the POV player's position. Output is written to a file. Call open_demo first to get a session_id.


time-based

$0.02/call

Get All Players
get_all_players

Get all registered players with their states.


time-based

$0.02/call

Get Bsp Entities
get_bsp_entities

Return the raw entity string from a BSP map file. The entity string contains all map entities: spawn points, item pickups (weapons, armor, health, powerups), triggers, teleporters, jump pads, etc. Each entity is a brace-delimited block of key/value pairs. Accepts a bare map name, 'maps/<name>.bsp', or a direct path — see get_bsp_info for lookup rules.


time-based

$0.02/call

Get Bsp Info
get_bsp_info

Parse a Quake Live / Quake III BSP map file and return a structural summary: world bounds, shader count, surface count, brush count, leaf count, lightmap count, PVS cluster count, model count, and advertisement count. Accepts a bare map name (e.g. 'campgrounds'), 'maps/<name>.bsp', or a direct file path. Bare names are extracted from pk3 archives under WOLFCAMQL_BASEPATH; direct paths are read from MAP_DIR or as absolute paths.


time-based

$0.02/call

Get Demo Accuracy
get_demo_accuracy

Get per-player, per-weapon accuracy computed from entity events (FireWeapon + BulletHitFlesh + MissileHit). Works for ALL visible players, not just the POV player. Independent of the 'acc' server command. PVS-limited: accuracy data is most complete for the POV player. Returns: player_name, client_num, weapons [{weapon, shots_fired, hits, accuracy_pct}], overall_accuracy_pct, total_shots, total_hits.


time-based

$0.02/call

Get Demo Airtime
get_demo_airtime

Get airtime statistics: total_ticks, airborne_ticks, airborne_pct, longest_airborne_ms. Water ticks (from PMF_TIME_WATERJUMP) are excluded from airborne and tracked separately as water_ticks / water_pct.


time-based

$0.02/call

Get Demo Chat
get_demo_chat

Get all chat messages in the demo.


time-based

$0.02/call

Get Demo Configstring
get_demo_configstring

Get a raw configstring by index number.


time-based

$0.02/call

Get Demo Damage Direction
get_demo_damage_direction

Get directional damage analysis (damage taken by direction).


time-based

$0.02/call

Get Demo Deaths
get_demo_deaths

Get all death locations for the POV player.


time-based

$0.02/call

Get Demo Events
get_demo_events

Get all game events (obituaries, items, etc.).


time-based

$0.02/call

Get Demo Flag Runs
get_demo_flag_runs

Get CTF flag run data (pickup, capture, return events).


time-based

$0.02/call

Get Demo Game Flow
get_demo_game_flow

Get the game flow timeline: kills, chats, flags, medals interleaved chronologically.


time-based

$0.02/call

Get Demo Head To Head
get_demo_head_to_head

Get the full NxN kill matrix between all players: who killed whom, how many times, and with which weapons.


time-based

$0.02/call

Get Demo Health Armor
get_demo_health_armor

Get the POV player's health/armor timeline over the entire demo. Returns one sample per snapshot tick — can be tens of thousands of entries for a full game. Use limit/offset to page through the data.


time-based

$0.02/call

Get Demo Item Timeline
get_demo_item_timeline

Get a chronological timeline of all item pickups broadcast to all players. Shows who picked up each item (armor, health, powerups) and when. Useful for item control analysis and timing. Each entry has: server_time_ms, player_name, client_num, item_configstring_index, item_name, position.


time-based

$0.02/call

Get Demo Kill Distances
get_demo_kill_distances

Get kill distance statistics per weapon.


time-based

$0.02/call

Get Demo Medals
get_demo_medals

Get all medals (awards) earned by the POV player.


time-based

$0.02/call

Get Demo Movement
get_demo_movement

Get movement statistics: distance, strafes, jumps.


time-based

$0.02/call

Get Demo Multikills
get_demo_multikills

Get multi-kill streaks (double, triple, etc.) for the POV player.


time-based

$0.02/call

Get Demo Players
get_demo_players

Get all players in the demo with name, model, team, clan tag.


time-based

$0.02/call

Get Demo Positions
get_demo_positions

Get the POV player's position trace (x, y, z samples over time). Returns one sample per snapshot tick — can be tens of thousands of entries for a full game. Use limit/offset to page through the data.


time-based

$0.02/call

Get Demo Powerups
get_demo_powerups

Get powerup pickup/expiry events for the POV player.


time-based

$0.02/call

Get Demo Rail Trajectories
get_demo_rail_trajectories

Get all railgun shot trajectories: start/end positions, shooter, colour. Useful for sightline analysis and rail accuracy visualization. Each entry has: server_time_ms, shooter_client_num, shooter_name, start [x,y,z], end [x,y,z], colour.


time-based

$0.02/call

Get Demo Respawns
get_demo_respawns

Get respawn event timeline.


time-based

$0.02/call

Get Demo Rounds
get_demo_rounds

Get round-by-round score progression (CA/FT).


time-based

$0.02/call

Get Demo Scoreboard
get_demo_scoreboard

Get the final scoreboard: score, kills, deaths per player.


time-based

$0.02/call

Get Demo Server Info
get_demo_server_info

Get parsed server settings: map, gametype, hostname, timelimit, fraglimit, etc.


time-based

$0.02/call

Get Demo Speed
get_demo_speed

Get speed statistics: average, peak, histogram.


time-based

$0.02/call

Get Demo Stats
get_demo_stats

Get full gameplay statistics for the POV player of the demo. Returns a PlayerStats object with: (1) Combat totals — kills, deaths, suicides, kdr, killing_spree (longest streak without dying), time_played_ms. (2) Per-weapon breakdown (weapons[]) — for every weapon with any activity: kills, deaths, hold_time_ms, accuracy_pct (0-100 integer from server `acc` command; absent for mid-cut demos), shots_fired (from EV_FIRE_WEAPON events), hits (from EV_DAMAGEPLUM), event_accuracy_pct (hits/shots×100, independent of acc command). Sorted by activity descending. (3) Damage — damage_dealt (from ctfstats server command, CTF/1FCTF only; null otherwise) and damage_received (from ctfstats when available, otherwise estimated from playerstate damageEvent/damageCount fields). (4) Item pickups — ra_pickups, ya_pickups, ga_pickups, mh_pickups, quad_pickups, bs_pickups, regen_pickups, haste_pickups, invis_pickups (sourced from ctfstats; zero when the command is absent). (5) CTF / team stats — captures, defends, assists (from scores_ctf; zero when not present). (6) Opponent summary — most_kills_on (prey player name + count) and most_deaths_from (nemesis name + count). (7) Per-opponent breakdown (opponents[]) — for each opponent, sorted by total interaction weight: kills, deaths, kdr — kill/death counts and ratio against this opponent. damage_dealt, damage_received — from EV_DAMAGEPLUM entity events (PVS-limited; near 100% for POV player). damage_dealt_by_weapon, damage_received_by_weapon — per-weapon damage breakdown. hits_dealt_by_weapon, hits_received_by_weapon — hit count per weapon (from EV_DAMAGEPLUM event count). kills_by_weapon, deaths_by_weapon — per-weapon kill/death breakdown. avg_kill_distance, max_kill_distance — in Quake units. avg_health_at_kill, avg_armor_at_kill, low_health_kills (≤25 HP clutch kills). avg_speed_at_kill, airborne_kills — movement context at kill time. kills_from_above, kills_from_below, avg_height_delta — height advantage. kills_with_powerup, kills_on_powerup_carrier, flag_carrier_kills — powerup/flag context. medals_earned — medals attributed to kills on this opponent (500ms temporal correlation). best_killstreak, got_first_blood, revenge_kills — engagement patterns. headshots, headshots_received — from EV_HEADSHOT entity events. shots_aimed_at_by_weapon — shots attributed to this opponent by crosshair proximity at fire time (a shot counts for all opponents within 15° of the crosshair). accuracy_by_weapon — per-weapon accuracy: hits/shots_aimed_at×100. total_shots_aimed_at, total_hits_dealt, overall_accuracy_pct — aggregate accuracy against this opponent. (8) Event-based combat totals — total_shots_fired, total_hits, total_headshots (from EV_FIRE_WEAPON, EV_DAMAGEPLUM, EV_HEADSHOT entity events).


time-based

$0.02/call

Get Demo Status
get_demo_status

Get demo session status: map, gametype, players, ticks, time.


time-based

$0.02/call

Get Demo Summary
get_demo_summary

Get a high-level summary of the demo: map, gametype, hostname, frame_count, duration_ms (authoritative server-time duration — do NOT compute from frame_count), player_count, total_kills, total_chat_messages, scoreboard (per-player kills/deaths/score). For team games: red_team_score, blue_team_score (from CS_SCORES1/CS_SCORES2 configstrings — the authoritative server score: captures for CTF, rounds for CA, frags for TDM), score_type ('captures'/'rounds'/'frags' — explains what the team score represents).


time-based

$0.02/call

Get Demo Weapon Switches
get_demo_weapon_switches

Get the POV player's weapon switch timeline.


time-based

$0.02/call

Get Frame State
get_frame_state

Get the complete game state at a specific frame index: POV position, health, weapon, visible players, events.


time-based

$0.02/call

Get Map Items
get_map_items

Parse the entity lump of a BSP map and return every game entity as structured JSON with classname, category, origin [x, y, z], and all other key/value pairs. Categories: weapon, ammo, health, armor, powerup, flag, spawn, jump_pad, teleporter, other. The worldspawn entity (global map settings: sky, music, gravity) is returned separately. Optionally filter by classname substring.


time-based

$0.02/call

Get Nearby Players At
get_nearby_players_at

Get all players within a radius of a point at a given time. Useful for answering 'who was nearby when X happened'.


time-based

$0.02/call

Get Player State
get_player_state

Get the current state of a player: position, weapon, health, armor, alive.


time-based

$0.02/call

Get Quakelive Glossary
get_quakelive_glossary

Return the complete QuakeLive / Quake III Arena enum reference as structured JSON with human-readable descriptions for every value. Call this tool when you need to look up weapon names, means-of-death, game types, powerup names, medal names, or any other QL-specific constants in order to correctly interpret user requests or demo data. Includes: weapons (id, display_name, description), means_of_death (id, display_name, weapon_id, description), game_types (id, short_name, display_name, is_team_game, description), powerups (id, display_name, description), medals (eflags medals + EV_AWARD names, each with full description), seek_event_types, and entity_types.


time-based

$0.02/call

Get Timeline Summary
get_timeline_summary

Get the timeline of events (kills, chats, etc.) recorded so far.


time-based

$0.02/call

Give Powerup
give_powerup

Give a powerup to a player.


time-based

$0.02/call

Idle Time
idle_time

Advance the demo clock with idle ticks (no events).


time-based

$0.02/call

Kill Player
kill_player

Execute a full kill: obituary + print + death animation (~6 ticks).


time-based

$0.02/call

List Demos
list_demos

List .dm_91 demo files available in DEMO_PATH (local directory or s3:// URI). Supports pagination via limit/offset and sorting by recency, size, or name.


time-based

$0.02/call

List Maps
list_maps

List every BSP map available from pk3 archives under WOLFCAMQL_BASEPATH and direct .bsp files in MAP_DIR. Returns map names, source pk3 paths, and uncompressed sizes. Use the returned names directly with get_bsp_info, get_map_items, check_pvs, and generate_map_minimap.


time-based

$0.02/call

Look At
look_at

Point the POV view at a world position.


time-based

$0.02/call

Merge Demos
merge_demos

Merge multiple single-POV .dm_91 demo files from the same match into one omniscient multi-POV demo where every player is always visible. All input demos must be from the same match (same map); the tool validates this and returns an error if they differ. Provide one file per player POV (at least 2). Returns the output path and any non-fatal warnings.


time-based

$0.02/call

Merge Maps
merge_maps

Merge two or more BSP maps into a single BSP file by combining their geometry, entities, and shaders. Each map can be translated (offset) in 3D space before merging so that rooms don't overlap. Use this to: • Combine two existing maps side-by-side (e.g. campgrounds + aerowalk) • Stack maps vertically for multi-level play • Create hybrid maps by mixing parts of different levels The first map in the list is the 'base' — its worldspawn settings (sky, gravity, music) take priority. All entities from every map are preserved. Shaders are deduplicated by name. The output BSP uses a simple all-visible PVS (no real cluster culling), which is fine for demo playback but means every surface is always rendered. Translate tip: to place map B 2000 units to the right of map A, set translate=[2000,0,0] for map B. Use get_bsp_info to find the bounding box of each map so you can compute non-overlapping placements.


time-based

$0.02/call

Move Player
move_player

Move a player from A to B over a duration.


time-based

$0.02/call

Open Demo
open_demo

Open a .dm_91 demo file for analysis. Returns a session_id, summary (map, gametype, players, frame_count, duration_ms), and player list. IMPORTANT: use duration_ms for the demo length — do NOT compute duration from frame_count (frame rate varies). Accepts: a path relative to DEMO_PATH, an absolute path, or an http(s):// URL (streamed with a size limit, no temp file). HTTP/S3 sources: analysis is pre-computed in one streaming pass; all get_demo_* tools return cached results instantly. Seek and cut operations trigger a re-download. Local sources: analysis is cached on the first tool call, then reused — no re-iteration.


time-based

$0.02/call

Player Die
player_die

Make a player die (no attacker).


time-based

$0.02/call

Player Respawn
player_respawn

Respawn a player at a new position.


time-based

$0.02/call

Preview Demo Plan
preview_demo_plan

Validate and summarise a planned demo description WITHOUT writing any file. Use this as part of a planning workflow: 1. Construct a demo description JSON 2. Call preview_demo_plan to show the user the interpreted timeline 3. Iterate on the description based on feedback 4. Call generate_demo once the user approves The description uses the same JSON schema as generate_demo: {map, gametype, players:[…], pov, timeline:[{action,…}], output_path}. Returns a structured summary: player list, timeline of actions with running timestamps, estimated duration, and any validation warnings.


time-based

$0.02/call

Preview Map Plan
preview_map_plan

Render a fast top-down geometric SVG preview of a planned map spec WITHOUT generating a BSP file. Use this as part of a planning workflow: 1. Construct or refine a MapSpec JSON 2. Call preview_map_plan to show the user a visual layout 3. Iterate on the spec based on feedback 4. Call generate_map once the user approves The preview draws each room as a coloured rectangle labelled with its id and dimensions (width × depth × height in Quake units), corridors as grey bands connecting room centres, and items as colour-coded dots identical to the generate_map_minimap legend. Returns the SVG path / upload URL plus a spec echo so the caller can confirm what was interpreted.


time-based

$0.02/call

Print Message
print_message

Send a console print message.


time-based

$0.02/call

Query Master Server
query_master_server

Discover live QuakeLive servers by querying Valve's Steam master server (`hl2master.steampowered.com:27011`). Since QuakeLive moved to Steam in 2015 all game servers register with Valve's Steam master instead of the old Quake 3 master (`master.quake3arena.com`). This tool uses the Steam Master Server Query Protocol to retrieve the full list of registered server addresses. Each address can then be passed to `send_connectionless_packet` with `getinfo` or `getstatus` for detailed per-server information. The master may return several hundred addresses split across multiple UDP packets. Each batch uses the last received address as the seed for the next request on the **same socket** (required by the protocol). Collection stops when the terminal sentinel `0.0.0.0:0` arrives or `max_servers` is reached. Default filter: `\\appid\\282440` (QuakeLive Steam AppID). **Master-level filters** (sent in the request, free): `has_players`, `map`, `gametype_tags`, `dedicated`, `secure`, `password_protected`, `linux`, `region`, `extra_filter`. **Per-server probe filters** (each server is queried individually — use `max_servers` to cap cost): A2S_INFO probes: `min_players`, `max_players`, `no_bots`; A2S_PLAYER probe: `player_name` (case-insensitive substring match against connected player names — pair with `has_players: true` to avoid probing empty servers). Control probe behaviour with `probe_timeout_ms` and `probe_concurrency`. Servers that do not respond are excluded.


time-based

$0.02/call

Render Demo Hq
render_demo_hq

Render a full-quality 1080p/30fps video clip from a demo. Use AFTER render_demo_preview confirms the correct moment. Resolution and fps can be overridden. The demo is cut to the given server-time range (plus padding) and rendered completely in the background via xvfb-run + wolfcamql + ffmpeg. start_time_ms / end_time_ms come directly from seek_demo or get_frame_state server_time_ms values. Blocks until render is done. Requires WOLFCAMQL_BIN, WOLFCAMQL_BASEPATH env vars and xvfb-run + ffmpeg to be installed.


time-based

$0.02/call

Render Demo Preview
render_demo_preview

Render a quick 480p/25fps preview clip from a demo. Use this FIRST to verify you have the right moment before a full-quality render. The demo is cut to the given server-time range (plus padding) and rendered completely in the background via xvfb-run + wolfcamql + ffmpeg. start_time_ms / end_time_ms come directly from seek_demo or get_frame_state server_time_ms values. Blocks until render is done. Requires WOLFCAMQL_BIN, WOLFCAMQL_BASEPATH env vars and xvfb-run + ffmpeg to be installed.


time-based

$0.02/call

Say Chat
say_chat

Send a chat message.


time-based

$0.02/call

Search Demos
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.


time-based

$0.02/call

Seek Demo
seek_demo

Search demo frames for events matching structured criteria. Combine filters with AND. Returns matching frames with full game state and match reasons.


time-based

$0.02/call

Seek Thresholds
seek_thresholds

Find milestone moments where cumulative stats cross thresholds. Unlike seek_demo (which finds individual events like kills or chats), this tool tracks running totals across the entire demo and emits the frame where a threshold is first crossed. Use seek_demo to find a specific event ('rail kill on Dloobiq'). Use seek_thresholds to find a milestone ('10th kill', '1000 damage dealt', '5-killstreak'). Cumulative thresholds (emit once when first crossed): total_kills_ge, total_deaths_ge, total_damage_dealt_ge, total_damage_received_ge, total_headshots_ge, killstreak_ge (current kills without dying). Per-opponent: damage_dealt_to_player_ge + opponent_name, kills_on_player_ge + opponent_name. Instantaneous thresholds (emit every matching frame): health_le (low-health moments), health_ge (overhealth), armor_ge. Multiple thresholds combine with AND. Returns same FrameState as seek_demo with match_reason explaining which threshold was crossed and the current value.


time-based

$0.02/call

Send Connectionless Packet
send_connectionless_packet

Send a connectionless (out-of-band) UDP packet to a QuakeLive or Quake3 server and return the parsed reply. Connectionless packets are raw UDP datagrams prefixed with four 0xFF bytes followed by a command string. Servers that speak the Q3/QL protocol respond in the same format. No prior connection or handshake is required — each call is a single send + single receive. Supported commands (see the `command` enum): • `getinfo` — returns a key-value info string with map, gametype, player count, hostname, sv_fps, and more. • `getstatus` — returns the full info string plus one line per connected player (frags, ping, name). Use this to inspect current players. • `getchallenge` — returns a one-time challenge number (used internally during connection setup). • `rcon` — executes a console command server-side via the remote console interface. Requires `rcon_password` and `rcon_command`. • `ping` — sends a probe and expects an `ack` reply; useful for a lightweight reachability check. The response JSON always includes `response_type` (the first token of the server reply) and `raw` (the full reply text). For `infoResponse` and `statusResponse` an `info` object with parsed key-value pairs is also included; `statusResponse` additionally includes a `players` array.


time-based

$0.02/call

Set Configstring
set_configstring

Set an arbitrary configstring by index.


time-based

$0.02/call

Set Pov
set_pov

Set which player is the recording POV.


time-based

$0.02/call

Set View
set_view

Set the POV view angles directly.


time-based

$0.02/call

Shoot
shoot

Fire the POV player's weapon.


time-based

$0.02/call

Stand Player
stand_player

Hold a player at a position for a duration.


time-based

$0.02/call

Switch Weapon
switch_weapon

Switch the POV player's weapon.


time-based

$0.02/call

Teleport Player
teleport_player

Teleport a player to a new position.


time-based

$0.02/call

Connect Mcps tools
​
​

Cursor

Claude Code

Claude Desktop

Windsurf

VS Code

Cline

Roo Code

ChatGPT

Gemini CLI

Amazon Q

Goose

Augment

n8n

API / cURL

AI SDK

TypeScript SDK

Add to ~/.cursor/mcp.json
{
  "mcpServers": {
    "quakelive": {
      "url": "https://quakelive.mcp.xpay.sh/mcp?key=YOUR_API_KEY"
    }
  }
}
Or connect all tools

Access all tools (including Mcps) through a single MCP connection.

https://mcp.xpay.sh/mcp?key=***
{
  "mcpServers": {
    "xpay": {
      "url": "https://mcp.xpay.sh/mcp?key=YOUR_API_KEY"
    }
  }
}
Agent Discovery

Machine-readable catalogs for LLM agents and automation.

llms.txt — Human-readable tool catalog
curl https://xpay.tools/llms.txt
agents.txt — Structured JSON for agents
curl https://xpay.tools/agents.txt
skill.md — Claude Code skill
curl https://xpay.tools/skill.md
Pricing

Pay per tool call. No subscriptions.

88 Mcps tools available
Frequently Asked Questions

Mcps is an API provider available on xpay with 88 tools. You can use Mcps's tools through a single MCP connection — no need to manage separate API keys or subscriptions. All tools are pay-per-call with no monthly fees.

Mcps tools are priced at $1e-8–$0.02 per call. You only pay when you use a tool — there are no subscriptions or monthly fees. New accounts get $5 in free credits to try any tool.

Add xpay's MCP server to your AI client (Claude Code, Cursor, VS Code, Windsurf, or Cline) with the endpoint: https://mcp.xpay.sh/mcp?key=YOUR_API_KEY. Once connected, use xpay_discover to find Mcps tools, then xpay_run to execute them. For Claude Code: claude mcp add --transport http xpay "https://mcp.xpay.sh/mcp?key=YOUR_API_KEY"

Mcps provides 88 tools: add player, add raw snapshot, add server command, analyze demo, award medal, and 83 more. Each tool can be called independently and has its own pricing.

No. With xpay, one API key gives you access to all 88 Mcps tools plus 1000+ tools from 80+ other providers. You don't need to sign up for Mcps's API directly — xpay handles authentication, billing, and rate limiting.

Yes. Every new xpay account gets $5 in free credits. You can use these credits to try any Mcps tool — no credit card required. Sign up at xpay.tools to get started.

xpay tools logo

Marketplace for AI Capabilities. Run agents, tools & prompts with pay-per-use micropayments.

or ask your AI app
Popular Tools
FirecrawlTavilyExaHunterPerplexityRecraftIdeogramFlux
Collections
AI Image & MediaContent & ResearchDev ToolsFinanceLead GenWeb ScrapingCompetitive Intel
Developers
DocumentationAPI ReferenceQuickstartSDKsSkillsskill.mdllms.txt
Resources
The Agentic EconomyAgentic CommerceAgent Frameworksx402 ProtocolBlog
Company
About xpayxpay.shGitHubDiscordTwitter / X

© 2026 Agentically Inc. All rights reserved.
Privacy PolicyTerms of Service