---
title: "Counter-Strike 2 Server Commands: RCON, Convars and Admin Plugins"
description: "Every verified CS2 server command and convar — RCON moderation, mp_ and sv_ settings, bots and cheats, plus CounterStrikeSharp and CS2Fixes admin frameworks."
url: "https://www.gameserverkings.com/knowledge-base/counter-strike-2/how-to-add-admins-and-commands/"
category: "Counter-Strike 2"
category_url: "https://www.gameserverkings.com/knowledge-base/counter-strike-2/"
published: "2026-07-02T03:15:11.512Z"
updated: "2026-08-07T21:05:31.315Z"
source_format: "markdown"
site: "GameServerKings"
---

# Counter-Strike 2 Server Commands: RCON, Convars and Admin Plugins

Counter-Strike 2 has no built-in admin system — no op list, no admin menu, no SourceMod. Server control comes from **RCON** plus a large set of convars, and anything resembling a community admin experience is added by plugins. This guide covers RCON setup, every server command worth knowing, the convars that change how the game plays, and the plugin layer on top.

Defaults below are the engine defaults. The gamemode configs in `game/csgo/cfg/` override many of them — competitive ships `mp_roundtime 1.92`, `mp_freezetime 15` and `mp_buytime 20`.

## 1. How CS2 Admin Access Works

There is exactly one native way to prove you are the server operator: the RCON password.

| System | You authenticate with | Gives you |
|---|---|---|
| **RCON** | `rcon_password` (one shared password) | Everything, including `quit` |
| **Server console** | Direct access to the process | The same, without a password |
| **Plugins** | Your SteamID64 in a config file | Per-person permissions, chat commands, a menu |

RCON is all-or-nothing — anyone with the password can shut the server down, so it is not something to hand a moderator. The moment you have more than one admin you want the plugin layer in section 10.

CS2 splits console input two ways. **Commands** fire once and take arguments (`kick`, `changelevel`, `mp_warmup_end`). **Convars** hold a value (`mp_roundtime`, `sv_alltalk`); typing one with no argument prints it. A few things that look like commands are convars — `mp_restartgame 1` schedules a restart a second out.

> [!IMPORTANT] CS2 convars are booleans, not just 0/1
> Many CS2 convars are typed as real booleans and print as `true`/`false` rather than `1`/`0` — `mp_friendlyfire`, `mp_autoteambalance`, `sv_alltalk`, `mp_overtime_enable`. They still accept `1` and `0`, so old CS:GO configs keep working, but do not be surprised when the console answers `false`.

## 2. Set Up RCON

RCON is off until you give it a password. Put it in `game/csgo/cfg/server.cfg`, which the server executes on map load:

``` title="server.cfg — RCON setup"
hostname "My CS2 Server"
rcon_password "USE_A_LONG_RANDOM_STRING"
sv_password ""
sv_lan 0
sv_logfile 1
```

| Convar | Default | What it does |
|---|---|---|
| `rcon_password` | `""` | Admin password. Empty disables RCON entirely |
| `sv_password` | `""` | The **join** password. Empty means a public server |
| `rcon_address` | `""` | Target for unconnected RCON, format `x.x.x.x:port` |
| `rcon_connected_clients_allow` | `true` | Whether connected players may use `rcon` at all |
| `hostname` | `""` | Server name in the browser |
| `sv_lan` | `false` | LAN mode — no heartbeat, no Steam authentication |
| `sv_logfile` | `false` | Write server logs to disk |
| `sv_hibernate_when_empty` | `true` | Near-zero CPU when nobody is connected |
| `sv_visiblemaxplayers` | `-1` | Override the slot count reported to the browser |

To authenticate from your own client, enable the developer console in CS2's settings, then:

``` title="Authenticating from in-game"
rcon_address 203.0.113.10:27015
rcon_password YOUR_PASSWORD
rcon status
```

Prefix each command with `rcon` afterwards. If `rcon` returns nothing while you are playing on the server, check `rcon_connected_clients_allow` — it gates in-game RCON specifically.

> [!WARNING] Never reuse a password here
> `rcon_password` grants total control of the server process, and the RCON protocol is unencrypted. Use a long random string used nowhere else. `sv_rcon_maxfailures` and `sv_rcon_banpenalty` throttle brute force, but both are hidden convars in retail builds — firewall port 27015/tcp to your own address if you can.

> [!TIP] Skip RCON entirely
> The **Console** tab on your [managed Counter-Strike 2 server](/games/counter-strike-2/) is already attached to the server process — type commands there with no `rcon` prefix and no password on the wire. See [Counter-Strike 2 configuration](/knowledge-base/counter-strike-2/configuration-overview/) for where each config file lives.

## 3. Server & Player Management

Run these from the server console, your panel's Console tab, or prefixed with `rcon` from a game client.

| Command | What it does |
|---|---|
| `status` | Print connection status — userid, name, SteamID, ping, address |
| `kick "<name>"` | Kick a player by name |
| `kickid <userid\|steamid> "<message>"` | Kick by userid or unique ID, with a message |
| `say <message>` | Broadcast a chat message to everyone |
| `exec <file>` | Execute a `.cfg` from `game/csgo/cfg/` |
| `changelevel <map>` | Change map, keeping players connected |
| `map <map>` | Load a new map — drops and reloads everyone |
| `quit` | Shut the server down |
| `sv_setsteamaccount <token>` | Set the Game Server Login Token (GSLT) |

Prefer `kickid` over `kick`. Name matching breaks the moment a name contains spaces, unicode, or a substring of another name, while `kickid` takes the unambiguous numeric userid printed by `status`. A `kickid` also applies a temporary ban lasting `sv_kick_ban_duration` minutes, default `15`.

Every CS2 server needs a GSLT to appear in the server browser. Generate one for app ID 730 at `steamcommunity.com/dev/managegameservers` and pass it as `+sv_setsteamaccount <TOKEN>` on the command line.

## 4. Bans and the Ban List

The Source ban commands survived into CS2, gated behind `sv_banid_enabled` (default `true`).

| Command | What it does |
|---|---|
| `banid <minutes> <userid\|steamid>` | Add a user ID to the ban list. `0` is permanent |
| `banip <minutes> <ip>` | Add an IP address to the ban list |
| `removeid <steamid>` | Remove a user ID from the ban list |
| `removeip <ip>` | Remove an IP address from the ban list |
| `writeid` | **Write the SteamID ban list to disk** |
| `writeip` | **Write the IP ban list to disk** |
| `listid` | List banned user IDs |
| `listip` | List banned IP addresses |

> [!WARNING] Bans vanish on restart without `writeid`
> `banid` and `banip` only hold the ban in memory. Run `writeid` (or `writeip`) afterwards to commit it to disk — this is the most common reason a banned player walks straight back in after a map change. These eight commands are also flagged development-only in the retail build, so they do **not** appear in console autocomplete. They still execute; you just have to type them in full and confirm with `listid` that the ban landed.

With no per-admin accountability and no usable ban reason field, most serious communities run a plugin ban system instead — see section 10.

## 5. Maps and Workshop Content

| Command | What it does |
|---|---|
| `map <mapname>` | Load a map from disk |
| `changelevel <mapname>` | Change level without a full reload |
| `host_workshop_map <id>` | Fetch the latest version of a Workshop map and host it |
| `host_workshop_collection <id>` | Host a Workshop collection as a map group |
| `ds_workshop_changelevel <mapname>` | Change to an already-downloaded Workshop map by name |
| `ds_workshop_listmaps` | Dump the Workshop maps available on this server |

`host_workshop_map` re-downloads the map, so use it after the author publishes an update; `ds_workshop_changelevel` is the fast path once the file is on disk. Full setup is in [How to add Steam Workshop maps for Counter-Strike 2](/knowledge-base/counter-strike-2/how-to-add-workshop-maps/).

## 6. Match & Gameplay Convars

The `mp_` family is where you shape the match. Set them in `server.cfg`, or in a per-mode config so they survive a mode change.

| Convar | Default | What it controls |
|---|---|---|
| `mp_roundtime` | `5` | Round length **in minutes**, fractional allowed (max `60`) |
| `mp_roundtime_defuse` | `0` | Bomb maps; `0` falls back to `mp_roundtime` |
| `mp_roundtime_hostage` | `0` | Hostage maps; `0` falls back to `mp_roundtime` |
| `mp_maxrounds` | `0` | Rounds before the map ends (competitive ships `24`) |
| `mp_timelimit` | `0` | Minutes per map (`0` = no limit) |
| `mp_freezetime` | `6` | Seconds players are frozen at round start |
| `mp_buytime` | `90` | Seconds the buy menu stays open after round start |
| `mp_startmoney` | `800` | Money each player gets on reset |
| `mp_maxmoney` | `16000` | Maximum money a player may hold |
| `mp_afterroundmoney` | `0` | Flat cash awarded to everyone at round end |
| `mp_friendlyfire` | `false` | Allow team members to injure each other |
| `mp_autoteambalance` | `true` | Force-switch players to even the teams |
| `mp_limitteams` | `2` | Max team size difference (`0` disables, max `30`) |
| `mp_autokick` | `true` | Kick idle, team-killing and team-damaging players |
| `mp_warmuptime` | `30` | Warmup length in seconds (minimum `5`) |
| `mp_warmuptime_all_players_connected` | `0` | Shorten warmup to this once everyone joins |
| `mp_warmup_pausetimer` | `0` | `1` freezes the warmup timer indefinitely |
| `mp_halftime` | `false` | Switch sides at halftime |
| `mp_overtime_enable` | `false` | Play overtime instead of ending a tied match |
| `mp_overtime_maxrounds` | `6` | Rounds per overtime period |
| `mp_overtime_startmoney` | `10000` | Money at the start of each overtime half |
| `mp_overtime_limit` | `0` | Cap on how many overtimes can be played |
| `mp_teammates_are_enemies` | `false` | Free-for-all — every player is a valid target |
| `mp_forcecamera` | `0` | `1` restricts dead players to their own team |
| `mp_c4timer` | `40` | Seconds from arming to detonation (minimum `10`) |
| `mp_join_grace_time` | `0` | Seconds after round start a player may join (max `30`) |
| `mp_match_can_clinch` | `true` | Allow a mercy-rule win once a team is unbeatable |
| `mp_spectators_max` | `2` | Spectator slots |
| `mp_death_drop_gun` | `1` | `0` none, `1` best, `2` current or best |
| `mp_respawn_on_death_ct` / `_t` | `false` | Instant respawn per team |

Commands — not convars — that act on the match immediately:

| Command | What it does |
|---|---|
| `mp_warmup_start` / `mp_warmup_end` | Start or end warmup |
| `mp_pause_match` | Pause at the next freeze time |
| `mp_unpause_match` | Resume |
| `mp_swapteams` | Swap sides and restart the game |
| `mp_backup_restore_load_file <file>` | Restore a round from a backup, written automatically while `mp_backup_round_file` is set (default `backup`) |

> [!CAUTION] `mp_roundtime` is minutes, and it is fractional
> A mistake carried over from other Source games is `mp_roundtime 115` expecting 115 seconds — CS2 clamps it to the maximum of `60` minutes. Competitive rounds are `1.92` minutes, which *is* 115 seconds. A two-minute round is `mp_roundtime 2`.

## 7. Server Behaviour Convars

| Convar | Default | What it controls |
|---|---|---|
| `sv_cheats` | `false` | Master switch for every cheat command below |
| `sv_alltalk` | `false` | Both teams hear each other's voice |
| `sv_deadtalk` | `false` | Dead players can speak to the living |
| `sv_full_alltalk` | `false` | Everyone, spectators included, can talk to everyone |
| `sv_talk_enemy_living` / `sv_talk_enemy_dead` | `false` | Hear the enemy team, alive or dead |
| `sv_gravity` | `800` | World gravity |
| `sv_accelerate` | `5.5` | Ground acceleration |
| `sv_airaccelerate` | `12` | Air acceleration — raise it for surf and bhop |
| `sv_maxspeed` | `320` | Player speed cap |
| `sv_falldamage_scale` | `1` | Fall damage multiplier (`0` disables) |
| `sv_autobunnyhopping` | `false` | Auto-jump while holding space |
| `sv_enablebunnyhopping` | `false` | Remove the speed cap on consecutive jumps |
| `sv_allow_votes` | `true` | Allow player-initiated votes |
| `sv_kick_ban_duration` | `15` | Minutes a kick-ban lasts |
| `sv_banid_enabled` | `true` | Whether the server honours `banid` |
| `sv_steamauth_enforce` | `2` | How strictly Steam authentication is required |
| `sv_region` | `-1` | Region reported to the server browser |
| `sv_pure_kick_clients` | `true` | Kick clients whose files do not match, instead of only warning them |

> [!NOTE] `sv_pure` survived into CS2 — most of its helper convars did not
> `sv_pure`, `sv_pure_kick_clients` and `sv_pure_trace` are all present in the retail CS2 build, so `sv_pure 1` in a `server.cfg` is valid and still enforces file consistency. What Source 2 dropped is the rest of the CS:GO family — `sv_pure_allow_loose_file_loads`, `sv_pure_allow_missing_files`, `sv_pure_consensus`, `sv_pure_retiretime` and `sv_consistency` all error as unknown. A ported config keeps executing past an unknown command, so the failure is silent unless you read the log.

## 8. Bots

Bot management is native and needs no cheats.

| Command / convar | Type | What it does |
|---|---|---|
| `bot_add <t\|ct> <type> <difficulty> <name>` | Command | Add a bot matching the criteria |
| `bot_add_ct` / `bot_add_t` | Command | Add a bot to a specific side |
| `bot_kick <all\|t\|ct\|name>` | Command | Kick matching bots |
| `bot_knives_only` | Command | Restrict bots to knives |
| `bot_quota` | Convar (`10`) | Total number of bots the server maintains |
| `bot_quota_mode` | Convar (`normal`) | `normal`, `fill`, `match` or `competitive` |
| `bot_difficulty` | Convar (`1`) | `0` easy, `1` normal, `2` hard, `3` expert |
| `custom_bot_difficulty` | Convar (`2`) | Bot difficulty used for offline play |
| `bot_chatter` | Convar (`normal`) | Bot radio chatter; `off` silences them |
| `bot_dont_shoot` | Convar (`false`) | Bots hold fire |

With `sv_cheats 1` you also get `bot_kill`, `bot_place` (spawn a bot where you are aiming), `bot_stop 1`, `bot_freeze`, `bot_crouch` and `bot_mimic`.

## 9. Cheat & Practice Commands

`sv_cheats 1` must be set on the **server**, not your client, before any of these work. Cheats are visible to every connected player, so keep them in their own config and change the map to clear them rather than unsetting convars by hand.

| Command | What it does |
|---|---|
| `noclip` | Toggle fly / no-collision. Optional `0` or `1` to force it |
| `god` | Toggle invulnerability |
| `hurtme <n>` | Damage yourself by N |
| `setpos <x> <y> <z>` | Teleport to coordinates |
| `setang <pitch> <yaw>` | Snap your view angles |
| `give <item>` | Give yourself a weapon, e.g. `give weapon_ak47` |
| `endround` | End the current round immediately |
| `ent_create <name>` | Create an entity where you are looking |
| `ent_fire <target> <input>` | Fire an input at a map entity |
| `sv_rethrow_last_grenade` | Re-throw the last grenade thrown on the server |
| `host_timescale <n>` | Speed up or slow down the server clock |

Cheat-gated convars worth knowing: `sv_infinite_ammo` (`1` = no reloads, `2` = infinite reserve), `sv_regeneration_force_on`, `bot_stop` and `mp_ignore_round_win_conditions`. The rest of a practice setup is ordinary convars:

``` title="practice.cfg — nade and retake practice"
sv_cheats 1
sv_infinite_ammo 2
ammo_grenade_limit_total 5
mp_warmup_pausetimer 1
mp_buytime 60000
mp_buy_anywhere 1
mp_maxmoney 60000
mp_startmoney 60000
mp_limitteams 0
mp_autoteambalance 0
mp_freezetime 0
mp_roundtime 60
mp_roundtime_defuse 60
mp_ignore_round_win_conditions 1
sv_grenade_trajectory_prac_pipreview 1
sv_grenade_trajectory_prac_trailtime 8
sv_showimpacts 1
sv_showimpacts_time 10
mp_restartgame 1
```

Save that as `game/csgo/cfg/practice.cfg` and load it with `exec practice`. `sv_grenade_trajectory_prac_pipreview` is the picture-in-picture lineup preview and `sv_grenade_trajectory_prac_trailtime` (max `8`) is how long the trail lingers.

## 10. The Plugin Layer

Everything above works on a stock server. For chat commands, an admin menu, per-person permissions and persistent bans with reasons, you need a three-layer plugin stack.

**Metamod:Source** is the loader. CS2 requires the **2.x development branch** — the 1.12 stable release is Source 1 only and will not load. Copy `addons/` into `game/csgo/`, then add one line to `game/csgo/gameinfo.gi`:

``` title="gameinfo.gi — loading Metamod"
Game    csgo/addons/metamod
```

Restart and run `meta list` to confirm it loaded — worth repeating after every CS2 update, since game updates break Metamod regularly and a broken plugin usually means a server that will not boot.

**CounterStrikeSharp** is the framework almost everything is written against now. It runs on Metamod and lets plugins be written in C#. First-time installs need the *with-runtime* build, which bundles .NET; Linux hosts may also need `libicu`. Admins go in `configs/admins.json`:

``` title="configs/admins.json"
{
  "YourName": {
    "identity": "76561197960287930",
    "flags": ["@css/generic", "@css/kick", "@css/ban", "@css/changemap"]
  }
}
```

| Flag | Grants |
|---|---|
| `@css/generic` | Generic admin — required by most commands |
| `@css/kick` | Kick players |
| `@css/ban` / `@css/unban` | Ban and unban |
| `@css/slay` | Slay, slap and similar |
| `@css/changemap` | Change map |
| `@css/cvar` | Change convars |
| `@css/config` | Execute config files |
| `@css/chat` | Chat commands (gag, mute) |
| `@css/vote` | Start votes |
| `@css/password` | Set the server password |
| `@css/rcon` | Run RCON commands |
| `@css/cheats` | Toggle `sv_cheats` and use cheat commands |
| `@css/reservation` / `@css/vip` | Reserved slot and VIP marker for other plugins |
| `@css/root` | Everything, and bypasses immunity |

> [!NOTE] CounterStrikeSharp is a framework, not an admin mod
> Installing it does **not** give you `!kick`, `!ban` or `!slay`. Its own documentation is explicit that traditional admin commands are left to individual plugins — CounterStrikeSharp supplies the permission model and the API, and you add an admin plugin on top. This trips up everyone arriving from SourceMod, where the two were one package.

**CS2Fixes** is the other half of the ecosystem — a Metamod plugin independent of CounterStrikeSharp, originally built for zombie escape but widely used for its admin system. It ships the commands people expect: `kick`, `ban`, `unban`, `mute`, `gag`, `slay`, `slap`, `noclip`, `give`, `health`, `money`, `revive`, `map`, `setnextmap`, `extend`, `who`, `status`, `getpos`, `setpos`, `spec`, `beacon`, `glow` and the RTV set. Run them from chat with `!` or `/`, or from console with a `c_` prefix (`c_noclip`); admins go in `addons/cs2fixes/configs/admins.cfg`. Its targeting syntax is the fastest thing in this article: `@all`, `@ct` and `@t` for groups, `$` for a SteamID64, `&` for an exact name, `#` for a userid from `status`.

## 11. FAQ

### How do I become admin on my own CS2 server?

Set `rcon_password` in `game/csgo/cfg/server.cfg`, then run `rcon_password YOUR_PASSWORD` in your in-game console while connected. Every command in this guide then works prefixed with `rcon`. There is no native per-person admin list — for that you need Metamod:Source plus CounterStrikeSharp or CS2Fixes.

### Why do my bans disappear after a restart?

`banid` and `banip` only write to memory. Run `writeid` and `writeip` afterwards to commit them to disk. Those commands are also hidden from autocomplete in the retail build, so a typo fails quietly — check with `listid` that the ban actually landed.

### Why does `sv_pure` say unknown command?

It should not — `sv_pure` is still in the retail CS2 build, alongside `sv_pure_kick_clients` and `sv_pure_trace`. If you are seeing that error, check which line actually produced it. The CS:GO helper convars `sv_pure_allow_loose_file_loads`, `sv_pure_allow_missing_files`, `sv_pure_consensus`, `sv_pure_retiretime` and `sv_consistency` did not survive Source 2 and do error as unknown. When a config hits an unknown command the server prints an error and carries on with the rest of the file, so a ported `server.cfg` can look like it worked while quietly skipping lines.

### Do CS2 admin commands need a slash?

Not in the server console or over RCON — type `status`, not `/status`. The `!` and `/` prefixes belong to plugin chat commands. CS2Fixes accepts both in chat and uses `c_` from console; CounterStrikeSharp plugins conventionally use `css_`.

### How do I set up a practice server?

Put the practice convars in `game/csgo/cfg/practice.cfg` and run `exec practice`. You need `sv_cheats 1` for `noclip`, `sv_infinite_ammo` and `sv_rethrow_last_grenade`, but the buy-anywhere, long-round and grenade-trail settings are ordinary convars — section 9 has a config to copy.

### Why is my server not showing in the browser?

Almost always a missing or invalid Game Server Login Token — generate one for app ID 730 and pass it as `+sv_setsteamaccount <TOKEN>`. Also confirm `sv_lan` is `0`, since a LAN server sends no heartbeat at all.

### Can I run admin commands without any plugins?

Yes — sections 3 through 9 are entirely native. Plugins add per-person permissions, an in-game menu, gagging and muting, ban reasons and immunity. That is real quality-of-life, but none of it is required to run and moderate a server.

## 12. What to Read Next

- [Getting started with your Counter-Strike 2 server](/knowledge-base/counter-strike-2/getting-started-with-your-server/) — first boot, ports and connecting
- [Counter-Strike 2 configuration](/knowledge-base/counter-strike-2/configuration-overview/) — where each config file lives and what executes when
- [How to add Steam Workshop maps for Counter-Strike 2](/knowledge-base/counter-strike-2/how-to-add-workshop-maps/) — Workshop IDs, collections and map groups

---

Made with 💜 by GameServerKings
